首页 文章

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

提问于
浏览
1

我必须从通过RS485-USB串行通信电缆连接的某些设备读取数据 . 设备使用modbus RTU,但使用modbus ASCII的设备除外 .
Can I speak two protocols on the same cable? 我认为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 回答

  • 2

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

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

  • 1

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

    • 根据规范,Modbus ASCII通常使用7个数据位字符格式,而Modbus RTU绝对需要8个数据位 . 因此,除非您可以将Modbus ASCII设备配置为切换到兼容RTU的字符格式,否则您将在两种模式之间进行串行端口连接 .

    • 在Modbus ASCII中,每个有效载荷字节编码为两个ASCII码,在RTU中,每个字节作为一个字节发送 . 这可能导致从设备通过另一个协议传输的字节触发,它们错误地将其解释为其从设备地址 . 这可以触发他们回复错误消息,这可以有效地破坏您的通信 . 这将有多糟糕取决于modbus从站实现的稳健性,并且7位和8位字符格式之间的交替可能有助于缓解此问题 .

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

  • 0

    是的,这可以完成,但如果您在开发代码时拥有确切的设备来验证操作,则会有所帮助 .

    我在LabVIEW中提出了一个“RS_232-485 Slave Simulator”,它只能监听串行端口并捕获请求,解析它们,如果需要,还可以提供硬编码响应 .

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

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

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

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

    • 某些RS-485设备具有和 - 识别通信线路错误,

    • 使用No-Parity时,并非所有设备都需要或将使用'extra stop bit',

    • 当一些DATA使用HEX代码而不是ASCII代码时要注意 - 一开始看起来一样!

相关问题