10.5.8
1. 功能说明
08功能码仅用于串行链路,主要用于检测主设备和从设备之间的通信故障,或检测从设备的各种内部故障,该功能码不支持广播。为了区别各诊断类型,查询报文中提供了2字节的子功能码字段。
通常在正常的响应报文中,从设备将原样回复功能码和子功能码。
2. 查询报文
查询报文中需要指定从设备地址、功能码以及子功能码。
例如,下表中标识了子功能码“原样返回查询数据”的诊断功能,其中子功能码为0(0x0000)。在子功能码为0x0000的情况下,数据字段可以为任意值。各子功能码的详细意义可参考下表。
功能码08查询报文示例:
字段 | 例 (Hex) | ASCII模式字符型 | RTU模式8位 (Hex) |
帧头 | “:” | ||
从设备地址 | 0x05 | “0”,“5” | 0x05 |
功能码 | 0x08 | “0”,“8” | 0x08 |
子功能码 (高位) | 0x00 | “0”,“0” | 0x00 |
子功能码 (低位) | 0x00 | “0”,“0” | 0x00 |
数据 (高位) | 0x04 | “0”,“4” | 0x04 |
数据 (低位) | 0xB0 | “B”,“0” | 0xB0 |
差错校验 | LRC(2字符) | CRC(2字节) | |
帧尾 | CR/LF | ||
合计字节数 | 17 | 8 |
本功能码中,子功能码由2字节构成,取值则根据意义而不同;数据字段由2字节构成,其取值由子功能码确定。
3. 响应报文
响应报文的各项构成和意义如下表所示。对于从设备,在保持寄存器正常变更的情况下会返回与查询报文相同的响应报文。如果修改失败,则返回一个异常响应。
功能码08响应报文示例:
字段 | 例 (Hex) | ASCII模式字符型 | RTU模式8位 (Hex) |
帧头 | “:” | ||
从设备地址 | 0x05 | “0”,“5” | 0x05 |
功能码 | 0x08 | “0”,“8” | 0x08 |
子功能码 (高位) | 0x00 | “0”,“0” | 0x00 |
子功能码 (低位) | 0x00 | “0”,“0” | 0x00 |
数据 (高位) | 0x04 | “0”,“4” | 0x04 |
数据 (低位) | 0xB0 | “B”,“0” | 0xB0 |
差错校验 | LRC(2字符) | CRC(2字节) | |
帧尾 | CR/LF | ||
合计字节数 | 17 | 8 |
4. 诊断子功能码
各常用的诊断子功能码的定义如下。
Return Query Data(00)
诊断内容 | 原样返回查询报文 |
子功能码 | 0x00 0x00 |
查询报文数据字段 | 任意16为数据 |
响应报文数据字段 | 同查询报文 |
Restart Communication Option(01)
诊断内容 | 重启通信选项;用于初始化并重新启动从站设备,清楚所有通信事件计数器;如果端口处于 Listen Only Mode,则不返回响应;否则在重启之前返回响应 |
子功能码 | 0x00,0x01 |
查询报文数据字段 | 0x00,0x00保持事件记录;0xFF,0x00清除事件记录 |
响应报文数据 | 同查询报文 |
诊断内容 | 重启通信选项;用于初始化并重新启动从站设备,清楚所有通信事件计数器;如果端口处于 Listen Only Mode,则不返回响应;否则在重启之前返回响应 |
字段 |
Return Diagnostics Register(02)
诊断内容 | 返回诊断寄存器 |
子功能码 | 0x00,0x04 |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 诊断寄存器的内容 |
Force Listen Only Mode
诊断内容 | 强制只听模式;强制被寻址的从站设备进入只听模式,使得此设备与网络中的其他设备断开,不返回响应 |
子功能码 | 0x00,0x04 |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 不返回响应 |
Clear Counters and Diagnostic Register
诊断内容 | 清除计数器和诊断寄存器 |
子功能码 | 0x00,0x0A |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 同查询报文 |
Return Bus Message Count(11,0x0B)
诊断内容 | 返回总线报文计数 |
子功能码 | 0x00,0x0B |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 返回报文的技数值 |
Return Bus Communication Error Count(12,0x0C)
诊断内容 | 返回总线通信CRC差错计数 |
子功能码 | 0x00,0x0C |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 返回报文的CRC出错总数 |
Return Bus Exception Error Count(13,0x0D)
诊断内容 | 返回总线异常差错计数 |
子功能码 | 0x00,0x0D |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 返回异常响应的总数 |
Return Slave Message Count(14,0x0E)
诊断内容 | 返回从站设备报文总数 |
子功能码 | 0x00,0x0E |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 返回从站设备接收报文总数 |
Return Slave No Response Counrt(15,0x0F)
诊断内容 | 返回从站设备无响应计数 |
子功能码 | 0x00,0x0F |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 返回加电后没有返回响应的报文的保文数量 |
Return Slave Busy Count(17,0x11)
诊断内容 | 返回从站设备忙计数 |
子功能码 | 0x00,0x11 |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 返回加电后异常响应忙的报文数量 |
Return Bus Character Overrun Count(18,0x12)
诊断内容 | 返回总线字符超限计数 |
子功能码 | 0x00,0x12 |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 返回超限的报文数量 |
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
未完待续
推荐阅读
Modbus差错校验 - RZ MPU工业控制教程连载(28)
字节序与Modbus通信 - RZ MPU工业控制教程连载(29)
Moubus功能码详解 - RZ MPU工业控制教程连载(30)