问题标签 [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.
python - 在 pyModbus 事务中访问原始字节
我有一个可以使用 pymodbus 库处理 Modbus 事务的 python 脚本。出于故障排除目的,我想打印发送和接收到设备的原始字节,最好是十六进制格式。
这是简化的代码,请参阅底部的注释以获取我想要的示例。我使用了 TCP 客户端,但希望它也可以在 ModbusSerialClient 上工作。
我试过response.encode()
了,但只回来了b'\x02\x00\xff'
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 客户端(主)可以读取我填写的寄存器。
python - 使用 pyModbus 库中的 diag_message 函数时出现解码错误
我正在尝试使用 pyModbus 库中的诊断子功能,但在解码响应时出现错误。这是由 pyModbus 库而不是我的代码处理的,因此很难弄清楚我的问题发生在哪里。
我参考了文档并尝试了此处给出的示例: https ://pymodbus.readthedocs.io/en/latest/source/example/synchronous_client_ext.html
下面的示例使用该函数来获取 NAK 计数,但我已经尝试使用 diag_messages 库中的多个函数,包括 DiagnosticStatusSimpleRequest 和 ReturnQueryDataResponse。
python - 为什么我在 20% 的尝试中得到 pymodbus ModbusIOException?
我在 20% 的尝试中收到 pymodbus.exceptions.ModbusIOException。
该代码是通过 QTimer 事件调用的,我尝试将此范围从 30 毫秒更改为 5000 毫秒并收到相同的结果。另外 80% 的时间代码按预期工作。这是python时间问题还是其他什么?
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
,但我找不到任何相关的东西。
python - pymodbus 的问题
我对 pymodbus 很陌生,我正在尝试使用 pymodbus 读取协作机器人的保持寄存器,以获取当前 z 坐标的值。此类信息位于 7053 地址。我查看了较旧的问题,但无法使我的代码正常工作:
我不断收到此错误消息:
ConnectionException: Modbus 错误: [连接] 无法连接 [ModbusTcpClient(192.168.250.201:502)]
我想我的代码中一定有问题,或者可能有其他东西阻止我建立连接。有什么建议么?谢谢
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 和寄存器列表和它们各自的字数列表?
以这样的方式工作:
python - 试图通过 python 控制 DGH D8500 modbus
我有这个名为 DGH D8500 的两通道模拟输出 modbus RTU 协议 USB 接口。我需要通过python动态和自动化地控制通道的电压。我连接它我用它自己的程序尝试了它,但我无法使用 python 与它通信,我尝试使用 pymodbus 和 minimummodbus 但我似乎没有收到任何类型的响应:
波特率 = 9600,奇偶校验 = 无,字节大小 = 8,停止字节 1
Pymodbus 代码
Pymodbus 错误
最小总线代码
最小的Modbus错误
我真的不太明白这是我第一次使用这个,我正在按照步骤的说明进行操作,但由于我的知识很少,这可能只是我的一个小错误。
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 即时计算的吗?或者我应该如何计算并包含它?
任何帮助深表感谢!
python - pymodbus tcp 同步客户端在连接失败时无法捕获错误
使用https://github.com/riptideio/pymodbuspymodbus
中的示例
它工作正常并连接到 PLC 并读取保持寄存器。但我有一个问题。当 PLC 关闭时,代码无法捕获断开连接的错误。
我试过了,试试..然后如果client.connect()。有人可以建议如何做到这一点。谢谢