工程实践与科技创新[4A] RS485主从通信协议
(V1.1 发布于2010年3月15日)
表1修改记录
通信主机和从机间信息传输,以信息帧(数据包)方式进行,信息帧的组成结构应符合表2。
信息帧在传输时采用全ASCII字符方式,使其具有较好的可显性和易读性。
由通信主机发往从机的信息帧,称为命令帧;由通信从机发往主机的信息帧,称为响应帧。由通信主机发往某特定从机的命令帧,称为单播命令帧;由通信主机发往所有从机的命令帧,称为广播命令帧。响应帧是对确定的单播命令帧的回复,两者有一一对应关系;从机收到广播命令帧,不回复任何响应帧。
表2信息帧的基本结构
起始标识采用字符’~’,相应ASCII代码为0x7E。
结束标识采用字符’\r’ (回车符),相应ASCII代码为0x 0D。
V1.0对应为0x10。
在本应用的通信系统中,无论通信主机还是任何一个确定的从机,都具有确定的唯一性标识,称通信机的地址。以下说明地址编码的分配情况。
0:分配给通信主机的地址码。
1~254(0x01~0xFE):分配给各通信从机的地址码,从ADR的地址容量角度看,本应用中最多可同时容纳254个通信从机。
255(0xFF):保留,拟作通信主机向所有通信从机传输广播信息时的地址标识。
在命令帧中,命令码CMD1和CMD2组合表示一条命令代码。CMD1是主码,表示一类命令,一般同类命令的CMD1相同;CMD2是辅码,与主码配合,构成命令的唯一性标识。CMD1和CMD2的编码方式,由协议使用者根据业务需要自行确定。
在响应帧中,通过响应标识码RSPD指示所对应的命令帧情况,RSPD取所对应命令帧的CMD1的值。通信主机收到该响应帧时,可通过阅读RSPD段,检验是否是与所发命令帧相对应的响应,减少错误响应对通信系统正常工作的影响。
当目的接收机(某通信从机)正常接收命令帧(基本结构要素完整,即SOI和EOI存在,长度符合要求),并正确解析命令后,应按要求回复响应帧,且在RTN段中指示“正常回复”。
通信从机应按以下顺序,依次对命令帧进行解析:
(1) 检查VER段;
(2) 检验CHKSUM;
(3) 判断CMD1、CMD2的合法性和有效性;
(4) 检验LENGTH与INFO段实际长度是否相符;
(5) 判断INFO段中各参数的合法性和有效性。
若命令帧解析失败,通信从机通过响应帧的RTN段编码(见表3),向主机指示按以上顺序检验到的第1种错误。
表3返回码
LENGTH:0~255(00H~0FFH)
除SOI、EOI和CHKSUM外,其他字节累加求模256和,取结果的补码(原码取反加1)。换言之,除SOI、EOI外,其他字节(包括CHKSUM)的原码的模256和应为0。
INFO段格式及编码,由协议使用者根据业务需要自行定义。信息帧可以没有参数段(相应LENGTH取0)。
异步通信字节格式:9600 Baud,8位数据,无奇偶校验位,1位停止位;
Tbb:帧内字节间隔时间;
Tcr:命令帧-响应帧间隔时间;
Trc:响应帧-下一命令帧间隔时间。
表4通信时序特性
注:若Tbb>TbbMAX,则通信接收方可判定帧传输中止;若Tcr
图1 通信时序特性
假定命令帧中:
VER = 0x10; //版本号V1.0
ADR = 0x01; //目的地址指向编号为1的通信从机
CMD1 = 0x10;
CMD2 = 0x21; //假定0x10 0x21组合代表某合法命令
LENGTH = 0x02; //与该命令关联的有2个字节的参数
INFO = 0x00;
0x02; //参数值
CHKSUM = 0xBA; //以上模256和为0
实际发送的是ASCII字符序列:~10011021020002BA\r ,其中\r表示回车符。
对该命令帧,1号从机回复以下响应帧:
VER = 0x10; //版本号V1.0
ADR = 0x00; //目的地址指向通信主机
RSPD = 0x10; //与命令帧的CMD1取值同
RTN = 0x00; //正确接收并解析,命令各部分均合法有效
LENGTH = 0x03; //响应帧含3个字节的参数
INFO = 0x01;
0x02
0x03; //参数值
CHKSUM = 0xD7; //以上模256和为0
实际发送的是ASCII字符序列:~1000100003010203D7\r ,其中\r表示回车符。
¥29.8
¥9.9
¥59.8