Modbus
Modbus 是由 Modicon(施耐德)在 1979 年发明的,是用于工业现场的总线协议。
国家标准:GB/T19582-2008 国家标准 - 全国标准信息公共服务平台 (samr.gov.cn)
MODBUS 协议
一个主从类型的系统有一个向某个“子”节点发出显式命令并处理响应的节点(主节点)。在物理层,Modbus 串行链路系统可以使用不同的物理接口(RS485、RS232)。
Modbus 主站/从站协议原理
Modbus 串行链路协议是一个主-从协议。在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线。Modbus 通信总是由主节点发起。子节点在没有收到 来自主节点的请求时,从不会发送数据。子节点之间从不会互相通信。主节点在同一时刻只会发起一个 Modbus 事务处理。
主节点对子节点发出 Modbus 请求的两种模式:
单播模式:主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文。
广播模式:主节点向所有的子节点发送请求。对于主节点广播的请求没有应答返回。广播请求一般用于写命令。 所有设备必须接受广播模式的写功能。
MODBUS寄存器映射
MODBUS 串行传输模式
标准 Modbus 网络采用两种传输模式之一:ASCII 模式或 RTU 模式。
当设备使用 RTU (Remote Terminal Unit) 模式在 Modbus 串行链路通信,报文中每个 8 位字节含有两个 4 位十六进制字符。这种模式的主要优点是较高的数据密度,在相同的波特率下比 ASCII 模式有更高的吞吐率。每个报文必须以连续的字符流传送。
MODBUS的地址规则
Modbus 寻址空间有 256 个不同的地址。
地址 0 为广播地址。所有的子节点必须识别广播地址。 Modbus 主节点没有地址,只有子节点必须有一个地址。
Modbus 帧描述
RTU 帧
RTU 模式每个字节 ( 11 位 ) 的格式
RTU 模式每帧结构
由主设备将Modbus 报文构造为带有已知起始和结束标记的帧。在 RTU 模式,报文帧由时长至少为 3.5 个字符时间的空闲间隔区分。
如果两个字符之间的空闲间隔大于 1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
在通信速率等于或低于 19200 bps 时,两个时间间隔必须严格遵守,对于波特率大于 19200 bps 的情形,应该使用 2 个定时的固定值:建议的字符间超时时间(t1.5)为 750µs,帧间的超时时间 (t1.5) 为 1.750ms。
CRC 校验
循环冗余校验。
CRC 的值由发送设备计算。接收设备在接收报文时重新计算 CRC 的值,并将计 算结果于实际接收到的 CRC 值相比较。如果两个值不相等,则为错误。
MODBUS 事务处理流程
MODBUS 响应:
正确的 MODBUS 响应:响应功能码 = 请求功能码;
MODBUS 异常响应
提供处理过程中与被发现的差错相关的信息;
响应功能码 = 请求功能码 + 0x80;
提供一个异常码来指示差错原因;
MODBUS 异常码
MODBUS功能码
三类 MODBUS 功能码:公共功能码、用户定义功能码、保留功能码
公共功能码:
是较好地被定义的功能码
保证是唯一的
MODBUS 组织可改变的
公开证明的
具有可用的一致性测试
MB IETF RFC 中证明的
包含已被定义的公共指配功能码和未来使用的未指配保留供功能码
用户定义功能码:
用户定义功能码的定义范围,即 65 至 72 和 100 至 110(十进制)
用户没有 MODBUS 组织的任何批准就可以选择和实现一个功能码
不能保证被选功能码的使用是唯一的
保留功能码:一些公司对传统产品通常使用的功能码,并且对公共使用是无效的功能码。
评论区