一、Modbus概述
1.MODBUS通信栈(软件实现方法)
2.MODBUS应用协议
2.1 MODBUS应用协议介绍
- Modbus是一种简单客户机/服务器应用协议;
- 客户机能够向服务器发送请求;
- 服务器分析请求,处理请求,向客户机发送应答。
2.2 MODBUS事务处理(无差错)
- 当服务器对客户机响应时,它使用功能码域来指示正常(无差错)响应或者出现某种差错(称为异常响应);
- 对于一个正常响应来说,服务器仅复制原始功能码。
2.3 MODBUS事务处理(异常处理)
- 对于异常响应,服务器将原始功能码的最高有效位(mostsignificant bit,MSB)设置逻辑值1之后返回(相当于十进制处理中将原功能码加上128);(功能码为1个字节,8个二进制位,最高位1等于十进制128、十六进制80);
- 异常码指示差错类型。
3.通用MODBUS帧结构
3.1 应用数据单元
Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU),在特定总线或网络上附加一些字段,构成该总线或网络上的ADU。
- PDU中的功能码确定执行哪一种操作;
- 功能码后面是请求和响应参数的数据域;
- ADU中附加地址用于告知站地址,校验域用于报文校验的CRC计算结果。
MODBUS数据模型
MODBUS ADU与PDU长度
MODBUS PDU结构
二、MODBUS协议说明
MODBUS协议是工业自动化中广泛使用的主/从式通信协议,它的设计初衷是为了在各种设备之间进行数据传输和交换,在开放系统互连(OSI)模型中处于第二层(数据链路层)。
1.MODBUS的基本概念
1.1 通信模型
MODBUS是一种主从通信协议,这意味着在通信过程中存在一个主设备和一个或多个从设备。主设备负责发起通信,而从设备则响应主设备的请求,主节点在同一时刻只会发起一个Modbus事务处理。
在物理层,Modbus串行链路系统可以使用不同的物理接口(RS-485、RS232)
- 最常用的是TIA/EIA-485(RS-485)两线制接口
- 作为附加的选项,也可以实现RS-485四线制接口(RS-422)
- 当只需要短距离的点到点通信时,TIA/EIA-232-E(RS-232)串行接口也可以使用
1.2 数据结构
MODBUS协议定义了数据的格式和传输方式:
- 功能码:用于指示从设备执行的操作,如读写寄存器、线圈等。
- 数据域:包含了具体的操作数据信息,根据功能码的不同,数据域的内容也有所不同。
- 错误检测:通过循环冗余校验(CRC)或纵向冗余校验(LRC)确保数据传输的可靠性。
1.3 通信方式
MODBUS支持三种主要的传输方式:
- MODBUS RTU(Remote Terminal Unit):在RS-485或RS-232物理层上传输,数据以二进制格式发送。
- MODBUS ASCII:在RS-485或RS-232物理层上传输,数据以ASCII码格式发送。
- MODBUS TCP/IP:基于以太网传输,数据封装在TCP/IP包中。
两种串行传输模式RTU模式和ASCII模式。
- 它定义了报文域的位内容在线路上串行的传送,以及确定了信息如何打包为报文和如何解解码。
- Modbus串行链路上所有设备的传输模式以及串行口通信参数(波特率、数据位、停止位、校验位)必须相同
- 一般默认设置为RTU模式
2.MODBUS的工作原理
2.1 请求与响应机制
MODBUS通信基于请求-响应机制。主设备发送请求帧,从设备收到请求后进行处理,并发送响应帧回主设备。
2.2 功能码与操作
MODBUS协议支持多种功能码,不同的功能码对应不同的操作:
0x01 | 读线圈状态 |
0x02 | 读离散输入状态 |
0x03 | 读保持寄存器 |
0x04 | 读输入寄存器 |
0x05 | 写单个线圈 |
0x06 | 写单个保持寄存器 |
0x0F | 写多个线圈 |
0x10 | 写多个保持寄存器 |
2.3 数据帧格式
- 网络上的每个从站必须有唯一的地址(从1到247)
- 从站地址用于寻址从站设备,由主站发起
- 地址0用于广播模式,不需要响应
以MODBUS RTU为例,数据帧格式如下:
- 起始位:一个或多个空闲时间段,用于同步
- 从设备地址:唯一标识从设备的地址
- 功能码:表示要执行的操作
- 数据域:包含具体的操作数据
- 错误校验:CRC校验码,用于检测数据传输是否错误
- 结束位:空闲时间段,表示数据帧结束
2.4 地址规则
3.MODBUS RTU
3.1 MODBUS RTU概述
- 当控制器设为在Modbus网络上以RTU(Remote Terminal Unit)模式通信,在报文中的每个8Bit字节包含两个4Bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ASCII方式传送更多的数据(更高的吞吐率)
- 代码系统:8位二进制,十六进制数0..9,A..F
- 报文中的每个8位域都是一个两个十六进制字符组成
每个字节的位
- 1个起始位
- 8个数据位,最小的有效位先发送
- 1奇偶校验位,无校验则无
- 1个停止位(有校验时),2个Bit(无校验时)
错误检测域
- CRC(循环冗长检测)
位序列
帧格式
帧的标识与鉴别
循环冗余校验
传输错误检测
报文实例
1111
MODBUS功能码
实例
异常码
串行链路的物理层与信号规范
RS-232
连接器
数据传输
网络拓扑
信号
波形实例
485
线缆
越小,抗干扰越强
传输方式
网络拓扑
信号
波形示例
传输速率与格式