1 简介
modbus是OSI模型第七层上的应用层报文传输协议。
modbus是一个请求/应答协议。并规定了相关的功能码。
modbus功能码是modbus请求应答PDU的元素。;PDU;协议数据单元;
modbus通信栈;
·
modbus网络体系结构示例 ;
MODBUS 协议允许在各种网络体系结构内进行简单通信。
每种设备;PLC、HMI、控制面板、驱动程序、动作控制、输入/输出设备;都能使用MODBUS协议来启动远程操作。
在基于串行链路和以太TCP/IP 网络的MODBUS上可以进行相同通信。
modbus帧;
主/从站通信时序图;
2、RTU传输模式
有两种串行传输模式被定义: RTU 模式和 ASCII 模式。
所有设备必须必须实现RTU 模式。
当设备使用RTU (Remote Terminal Unit) 模式在Modbus 串行链路通信; 报文中每个8位字节含
有两个4 位十六进制字符。这种模式的主要优点是较高的数据密度;在相同的波特率下比ASCII 模
式有更高的吞吐率。每个报文必须以连续的字符流传送。
RTU 模式每个字节( 11 位 ) 的格式为 :
编码系统: 8–位二进制
报文中每个8 位字节含有两个4 位十六进制字符(0–9; A–F)
Bits per Byte: 1 起始位
8 数据位; 首先发送最低有效位
1 位作为奇偶校验
1 停止位
默认校验位模式必须位偶校验
RTU模式位序列;
RTU模式位序列(无校验的特殊情况);
RTU帧描述;
CRC;循环冗余校验;
modbus ;;;帧最大;;;个字节。
;、;;;;;;报文帧
由发送设备将Modbus 报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收新帧;并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。在 RTU 模式;报文帧由时长至少为3.5 个字符时间的空闲间隔区分。在后续的部分;这个时间区间被称作t3.5。
整个报文帧必须以连续的字符流发送。
如果两个字符之间的空闲间隔大于1.5 个字符时间;则报文帧被认为不完整应该被接收节点丢弃。
RTU传输状态图;
上面状态图的一些解释:
§ 从 ;初始; 态到 “空闲” 态转换需要t3.5 定时超时: 这保证帧间延迟
§ “空闲” 态是没有发送和接收报文要处理的正常状态。
§ 在RTU 模式; 当没有活动的传输的时间间隔达3.5 个字符长时;通信链路被认为在“空闲”
态。
§ 当链路空闲时; 在链路上检测到的任何传输的字符被识别为帧起始。链路变为 ;活动; 状态。
然后; 当链路上没有字符传输的时间间个达到t3.5 后;被识别为帧结束。
§ 检测到帧结束后;完成CRC 计算和检验。然后;分析地址域以确定帧是否发往此设备;如果不
是;则丢弃此帧。为了减少接收处理时间;地址域可以在一接到就分析;而不需要等到整个帧
结束。这样;CRC 计算只需要在帧寻址到该节点(包括广播帧) 时进行。
CRC校验;
在RTU 模式包含一个对全部报文内容执行的;基于循环冗余校验 (CRC - Cyclical RedundancyChecking) 算法的错误检验域。CRC 域检验整个报文的内容。不管报文有无奇偶校验;均执行此检验。
CRC 包含由两个8 位字节组成的一个16 位值。
CRC 域作为报文的最后的域附加在报文之后。计算后;首先附加低字节;然后是高字节。CRC高字节为报文发送的最后一个子节。
附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC 的值;
并将计算结果于实际接收到的CRC 值相比较。如果两个值不相等;则为错误。
CRC 的计算, 开始对一个16 位寄存器预装全1。然后将报文中的连续的8 位子节对其进行后
续的计算。只有字符中的8个数据位参与生成CRC 的运算;起始位;停止位和校验位不参与CRC
计算。
CRC 的生成过程中; 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向
移动(Shift) 1位;而最高有效位(MSB)位置充零。然后提取并检查LSB;如果LSB 为1; 则寄存
器中的值与一个固定的预置值异或;如果LSB 为 0; 则不进行异或操作。
这个过程将重复直到执行完8 次移位。完成最后一次;第8 次;移位及相关操作后;下一个8
位字节与寄存器的当前值异或;然后又同上面描述过的一样重复8 次。当所有报文中子节都运算之
后得到的寄存器忠的最终值;就是CRC。