⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intervalue.lst

📁 一整套电梯控制器源程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -