Modbus协议学习(三)

MODBUS协议在串行链路上的实现

包括:
- Modbus串行链路协议是一个主/从协议,该协议位于OSI模型第二层
- Modbus应用层报文传输协议,提供连接总线或网络设备之间的客户机/服务器通信,位于OSI模型第七层

在同一时刻,只有一个主节点连接于总线,一个或多个子节点(最大编号为247 ) 连接于同一个串行总线。Modbus 通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。

主节点以两种模式对子节点发出Modbus 请求:
1. 在单播模式,主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个 ‘应答’)。
2. 在广播模式,主节点向所有的子节点发送请求。对于主节点广播的请求没有应答返回。广播请求一般用于写命令。所有设备必须接受广播模式的写
功能。

主站

从站

两种串行传输模式

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 停止位

  • Modbus RTU帧最大为256字节

ASCII传输模式

当 Modbus 串行链路的设备被配置为使用ASCII 模式通信时, 报文中的每个 8 位子节以两个ASCII 字符发送。当通信链路或者设备无法符合RTU 模式的定时管理时使用该模式。
注 : 由于一个子节需要两个字符,此模式比RTU 效率低。

ASCII 模式每个字节( 10 位 ) 的格式为 :
编码系统:
十六进制,ASCII 字符 (0-9), (A-F)
报文中每个ASCII 字符含有1 个十六进制字符
Bits per Byte:
1 起始位
7 数据位, 首先发送最低有效位
1 位作为奇偶校验
1 停止位

  • Modbus ASCII协议帧最大尺寸为513个字符

差错检验方法

标准 Modbus 串行链路的可靠性基于两种错误检验:
§ 奇偶校验 (偶或奇) 应该被每个字符采用。
§ 帧检验(LRC or CRC) 必须运用于整个报文。

???什么是奇偶校验???
奇偶校验 (Parity Check) 是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中”1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中”1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验”1”的个数是否为奇数,从而确定传输代码的正确性。
< from 360百科 >

奇偶校验的电气元件实现(参考数电课本):
这里写图片描述
(自己画的有点丑)


LEC生成介绍:

纵向冗余校验(LRC)为一个字节,含有8 位二进制值。LRC 由发送设备计算,并附加LRC 到报文。接收设备在接收文时计算LRC, 并将计算的结果与在LRC 接收到的实际值相比较,如果两个值不相等,则结果为错。

LRC 的计算, 对报文中的所有的连续8 位字节相加,忽略任何进位,然后求出其二进制补码。LRC 为一个8位域,那么每个会导致值大于255新的相加只是简单的将域的值在零”回绕”。因为没有第9位,进位被自动放弃。

生成一个LRC 的过程为:
1.不包括起始”冒号”和结束CRLF的报文中的所有字节相加到一个8位域,故此进位被丢弃。
2.从FF(全1)十六进制中减去域的最终值,产生1的补码(二进制反码)。
3.加1产生二进制补码.


CRC生成介绍:

循环冗余校验(CRC) 域为两个字节,包含一个二进制16 位值。附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC 的值,并将计算结果与实际接收到的CRC值相比较。如果两个值不相等,则为错误。

CRC 的计算, 开始对一个16位寄存器预装全1. 然后将报文中的连续的8位子节对其进行后续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与CRC 计算。
生成CRC 的过程为:
1. 将一个16 位寄存器装入十六进制FFFF (全1). 将之称作CRC 寄存器.
2. 将报文的第一个8位字节与16 位CRC 寄存器的低字节异或,结果置于CRC 寄存器.
3. 将CRC 寄存器右移1位(向LSB 方向), MSB 充零. 提取并检测LSB.
4. (如果LSB 为0): 重复步骤3 (另一次移位).
(如果LSB 为1): 对CRC 寄存器异或多项式值0xA001 (1010 0000 0000 0001).
5. 重复步骤3 和 4,直到完成8 次移位。当做完此操作后,将完成对8位字节的完整操作。
6. 对报文中的下一个字节重复步骤2 到5,继续此操作直至所有报文被处理完毕。
7. CRC 寄存器中的最终内容为CRC 值.
8. 当放置CRC 值于报文时,如下面描述的那样,高低字节必须交换。

图解CRC 16算法

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值