Modbus 设备识别一页没读完,怎样解析对象长度和下一对象号
0x2B/0x0E 设备识别响应可能分页。先逐对象验证 ID 与长度,再根据 More Follows 和 Next Object ID 决定是否还有下一页;一页中的对象数量不代表整台设备只有这些身份字段。
适用版本与输入范围
依据 Modbus Application Protocol V1.1b3(2012-04-26),按下方具体功能章节解释PDU。输入已经剥离RTU地址、CRC或TCP封装,不把封装检查与数据字段解析混为一体。 本文所有输入均为原创合成数据,未接真实设备。
设备识别响应不采用寄存器布局
响应从功能码 2B、MEI 类型 0E、读取设备识别码和一致性级别开始,之后是 More Follows、Next Object ID、当前页对象数量。附件第一页面向基本识别子集,包含对象零“ACM”,More Follows=FF,下一对象一;第二页给对象一“X1”并结束。字符串是按对象自己的长度取出,不是以零终止,也不按每寄存器两字符猜测,因此对象长度必须在每一步重新读取。
对象条目应先检查两层长度
程序先确认对象头的 ID 和长度两字节存在,再检查整个对象内容不超出页面。显式负例声称对象内容长九字节,却只剩一个,程序直接拒绝;不跨到下一页拼接一个损坏对象。页面对象数量耗尽后还要检查是否有剩余未解释数据,避免容错解析把错误字节悄悄丢掉。报告把对象ID作为字符串键保留,ASCII解码仅是本题基本字符串子集的明确限制。
分页游标必须向前推进
More Follows=FF 表示还没有读完,Next Object ID 应推进到尚未处理的对象。附件给出 Next=0 而当前已经处理对象零的循环负例,程序报告下一对象号未前进,避免客户端无限请求同一页。示例还检查重复对象、结束后仍有额外页面和最后一页仍宣称未结束。正式客户端应将下一次请求记录进同一会话日志;这里仅消费预先提供的页面数组,没有真正发送识别查询。
身份字段不能替代功能支持证据
识别到厂家、产品代码或版本字符串,只能说明这些对象提供了相应字节,不等于设备支持所有公开功能码。工程选型应另外查看厂商手册、固件范围和实际测试记录。这个夹具用合成厂家名避免冒充真实产品,并且不把身份字符串与寄存器手册差异比较混为一谈。若现场设备只返回更少的识别项或使用扩展对象,应按声明的识别级别处理,不能要求本题的两页结构适用于所有设备。
下载与复跑
将输入 fixture.json与独立程序 verify.py放在同一目录,用 Python 3.12 执行 python verify.py,无需安装第三方包。程序从自身目录读取输入并写入 report.json,不要求当前终端恰好位于下载目录。也可查看本次实跑报告和复跑说明。
本次实际运行通过 3 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。objects为逐对象内容;pages是给定页面数,不代表已测试真实设备的识别能力。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。
对象或字段的基础关系可回到Modbus 寄存器映射基础核对,更多接口入口在设备协议库。若需要把已确认的数据点接入展项编排,可了解SoftControl 展厅中控;具体接入能力以项目确认和实际测试为准。
一级依据
来源核对日期:2026-10-24。离线结果只证明给定输入的解析或计算行为;现场兼容性、响应时间、硬件准确度和具体产品支持均未测量。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。