Modbus RTU和ASCII在同一根RS485电缆上

时间:2013-07-11 10:14:05

标签: modbus rs485

我必须从通过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

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

3 个答案:

答案 0 :(得分:2)

这可能是一项挑战......获取规范here

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

我认为你必须尝试并进行一次足够长的现实测试,以确定它是否适合你的目的。

答案 1 :(得分:1)

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

我已经提出了一个" RS_232-485 Slave Simulator"在LabVIEW中将会 只需在串口上侦听并捕获请求, 解析它们,如果需要,提供硬编码响应。

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

这个ALSO适用于特殊的' RS-232设备 使用' ='和'#'作为信息的第一个字符。

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

=  一些可能让你烦恼的问题:

  1. 某些RS-485设备具有通信线路的+和 - 标识错误,
  2. 并非所有设备都需要或将使用额外停止位'使用No-Parity时,
  3. 当一些DATA使用HEX代码而不是ASCII代码时,请注意 - 起初看起来一样!

答案 2 :(得分:0)

简短的回答是肯定的。只要消息不明确,您就可以在RS485上说出任意数量的协议。

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