首页 > 解决方案 > 使用 Modbus RTU 协议提取寄存器

问题描述

我是使用 Modbus 协议的新手。我有一个媒体转换器设备 ( USR-W610 ),我正在测试与 Modbus Poll 和 Modscan 程序的连接,以验证我是否正在获取日志。我在设备上有这些设置。

在此处输入图像描述

使用 TCP 协议和端口 502

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

根据这些配置,我在Modscan中配置如下字段

在此处输入图像描述

在此处输入图像描述

我配置设备 ID = 240 并选择“03. HOLDING REGISTER”来读取数据,但是我收到以下消息“未初始化”和后来“收到对 MODBUS 查询的无效响应”有人可以帮我吗?有任何想法吗?

同样使用“Modbus Poll”我收到以下消息:

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

标签: c#tcpipmodbus

解决方案


我正在假设您有一个 Modbus RTU 设备通过 RS232 或 RS485 连接到 USR IOT 单元(您在问题中没有提到该设备)。从您的屏幕截图中,USR-W610 正在透明模式下运行(“数据传输模式”);从手册

在这种工作模式下,W610 可以进行串口侧和网络侧的双向连接。此连接为透明传输。网络可以接收来自串口设备的数据,也可以向串口设备发送网络数据。

因此,在这种模式下,您通过网络端口发送的任何内容都将发送到串行端口,反之亦然(不做任何更改)。这意味着您需要使用Modbus RTU而不是Modbus TCP(这两种协议不同;例如 RTU 数据包包含 CRC 错误检查,而 Modbus TCP 数据包不包含)并且还以某种方式设置波特率等(可能通过AT 命令) . 这样做是可能的(通常使用虚拟串行端口,但一些实用程序支持此模式,您可以编写自己的代码)。

但是有一个更简单的选择;如果您将模式更改为“ModbusTCP<=>ModbusRTU 模式”,我相信这会解决您的问题;从手册:

W610 支持 Modbus TCP<=>Modbus RTU 模式(不支持 Modbus ASCII)。用户只需将 W610 的工作模式配置为 Modbus TCP<=>Modbus RTU 模式并更改相关参数(端口、远程 IP 和其他一些参数)以正确设置当用户想要使用该模式时。

因此在这种模式下,W610 充当 Modbus TCP 服务器。它接受命令,使用 Modbus RTP 将这些命令发送到设备,然后将响应转换回 Modbus TCP。


推荐阅读