帧格式如下:
功能号
[FD]
数据长度
[LB]
数据1
[DS]
… 数据n
[DS]
校验和
[CS]
其中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机上的可视化程序完成初始化后,应向单片机发送初始化完毕命令。
帧格式:
功能号
IPC
数据长度
[LB]
数据
[DS]
校验和
[CS]
其中数据域格式如下:
参数号1
参数1
……
参数号n
参数n
⑵ 发送模拟器状态信息:FD=0x02 (SendMsgToPC)
包括:轿厢位置,轿厢状态——上行/下行/停止,轿厢运行速度
帧格式:
功能号
[FD]
数据长度
[LB]
轿厢位置
低字节
轿厢位置
高字节
轿厢状态
轿厢行速
校验和
[CS]
其中轿厢状态:
上行——0x05
下行——0x0A
停止——0x00
⑶开门命令:FD=0x03
帧格式:
功能号
[FD]
校验和
[CS]
⑷开门到位命令:FD=0x04
帧格式:
功能号
[FD]
校验和
[CS]
⑸关门命令:FD=0x05
帧格式:
功能号
[FD]
校验和
[CS]
⑹关门到位命令:FD=0x06
帧格式:
功能号
[FD]
校验和
[CS]
⑺询问上位机是否准备好:FD=0x07 (IfPCReady)
帧格式:
功能号
[FD]
校验和
[CS]
下行数据:上位机(PC机)向下位机(单片机)传送数据
⑴上位机准备好:FD=0x11
帧格式:
功能号
[FD]
校验和
[CS]
⑵初始化完毕:FD=0x12 (PCInitFinish)
帧格式:
功能号
[FD]
校验和
[CS]
⑶修改模拟器参数:FD=0x13 (AlterPara)
帧格式:
功能号
[FD]
校验和
[CS]
⑷完成修改模拟器参数:FD=0x14 (FinishAlterPara)
帧格式:
功能号
[FD]
校验和
[CS]
⑸下送模拟器参数:FD=0x15 (SendParaToMCU)
帧格式:
功能号
[FD]
数据长度
[LB]
数据
[DS]
校验和
[CS]
其中数据域格式如下:
参数号1
参数1
……
参数号n
参数n
应答帧:
⑴接收到的数据无错:FD=0xF1
帧格式:
功能号
[FD]
校验和
[CS]
⑵接收到的数据出错:FD=0xF2
帧格式:
功能号
[FD]
校验和
[CS]
模拟器运行流程图
修改模拟器参数流程图
模拟器参数定义
//参数号定义
#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; //电梯位置值,单位:厘米
uword Length_UnivFloor; //通用楼层距离,单位:厘米
uword Length_Special_Floor_A; //专用楼层号A的楼层距离(向上计算),单位:厘米
uword Length_Special_Floor_B; //专用楼层号B的楼层距离(向上计算),单位:厘米
uword Length_Floor_Level_Board; //平层挡板的长度,单位:毫米
uword Length_Speed_Alter_Board; //上、下强换挡板的长度,单位:厘米
uword Dist_Bottom_SpAlter_UpEnd; //下强换顶端与底楼平层的距离(向上计算),单位:厘米
uword Dist_Top_SpAlter_LowEnd; //上强换底端与顶楼平层的距离(向下计算),单位:厘米
uword Dist_Top_Restrict_Location; //上限位与顶楼平层的距离(向上计算),单位:厘米
uword Dist_Top_Limit_Location; //上极限与顶楼平层的距离(向上计算),单位:厘米
本文档为【单片机与PC机通信协议(RS232)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。