(1)MODBUS通信的两种数据传输方式:ASCII和RTU模式
当数据代码采用ASCII数据传输方式时被称为MODBUS-ASCII。
当数据代码采用RTU(远程终端单元)数据传输方式时被称为MODBUS-RTU。在以RTU数据传输方式下,1个8bit的字节由2个4bit的16进制字符构成。
若无特别说明,在本书中所描述的通信协议均为MODBUS-RTU。
(2)MODBUS-RTU在发送1个字节时其中的位分布
MODBUS-RTU在发送字节时是利用物理层来传输的,因此字节的位分布其实是物理层的位传输协议。字节传输的位分布规则如下:
一个字节中包括1位起始位;8位数据位;1位奇偶校验位,若选择无校验则无本位;1位停止位,若无奇偶校验则为2位停止位(多数情况下仍然采用1位停止位)。可见在链路上每发送一个字节需要传输10位或者11位二进制数据。
若某链路数据传输的速率为9600B/s,若每个字节有10位,则每秒钟此链路可传输960个字节数据。
(3)在MODBUS-RTU模式下,错误校验码采用CRC16模式
(4)MODBUS-RTU的消息帧结构
MODBUS-RTU的消息帧结构见表7-5。
表7-5 MODBUS-RTU的消息帧结构
在表7-5中:
1)地址域:指从站的ID地址。当主站向某从站发送消息时将该从站的地址放入消息帧的地址域中;当从站发送回应消息时,将自己的地址放入消息帧的地址域中以便主站知道哪个从站作了回应。
地址0为广播命令。当MODBUS网络为更复杂的网络时,广播命令可能会取消或以其他形式取代。
从站地址的范围为1~247(十进制),但为了与RS232C/RS485接口配合一般选择为1~32。
2)功能域:指主站发布的MODBUS功能命令。MODBUS功能命令以Modicon公司的解释为行业标准。表7-6为Modicon公司对MODBUS功能命令的解释。
表7-6 主站发布的MODBUS功能命令行规(摘自《Modicon Modbus Protocol Reference Guide(Modicon公司的MODBUS通信协议指南)》)
(续)
注:1.请注意线圈的排列次序:在数据区中线圈组对应的字节按从小到大排列,而在某个字节中的线圈按从大到小排列。
2.若从站对主站发布的命令有异议,则从站将功能域的最高位置1作为回应消息的功能域。例如若主站发布的命令代码是03H即二进制00000011B,则从站回应的异议功能代码是83H即二进制10000011B。
3)数据域:数据区。数据域的集合是由若干组2位十六进制数构成的,其中包括寄存器地址、要处理项的数目和域中实际数据字节数。表7-7列出了0X03H命令和0X10H命令的数据区结构。
表7-7 03H命令和10H命令的数据域的结构
4)MODUBS通信协议中对寄存器地址的编码(见表7-8)。(www.xing528.com)
表7-8 寄存器地址的编码表
注:当主站需要读从站中某寄存器中数据,则从站返回的消息帧中数据所在真实寄存器地址为返回地址减1。
我们来看图7-13所示的ModScan32界面中的保存寄存器读取数据时的地址域:
图7-13 ModScan32界面中的保存寄存器
在图7-13从站返回的消息帧中:
报文的命令项:0X03H,其用途是读保持寄存器的值;
被读取的保持寄存器地址:48656;
保持寄存器中的数值是:0010H;
在返回数据界面中填写的实际保持寄存器地址:8656;
被读取的连续保持寄存器数量:4。
从ModScan32界面中可见返回的数据0010H出现在48657寄存器中,因此要将保存寄存器的地址减1。
数据域的长度没有限制,但信息帧总长度不得超过256个字节。
5)CRC校验域:CRC16校验。
CRC校验通过对信息帧的[地址+功能域+数据域]实施以CRC16为除数的不借位除法操作,得到的商作为CRC校验码随同[地址+功能域+数据域]构成完整信息帧发送给对方,对方在接到报文后再次进行CRC16不借位操作,若2套CRC校验码相同则确认报文正确,否则将要求对方重新发报文。
例如:若MODBUS从站的地址为01H,功能域为03H读寄存器命令,保持寄存器的首地为48656即21D0H,被读寄存器的数量为4即0004H,则CRC校验码具体数值如图7-14所示为“4FCC”。
图7-14 CRC校验码
图7-14中寄存器的地址为:48656,实际十进制地址为:8656,换算为十六进制地址为:21D0H。
MODBUS网络的通信速率与通信双方的通信介质长度有关。通信速率与通信介质长度之间的关系见表7-9。注意该表的数值仅供参考。
表7-9 通信速率与通信介质的长度之间的关系
若MODBUS网络的通信速率确定后,则发送信息帧所需时间可以计算出来。计算方法如下:
以通信速率为9600bit/s为例。若按MODBUS-RTU发送1个字节为11个位(1位起始位+8位数据位+1位校验位+1位停止位)来计算则需时1.15ms。
按前例的信息帧(010321D000044FCC)来计算,总共需要发送8个字节,于是发送的时间为1.15×8=9.36ms。考虑到传输延迟,故上述传输时间可按10ms来计算。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。