当前位置:文档之家› 单片机与PC机通信协议(RS232)

单片机与PC机通信协议(RS232)

帧格式如下:

其中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; //电梯位置值,单位:厘米

相关主题