📄 global.h
字号:
#include "common.h"
#include<w77c32.h>
#include<intrins.h>
#define INVALID_ELEINDEX 0xFF //无效的电梯索引(在选优流程中使用)
#define TIMEINTERVAL_MIN 10 //比较最优时间时使用的最小精度,时间差大于该值的电梯才淘汰(单位:十分之一秒)
#define COUNT_50ms 5 //串口通信--下位机应答上位机间隔时间计数,50ms
#define COUNT_60s 12000 //串口通信--下位机收不到信号自动终止通信的间隔时间计数,1000ms
#define COUNT_5s 1000 //每5秒读一次1226,5s
#define COUNT_10s 2000 //10s滤波--门故障用
#define COUNT_3s 600 //3s滤波--满载超载用
#define COUNT_1s 200 //1s滤波--特殊状态用
#define INVALID_ASC2 0xFF //无效asc2字符标记
#define REC_COMMAND 0x1B //接收命令ESC
#define SEND_COMMAND 0x1C //应答命令FS
#define END_0x0D 0x0D //结束命令0x0D
#define END_0x0A 0x0A //结束命令0x0A
#define MORN_PARAM_NUM 5 //监视参数的个数
#define SCCBUF_MAXSIZE 32 //串口通信的缓冲区
#define SCC_MONITOR_DELAYCOUNT 10 //收到最后一个'M'后,延迟50ms接受动作再发送监视数据
#define COUNT_ERR 2
//方向
enum Direct{
D_Down=0,
D_Up
};
//门动作状态
enum DoorActionState{
Door_OpenOK=0, //开门到位
Door_CloseOK, //关门到位
Door_Opening, //开门中
Door_Closing, //关门中
Door_ERROR
};
//承载状态
enum{
Weight_Null, //空载
Weight_Light, //轻载
Weight_Heavy, //重载
Weight_Full, //满载
Weight_Over, //超载
Weight_ERROR
};
//中间淘汰数据结构体
struct tag_InterData{
uchar bFloorCanStop; //楼层可停(标志电梯在某层是否可停, 0:不可停 1:可停)
uchar bVeto; //一票否决(标志电梯是否被一票否决, 0:否 1:是)
uchar b2FloorMove; //2层以内运动中(对于某层外呼,标志电梯到达该层所需距离是否不超过2层, 0:否 1:是)
uint nTime; //到达大致时间(电梯到达外呼层的大致时间, 单位:秒)
uchar cWeight; //承载程度(标志电梯当前承载状态, 0:空载 1:轻载 2:重载 3:满载 4:超载)
uchar bSameDirection; //顺向(若电梯响应该外呼是否顺向, 0:否, 1:是)
uchar cStopCount; //停靠层站数(标志电梯电梯所能够停靠的层站数)
uchar cPRINo; //电梯优先级号(范围:1->8,优先级递减)
};
#define INTER_DATA struct tag_InterData
//串口通信用数据结构
struct tag_DT_SCC{
uchar ReadFlg; // receive flag, always TRUE
uchar m_ReadBuf[SCCBUF_MAXSIZE]; // pointer to buffer used to receive data
uchar dwReadReqSize; // size of buffer used to receive data
// uchar dwpReadSpoolSize; // size of data received
uchar nReadCount;
uchar WriteFlg; // send flag
uchar m_WriteBuf[SCCBUF_MAXSIZE];// pointer to buffer used to send data
uchar dwWriteReqSize; // size of buffer used to send data
// uchar dwWriteSpoolSize; // size of data sended
uchar nWriteCount;
};
#define DT_SCC struct tag_DT_SCC
//--------------------------- Variable ---------------------//
/*
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_4=P1^4;
sbit P1_5=P1^5;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;*/
sbit P3_0=P3^0;
sbit P3_1=P3^1;
sbit P3_2=P3^2;
sbit P3_3=P3^3;
sbit P3_4=P3^4;
sbit P3_5=P3^5;
/*can总线定义的变量*/
EXTERN xdata uchar *can3_cs; /*can3 指针*/
EXTERN xdata uchar *can2_cs; /*can2 指针*/
EXTERN xdata uchar *can1_cs; /*can1 指针*/
EXTERN xdata uchar *can0_cs; /*can0 指针*/
//EXTERN xdata uchar sbuf_rec; /* SBUF的缓冲区*/
//EXTERN xdata uchar time_flag; /* 50ms计数时钟起始标志 */
//EXTERN xdata uchar time_last; /* 50ms计时时钟上次状态 */
//EXTERN xdata uchar time_now; /* 50ms计时时钟本次状态 */
//EXTERN xdata uchar time_over; /* 50ms计时时钟运行结果标志 */
//EXTERN xdata uchar m_comm_timer; /* 60s计时计数*/
//EXTERN xdata uchar m_comm_60sover_flg; /* 60s计时结束标志*/
//EXTERN xdata uchar m_comm_enable_flg; /* 通讯使能 */
//EXTERN xdata uchar m_timer_60s_last; /* 60s计时上次状态*/
//EXTERN xdata uchar m_timer_60s_now; /* 60s计时本次状态*/
//指向传输数据的指针
EXTERN L_Data *m_pL_Data; //楼及总体数据
EXTERN E_InputData *m_pE_InputData; //电梯输入数据
EXTERN E_OutputData *m_pE_OutputData; //电梯输出数据
EXTERN TIMER *m_pTimer; //计时变量
//LHM dyn_test temp动态测试专用变量(移植时不删除)
EXTERN uchar m_nNextStopLIdx[ENum_MAX];
EXTERN uchar m_bDirect[ENum_MAX];
EXTERN INTER_DATA m_InterData[ENum_MAX]; //中间数据--淘汰数据
EXTERN uchar m_cCurStageStartFloor[ENum_MAX]; //中间数据--电梯当前运动阶段的起始楼层(选曲线用)
EXTERN uchar m_cOvertime[ENum_MAX]; //中间数据--门超时时间(单位:秒)
EXTERN uchar m_CalUpLIdx;
EXTERN uchar m_CalDownLIdx;
//时钟用
EXTERN uchar m_year; // 年数缓冲区
EXTERN uchar m_month; // 月数缓冲区
EXTERN uchar m_date; // 日数缓冲区
EXTERN uchar m_time; // 时数缓冲区
EXTERN uchar m_minute; // 分数缓冲区
EXTERN uchar m_set_time; // 写时钟标志
EXTERN uchar m_read_time; // 读时钟标志
EXTERN uchar m_read_time_count; // 读时钟计数(因为读1226会造成看门狗不能复位,所以改为每隔一段时间读一次)
//rs232通讯用
EXTERN uchar sbuf_rec; // SBUF的缓冲区
EXTERN uchar m_get_senddata_flg; // 取得发送数据标记(host专用)
EXTERN uchar m_comm_enable_flg; // 通讯使能标记(0:不能 1:能)
EXTERN uchar m_host_flg; // 主客标记(0:客 1:主)客要回答上位机,主不需要
EXTERN uint m_ST_60s_count; // 60s计数器
EXTERN uchar m_comm_data_flg; // 有串口数据标记(0:没有 1:有)
EXTERN uchar m_comm_60sover_flg; // 60s计时结束标志
EXTERN uchar m_msg_monitor_flg; // 监视命令标记
EXTERN uchar m_msg_quit_flg; // 解除监视命令标志
EXTERN uchar m_msg_set_flg; // 参数设定命令标记
EXTERN uchar m_monitor_delay_flg; // 监视延迟标志
EXTERN uchar m_monitor_delay_count; // 监视延迟计数
EXTERN uchar m_active_idx; //当前有效的地址和类型索引
EXTERN uchar m_add_type_idx; //纪录监视参数和地址类型索引
EXTERN uchar m_resolve_flg; //命令解析开始标记
//EXTERN uchar m_make_senddata_flg; //发送命令作成标记
EXTERN xdata uint m_monitor_ad[MORN_PARAM_NUM]; // 5个监视参数地址
EXTERN xdata uchar m_monitor_type[MORN_PARAM_NUM]; // 监视参数类型
EXTERN xdata DT_SCC m_scc;
//用户参数存储和恢复用
EXTERN xdata uchar m_restore_flg; //用户参数恢复标记
EXTERN xdata uchar m_save_flg; //用户参数存储标记
EXTERN xdata uchar m_factory_flg; //工厂参数恢复
EXTERN xdata uchar m_save_over_flg; //用户参数存储过标记
EXTERN xdata uchar m_once_param_over_flg; //一次性参数传送完毕标志
//can通讯用
EXTERN xdata uint canx_cs[ENum_MAX]; //can指针
EXTERN uchar e_out_call_flag; //发一组外呼数据
EXTERN uchar m_state_20ms; //can发送时间
EXTERN uchar can_send_count; //25ms计数
EXTERN uchar e_lamp_call_flag; //发一组外呼灯亮灭
EXTERN uchar e_display_reflash_floor[ENum_MAX]; //显示刷新某层呼梯灯
EXTERN uchar e_up_down; //刷新上呼还是下呼
EXTERN uchar e_frame_number; //帧数据
EXTERN uchar e_online[ENum_MAX]; //can在线标志
EXTERN uchar bdata abit;
EXTERN bit abit_0;
EXTERN bit abit_1;
EXTERN bit abit_2;
EXTERN bit abit_3;
EXTERN bit abit_4;
EXTERN bit abit_5;
EXTERN bit abit_6;
EXTERN bit abit_7;
EXTERN uchar bdata abit0;
EXTERN bit abit0_0;
EXTERN bit abit0_1;
EXTERN bit abit0_2;
EXTERN bit abit0_3;
EXTERN bit abit0_4;
EXTERN bit abit0_5;
EXTERN bit abit0_6;
EXTERN bit abit0_7;
struct group_out
{
uchar call_up_out[6];
uchar call_down_out[6];
//uchar choose_out;
//uchar yes_no;
};
EXTERN xdata struct group_out group_assign[ENum_MAX];
EXTERN uchar choose_out[ENum_MAX];
EXTERN uchar yes_no[ENum_MAX];
EXTERN uint e_online_time_count[4]; //1s计时
EXTERN uchar e_online_flag[4]; //1s计时,初值群控器在线
EXTERN uint e_single_comm_count[4]; //群控方式单梯计时
EXTERN uint e_group_comm_count[4]; //群控方式群控计时
EXTERN uchar e_1_second_flag[4]; //一次性计时
//撤销外呼用标记
EXTERN uchar m_SendOpenDoorFlg[ENum_MAX]; //发开门命令的标记(命令60)
EXTERN uchar m_LastDoorState[ENum_MAX]; //上次关门状态(0为非关门中,1为关门中)
//静态停靠用
EXTERN uchar m_SendStaticInSelDataFlg[ENum_MAX]; //发送静态停靠内选数据标记
EXTERN uchar m_IsExistWaiInFlg;
//高峰停靠用
EXTERN uchar m_SendPeekInSelDataFlg[ENum_MAX]; //发送高峰停靠内选数据标记
//can复位用
EXTERN uchar m_can0_flg; //can0故障标志
EXTERN uchar m_can1_flg; //can1故障标志
EXTERN uchar m_can2_flg; //can2故障标志
EXTERN uchar m_can3_flg; //can3故障标志
EXTERN uchar m_can0_count; //can0复位脚拉低计时
EXTERN uchar m_can1_count; //can1复位脚拉低计时
EXTERN uchar m_can2_count; //can2复位脚拉低计时
EXTERN uchar m_can3_count; //can3复位脚拉低计时
EXTERN uchar m_can0err_flg; //can0复位脚拉低计时到标记
EXTERN uchar m_can1err_flg; //can1复位脚拉低计时到标记
EXTERN uchar m_can2err_flg; //can2复位脚拉低计时到标记
EXTERN uchar m_can3err_flg; //can3复位脚拉低计时到标记
//淘汰标记滤波计时
//标记
EXTERN uchar m_MenGuZhang_flg[ENum_MAX];
EXTERN uchar m_ManZai_flg[ENum_MAX];
EXTERN uchar m_ChaoZai_flg[ENum_MAX];
EXTERN uchar m_JianXiu_flg[ENum_MAX];
EXTERN uchar m_SiJi_flg[ENum_MAX];
EXTERN uchar m_ZhiShi_flg[ENum_MAX];
EXTERN uchar m_BaoLiu_flg[ENum_MAX];
EXTERN uchar m_SuoTi_flg[ENum_MAX];
EXTERN uchar m_XiaoFang_flg[ENum_MAX];
EXTERN uchar m_JiTing_flg[ENum_MAX];
EXTERN uchar m_GuZhang_flg[ENum_MAX];
EXTERN uchar m_JingGao_flg[ENum_MAX];
//计时
EXTERN uint m_MenGuZhang_count[ENum_MAX];
EXTERN uint m_ManZai_count[ENum_MAX];
EXTERN uint m_ChaoZai_count[ENum_MAX];
EXTERN uint m_JianXiu_count[ENum_MAX];
EXTERN uint m_SiJi_count[ENum_MAX];
EXTERN uint m_ZhiShi_count[ENum_MAX];
EXTERN uint m_BaoLiu_count[ENum_MAX];
EXTERN uint m_SuoTi_count[ENum_MAX];
EXTERN uint m_XiaoFang_count[ENum_MAX];
EXTERN uint m_JiTing_count[ENum_MAX];
EXTERN uint m_GuZhang_count[ENum_MAX];
EXTERN uint m_JingGao_count[ENum_MAX];
//2004.07.26 LHM 计时测试(临时)
//EXTERN uint m_nTestTimer;
//--------------------------- Function ---------------------//
//hardware.c
void maininit(void);
//main.c
void main_process();
void WithdrawVetoEle(void);
void WithdrawOutCall(void);
//void SetDoorStateFlg(void);
//init.c
void InitData(void);
//intervalue.c
uchar GetMinBottomFloor();
uchar GetMaxTopFloor();
uchar GetCanDistEleCount();
void SetPartInterVal(void);
void SetInterVal_FloorCanStop(uchar cLIdx, uchar updown_flg);
void SetInterVal_2FloorMove(uchar cLIdx, uchar updown_flg);
void SetInterVal_SameDirection(uchar cLIdx, uchar updown_flg);
uchar GetDoorOvertime(uchar cEIdx);
//timer.c
void UpdateDoorOvertimer(void);
//door.c
uchar GetDoorActionState(uchar cEIdx);
//distribute.c
void DistributeEle(void);
void Check3states(void);
//outlight.c
void SetOutCallLight(uchar cLIdx, uchar updown_flg, uchar bVal);
void SetOutCallDistribution(uchar cLIdx, uchar updown_flg, uchar bVal);
uchar IsWithdrawOutLight(uchar cLIdx, uchar updown_flg);
void LoopSetCallLightData(uchar cCalUpLIdx, uchar cCalDownLIdx);
//optimize.c
uchar GetNextStopLIdx(uchar cEIdx, uchar cStartFloorIdx, uchar bStartDirect, uchar *bDirect, uchar *cStartSearchEnd);
uchar GetNoDirectEleTrend(uchar cEIdx);
void OptimizeArrange(uchar cLIdx, uchar updown_flg);
//staticstop.c
void SetStaticStopFloor();
void SetPeekStopFloor();
uchar IsPeekTime(L_SysTime *pSysTime, L_GaoFeng *pGaoFeng);
uchar IsExistCurFloorUp(uchar cEIdx);
uchar IsExistCurFloorDown(uchar cEIdx);
//clock.c
void time_x1226(void);
uchar eread(uchar t_addr1); //读x1203一个字节
void ewrite(uchar t_addr2,uchar t_data); //写x1203一个字节
//rs232.c
void serial_comm(void);
void comm_check(void);
void monitor_rec(void); //rs232主程序
void message_quit(void); //0x3 及m_message_quit 执行程序
void command(uchar *pBuf); //完整命令解析
void monitor_send(void);
void make_send_buf(void);
uchar __toascii(uchar c);
uchar __tofig(uchar cAscii);
uint GetValidAdd(uchar *pBuf);
void SetParamVal(uchar *pSrcBuf, uchar *pDestBuf, uchar type);
void serial_command_resolve(void);
void serial_make_senddata(void);
//datainit.c
void data_init(void);
void orgdata_init(void); //恢复原始数据
void orgdata_init_total(void);
void orgdata_init_input(void);
void orgdata_init_output(void);
void GetUserParamSaveOverFlg();
void SetUserParamSaveOverFlg();
//param_save_restore.c
void restore_user_param(void);
void save_user_param(void);
void restore_factory_param(void);
uchar erase(uint addr);
uchar writef(uint x,uchar y);
//can.c
void can_init(uint pointa); //can初始化
void can_reset(void);
void can_call_in(uchar a); //外呼
can_receive_more(uchar a); //控制器
can_receive_only(uchar a); //控制器
clear_unknow_code(uchar a); //清乱码
void can_call_assign(); //外呼分派
can_call_lamp(); //暂定50ms循环点灯,灭灯
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -