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

📄 main.c

📁 一整套电梯控制器源程序
💻 C
字号:
#include "global.h"

void main()
{	
	maininit();

	//数据初始化
//	orgdata_init();
	data_init();

	while(1){ 

	//CAN初始化
	can_reset();
	//接收
	can_call_in(0);       //外呼
	can_call_in(1);
	can_call_in(2);
	can_call_in(3);
	//接收
    can_receive_more(0);  //控制器
	can_receive_more(1);
	can_receive_more(2);
	can_receive_more(3);
	//发送  条件满足时(即为群控,又没有司机,直驶,消防,锁梯等 )
	can_call_assign();    //外呼分派
	//接收
    can_receive_only(0);  //控制器
	can_receive_only(1);
	can_receive_only(2);
	can_receive_only(3);
	//接收   
	clear_unknow_code(0);  //清乱码
  	clear_unknow_code(1); 
  	clear_unknow_code(2); 
  	clear_unknow_code(3); 
	//发送  条件满足时(即为群控,又没有司机,直驶,消防,锁梯等 )
   	can_call_lamp();    //暂定50ms循环点灯,灭灯

    //"检修,锁梯,消防"三状态的处理  //2004.11.25 added by LHM
    Check3states();

	// 读时钟
	time_x1226();

	//RS232程序(串口仅在主程序中)
//	serial_comm();

	//命令解析(串口在主程序及中断中)
	serial_command_resolve();
	//串口发送数据作成(串口在主程序及中断中)
	serial_make_senddata();

	//用户参数存储
	save_user_param();
	//用户参数恢复
	restore_user_param();
	//工厂参数恢复
	restore_factory_param();
	
	//外呼分配处理
	main_process();
	               
	P3_5=~P3_5;
   }

}

void main_process()
{
	//撤销外呼(模拟程序在主程序中处理,2004.05.18新追加)
	WithdrawOutCall();	
	
	//更新电梯门超时计时(PC模拟处理专用)
//	UpdateDoorOvertimer();
 
	//计算部分中间数据
	SetPartInterVal();

	//撤销"被一票否决电梯"当前的外呼分配
	WithdrawVetoEle();

	//对外呼进行优化分配
	DistributeEle();

	//检查及设置静态停靠层
	SetStaticStopFloor();

	//检查及设置高峰停靠层
	SetPeekStopFloor();
	//设置门状态
//	SetDoorStateFlg();
  
}

//撤销被一票否决电梯的外呼响应数据
void WithdrawVetoEle(void)
{
	uchar m_cLNum = LNum_MAX;
	uchar m_cENum = m_pL_Data->cENum;
	uchar i=0,j=0;

	for(i=0; i<m_cENum; i++){
		E_XiangYing* pXiangYing = &(m_pE_OutputData->mXiangYing[i]);
		//判断电梯是否被一票否决
		if((m_InterData[i].bVeto==1)/* && (e_online[i]==1)*/){
			for(j=0; j<ARRAY_BYTENUM; j++){
				pXiangYing->bShang[j]=0;
				pXiangYing->bXia[j]=0;
			}
		}
	}

}

//撤销外呼
void WithdrawOutCall(void)
{
	uchar m_cENum = m_pL_Data->cENum;
	uchar i=0,j=0;
	uchar cCurFloorIdx=0;
	uchar cVal=0;
	E_WaiHu* pWaiHu=0;

	for(i=0; i<m_cENum; i++){
		if(e_online[i]==1){
			cCurFloorIdx=mE_InputData.mDianTi[i].cDangQianCeng-1;
			//电梯处于静止
//第一种方案

//			if(m_LastDoorState[i]==1){	//上次关门中
			if(m_LastDoorState[i]==0){	//上次关门不到位
				if(mE_InputData.mDianTi[i].Men.bGuanMenDaoWei==1){	//本次关门到位
					if((mE_InputData.mDianTi[i].FangXiang.bShang==1)&&(mE_InputData.mDianTi[i].FangXiang.bXia==0)){
	     				SetArrayData(mE_InputData.mWaiHu.bShang,cCurFloorIdx,0);
				   }else if((mE_InputData.mDianTi[i].FangXiang.bShang==0)&&(mE_InputData.mDianTi[i].FangXiang.bXia==1)){
						SetArrayData(mE_InputData.mWaiHu.bXia,cCurFloorIdx,0);
					}
				}
			}

//第二种方案
/*
			if(mE_InputData.mDianTi[i].Men.bGuanMenZhong==1)
            if(mE_InputData.mDianTi[i].bDongOrJing==0){	//关门中
				if((mE_InputData.mDianTi[i].FangXiang.bShang==1)&&(mE_InputData.mDianTi[i].FangXiang.bXia==0)){
     				SetArrayData(mE_InputData.mWaiHu.bShang,cCurFloorIdx,0);
			    }else if((mE_InputData.mDianTi[i].FangXiang.bShang==0)&&(mE_InputData.mDianTi[i].FangXiang.bXia==1)){
					SetArrayData(mE_InputData.mWaiHu.bXia,cCurFloorIdx,0);
				}
			}
*/
//第三种方案(!!!逻辑上错误,不要试)
/*
			if(mE_InputData.mDianTi[i].bDongOrJing==1){
				if(mE_InputData.mDianTi[i].bLingSuXinHao==1){
					if((mE_InputData.mDianTi[i].FangXiang.bShang==1)&&(mE_InputData.mDianTi[i].FangXiang.bXia==0)){
	     				SetArrayData(mE_InputData.mWaiHu.bShang,cCurFloorIdx,0);
				   }else if((mE_InputData.mDianTi[i].FangXiang.bShang==0)&&(mE_InputData.mDianTi[i].FangXiang.bXia==1)){
						SetArrayData(mE_InputData.mWaiHu.bXia,cCurFloorIdx,0);
					}
				}
			}else{
				if(mE_InputData.mDianTi[i].Men.bGuanMenZhong==1){	//关门中
					if((mE_InputData.mDianTi[i].FangXiang.bShang==1)&&(mE_InputData.mDianTi[i].FangXiang.bXia==0)){
	     				SetArrayData(mE_InputData.mWaiHu.bShang,cCurFloorIdx,0);
				   }else if((mE_InputData.mDianTi[i].FangXiang.bShang==0)&&(mE_InputData.mDianTi[i].FangXiang.bXia==1)){
						SetArrayData(mE_InputData.mWaiHu.bXia,cCurFloorIdx,0);
					}
				}
			}			
*/
			//关门状态
//2005.06.05
//			if(mE_InputData.mDianTi[i].Men.bGuanMenZhong==1)
			if(mE_InputData.mDianTi[i].Men.bGuanMenDaoWei==1)
				m_LastDoorState[i]=1;
			else
				m_LastDoorState[i]=0;
		}
	}
}

/*
//设置门状态标记(撤销外呼用)
void SetDoorStateFlg(void)
{
	uchar m_cENum = m_pL_Data->cENum;
	uchar i=0;

	for(i=0; i<m_cENum; i++){
		if(e_online[i]==1){
			if(mE_InputData.mDianTi[i].Men.bGuanMenZhong==1)
				m_LastDoorState[i]=1;
			else
				m_LastDoorState[i]=0;
		}
	}
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -