📄 main.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 + -