问题标签 [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 回答
14187 浏览

python - RTU Modbus Slave 的 Python 脚本

我正在研究一个系统的自动化测试用例,需要一个自动化的 modbus 输入设备。

我的用例是实现一个基于 Raspberry pi 的 RTU modbus slave 并连接到 modbus master。

我希望这个基于 Raspberry Pi 的从站在主站请求寄存器值时填充并向主站发送响应。

我是这个协议和环境的新手,我找不到任何我们有 modbus 从属客户端的 python 脚本或库。

我在下面的串行 python 代码中遇到了这个,我可以成功地解码来自 Master 的 modbus 请求,

我在这里面临的问题是这段代码只打印了一系列串行位,我不知道如何从这些中解码 modbus 数据包......

输出:b'\x1e\x03\x00\x19\x00\x01W\xa2\x1e\x10\x00\x0f\x00\x01\x02\x03 +\xb7\x1e\x03\x00\n' b'\x00 \x02\xe6f\x1e\x03\x00\t\x00\x01Vg\x1e\x10\x00\x10\x00\x01\x02\x01,(\xbd\x1e\x03\x00\n' b'\x00\ x02\xe6f\x1e\x03\x00\t\x00\x01Vg\x1e\x10\x00\x11\x00\x01\x02\x03(\t\x1e\x03\x00\n'b'\x00\x02\ xe6f\x1e\x03\x00\t\x00\x01Vg\x1e\x10\x00\x12\x00\x01\x02\x01,)_\x1e\x03\x00\n' b'\x00\x02\xe6f\ x1e\x03\x00\t\x00\x01Vg\x1e\x03\x00\n' b'\x00\x02\xe6f\x1e\x03\x00\t\x00\x01Vg\x1e\x03\x00\n'

0 投票
2 回答
679 浏览

python-3.x - Pymodbus:使用反应器的 Modbus RTU - 从未调用过回调

我正在尝试创建 Modbus 串行/RTU 客户端,它将使用 Pymodbus 库从串行端口读取数据。

Python:3.6
Pymodbus:2.1.0
平台:Linux/Windows

我的示例代码库如下:

调试后,selfread() 方法说CustomModbusClientProtocol: Null Transport. 在此之后,我按下F8& 线程进入阻塞状态 & 从未调用的延迟回调。

输出:

根据Serial + Async + RTU: Callback is never fire #160,解决了 deferred 调用回调的问题。但是,就我而言,它仍然存在。

我在 Raspberry PI 和 Windows 中都尝试过这段代码,在这两种情况下都得到了相同的响应。

无法理解为什么会这样。我是否需要在我的代码中添加一些东西,或者我应该在串口上连接到 Modbus 设备时做错了什么?

任何帮助,将不胜感激。

0 投票
0 回答
521 浏览

modbus - 如何确定客户端是否连接到 pymodbus tcp 服务器

我有一个 pymodbus 服务器正在运行,我想知道客户端是否连接到它正在服务的服务器。有没有办法做到这一点?我看不到明显的方法。

我正在使用同步服务器:

0 投票
0 回答
244 浏览

python - 使用 pymodbus 设置 Modbus 网络

我正在建立一个 Modbus 网络。

我有一个 Raspberry Pi,Pi 应该用作服务器(收集数据)。

数据将来自多个作为客户端运行的 Arduino。

我希望我说的是对的。

请参阅照片以了解布局 https://imgur.com/akg0R7w 当然 Arduino 将具有以太网屏蔽并将运行 Modbus 库。

在 Pi 上,我有 pyModbusTCP 包。

我已经成功配置了一个 Modbus 服务器。通过简单的 Modbus 客户端软件,我与 Pi 建立了连接。

但现在我想从服务器中读取数据。有人知道我是怎么做到的吗?还是我对整个事情的态度是错误的?

Arduino只需要发送数据,不需要接收数据。

0 投票
2 回答
1904 浏览

python-3.x - pymodbus:Modbus RTU 读取寄存器调用被阻止且从未唤醒或自动重新连接到 Modbus RTU 设备

我正在尝试创建 Modbus RTU 客户端,它将使用pymodbus库从串行端口读取数据。我能够连接到COM2在 Windows10 上运行的 Modbus RTU 并能够读取不同类型的数据,如Int32,Float等。

问题:

一段时间后,我断开了我的设备并检查了 ModbusClient 的状态。我的客户端已连接到COM2端口并尝试从不可用的设备中读取并要求 read_holding_registers阻止。

环境:

Python:3.6.5
pymodbus:2.1.0
Windows:10 64bit

据我说,它应该抛出一个类似下面的错误

与 Modbus TCP 设备断开连接时出现上述错误。但是,在 Modbus RTU 的情况下不执行任何操作。

下面的代码处理连接丢失和失败事件:

我的完整代码在这里给出ModbusRTUClient.py

我已确保 Modbus RTU 设备的可用性并在与设备通信有任何问题时发出警报。

有谁知道如何处理 Modbus RTU 设备的断开和重新连接?

任何帮助,将不胜感激。

0 投票
2 回答
909 浏览

python - 如何通过 TCP 读取/写入使用 pymodbus 连接到网关的设备寄存器

我必须使用pymodbus. 我没有直接连接到传感器,但我通过 TCP 连接到网关,网关通过串行连接到传感器。
我以这种方式与网关建立了连接:

与网关的连接有效,因为套接字是打开的。但我无法以这种方式从传感器读取:

如何与连接到网关的指定传感器连接(id:230,波特率:9600,奇偶校验:无,接口:RS-4852 线)?

PS:网关是Moxa MGate MB3170

0 投票
0 回答
373 浏览

python - 从 Mininet Python API 启动的脚本在一段时间后停止工作

我正在尝试在mininet中编写一些自动化测试,其目的是:

  • 创建简单拓扑
  • 在服务器和客户端之间运行一些通信
  • 收集一些数据并在一段时间后停止

我可以通过运行 miniedit 配置并在连接到主机的两个终端上手动启动服务器和客户端脚本来运行这些测试,这种情况可以正常工作。

但是,我正在尝试使用 Python API 执行此操作,但在交换了几个数据包后,我在主机上启动的脚本停止正常工作。正如我之前所说,如果我在两个终端上手动启动它们,这两个脚本可以正常工作,所以我认为可能还有另一个问题。我最初认为这可能是我用来实现服务器和客户端脚本(pyModbuspyModbusTCP)的模块上的一个错误,但事实上它们在手动启动时没有问题,这让我认为我可能做错了什么我通过 Python API 启动脚本的方式。

这是启动模拟的脚本:

启动此脚本时,日志显示客户端在一段时间内正确接收了响应。但是,在某个时刻,服务器总是会开始发送空响应,当我在 miniedit 配置上手动运行脚本时,这种情况永远不会发生。

这些是服务器和客户端脚本(这些是作为默认示例给出的简单 pyModbus 和 pyModbusTCP 脚本):

服务器

该服务器基本上会定期更新一些值并侦听查询。

客户

此客户端连接到服务器并定期发送查询。

我已经在这个问题上敲了一段时间,但找不到解决方案。我错过了什么吗?

0 投票
1 回答
1880 浏览

python - pymodbus:从 Modbus 设备读取字符串和多种类型数据的问题

我正在尝试从Modbus TCPString设备读取(Usecase-1) & multiple type of data in one request(Usecase-2) 数据,但它未能正确解码。

系统配置:

Python 3.6.5
Pymodbus:2.1.0
平台:Windows 10 64 位

Modbus TCP 服务器:

Modbus TCP 客户端:

输出用例 1:

Modbus 客户端应该将字符串解码为abcdefghij但是,它正在将其解码为cdefghijab.

输出用例 2:

查看上面读取多个寄存器的输出,输出值与输入给定的值不匹配BinaryPayloadBuilder

我已经尝试了byteorder&wordorder的所有组合,但是它不适用于任何情况。

请帮助我理解为什么数据会这样解码?在对这些数据进行编码或解码时,我是否遗漏了一些要添加的内容?

仅供参考:此解决方案适用于Pymodbus 1.5.1版本。最近我升级了版本,但它未能按预期工作。

任何帮助,将不胜感激。

0 投票
1 回答
3619 浏览

python - 如何在pymodbus中分配保持寄存器?

我正在 Raspberry Pi Zero 上制作一个 modbus 服务器,以将数据发送到 Modbus 客户端/数据记录器。我正在尝试使用pymodbus,但我在阅读文档时遇到了麻烦,想知道是否有人可以告诉我如何为保持寄存器分配特定值?我使用同步服务器示例作为我的起点。我对 Python 相当陌生,真的需要了解这个代码/程序中发生了什么,所以如果我需要进行更改,我可以。任何帮助,将不胜感激。

看起来我使用了错误的服务器,应该使用回调服务器,但我仍然不确定如何将数据分配给由本地传感器/设备读取的输入/保持寄存器。这是回调服务器的代码:

再次感谢任何帮助。

0 投票
1 回答
1422 浏览

python - 使用 Pymodbus 将 RS232 Ascii 转换为 Modbus TCP

我正在尝试使用pymodbus Callback Sever将 RS252 Ascii 字符串数据从传感器转换为 Modbus TCP 输入/保持寄存器,当请求客户端记录器时,服务器是主报告数据,我不确定我需要做什么才能得到这工作。我目前能够读取数据并将其记录到 csv 文件中

来自传感器的字符串从设备中出来:

我需要将每个部分都作为自己的 Modbus 寄存器,并且我正在尝试在 Raspberry Pi Zero 上使用 pymodbus。传感器每秒更新 4 次,我能够将数据分成几部分,但我还没有做到这一点,因为我不确定我需要在回调脚本中做什么,我还不太精通 Python我还在学习中。我确实了解 Modbus TCP,并且之前在 Arduino 系统上使用过它。任何帮助,将不胜感激。