05-常见问题
常见问题
Q: RTU 模式下发送后无响应?
- 检查项:
- 从站地址是否正确(设备默认通常是 1)
- 波特率、校验位等参数是否匹配
- RS-485 的 A/B 线是否接反(A 接 A,B 接 B)
- RS-485 是否需要终端电阻(120Ω)
- 设备是否需要单独供电
- USB 转 RS-485 转换器的驱动是否正确安装
Q: CRC 校验错误?
- 程序自动计算 CRC16,通常不会出错。如果对端报告 CRC 错误:
- 检查串口参数是否匹配
- 是否有电磁干扰(长距离布线时)
- 降低波特率尝试
Q: 异常码 02(非法数据地址)?
原因:请求的起始地址或数量超出了设备的有效范围。
- 解决:
- 查阅设备手册,确认寄存器地址范围
- 注意:有些设备使用 PLC 地址(如 40001),需转换为协议地址(40001 → 0)
- 减少读取数量
Q: 如何转换 PLC 地址和协议地址?
不同厂商的 PLC 地址与 Modbus 协议地址的对应关系:
| PLC 地址 | 协议地址 | 功能码 |
|---|---|---|
| 00001-09999(线圈) | PLC地址 - 1 | 01/05/15 |
| 10001-19999(离散输入) | PLC地址 - 10001 | 02 |
| 30001-39999(输入寄存器) | PLC地址 - 30001 | 04 |
| 40001-49999(保持寄存器) | PLC地址 - 40001 | 03/06/16 |
> 例:PLC 地址 40010 → 协议地址 9 → 起始地址填 9
Q: TCP 端口 502 连不上?
- Modbus TCP 默认端口为 502。如果连接失败:
- 确认设备确实支持 Modbus TCP(不是 RTU over TCP)
- 检查防火墙是否放行了 502 端口
- 部分设备可能使用非标准端口,查阅设备手册
Q: 自动轮询间隔设置多少合适?
- 单寄存器读取:≥ 100ms
- 多寄存器读取(10-20 个):≥ 200ms
- 写操作:不建议自动轮询(容易误写入)
- RS-485 总线上的多个从站:≥ 500ms(给总线留出空闲时间)
Q: 可以同时连接多个从站吗?
- RTU 模式:RS-485 总线上可以挂多个从站,通过不同从站地址区分。每次只与一个从站通信。
- TCP 模式:每个设备一个 IP:Port,切换设备需要重新配置连接参数。
当前版本同一实例只维护一个连接,如需同时访问多个设备,可启动多个 NexModbus 实例。
Q: 支持 Modbus ASCII 吗?
不支持。Modbus ASCII 在实际应用中非常少见(效率低),绝大多数设备使用 RTU 或 TCP 模式。
Q: 32 位浮点数/长整型如何显示?
Modbus 寄存器是 16 位的,32 位值需要两个连续寄存器组合。当前版本以 16 位整数展示每个寄存器,32 位值的组合解析可在后续版本中支持。