问题标签 [libmodbus]

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 回答
88 浏览

c - 使用 select 的 libmodbus 会因缓冲区溢出而崩溃

我们在 debian 10、32 位 Linux(AMD) 上使用 3.1.4-2 版本的 libmodbus。

我们正面临“缓冲区溢出错误和核心转储显示如下输出-

有了这个,它看起来像是libmodbus在使用select()而不是poll()因为当 FD 计数超过 1024 时应用程序被终止。

我们如何解决这个问题?

我们无法减少 FD 数量,因为我们正在使用一些 3rd 方组件,该组件会为数据库操作打开许多 FD。

libmodbus repo 上存在建议使用 poll 而不是 select 的问题,但它没有提到如何做到这一点。

有解决办法吗?

0 投票
0 回答
16 浏览

gcc - 通过 cmake 链接 libmodbus

这就是我所拥有的CMakeLists.txt

我这样做:

但我得到:

这里有什么问题?Libmodbus 安装在我指向 cmake 的位置,我检查了。我是新手,所以也许它是非常基本的东西。

0 投票
1 回答
198 浏览

modbus - 使用带有 libmodbus 或 pymodbus 的 USB 连接在两台 PC 之间进行 Modbus 模拟

我正在尝试连接到将使用 modbus 协议相互通信的 PC(一主一从),我想使用 pymodbus(Python)或 libmodbus(C++)来实现这一点,但我对 Modbus 相对较新,因此我不是确定从哪里开始。我已经使用 pymodbusTCP 构建(我认为)一个 Modbus 服务器,但我不确定如何使用 pymodbusTCP 与另一台 PC 通信。

我写了下面给定的代码:

当我从本地主机(作为奴隶)连接时,我可以连接。

如何连接两台 PC,一台作为主机,另一台作为从机?

如何向线圈发送写入以实现这一点?

任何帮助将不胜感激。

注意:环境是 Ubuntu 20.04

0 投票
1 回答
76 浏览

linux - 重新连接 RS232/RS485 适配器后超时 Modbus RTU 设备

在断开和重新连接 RS232 后,我遇到了与设备的 MODBUS RTU 连接问题。该系统是通过以下方式构建的:

  • 带 A+ 和 B- 夹的 MODBUS RTU 设备(没有可用的 C = GND,例如电表 SDM120,但问题也出现在其他设备类型上)
  • RS485 线 A 和 B
  • 适配器 RS232 -> 基于 SP485EE 芯片的 RS485 DA-70161
  • 带 DSUB9 连接器的 RS232 电缆
  • UART 连接 MAX3243 芯片用于 RS232 与 CTS/RTS
  • 使用为 9600baud 8N1 配置的 /dev/ttymxc0 的 libmodbus 软件(适合设备默认值)
  • Linux kernel 4.4.0 嵌入式ARM CPU

一般来说,这工作得很好,甚至超过几周。但是一旦断开 RS232 电缆并在几秒钟(或几分钟或几小时)后重新连接,libmodbus 在每次访问 MODBUS 设备时都会出现超时错误。这很烦人,因为很难让它重新开始工作。在几分钟和最多 10 次重试后,只有进一步断开 RS232-RS485 适配器两端的连接才能将其恢复。

知道什么可能导致这个问题吗?

在重新连接 RS232 电缆后如何防止这种情况并立即工作有什么帮助吗?

(是的,一种可能的解决方案是简单地让 RS232 电缆始终连接。但有时有人需要做某事而忘记了后果 - 我认为这不是一个现实的选择)

0 投票
0 回答
14 浏览

libmodbus - libmodbus 服务器:根据值变化采取行动

我正在使用 libmodbus 在嵌入式系统上实现服务器。除了其他任务,它应该通过某些寄存器值传递给外围设备,例如,每当寄存器内容发生变化时,根据 Modbus 线圈寄存器的值设置一个 GPIO 位或通过 SPI 将某个保持寄存器的值发送到其他芯片.

在 libmodbus 文档中,我找不到任何方法来响应使用自定义代码编写命令。实施此建议的方法是什么?我是否需要在每次请求后检查映射中的值以查明它是否已更改(这涉及将值的副本保留在其他地方)?有没有办法从请求中获取受影响的寄存器?

0 投票
0 回答
30 浏览

c - libmodbus 的独立连接函数

我正在尝试将libmodbusMod-bus 连接和获取值下的操作分组为两个更简单的函数,如下所示。
但是,Segmentation fault (core dumped)当我尝试从设备中获取价值时,它总是会导致。(get_floatmodbus_read_registers
谁能告诉我如何解决它?

此外,当我将它们放在与以下相同的功能中时,我可以成功运行类似的代码:

0 投票
0 回答
13 浏览

python - libmodbus:modbus_mapping_new() 不适用于 WSL

我正在使用 libmodbus 来设置 modbus 从站。该应用程序正在使用命令设置从站

当我在我的 Windows PC 上运行它时,我得到这个输出:

当我在 WSL 上运行它时,我得到以下输出:

有谁知道我为什么会遇到这个初始化问题?图书馆是一样的,但一个是a .dll,另一个是a.so