一、概念:
ModBus 网络是一个工业通信系统,由带智能终端的可编程序控制器和计算机通过公用线路或局部专用线路连接而成。其系统结构既包括硬件、亦包括软件。它可应用于各种数据采集和过程监控。
1.1、通信方式
属于异步串行通信方式。
二、Modbus协议:
Modbus 串行链路协议是一个主/从协议;在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线。Modbus 通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。子节点之间从不会互相通信。主节点在同一时刻只会发起一个Modbus 事务处理
主节点以两种模式对子节点发出 Modbus 请求
- 单播模式
主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个’应答’)。在这种模式,一个 Modbus 事务处理包含 2 个报文:一个来自主节点的请求,一个来自子节点的应答。
每个子节点必须有唯一的地址 (1 到 247),这样才能区别于其它节点被独立的寻址。
2) 广播模式
主节点向所有的子节点发送请求。对于主节点广播的请求没有应答返回。广播请求一般用于写命令。所有设备必须接受广播模式的写功能。地址 0 是专门用于表示广播数据的
地址规则:
Modbus 寻址空间有 256 个不同地址,
0 1 ~ 247 248 ~ 55
广播地址 子节点单独地址 保留
①.地址 0 为广播地址。所有的子节点必须识别广播地址。
②.Modbus 主节点没有地址,只有子节点必须有一个地址。 该地址必须在 Modbus 串行总线上唯一
三、Modbus的RTU帧
Modbus 帧描述
RTU 传输模式
有两种串行传输模式被定义: RTU 模式 和 ASCII 模式。
Modbus RTU 帧总长度最大为 256 字节。
RTU 模式每个字节 ( 11 位 ) 的格式为 :
编码系统: 8–位二进制,报文中每个 8 位字节含有两个 4 位十六进制字符(0–9,
A–F)
每字节的 bit 流:
1 起始位
8 数据位, 首先发送最低有效位
1 位作为奇偶校验
1 停止位
偶校验是要求的, 其它模式 ( 奇校验, 无校验 ) 也可以使用。 为了保证与其
它产品的最大兼容性,同时支持无校验模式是建议的。默认校验模式模式 必须为偶校验。
注 : 使用无校验要求 2 个停止位
RTU模式时间间隔实现
在 RTU 模式,报文帧由时长至少为 3.5 个字符时间的空闲间隔区分;两个字符之间的空闲间隔大于 1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
在通信速率等于或低于 19200 bps 时,这两个定时必须严格遵守;对于波特率大于 19200 bps 的情形,应该使用 2 个定时的固定值:建议的字符间超时时间(t1.5)为 750µs,帧间的超时时间 (t1.5) 为 1.750ms。
RTU模式帧工作流程:
①.从 “初始” 态到 “空闲” 态转换需要 t3.5 定时超时: 这保证帧间延迟
②.“空闲” 态是没有发送和接收报文要处理的正常状态。
③.在 RTU 模式, 当没有活动的传输的时间间隔达 3.5 个字符长时,通信链路被认为在 “空闲” 态。
④.当链路空闲时, 在链路上检测到的任何传输的字符被识别为帧起始。 链路变为 “活动” 状态。 然后,当链路上没有字符传输的时间间个达到 t3.5 后,被识别为帧结束。
⑤.检测到帧结束后,完成 CRC 计算和检验。然后,分析地址域以确定帧是否发往此设备,如果不是,则丢弃此帧。 为了减少接收处理时间,地址域可以在一接到就分析,而不需要等到整个帧结束。这样,CRC 计算只需要在帧寻址到该节点 (包括广播帧) 时进行。
四、Modbus的ASCII帧
报文帧的地址域含有两个字符。
在 ASCII 模式, 报文用特殊的字符区分帧起始和帧结束。一个报文必须以一个‘冒号’ ( : ) (ASCII 十六进制 3A )起始,以 ‘回车-换行’ (CR LF) 对 (ASCII 十六进制 0D 和 0A) 结束。
注:每个字符子节需要用两个字符编码。因此,为了确保 ASCII 模式 和 RTU 模式在 Modbus 应用级兼容,ASCII 数据域最大数据长度为 (2x252) 是 RTU 数据域 (252) 的两倍。