1

我必须从通过 RS485-USB 串行通信电缆连接的某些设备读取数据。除了使用 modbus ASCII 的设备外,这些设备都使用 modbus RTU。
我可以在同一根电缆上使用两种协议吗?我认为 RTU 单元不回复 ASCII 请求,反之亦然,但这会导致问题吗?有没有人试过这个或有任何经验?

我这里没有任何设备可以尝试,我必须直接在客户处设置所有内容。

这将是我理想的配置

PC_USB----------RS485+RTU------RS485+RTU------RS485+RTU------RS485+ASCII

如果这不起作用,我将不得不切换到如下解决方案

PC_USB----------RS485+RTU------RS485+RTU------RS485+RTU
PC_USB----------RS485+ASCII

由于对硬件、电缆和位置的一些限制,这将是非常有问题的。

4

3 回答 3

2

这可能是一个挑战......在此处获取规范的副本

  • 根据规范,Modbus ASCII 通常使用 7 个数据位字符格式,而 Modbus RTU 绝对需要 8 个数据位。因此,除非您可以将 Modbus ASCII 设备配置为切换到与 RTU 兼容的字符格式 8 数据位,否则您需要在两种模式之间连续切换 PC 的串行端口。
  • 在 Modbus ASCII 中,每个有效负载字节被编码为两个 ASCII 代码,在 RTU 中,每个字节作为一个字节发送。这可能导致从设备被其他协议中传输的字节触发,它们错误地将其解释为从设备地址。这可能会触发他们回复错误消息,从而有效地破坏您的沟通。这将有多糟糕取决于 modbus 从设备实现的稳健性,并且在 7 位和 8 位字符格式之间交替可能有助于缓解这个问题。

我认为您必须尝试它并执行足够长的实际测试,以查看它是否足以满足您的目的。

于 2013-07-11T15:10:04.870 回答
1

是的,这是可以做到的,但如果您在开发代码时拥有准确的设备来验证操作,这会有所帮助。

我在 LabVIEW 中提出了一个“RS_232-485 从属模拟器”,它只会在串行端口上侦听并捕获请求,解析它们,如果需要,还可以提供硬编码响应。

关键是串行参数必须全部相同:波特、奇偶校验、位、停止位等。我的默认值为 9600、无、8、1

这也适用于使用“=”和“#”作为消息的第一个字符的“特殊”RS-232 设备。

这在设置新设备或软件、为旧设备编写软件驱动程序以及作为现有系统的故障排除工具时非常方便。

= 一些可能会让您失望的问题:

  1. 某些 RS-485 设备的通讯线的 + 和 - 标识错误,
  2. 使用 No-Parity 时,并非所有设备都需要或将使用“额外停止位”,
  3. 请注意,当某些 DATA 使用 HEX 代码与 ASCII 代码时 - 起初看起来相同!
于 2014-10-23T12:30:53.533 回答
0

简短的回答是肯定的。只要消息不模棱两可,您就可以在 RS485 上使用任意数量的协议。

我在共享 RS485 线路上有许多光伏逆变器,还有许多其他传感器使用完全不同的协议。两类设备共享同一条线路没有问题。

于 2013-07-11T10:24:05.730 回答