时序、异常与互操作
现场 80% 问题:地址换算、字节序、超时、485 接线,而不是“功能码不会写”
1. 超时与重试
| 参数 | 建议 |
|---|---|
| 响应超时 | 按最慢从站 + 网关延迟留余量(常 100ms~1s+) |
| 重试次数 | 2~3 次;避免雪崩 |
| 轮询周期 | 大于「请求+响应+间隙」总和 |
| 多从站 | 串行必须串行化轮询;TCP 可并行但要限流 |
超时:无响应(线断、地址错、波特率错、DE 脚)
异常响应:有应答但 FC|0x80(地址/功能不支持等)
2. 字节序 / 字序(Float 重灾区)
寄存器内字节:规范示例常为 大端(高字节在前)。
跨两寄存器的 float/int32,厂商可能:
| 俗称 | 含义(示意) |
|---|---|
| AB CD | 大端字序 |
| CD AB | 字交换 |
| BA DC | 字节交换 |
| DC BA | 双交换 |
验证方法:写已知浮点或对比厂商调试软件读数,固化到点表。
3. 数量上限
- 单次读寄存器常见 ≤125
- 单次读线圈受字节打包与 PDU 限制
- 超限 → 异常 03 或设备直接不理
大块数据:拆成多帧或用设备专用 FC。
4. 多主站与网关
- 纯 RS-485 RTU:不要多个无协调主站同时轮询
- TCP 多 Client:注意设备连接数上限
- 网关:确认是“透传映射”还是“点表重映射”
5. 互操作 Checklist
- 波特率/校验/停止位一致
- 终端电阻与接地
- 从站地址唯一
- 0-based vs 4xxxx 已换算
- FC 与表类型匹配
- float 字序已验证
- 超时与轮询不打架
- TCP Unit ID 符合网关/直连场景
下一篇:06-开源库与工具对比.md
正在加载留言…