Modbus 0x05 写开关能填 0001 吗:怎样检查 FF00 与 0000

2026-10-24

0x05(十进制 5)写单线圈的开启值是 FF00,关闭值是 0000,0001 不能代替开启。正常应答回显请求的功能码、地址和值;这个回显仍不能替代独立的设备状态反馈。

适用版本与输入范围

依据 Modbus Application Protocol V1.1b3(2012-04-26),按下方具体功能章节解释PDU。输入已经剥离RTU地址、CRC或TCP封装,不把封装检查与数据字段解析混为一体。 本文所有输入均为原创合成数据,未接真实设备。

先判断值域,不能沿用布尔序列化

上层程序常用 True、1 或字符串“开”表达同一意图,但进入 Modbus PDU 前必须转换成该功能规定的两字节常量。附件开启请求是 05 00 12 FF 00,地址 0012 与值 FF00 各占两字节;0001 是显式负例。不能因为某语言把非零数都视为真,就把这个语言规则直接当作线圈协议规则。解析器也不应把任意非零值自动修正为 FF00,否则会掩盖发送端编码缺陷。

把正常响应当成回显契约

程序检查请求和响应都恰好五字节,再检查功能码都是 05,接着验证请求值属于两个允许常量,最后比较完整 PDU。附件特意把一条响应地址从 0012 改成 0013:即使值仍为开启、长度仍正确,也必须报告回显不匹配。只比较最后两字节会把另一地址的响应错误归入当前操作。通信封装中的事务关联还应由调用层保留,本程序仅演示给定请求响应对。

区分结构确认与设备反馈

echo_matches=true 的意思是收到的正常 PDU 与预期回显一致,不等于接触器吸合、电源已经输出或设备已完成机械动作。若工程要求确认执行,应另读设备提供的状态点,明确反馈采集时刻及其含义。不能将写命令回显和业务状态放在同一列“执行成功”里。附件不包含真实继电器、线路或终端,仅验证可检查的编码规则,适合在接设备前发现客户端实现错误。

日志保留原值和判断过程

交付记录至少保留请求地址、原始值字、响应原文和回显检查结果。地址使用协议内的 0 基数值,不在本题重新解释厂商手册里的参考编号。遇到异常响应时也不应强塞进五字节正常应答解析器,而应先进入异常响应分支。此次负例中的回显偏差、错误真值各自有确定的拒绝原因,便于测试人员定位是值编码问题还是请求响应关联问题。

下载与复跑

将输入 fixture.json与独立程序 verify.py放在同一目录,用 Python 3.12 执行 python verify.py,无需安装第三方包。程序从自身目录读取输入并写入 report.json,不要求当前终端恰好位于下载目录。也可查看本次实跑报告和复跑说明。

本次实际运行通过 4 条输入断言,包括标有“显式负例”的记录;负例以JSON字段承载,不会把下载文件本身做成损坏编码。on 表达协议编码意图,echo_matches 只确认给定PDU回显一致。 修改输入后应同时审查期望结果,不能只改断言数字让测试变绿。

对象或字段的基础关系可回到Modbus 寄存器映射基础核对,更多接口入口在设备协议库。若需要把已确认的数据点接入展项编排,可了解SoftControl 展厅中控;具体接入能力以项目确认和实际测试为准。

一级依据

来源核对日期:2026-10-24。离线结果只证明给定输入的解析或计算行为;现场兼容性、响应时间、硬件准确度和具体产品支持均未测量。

需要展厅软硬件方案或定制开发?

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。问软件授权、报价,或者现场遇到问题,也可以直接聊。

去留微信

留言讨论

评论发布后会被人工复核,违规内容将被删除。

    还没有人评论,来说说你的看法

    如果发表没有反应,可以前往联系我们告诉我们。

    这个页面有问题?

    提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。