问题标签 [pymodbus]

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 投票
1 回答
540 浏览

python - 在 pyModbus 事务中访问原始字节

我有一个可以使用 pymodbus 库处理 Modbus 事务的 python 脚本。出于故障排除目的,我想打印发送和接收到设备的原始字节,最好是十六进制格式。

这是简化的代码,请参阅底部的注释以获取我想要的示例。我使用了 TCP 客户端,但希望它也可以在 ModbusSerialClient 上工作。

我试过response.encode()了,但只回来了b'\x02\x00\xff'

0 投票
0 回答
890 浏览

python - pymodbus:更新运行服务器的上下文

按照这个例子,我有一个正在运行的 ModbusRTU 服务器。我知道如何更新上下文,但我无法更新正在运行的服务器的上下文。

当我更新 run_updating_server() 函数中的上下文时(在 StartSerialServer() 之前),它工作正常。但是当我尝试通过调用 update_writer(context) 来更新运行上下文时,它不会更新。

从 withingupdate_writer() 调用我自己的函数 'getUpdatedContext()' 也不起作用:

获取上下文():

我的完整代码:

我想从另一个 python 脚本更新上下文,我试过:

  • 从该“其他python脚本”调用updated_writer(a),其中a = updatedContext。

  • 从withingupdate_writer(a)调用getUpdatedContext(),这是“那个其他python脚本”中的一个函数,它返回updatedContext

  • 使上下文全局化,添加一个函数 updateContext(a),从另一个 python 脚本调用该函数。

这一切都导致编译代码,但运行服务器的上下文没有得到更新。

这里是来自“其他python脚本”的代码:

我应该如何与updated_writer交互?我想要实现的是我的 modbusRTU 服务器正在运行,并从另一个威胁中更新上下文,所以我的 modbus 客户端(主)可以读取我填写的寄存器。

0 投票
0 回答
54 浏览

python - 使用 pyModbus 库中的 diag_message 函数时出现解码错误

我正在尝试使用 pyModbus 库中的诊断子功能,但在解码响应时出现错误。这是由 pyModbus 库而不是我的代码处理的,因此很难弄清楚我的问题发生在哪里。

我参考了文档并尝试了此处给出的示例: https ://pymodbus.readthedocs.io/en/latest/source/example/synchronous_client_ext.html

下面的示例使用该函数来获取 NAK 计数,但我已经尝试使用 diag_messages 库中的多个函数,包括 DiagnosticStatusSimpleRequest 和 ReturnQueryDataResponse。

0 投票
0 回答
341 浏览

python - 为什么我在 20% 的尝试中得到 pymodbus ModbusIOException?

我在 20% 的尝试中收到 pymodbus.exceptions.ModbusIOException。

该代码是通过 QTimer 事件调用的,我尝试将此范围从 30 毫秒更改为 5000 毫秒并收到相同的结果。另外 80% 的时间代码按预期工作。这是python时间问题还是其他什么?

0 投票
2 回答
450 浏览

docker - pymodbus + docker 连接问题

我是 docker 和 Modbus 的新手,我正在尝试使用 Modbus(准确地说是 pymodbus 工具包)编写自定义客户端/服务器应用程序,我可能遇到了 docker 的一些问题。

我试过示例脚本客户端服务器

我正在使用的部分是:

服务器(码头化)

而且我只修改了 IP 地址。我可以让它在 localhost 上运行,但是当我将服务器部分放在 Docker 容器中时,我无法与之通信。

我正在使用 docker-compose,.yml 如下:

客户

Docker 镜像启动正常,但是当我尝试运行客户端脚本时,我得到一个断言错误,这与failed-to-connect没有容器运行时的错误不同。

我还尝试让容器使用主机接口(带有network-mode: host)并且效果很好。因此,我相信我的容器的网络设置存在一些错误。从我可以拼凑起来的内容来看,docker 容器确实在指定的端口上侦听,但我的脚本不是?

我很高兴知道我的错误在哪里以及如何调试这些东西,我试图在 tcpdump 和 中找到一些东西docker network inspect,但我找不到任何相关的东西。

0 投票
2 回答
376 浏览

python - pymodbus 的问题

我对 pymodbus 很陌生,我正在尝试使用 pymodbus 读取协作机器人的保持寄存器,以获取当前 z 坐标的值。此类信息位于 7053 地址。我查看了较旧的问题,但无法使我的代码正常工作:

我不断收到此错误消息:

ConnectionException: Modbus 错误: [连接] 无法连接 [ModbusTcpClient(192.168.250.201:502)]

我想我的代码中一定有问题,或者可能有其他东西阻止我建立连接。有什么建议么?谢谢

0 投票
1 回答
1651 浏览

python - 使用python在ModbusRTU中同时调用多个寄存器?

我有一个连接到 Modbus-RTU/TCP-Gateway 的 Modbus-RTU,我正在尝试调用它。工作正常,但我必须在每个阅读周期读取多个值。

我正在使用 pymodbus 库。

假设我有 3 个寄存器要读取:

地址,字长

1:0,2

2:2,2

3:206、4

我现在正在做的是一起调用寄存器值 1 和 2,从地址 0 开始读取,字数为 4。但是我必须再次请求寄存器值 3。

这意味着,在尝试为值添加时间戳时,我遇到的问题是它们实际上不是在完全相同的时间读取的。

问题:有没有办法同时调用多个 modbus 寄存器,比如通过在 python 中调用 read_holding_registers 和寄存器列表和它们各自的字数列表?

以这样的方式工作:

0 投票
1 回答
236 浏览

python - 试图通过 python 控制 DGH D8500 modbus

我有这个名为 DGH D8500 的两通道模拟输出 modbus RTU 协议 USB 接口。我需要通过python动态和自动化地控制通道的电压。我连接它我用它自己的程序尝试了它,但我无法使用 python 与它通信,我尝试使用 pymodbus 和 minimummodbus 但我似乎没有收到任何类型的响应:

波特率 = 9600,奇偶校验 = 无,字节大小 = 8,停止字节 1

Pymodbus 代码

Pymodbus 错误

最小总线代码

最小的Modbus错误

我真的不太明白这是我第一次使用这个,我正在按照步骤的说明进行操作,但由于我的知识很少,这可能只是我的一个小错误。

0 投票
1 回答
517 浏览

modbus - rtu Pymodbus 读取从设备时出现问题

我一直在尝试使用串行端口和 RTU Modbus 连接到设备。该设备是一个变频控制器:

在此处输入图像描述

它通过以下 RS485 到 USB 转换器连接到我的笔记本电脑:

https://www.amazon.co.uk/gp/product/B01E8JRL6O/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

我所连接的设备的说明提供了一个使用 Modbus 读取数据的使用示例,如下图所示:在此处输入图像描述

有了上面,提供,我尝试使用以下代码执行读取请求:

我在上面假设的地方是:

表示读取寄存器地址 1,读取 1 个帧,读取设备 ID 1。据我了解,这个请求对应于上面显示的指令示例。但是,不幸的是,我一直收到错误消息:

Modbus 错误:[输入/输出] Modbus 错误:[无效消息] 收到不完整的消息,预计至少 2 个字节(已收到 1 个)

有谁知道我为什么会收到这个错误?其次,CRC 是由 pymodbus 即时计算的吗?或者我应该如何计算并包含它?

任何帮助深表感谢!

0 投票
2 回答
686 浏览

python - pymodbus tcp 同步客户端在连接失败时无法捕获错误

使用https://github.com/riptideio/pymodbuspymodbus中的示例 它工作正常并连接到 PLC 并读取保持寄存器。但我有一个问题。当 PLC 关闭时,代码无法捕获断开连接的错误。

我试过了,试试..然后如果client.connect()。有人可以建议如何做到这一点。谢谢