产品描述
西门子株洲PLC模块总代理
诊断子功能码
各常用诊断子功能码定义如下:
Return Query Data(00)
诊断内容 | 原样返回查询报文 |
---|---|
子功能码 | 0x00,0x00 |
查询报文数据字段 | 任意16位数据 |
响应报文数据字段 | 同查询报文 |
Restart Communications Option(01)
诊断内容 | 重启通信选项 用于初始化并重新启动从站设备,清除所有通信事件计数器。 如果端口处于Listen Only Mode下,不返回响应;否则在重启之前返回响应 |
---|---|
子功能码 | 0x00,0x01 |
查询报文数据字段 | 0x00,0x00 保持事件记录 |
0xFF,0x00 清除事件 | |
响应报文数据字段 | 同查询报文 |
Return Diagnostics Register(02)
诊断内容 | 返回诊断寄存器 |
---|---|
子功能码 | 0x00,0x02 |
查询报文数据字段 | 0x00,0x00 |
响应报文数据字段 | 诊断寄存器的内容 |
Force Listen Only Mode(04)
诊断内容 | 强制只听模式 强制被寻址的从站设备进入只听模式,使得此设备与网络中的其他设备断开,不返回响应 |
---|---|
子功能码 | 0x00,0x0A |
查询报文数据字段 | 0x00,0x00 |
响应 |
Clear Counters and Diagnostic Register(10,0x0A)
诊断内容 | 清除计数器和诊断寄存器 |
---|---|
子功能码 | 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 Count(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 |
响应报文数据字段 | 返回**限的报文数量 |
11(0x0B)获取通信事件计数器
功能说明该功能码主要用于获取从设备通信计数器中的状态字和事件计数的值,本功能不支持广播模式。通过在通信报文之前和之后读取通信事件计数值,可以确定从设备是否正常处理报文。
对于正常完成报文处理和传输的场合,事件计数器增加1;而对于异常响应、轮询命令或读取事件计数器(即0x0B功能码)的场合,则计数器不变。通过【0x08】诊断功能中的子功能码【Restart Communiaction Option (0x01)】和【Clear Counters and Diagnostic Register(0x00A)】,可以复位事件寄存器。
响应报文对于从设备,在正常情况下,响应报文返回2个字节的状态字和2个字节的事件计数。其中,如果从站设备处于忙状态,那么状态字将为0xFFFF,否则状态字将为0x0000.
12(0x0C)获取通信事件记录
功能说明该功能码主要用于从从设备获取转状态字、事件计数、报文计数以及事件字节字段。其中状态字和事件计数与功能码11(0x0B)获取的值一致。
响应报文对于从站设备,在正常情况下响应报文包括一个2字节状态字字段、一个2字节事件计数字段、一个2字节消息计数字段以及0~64个字节的事件字段。因为事件字段是变长的,所以增加了一个1字节的数据长度字段,以方便读取响应数据。
15(0x0F)写多个线圈
功能说明该功能码,用于将连续的多个线圈或离散输出设置为ON/OFF状态,支持广播模式,在广播模式下,所有从站设备的同一地址被统一修改。本功能码中,起始地址字段由2个字节构成,取值范围为0x00000xFFFF;而寄存器数量字段由2个字节构成,取值范围为0x00010x07B0.
查询报文查询报文中,包含了请求数据字段,用于定义ON/OFF状态。数据字段中为逻辑1的位对应ON;逻辑0的位对应OFF。其中,ON/OFF与数据字段的对应关系可参考“01(0x01)读取线圈/离散量输出状态”中的内容
响应报文对于从设备,在正常情况下响应报文包括功能码、起始地址以及写入的线圈数量。
16(0x10)写多个保持寄存器
功能说明该功能码用于设置或写入从设备保持寄存器的多个连续的地址块(1123个寄存器),支持广播模式,在广播模式下,所有从站设备的同一地址的值将被统一修改。本功能码中,起始地址字段由2个字节构成,取值范围为0x00000xFFFF;而寄存器数量字段由2个字节构成,取值范围为0x0001~0x007B。
查询报文查询报文中,包含了请求数据字段。数据字段保存需写入的数值,各数据按每个寄存器2个字节存放。
响应报文对于从设备,在正常情况下响应报文包括功能码、起始地址以及写入的寄存器数量。
在实际开发过程中,功能码“16(0x10)写多个寄存器”常常用于方便用户写入多字节类型的数据。
17(0x11)报告从站ID(仅用于串行链路)
功能说明该功能码用于读取从站设备的ID、类型描述、当前状态以及其他信息,不支持广播模式。响应消息的构成依赖于设备而不同。
响应报文对于从设备,在正常情况下响应报文包括从站ID、运行状态以及其他附加信息。响应报文的组成由开发者决定。
Modbus异常响应
以上介绍了一些常见的公共功能码的报文(消息帧)构成,对于广播模式以外的查询报文,都希望能够获取一个正常的响应报文。在通常的情况下,从站设备将返回一个正常响应报文,但是,在某些特殊情况下,将返回异常响应报文。对于查询报文,存在以下4中处理反馈:
正常接收,正常处理,返回正常响应报文;
因为通信错误等原因,造成从站设备没有接收到查询报文,主站设备将按**时处理;
从站设备接收到的查询报文存在通信错误(例如LRC、CRC错误等),此时从站设备将丢弃报文不响应,主站设备将按**时处理;
从站设备接收到正确的报文,但是**过处理范围(例如,不存在的功能码或者寄存器等),此时从站设备将返回包括异常码(Exception Code)的响应报文。
异常响应报文由从站地址、功能码以及异常码构成。其中,功能码与正常响应报文不同,在异常响应报文中,功能码较高位(即MSB)被设置为1.因为Modbus协议中功能码占用一个字节,故用表达式描述为:异常功能码=正常功能码+0x80.
常见的异常码说明
异常码 名称 说明 01 非法功能码 从站设备不支持此功能码 02 非法数据地址 *的数据地址在从站设备中不存在 03 非法数据值 *的数据**过范围或者不允许使用 04 从站设备故障 从站设备处理响应的过程中,出现未知错误等
产品推荐