05-常见问题

常见问题

Q: RTU 模式下发送后无响应?

  1. 检查项:
  2. 从站地址是否正确(设备默认通常是 1)
  3. 波特率、校验位等参数是否匹配
  4. RS-485 的 A/B 线是否接反(A 接 A,B 接 B)
  5. RS-485 是否需要终端电阻(120Ω)
  6. 设备是否需要单独供电
  7. USB 转 RS-485 转换器的驱动是否正确安装

Q: CRC 校验错误?

  1. 程序自动计算 CRC16,通常不会出错。如果对端报告 CRC 错误:
  2. 检查串口参数是否匹配
  3. 是否有电磁干扰(长距离布线时)
  4. 降低波特率尝试

Q: 异常码 02(非法数据地址)?

原因:请求的起始地址或数量超出了设备的有效范围。

  1. 解决
  2. 查阅设备手册,确认寄存器地址范围
  3. 注意:有些设备使用 PLC 地址(如 40001),需转换为协议地址(40001 → 0)
  4. 减少读取数量

Q: 如何转换 PLC 地址和协议地址?

不同厂商的 PLC 地址与 Modbus 协议地址的对应关系:

PLC 地址协议地址功能码
00001-09999(线圈)PLC地址 - 101/05/15
10001-19999(离散输入)PLC地址 - 1000102
30001-39999(输入寄存器)PLC地址 - 3000104
40001-49999(保持寄存器)PLC地址 - 4000103/06/16

> 例:PLC 地址 40010 → 协议地址 9 → 起始地址填 9

Q: TCP 端口 502 连不上?

  1. Modbus TCP 默认端口为 502。如果连接失败:
  2. 确认设备确实支持 Modbus TCP(不是 RTU over TCP)
  3. 检查防火墙是否放行了 502 端口
  4. 部分设备可能使用非标准端口,查阅设备手册

Q: 自动轮询间隔设置多少合适?

Q: 可以同时连接多个从站吗?

当前版本同一实例只维护一个连接,如需同时访问多个设备,可启动多个 NexModbus 实例。

Q: 支持 Modbus ASCII 吗?

不支持。Modbus ASCII 在实际应用中非常少见(效率低),绝大多数设备使用 RTU 或 TCP 模式。

Q: 32 位浮点数/长整型如何显示?

Modbus 寄存器是 16 位的,32 位值需要两个连续寄存器组合。当前版本以 16 位整数展示每个寄存器,32 位值的组合解析可在后续版本中支持。