1 MODBUS
- 应用层报文传输协议
ADU | 应用数据单元 |
---|---|
PDU | 协议数据单元 |
MB | MODBUS协议 |
MBAP | MODBUS协议 |
- ADU:地址域 + PDU + 差错校验
- PDU:功能码+数据
![]() |
![]() |
- 串行链路:
- 最大RS485 ADU = 256 字节
- PDU = 256 - 服务器地址(1字节)- CRC(2字节)= 253 字节
- TCP MODBUS
- ADU = 249 字节 + MBAP(7字节)= 256 字节
请求PDU,mb_req_pdu
响应PDU,mb_rsp_pdu
异常响应PDU,mb_excep_rsp_pdu
- 大端传输,big-endian
(16 bit)0x1234:首先发送 0x12,然后0x34
数据模型
离散量输入 | 单个bit | 只读 |
---|---|---|
线圈 | 单个bit | 读写 |
输入寄存器 | 16 bit | 只读 |
保持寄存器 | 16 bit | 读写 |
2 功能码
- 正常响应
响应功能码 = 请求功能码 - 异常响应
响应功能码 = 请求功能码 + 0x80
功能码01:读线圈
功能码02:读离散量输入
- 线圈读取数量:0x0001 ~ 0x07D0 (2000)
- 指示状态:1为ON,0为OFF
- 字节数:N = 输出数量 / 8 ,如果余数不等于0,则等于 N+1
功能码03:读保持寄存器
功能码04:读输入寄存器
- 寄存器数量:0x0001 ~ 0x007D (125)
- 寄存器数据:每个寄存器 2 个字节
- 字节数: 2 * N(寄存器数量)
功能码05:写单个线圈
- 输入输出状态:0xFF 00为ON,0x00 00为OFF
功能码06:写单个寄存器
- 寄存器值:0x0000 ~ 0xFFFF
功能码15 (0x0F) :写多个线圈
- 线圈数量:0x0001 ~ 0x07B0
- 指示状态:1为ON,0为OFF
- 字节数:N = 输出数量 / 8 ,如果余数不等于0,则等于 N+1
功能码16 (0x10) :写多个寄存器
- 寄存器数量 N:0x0001 ~ 0x007B (123)
- 寄存器数据:每个寄存器 2 个字节
- 字节数: 2 * N(寄存器数量)
功能码20 (0x14) :读文件记录
功能码21 (0x15) :写文件记录
功能码22 (0x16) :屏蔽写寄存器
- 利用AND屏蔽、OR屏蔽以及寄存器内容的组合来修改特定保持寄存器的内容
- 算法:结果 = (当前内容 AND And_Mask)OR(Or_Mask AND And_Mask)
- 如果Or_Mask = 0,则:结果 = (当前内容) AND (And_Mask)
- 如果And_Mask = 0,则:结果 = (Or_Mask)
功能码23 (0x17) :读/写多个寄存器
- 在一个单独modbus事务中,实现了一个读操作和一个写操作的组合
- 读取数量 N:0x0001 ~ 0x007D (125)
- 写入数量 N:0x0001 ~ 0x0079 (121)
功能码43 (0x2B) :读设备识别码
- 读取与远程设备的物理描述和功能描述相关的识别码和附加报文
- 读设备识别码的接口模拟为一个地址空间(一组可寻址数据元素,即:对象。由对象ID确定该数据元素)
- 接口由3种对象组成:
- 基本设备识别码【必备的】(厂商名称、产品代码、修订本号)
- 正常设备识别码
- 扩展设备识别码
- 指配号为14的MODBUS封装接口识别读识别码请求,访问类型
- 01:请求获得基本设备识别码(流访问)
- 02:请求获得正常设备识别码(流访问)
- 03:请求获得扩展设备识别码(流访问)
- 04:请求获得特定识别码对象(专用访问)
- 识别码数据不适合单独响应的情况下,可需要几个请求/响应事务处理。第一个事务处理,客户机必须设置对象id为0。
- 【响应】(在流访问下)“随后更多“ = FF(请求下一个对象id)/ 00(无更多对象)
- 设备的识别码一致性等级和支持访问的类型
- 01:基本识别码(仅流访问)
- 02:正常识别码(仅流访问)
- 03:扩展识别码(仅流访问)
- 81:基本识别码(流访问和单个访问)
- 82:正常识别码(流访问和单个访问)
- 83:扩展识别码(流访问和单个访问)
MODBUS异常响应
异常码 | 名称 | 含义 |
---|---|---|
01 | 非法功能 | 功能码不允许 |
02 | 非法数据地址 | 数据地址不允许 |
03 | 非法数据值 | 数据值不允许(例如,隐含长度) |
04 | 从站设备故障 | |
05 | 确认 | 服务器(从站)已接收请求,需要长时间处理。 防止客户机(主站)发生超时错误,可继续轮询确认。 |
06 | 从属设备忙 | 服务器(从站)处理长时间命令,稍后重新传输 |
08 | 存储奇偶性查错 | 不能通过一致性校验,读取文件发现奇偶性校验错误 |
0A | 不可用网关 | 不能为处理请求分配内部通信路径,网关错误配置或过载 |
0B | 网关目标设备响应失败 | 设备未在网络中 |