c# - 使用 Modbus RTU 协议提取寄存器
问题描述
我是使用 Modbus 协议的新手。我有一个媒体转换器设备 ( USR-W610 ),我正在测试与 Modbus Poll 和 Modscan 程序的连接,以验证我是否正在获取日志。我在设备上有这些设置。
使用 TCP 协议和端口 502
根据这些配置,我在Modscan中配置如下字段
我配置设备 ID = 240 并选择“03. HOLDING REGISTER”来读取数据,但是我收到以下消息“未初始化”和后来“收到对 MODBUS 查询的无效响应”有人可以帮我吗?有任何想法吗?
同样使用“Modbus Poll”我收到以下消息:
解决方案
我正在假设您有一个 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。
推荐阅读
- gitlab - Gtilab 管道触发器在 webhook 上不起作用(返回 404)
- firebase - 用户登录移动应用程序后如何保存用户的位置
- python - Selenium:有没有办法检查文本是否超出了元素的边界?
- firebase - 将登录用户的角色存储在 vuex 安全/最佳实践中吗?
- android - 在线程中通过 BLE 发送数据
- c# - Visual Studio 代码清理 - 自动生成的代码
- reactjs - 在反应管理员中异步返回 simpleRestProvider
- python - 在 Tkinter 中设置颜色选择器和文件对话框的样式,使其与应用程序的其余部分保持一致
- react-native - react-native-image-picker showImagePicker 文本颜色
- python - optimizer.param_groups[0]['lr'] 和 scheduler.get_lr()[0] 之间的区别