问题标签 [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.
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 的问题,但它没有提到如何做到这一点。
有解决办法吗?
gcc - 通过 cmake 链接 libmodbus
这就是我所拥有的CMakeLists.txt
:
我这样做:
但我得到:
这里有什么问题?Libmodbus 安装在我指向 cmake 的位置,我检查了。我是新手,所以也许它是非常基本的东西。
modbus - 使用带有 libmodbus 或 pymodbus 的 USB 连接在两台 PC 之间进行 Modbus 模拟
我正在尝试连接到将使用 modbus 协议相互通信的 PC(一主一从),我想使用 pymodbus(Python)或 libmodbus(C++)来实现这一点,但我对 Modbus 相对较新,因此我不是确定从哪里开始。我已经使用 pymodbusTCP 构建(我认为)一个 Modbus 服务器,但我不确定如何使用 pymodbusTCP 与另一台 PC 通信。
我写了下面给定的代码:
当我从本地主机(作为奴隶)连接时,我可以连接。
如何连接两台 PC,一台作为主机,另一台作为从机?
如何向线圈发送写入以实现这一点?
任何帮助将不胜感激。
注意:环境是 Ubuntu 20.04
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 电缆始终连接。但有时有人需要做某事而忘记了后果 - 我认为这不是一个现实的选择)
libmodbus - libmodbus 服务器:根据值变化采取行动
我正在使用 libmodbus 在嵌入式系统上实现服务器。除了其他任务,它应该通过某些寄存器值传递给外围设备,例如,每当寄存器内容发生变化时,根据 Modbus 线圈寄存器的值设置一个 GPIO 位或通过 SPI 将某个保持寄存器的值发送到其他芯片.
在 libmodbus 文档中,我找不到任何方法来响应使用自定义代码编写命令。实施此建议的方法是什么?我是否需要在每次请求后检查映射中的值以查明它是否已更改(这涉及将值的副本保留在其他地方)?有没有办法从请求中获取受影响的寄存器?
c - libmodbus 的独立连接函数
我正在尝试将libmodbus
Mod-bus 连接和获取值下的操作分组为两个更简单的函数,如下所示。
但是,Segmentation fault (core dumped)
当我尝试从设备中获取价值时,它总是会导致。(get_float
,modbus_read_registers
)
谁能告诉我如何解决它?
此外,当我将它们放在与以下相同的功能中时,我可以成功运行类似的代码:
python - libmodbus:modbus_mapping_new() 不适用于 WSL
我正在使用 libmodbus 来设置 modbus 从站。该应用程序正在使用命令设置从站
当我在我的 Windows PC 上运行它时,我得到这个输出:
当我在 WSL 上运行它时,我得到以下输出:
有谁知道我为什么会遇到这个初始化问题?图书馆是一样的,但一个是a .dll
,另一个是a.so