Modbus设备标识:不用猜寄存器获取厂商与版本

网关在选择寄存器映射之前,需要有依据地识别连接的是哪台设备。假定所有厂商都把型号放在同一个保持寄存器偏移上,很容易选错映射。目标设备支持时,可以通过Modbus设备标识接口读取标准化对象,而不必猜测私有寄存器。

本文依据应用协议V1.1b3第6.21节,讨论发现流程与设备清单,不讨论测量轮询,也不把标识读取当作安全认证。解析器和夹具属于建议设计,没有宣称任何未指定的现场设备都支持该功能。

发现流程从基本设备标识开始,验证对象边界,More Follows为FF时按Next Object ID继续,最后形成带范围说明的设备清单。
原创发现状态模型:按设备返回的游标分页,并设置进展检查及明确的不完整终态。

从正确功能与访问类型开始

设备标识使用十进制功能码四十三,即0x2B,以及十进制MEI类型十四,即0x0E。从对象零开始读取基本标识时,PDU为2B 0E 01 00。TCP或串口封装另外添加,这四字节不包含单元标识、串口地址或CRC。

官方规范第6.21节定义访问码01、02、03分别用于基本、常规、扩展标识的流式访问,04用于单对象访问。先读基本标识,不要一开始就扫描私有寄存器或全部对象。还应记录准确路由,防止把网关自身标识误认成下游仪表标识。

按设备声明解释对象类别

基本对象包括0x00厂商名、0x01产品代码和0x02主次版本。它们是在实现该标识接口时的必需对象,不意味着所有Modbus设备都必须实现这个接口。常规类别添加可选描述字段,私有扩展对象位于0x80至0xFF,含义依产品而定。

一致性级别还表示是否支持单对象访问。0x01至0x03表示仅流式访问的相应级别,0x81至0x83则同时支持单对象访问。最高位不能当作错误位。请求扩展级别也不保证返回扩展数据,规范要求能力较低的服务器按自身实际级别响应。

先验证长度,再解释字符串

检查功能码、MEI类型、返回访问码、一致性级别、续传字段和对象数量。每个对象都有自己的ID和字节长度,读取值之前必须确认剩余响应长度足够。截断对象头、不可能的数量,以及无法由响应结构解释的尾部字节,都应明确拒绝。

标准描述对象使用ASCII字符串。原始字节与显示文本应分开保存;遇到非ASCII值,标记为一致性问题或厂商编码问题,不能静默宣布它属于标准UTF-8。私有对象另查表示方式。所有显示值都要转义,厂商名和URL是设备提供的不可信数据,不是可执行标记,也不是自动访问外部网站的指令。

沿游标分页,防止无限循环

流式访问中,More Follows为0xFF表示还有后续对象,下一请求采用返回的Next Object ID;为0x00则结束。根据第6.21节请求及响应规则,一个标识对象不能跨这些逻辑响应拆分。TCP把一次响应分段交付属于另一层问题。

记录已经请求的游标、返回对象ID、累计字节及发现期限。游标重复,或页面反复出现却没有新信息时,不能无限请求;应保存已有结果并标注异常。不应自行把对象ID加一、假定对象连续存在,而要使用服务器游标并验证实际进展。

区分不支持、不完整与尚未确认

合法异常、本地超时及畸形标识响应是三种不同结果。非法功能异常可能表示当前设备语境下不可执行;超时不能证明没有功能支持。单对象访问请求未知对象时会得到非法数据地址,而流式访问起始对象未知时,规范描述的是从对象零重新开始。

能力状态可以记录为已支持、被拒绝、未确认或格式错误,并保留实际异常码。接口不可用时,采用经操作者确认的清单或厂商文档指定的替代方法,不要根据猜出的型号字符串静默选择寄存器映射。发现失败也不应在没有明确策略时清除原本已核实的人工配置。

缓存标识时保存路由与时间

缓存应包含网关端点、适用的串口段、单元、对象原始字节、观察时间、一致性级别及完整性。选用的寄存器映射版本要与设备上报的固件字符串分开记录。即使IP不变,固件升级、路由重分配或更换实物设备都可能使旧假设失效。

建议在调试投运、已知升级和路由变更后刷新标识,而不是每次测量都重新读取。发现变化时先比较,并在应用新控制映射前要求审核。厂商名没有变化是很弱的证据,多台设备可能共享相同文本;普通Modbus标识是自我声明,并没有密码学身份保证。

用真实边界的夹具验收

建立使用虚构基本对象值的夹具,再通过合法续传游标把结果分成两次逻辑响应。覆盖单页、非法功能异常、期限届满、重复游标、对象截断及描述字段非ASCII字节。还应测试常规请求只返回基本一致性级别,以及仅在声明支持时进行单对象查询。

  • 初始PDU及目标路由记录正确。
  • 分配内存或显示数据前已验证对象长度。
  • 分页正常结束,或以有界的不完整结果停止。
  • 部分结果、明确拒绝和仍未确认相互区分。
  • 标识变化不能静默授权不同映射或控制动作。

最终得到的是有来源和可信范围说明的设备清单,可帮助选择文档、发现设备替换,但它本身不能建立可信身份,也不能自动批准对设备进行控制。

类似文章