📄 intervalue.lst
字号:
337 =1 void monitor_rec(void); //rs232主程序
338 =1 void message_quit(void); //0x3 及m_message_quit 执行程序
339 =1 void command(uchar *pBuf); //完整命令解析
340 =1 void monitor_send(void);
341 =1 void make_send_buf(void);
342 =1 uchar __toascii(uchar c);
343 =1 uchar __tofig(uchar cAscii);
344 =1 uint GetValidAdd(uchar *pBuf);
345 =1 void SetParamVal(uchar *pSrcBuf, uchar *pDestBuf, uchar type);
346 =1 void serial_command_resolve(void);
347 =1 void serial_make_senddata(void);
348 =1
349 =1 //datainit.c
350 =1 void data_init(void);
351 =1 void orgdata_init(void); //恢复原始数据
352 =1 void orgdata_init_total(void);
353 =1 void orgdata_init_input(void);
354 =1 void orgdata_init_output(void);
355 =1 void GetUserParamSaveOverFlg();
356 =1 void SetUserParamSaveOverFlg();
357 =1
358 =1 //param_save_restore.c
359 =1 void restore_user_param(void);
360 =1 void save_user_param(void);
361 =1 void restore_factory_param(void);
362 =1 uchar erase(uint addr);
363 =1 uchar writef(uint x,uchar y);
364 =1
365 =1 //can.c
366 =1 void can_init(uint pointa); //can初始化
367 =1 void can_reset(void);
C51 COMPILER V6.12 INTERVALUE 06/05/2005 15:44:44 PAGE 14
368 =1 void can_call_in(uchar a); //外呼
369 =1 can_receive_more(uchar a); //控制器
370 =1 can_receive_only(uchar a); //控制器
371 =1 clear_unknow_code(uchar a); //清乱码
372 =1 void can_call_assign(); //外呼分派
373 =1 can_call_lamp(); //暂定50ms循环点灯,灭灯
374 =1
375 =1
2
3 uchar GetVetoVal(uchar cEIdx);
4 uchar GetWeightVal(uchar cEIdx);
5 uchar GetStopCountVal(uchar cEIdx);
6 uchar GetElePRINoVal(uchar cEIdx);
7 uchar GetCurStageStartFloor(uchar cEIdx);
8
9 //根据输入数据,计算各电梯的中间数据
10 //注意:1)与楼层数据无关的中间淘汰数据,在此计算数值;(包括:一票否决,承载程度,停靠层站数,电梯优先级号)
11 // 2)与楼层数据有关的中间淘汰数据,其他场合计算;(包括:楼层可停,到达大致时间)
12 // 3)其他中间数据;
13 void SetPartInterVal(void)
14 {
15 1 uchar m_cENum = m_pL_Data->cENum;
16 1 uchar i=0;
17 1 uchar veto_count=0;
18 1
19 1 for(i=0; i<m_cENum; i++){
20 2 //一票否决
21 2 m_InterData[i].bVeto = GetVetoVal(i);
22 2 //2004.11.20 监视淘汰标记,发现异常
23 2 if(m_InterData[i].bVeto==1){
24 3 veto_count++;
25 3 }
26 2 if(i==1)
27 2 mE_InputData.mDianTi[1].TongXun.bZhiShi=m_InterData[i].bVeto;
28 2 if(i==2)
29 2 mE_InputData.mDianTi[2].TongXun.bZhiShi=m_InterData[i].bVeto;
30 2
31 2 //承载程度
32 2 m_InterData[i].cWeight = GetWeightVal(i);
33 2 //停靠层站数
34 2 m_InterData[i].cStopCount = GetStopCountVal(i);
35 2 //电梯优先级号
36 2 m_InterData[i].cPRINo = GetElePRINoVal(i);
37 2 //电梯当前运动阶段的起始楼层
38 2 m_cCurStageStartFloor[i] = GetCurStageStartFloor(i);
39 2 //门超时时间
40 2 m_cOvertime[i] = GetDoorOvertime(i);
41 2 }
42 1 if(veto_count==m_cENum){ //全部淘汰时,保留1部(必须在线)
43 2 for(i=0; i<m_cENum; i++){
44 3 if(e_online[i]==1){
45 4 m_InterData[i].bVeto=0;
46 4 break;
47 4 }
48 3 }
49 2 }
50 1 }
51
52 //中间淘汰数据"一票否决"
53 //涉及的输入数据:
54 //"群控选中""单梯/群控""准备好""门故障""满载""超载""检修""司机""直驶""保留"
55 //"锁梯""消防""急停""故障""警告""CAN初始化OK""门超时时间5"
C51 COMPILER V6.12 INTERVALUE 06/05/2005 15:44:44 PAGE 15
56 uchar GetVetoVal(uchar cEIdx)
57 {
58 1 E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
59 1 //是否CAN在线
60 1 //2004.11.20 测试通讯在线标记正常
61 1 /*
62 1 if(cEIdx==1)
63 1 mE_InputData.mDianTi[0].TongXun.bZhiShi=e_online[cEIdx];
64 1 if(cEIdx==2)
65 1 mE_InputData.mDianTi[3].TongXun.bZhiShi=e_online[cEIdx];
66 1 */
67 1
68 1 if(e_online[cEIdx]==0)
69 1 return 1;
70 1
71 1 if(pEleData->bQunKong == 0) //群控选中
72 1 return 1;
73 1 else if(pEleData->bDanOrQun == 0) //单梯/群控
74 1 return 1;
75 1 else if(pEleData->bZhunBeiHao == 0) //准备好
76 1 return 1;
77 1 else if(pEleData->Men.bMenGuZhang == 1) //门故障
78 1 return 1;
79 1 else if(pEleData->ChengZai.bManZai == 1) //满载
80 1 return 1;
81 1 // else if(pEleData->ChengZai.bChaoZai == 1) //超载
82 1 // return 1;
83 1 else if(pEleData->TeBie.bJianXiu == 1) //检修
84 1 return 1;
85 1 // else if(pEleData->TeBie.bSiJi == 1) //司机 //2004.07.16 LHM(司机也参与分配)
86 1 // return 1;
87 1 // else if(pEleData->TeBie.bZhiShi == 1) //直驶
88 1 // return 1;
89 1 else if(pEleData->TeBie.bSiJi == 1){
90 2 // if(pEleData->bDongOrJing == 1) //2005.01.25 取消动静
91 2 if(pEleData->TeBie.bZhiShi == 1){
92 3 return 1;
93 3 }
94 2 }else if(pEleData->TeBie.bBaoLiu == 1) //保留
95 1 return 1;
96 1 else if(pEleData->TeBie.bSuoTi == 1) //锁梯
97 1 return 1;
98 1 else if(pEleData->TeBie.bXiaoFang == 1) //消防
99 1 return 1;
100 1 else if(pEleData->TeBie.bJiTing == 1){ //急停
101 2 if(pEleData->Men.bGuanMenDaoWei==1)
102 2 if(pEleData->bBenCengKaiMen==0){
103 3 return 1;
104 3 }
105 2 }else if(pEleData->TeBie.bGuZhang == 1) //故障
106 1 return 1;
107 1 else if(pEleData->TeBie.bJingGao == 1) //警告
108 1 return 1;
109 1 else if(pEleData->TongXun.bCanChuShiOK == 0)//CAN初始化OK
110 1 return 1;
111 1
112 1 //堵门时间超过"门超时5"
113 1 /* if(GetDoorActionState(cEIdx) != Door_CloseOK){
114 1 long cur_elapsetime = GetTickCount();
115 1 long overtime = (cur_elapsetime - m_pTimer->lChaoShiTimer[cEIdx])/1000; //该电梯的门超时时间
116 1 if(pEleData->cChaoShiTime[MenChaoShi_Num-1] <= overtime)
117 1 return 1;
C51 COMPILER V6.12 INTERVALUE 06/05/2005 15:44:44 PAGE 16
118 1 }*/
119 1
120 1 //2004.11.20 测试门超时ok
121 1 if(pEleData->TeBie.bSiJi==0)
122 1 if(pEleData->cChaoShiTime[MenChaoShi_Num-1] <= m_cOvertime[cEIdx]){
123 2 return 1;
124 2 }
125 1
126 1
127 1 return 0;
128 1 }
129
130 //中间淘汰数据"承载状态"
131 //涉及的输入数据:
132 //"空载""轻载""重载""满载""超载"
133 //注意:若同时出现两个以上的承载信号,以承载程度大的信号为准
134 uchar GetWeightVal(uchar cEIdx)
135 {
136 1 E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
137 1 E_ChengZai *pChengZai= &(pEleData->ChengZai);
138 1
139 1 if(pChengZai->bChaoZai == 1) //超载
140 1 return Weight_Over;
141 1 else if(pChengZai->bManZai == 1) //满载
142 1 return Weight_Full;
143 1 else if(pChengZai->bZhongZai == 1) //重载
144 1 return Weight_Heavy;
145 1 else if(pChengZai->bQingZai == 1) //轻载
146 1 return Weight_Light;
147 1 else if(pChengZai->bKongZai == 1) //空载
148 1 return Weight_Null;
149 1
150 1 return Weight_ERROR;
151 1 }
152
153 //中间淘汰数据"可停层站数"
154 //涉及的输入数据:
155 //"可到最底层""可到最高层""可停层站数"
156 uchar GetStopCountVal(uchar cEIdx)
157 {
158 1 E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
159 1 uchar cCanStopFloorCnt = pEleData->cZuiGaoCeng-pEleData->cZuiDiCeng+1;
160 1 return cCanStopFloorCnt;
161 1 }
162
163 //中间淘汰数据"电梯优先级"
164 //涉及的输入数据:
165 //"优先级号"
166 uchar GetElePRINoVal(uchar cEIdx)
167 {
168 1 E_DianTi *pEleData = &(m_pE_InputData->mDianTi[cEIdx]);
169 1 uchar cPRINo = pEleData->cYouXianJi;
170 1 return cPRINo;
171 1 }
172
173 //中间淘汰数据"楼层可停"
174 //涉及的输入数据:
175 //"楼层可停"
176 //2004.11.17 (楼层可停数据暂时未用,改用最低楼层最高楼层限制)
177 void SetInterVal_FloorCanStop(uchar cLIdx, uchar updown_flg)
178 {
179 1 E_DianTi *pEleData;
C51 COMPILER V6.12 INTERVALUE 06/05/2005 15:44:44 PAGE 17
180 1 uchar m_cENum = m_pL_Data->cENum;
181 1 uchar i=0;
182 1 uchar cTopFloorIdx;
183 1 uchar cBottomFloorIdx;
184 1
185 1 for(i=0; i<m_cENum; i++){
186 2 pEleData = &(m_pE_InputData->mDianTi[i]);
187 2 cTopFloorIdx = pEleData->cZuiGaoCeng-1;
188 2 cBottomFloorIdx = pEleData->cZuiDiCeng-1;
189 2 //楼层可停
190 2 if(updown_flg == 1){ //上呼
191 3 // m_InterData[i].bFloorCanStop = GetArrayData(pEleData->bShangHuKeTing, cLIdx);
192 3 //2005.05.19 不能响应最高层上呼
193 3 // if((cLIdx>=cBottomFloorIdx)&&(cLIdx<=cTopFloorIdx)){
194 3 if((cLIdx>=cBottomFloorIdx)&&(cLIdx<=(cTopFloorIdx-1))){
195 4 m_InterData[i].bFloorCanStop=1;
196 4 }else{
197 4 m_InterData[i].bFloorCanStop=0;
198 4 }
199 3 }else{
200 3 // m_InterData[i].bFloorCanStop = GetArrayData(pEleData->bXiaHuKeTing, cLIdx);
201 3 //2005.05.19 不能响应最低层下呼
202 3 // if((cLIdx>=cBottomFloorIdx)&&(cLIdx<=cTopFloorIdx)){
203 3 if((cLIdx>=(cBottomFloorIdx+1))&&(cLIdx<=cTopFloorIdx)){
204 4 m_InterData[i].bFloorCanStop=1;
205 4 }else{
206 4 m_InterData[i].bFloorCanStop=0;
207 4 }
208 3 }
209 2 }
210 1
211 1 return;
212 1 }
213
214 //中间淘汰数据"2层以内运动"
215 //涉及的输入数据:
216 //"运动/静止""向上运动""向下运动""当前层"
217 //注意:1)"当前层"从1开始
218 // 2)参数cLIdx从0开始
219 // 3)介于信号可能出现问题,本函数必须考虑异常处理,异常时,暂时将值设为1,不参与新的分配,原分配撤销并分配
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -