问题标签 [modbus-rtu-over-tcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
497 浏览

c++ - 是否可以实现基于 libmodbuspp 的 Modbus 主设备,它使用 RTU over TCP 与 TCP/RTU 网关后面的 RTU 从设备通信?

我正在开发一个 C++ Modbus应用程序,它已经使用libmodbuspp库来实现一个 Modbus 主设备,以在 TCP 或 RTU 模式下查询Modbus 从设备(分别用于通过以太网或 RS-232/485 串行链路连接的设备)。它已经工作正常,但最近设置了一个新要求,即此应用程序还应该通过 TCP 实现 RTU,因此它能够通过 TCP 与网关通信,该网关有许多 RTU Modbus 从设备连接到它的许多串行端口(网关只是将 RTU 数据包转发到其中设置的相应从属 ID)。基本上这意味着我们的应用程序应该通过 TCP/IP 连接而不是串行端口发送 Modbus RTU PDU。

对于一个快速而肮脏的解决方案(可能对其他人有帮助),我使用socat创建一个虚拟串行端口,该端口具有到目标 TCP 网关的出站 TCP 连接,使我的应用程序仅在其常规 RTU 模式下工作(虚拟串行端口是/dev/ttyS4和TCP 网关端点192.168.0.10:8000):

socat -d -d pty,link=/dev/ttyS4,raw,echo=0 tcp-connect:192.168.0.10:8000

但对于最终应用程序,我想要更干净的东西,而不依赖于外部应用程序。

我想知道是否可以使用libmodbuspp 的 virtual-rtu层来实现这一点。虽然libmodbuspp 文档非常好,但似乎这是一个新功能,所以对我来说还不是很清楚。文档和示例仅显示它可以通过服务器路由器(专用服务器)通过 TCP 接收 RTU,而后者又可以到达与这些对象关联的 RTU 从站,但我需要的恰恰相反:能够连接到作为客户端的 TCP 端点,但向其发送 Modbus RTU 而不是 Modbus TCP 数据报。

由于libmodbuspp库实际上是众所周知的 Modbus C 库libmodbus的 C++ 包装器,因此也有可能使用libmodbus 的这个分支,它增加了对 RTU over TCP 的支持,但我宁愿不必在 C++ 中重新实现支持包装库libmodbuspp如果它已经以某种方式支持它(但可能以不完整的方式 - 不在客户端连接中)。也许更熟悉libmodbuspp代码库的人可以在这里给我一些指示?谢谢!

0 投票
1 回答
90 浏览

modbus - 对 modbus 触摸面板进行编程以打开 modbus 继电器板中的继电器

我有带有 4 个按钮的 modbus 触摸面板,通过 rs485(A 和 B)连接到 modbus 继电器板。

我想对触摸面板进行编程,因此当我单击按钮以打开继电器板中的特定继电器时。

正如我从触摸面板手册和他的注册表中看到的那样,每个按钮都有 0 或 1 个值。

我的问题是我需要做什么??我应该写入触摸面板寄存器还是写入 modbus 继电器?我如何接受来自面板和日期的命令来中继打开?我对我需要遵循的过程有点困惑。

0 投票
1 回答
349 浏览

c# - 如何正确转换通过 modbus 接收到的值?

我正在通过 modbus rtu 从设备获取带有库 Nmodbus4 的 C# 控制台程序中的数据。格式:32 位浮点。我通过寄存器 0x​​0D – 0x0F 请求设备。我的回答是 5132, 3595, 8458 。这个答案应该与 2020 12 14 11:33:~35 匹配。即数据格式为[年][月][日][小时][分钟][秒]。在我的代码下面:

设备中的日期格式:两个寄存器的组合位域中的日期和时间(从最低有效字节的最低有效位开始):

如何正确获取日期值?

0 投票
0 回答
7 浏览

python-3.x - read_input_registers 后无输出打印

我无法在 pi 终端上打印任何内容请帮助

输出

0 投票
0 回答
52 浏览

c# - C#与台达PLC之间的Modbus RTU通讯

我想使用 C# 从 PLC 读取数据并将数据写入 PLC。但是,我对如何读取数据感到困惑。我不确定从保持寄存器中读取。比如我在PLC中设置X0为输入,在C#中如何读取X0的数据?