报告从站ID与Modbus异常响应

描述

10.5.13

(0x11)报告从站ID(仅用于串行链路)

1. 功能说明

17功能码用于读取从站设备的ID、类型描述、当前状态以及其他信息,不支持广播模式。响应消息的构成依赖于设备而不尽相同。

2. 查询报文

查询报文中不包含请求数据字段。举例说明,从站设备地址为5,获取相关信息,如下表所示。

功能码17查询报文示例:

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
帧头   “:”  
从设备地址 0x05 “0”,“5” 0x05
功能码 0x11 “1”,“1” 0x11
差错校验   LRC(2字符) CRC(2字节)
帧尾   CR/LF  
  合计字节数 9 4

3. 响应报文

对于从设备,在正常情况下,响应报文包括从站ID、运行状态以及其他附加信息,如下表所示。运行状态字段占用1字节,且0x00=OFF,0xFF=ON,而响应报文的组成则由开发者决定。

功能码17响应报文示例:

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
帧头   “:”  
从设备地址 0x05 “0”,“5” 0x05
功能码 0x11 “1”,“1” 0x11
字节数 设备相关 设备相关 设备相关
从设备ID 设备相关 设备相关 设备相关
运行状态 0xFF “F”,“F” 0xFF
附加情报1 设备相关 设备相关 设备相关
…… 设备相关 设备相关 设备相关
差错校验   LRC(2字符) CRC(2字节)
帧尾   CR/LF  
  合计字节数 17 8

10.5.14

Modbus异常响应

以上介绍了一些常见的公共功能码的报文(消息顿)构成,广播模式以外的查询报文都希望能够获取一个正常的响应报文。在通常情况下,从站设备将返回一个正常响应报文,但是在某些特殊情况下将返回异常响应报文。

对于查询报文,存在以下4种处理反馈:

①正常接收,正常处理,返回正常响应报文。

②因为通信错误等原因造成从站设备没有接收到查询报文,主站设备将按超时处理:从站设备接收到的查询报文存在通信错误(如LRC、CRC错误等),此时从站设备将丢弃报文不响应,主站设备将按超时处理。

③从站设备接收到正确的报文,但是超过处理范围(如不存在的功能码或者寄存器等),此时从站设备将返回包含异常码(Exception Code)的响应报文。

④异常响应报文由从站地址、功能码以及异常码构成。其中,功能码与正常响应报文不同,在异常响应报文中,功能码最高位(即MSB)被设置为1。因为Modbus协议中的功能码占用1字节故用表达式描述为:

异常功能码=正常功能码+0x80

举例说明,如下表所示,查询报文的起始地址为0x012C(十进制300),即需要读取寄存器地址为30301开始的值。若从站设备中不存在输入寄存器30301,则从站设备将返回一个异常响应报文,参见下表的功能码和异常码。

异常响应示例(功能码04查询报文):

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
帧头   “:”  
从设备地址 0x07 “0”,“7” 0x07
功能码 0x04 “0”,“4” 0x04
起始地址
(高位)
0x01 “0”,“1” 0x01
起始地址
(低位)
0x2c “2”,“c” 0x2c
寄存器数
(高位)
0x00 “0”,“0” 0x00
寄存器数
(低位)
0x03 “0”,“3” 0x03
差错校验   LRC(2字符) CRC(2字节)
帧尾   CR/LF  
  合计字节数 17 8

异常响应示例(功能码04响应报文):

字段
(Hex)
ASCII
模式字符型
RTU模式8位
(Hex)
帧头   “:”  
从设备地址 0x07 “0”,“7” 0x07
功能码 0x84 “8”,“4” 0x84
异常码 0x02 “0”,“2” 0x02
差错校验   LRC(2字符) CRC(2字节)
帧尾   CR/LF  
  合计字节数 11 5

常见的异常码如下表所示:

常见异常码说明:

异常码 名称 说明
01 非法功能码 从站设备不支持此功能码
02 非法数据地址 指定的数据地址在从站设备中不存在
03 非法数据值 指定的数据超过范围或者不允许使用
04 从站设备故障 从站设备处理响应的过程中出现未知错误等

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分