帧格式如下:
其中LB、DS在命令帧和应答帧中无。
差错控制与校验采用纵向冗余校验(LRC)。
发送方校验和生成方法:
将FD、LB、DS域逐个字节相加求和,在求和过程中舍弃进位,最后将所得的和(单个字节)取补码作为检验和(CS)。
生成校验和的函数为:
static unsigned char LRC(auchMsg,usDataLen) /* 函数返回unsigned char 类型的LRC 结果*/ unsigned char *auchMsg ; /* 要计算LRC 的报文*/
unsigned short usDataLen ; /* 报文的字节数*/
{
unsigned char uchLRC = 0 ; /* LRC 初始化*/
while (usDataLen--) /* 完成整个报文缓冲区*/
uchLRC += *auchMsg++ ; /* 缓冲区字节相加,无进位*/
return ((unsigned char)(-((char)uchLRC))) ; /* 返回二进制补码*/
}
接收方校验方法:
将所有接收到的数据,即FD、LB、DS、CS等域逐个字节相加求和,在求和过程中舍弃进位,若结果为零(低字节)则传输无错,否则出错。
应答:
接收方对接收数据进行校验后,若无错则向发送方发送传输无错应答帧,若有错则向发送方发送传输出错应答帧。
所需通信数据分为:数据帧、命令帧、应答帧
上行数据:下位机(单片机)向上位机(PC机)传送数据
⑴初始化上位机(IPC):FD=0x01 (InitPC)
单片机将电梯模拟器的参数发送至PC机,初始化PC机端的可视化程序。PC机上的可视化程序完成初始化后,应向单片机发送初始化完毕命令。
帧格式:
⑵发送模拟器状态信息:FD=0x02 (SendMsgToPC)
包括:轿厢位置,轿厢状态——上行/下行/停止,轿厢运行速度
其中轿厢状态:
上行——0x05
下行——0x0A
停止——0x00
⑶开门命令:FD=0x03
⑷开门到位命令:FD=0x04
⑸关门命令:FD=0x05
帧格式:
⑹关门到位命令:FD=0x06
⑺询问上位机是否准备好:FD=0x07 (IfPCReady)
帧格式:
下行数据:上位机(PC机)向下位机(单片机)传送数据⑴上位机准备好:FD=0x11
⑵初始化完毕:FD=0x12 (PCInitFinish)
⑶修改模拟器参数:FD=0x13 (AlterPara)
⑷完成修改模拟器参数:FD=0x14 (FinishAlterPara)
⑸下送模拟器参数:FD=0x15 (SendParaToMCU)
帧格式:
应答帧:
⑴接收到的数据无错:FD=0xF1
帧格式:
⑵接收到的数据出错:FD=0xF2
模拟器运行流程图
修改模拟器参数流程图
模拟器参数定义
//参数号定义
#define ID_Total_Floors 1
#define ID_Special_Floor_A 3
#define ID_Special_Floor_B 5
#define ID_ID_Observe_Para 7
#define ID_Dist_Bottom_Limit_Location 10
#define ID_Dist_Bottom_Restrict_Location 11
#define ID_Duration_Close_LiftDoor 16
#define ID_Duration_Open_LiftDoor 17
#define ID_Factor_FreqDivid_Hall 18
#define ID_Polarity_Photoswitch 19
#define ID_Floor_Lift_Lieto 29
#define ID_Location_Lift 30
#define ID_Length_UnivFloor 2
#define ID_Length_Special_Floor_A 4
#define ID_Length_Special_Floor_B 6
#define ID_Length_Floor_Level_Board 8
#define ID_Length_Speed_Alter_Board 9
#define ID_Dist_Bottom_SpAlter_UpEnd 12
#define ID_Dist_Top_SpAlter_LowEnd 13
#define ID_Dist_Top_Restrict_Location 14
#define ID_Dist_Top_Limit_Location 15
ubyte Total_Floors; //最高楼层数
ubyte Special_Floor_A; //专用楼层号A
ubyte Special_Floor_B; //专用楼层号B
ubyte ID_Observe_Para; //观测参数号
ubyte Dist_Bottom_Limit_Location; //下极限与底楼平层的距离(向下计算),单位:厘米
ubyte Dist_Bottom_Restrict_Location; //下限位与底楼平层的距离(向下计算),单位:厘米
ubyte Duration_Close_LiftDoor; //电梯关门到位时间,单位:秒
ubyte Duration_Open_LiftDoor; //电梯开门到位时间,单位:秒
ubyte Factor_FreqDivid_Hall; //输入霍尔脉冲分频系数
ubyte Polarity_Photoswitch; //平层区光电开关极性:0 - 进入平层区光电开关输出断开,1 - 进入平层区光电开关输出闭合
ubyte Floor_Lift_Lieto; //电梯当前楼层
uword Location_Lift; //电梯位置值,单位:厘米