问题标签 [pymodbus3]

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 投票
2 回答
10628 浏览

python - Pymodbus 读取保持寄存器

我被指派在没有任何文件的情况下执行任务。我从 MODBUS 读取数据时遇到问题。这是我能够创建的脚本:

一切看起来都很好,但是计数器上的数据与脚本中的数据不同,例如:

这就是地址文档的样子”

0 投票
2 回答
5938 浏览

python - Modbus 错误:[Invalid Message] 收到不完整的消息,预计至少 2 个字节(收到 0)

问题

pymodbus 主/客户端可以向从/服务器发送请求。从机/服务器使东西准备好返回,并等待主/客户端来接它们。尽管服务器/从机准备就绪,主/客户端只是返回错误“Modbus 错误:[输入/输出] Modbus 错误:[无效消息] 收到不完整的消息,预计至少 2 个字节(收到 0)”。

设置

我通过此适配器将笔记本电脑用作服务器/从机:https ://www.amazon.com/dp/B076WVFXN8/ref=twister_B076X1BS4H?_encoding=UTF8&psc=1

我有一个 Raspberry Pi 3 / BananaPi 作为主/客户端,并附有此适配器:https ://www.aliexpress.com/item/32781613765.html?spm=a2g0s.9042311.0.0.1aec4c4d0EXx8M

我正在关注本教程的大部分设置,除了 Arduino 与笔记本电脑适配器交换:https ://circuitdigest.com/microcontroller-projects/rs485-serial-communication-between-arduino-and-raspberry-pi - Raspberry 的引脚连接与教程中的一样。

我有这个程序作为我的笔记本电脑上的服务器/从机:

server/slave 上的 python 版本是:

我用这个命令开始它:

我在 Raspberry Pi 3 / BananaPi 上有以下作为主/客户端:

测试和分析

我尝试过 Raspberry Pi 3 和 BananaPi。结果相同。

我试过波特率 = 9600、38400,现在是 115200。

正如您在代码中看到的那样,超时已经很高了。

服务器/从属的日志:

上面的服务器/从服务器只是在最后一条日志行之后用闪烁的光标等待......

主/客户端的日志:

主/客户端上的python版本是:

我用这个命令开始它:

Raspberry/BananaPi 上 /dev 的权限是:

在笔记本电脑上的服务器/从机上:

我尝试使用 RS485 协议发送简单的数字。它们可以从 master/Raspberry/BananaPi 发送到笔记本电脑,但不能反过来。

我的设备权限设置错误吗?...

我究竟做错了什么?...

我错过了什么?...

由于 RS485 只能以一种方式工作,我认为 pymodbus 不是问题(?)...(我的逻辑是 pymodbus 建立在 RS485 标准中,如果 RS485 的底层不起作用,pymodbus 将不会. 这个假设正确吗?)

我知道有些人在谈论 Raspberry Pi 的引脚电压为 3.3V,不适用于 5V 引脚单元。尽管如此,所有教程似乎都忽略了这一事实并起作用。- 或者他们只是假装它有效?TTL 规范表明所有高于 2.5V 的电压都将被视为 HIGH。所以在理论中,3.3V 应该没问题,正如教程所建议的那样。

我故意还没有在 tx/rx 线上连接任何电阻用于上拉/下拉。教程不建议它们。

我已经使用 modbus 温湿度传感器测试了笔记本电脑上的 RS85 适配器。这似乎完美无缺。所以这个事实表明 BananaPi/Raspberry Pi 和 RS485 适配器组合 + 软件 + 设置在某种程度上存在缺陷。

0 投票
0 回答
229 浏览

server - ModbusTCP:逆向工程,没有客户端(主)的任何文件

概念

我们有一个船舶模拟器(客户端)和 Modbus 控制器(服务器)。我们的目标是在我的 PC 上开发一个模拟器(如控制器) 。但是我们没有关于客户端(模拟器)的信息。

进步

  • 首先,我们检查了控制器(服务器)的实际输出。有 7 个不同的变量,如发动机电报、舵角等。
  • 其次,我检查了存储命令值的控制器的寄存器号。那是从0到7。

安装了 Modpoll 软件的轮询服务器服务器:

屏幕1

  • 我检查了寄存器类型。这是一个持有登记册

  • 我编写了一个脚本来开发一个像 pymodbus Server 的控制器一样的服务器。我不仅可以在保持寄存器上写入从 0 到 7 的特定值,而且还有适当的握手和对模拟器(客户端)的响应

问题

  • 客户端使用 256 的寄存器号发送读取请求这意味着我的服务器以零值响应,而不是用寄存器上从 0 到 7 写入的命令值。但问题是模拟器(客户端)在其图形用户界面上显示参数的变化。

来自 wireshark 的屏幕截图 - 它显示 clinet(simulator) 从 246 发送一个注册号为 246 的请求:

屏幕2

  • 客户端不仅发送读取请求,还发送写入请求,写入请求会覆盖服务器(PC)写入的值。

问题

  1. 模拟器怎么可能通过请求不同的寄存器号来接收命令信号?客户端必须发送一个注册号从 0 开始的请求才能接收命令信号。

  2. 我无法理解为什么客户端在从服务器读取值之前先写入。此读取请求会覆盖服务器 (pc) 写入的值。服务器(控制器或 pc)将向模拟器发送命令信号。我不知道为什么模拟器首先在服务器上写入一些值并读取它。

请就这个问题提出建议。

最好的问候 Byeon seongsu。

0 投票
0 回答
53 浏览

modbus - How do you chose which slave to control in PyModbus?

So I'm doing a project where I have a Raspberry Pi 4 as master controlling 4 actuators with Modbus. I'm using PyModbus (with python 3) and I've been using code like this to test the Pi (with a PC slave simulator).

#xA;

It's been great so far. But now I've switched from testing with the simulator to testing on the real actuators and I've only just now realized that there doesn't seem to be a way to "switch" the slave you read/write to. Considering I'm aiming for 4 slaves this is a problem.

So after searching online didn't reveal an answer I'm hoping someone here has a solution. I'd rather like to avoid using something other than PyModbus since it took awhile to find a Modbus library that worked for me.

0 投票
0 回答
980 浏览

python - 如何在支持以太网的 delta plc 和 python pymodbustcp 之间进行通信

请帮帮我我的第一个测试是使用 Delta DVP-12SE11R PLC,连接使用 Modbus TCP/IP 协议。我有一个使用 pymodbustcp 模块编写的 python 代码。我已经用 modbus slave 模拟器测试了该代码,它工作正常。在模拟器上读取和写入所需的寄存器。我的问题是,当我将 plc 硬件连接到 PC 并向 python 代码提供 plc 的 IP 地址和端口号时,它将开始读取和写入我在代码中指定的寄存器,或者我是否缺少通信所需的东西?

这就是我正在使用的:

我确实使用 python 链接 tcp 模拟器进行了检查,它与模拟器完美配合。

0 投票
2 回答
413 浏览

docker - 从手动 Docker 主机网络传递到 Docker Compose 网桥

我有 2 个 docker 映像,一个 modbus 服务器和一个客户端,我手动运行它们,docker run --network host server并且与客户端相同并且可以完美运行。但是现在我需要将它们添加到网络是桥接的 docker-compose 文件中,我这样做是这样的:

我读到从一个容器引用另一个容器(客户端到服务器)我必须使用 dockercompose YML(自动服务器)中的服务名称,这就是我所做的。在客户端执行的 python 文件中(这是来自 pymodbus 的 performance.py),我将 'localhost' 更改为

但是我收到此错误:

[ERROR/MainProcess] 未能成功运行测试 Traceback(最近一次调用最后一次):文件“performance.py”,第 72 行,在 single_client_test client.read_holding_registers(10, 1, unit=1) 文件“/usr/lib/python3 /dist-packages/pymodbus/client/common.py”,第 114 行,在 read_holding_registers 返回 self.execute(request) 文件“/usr/lib/python3/dist-packages/pymodbus/client/sync.py”,第 107 行, 在执行 raise ConnectionException("Failed to connect[%s]" % ( self.str ())) pymodbus.exceptions.ConnectionException: Modbus Error: [Connection] Failed to connect[ModbusTcpClient(autoserver:5020)]

如所问,我完整的 docker-compose YML 是这样的:

0 投票
1 回答
79 浏览

python - 通过 TCP/Forwarder 读取 RTU Pymodbus 数据

我通过 RTU 连接了电能表,并且能够通过简单的 RTU 代码获取保持寄存器数据。现在我想通过转发器将此 RTU 转换为 TCP。我想向 TCP 发送数据,TCP 将命令转发给 RTU 并为我获取 RTU 连接设备的数据。

我已经实现了转发器代码,只是不知道如何通过它获取 RTU 的保持寄存器。

0 投票
1 回答
214 浏览

tcp - 多个 modbus 从站的模拟器

您好,是否有任何 tcp modbus slave 模拟器可以同时从一台 pc 模拟 3 个 slave?可能吗?

主要概念是我必须处理一个控制一些 VFD 的 plc,尽管我想模仿那些 VFD 并将这 3 个的反馈从我的电脑返回给 plc。

0 投票
0 回答
115 浏览

modbus - 使用 pymodbus3 同时读取线圈和保持寄存器

我有一个可以使用 pymodbus3 库连续读取线圈状态的工作代码。代码如下所示。这改编自一个基本示例,用于查找线圈状态(地址 0x01)更改为“1”并按要求执行任务而不会失败。

现在,我还需要并行监视保持寄存器(例如地址 400001)并读取值。由于保存寄存器已经在 run_server() 函数中初始化,我想我不必在那里做任何事情。但是我不确定在 updatevalues(a) 函数中要做什么,以便也可以监视保持寄存器。

谢谢您的帮助。

0 投票
0 回答
293 浏览

python-3.x - 使用 Pymodbus (Modbus RTU) 读取寄存器

我正在尝试与使用 Modbus RTU 协议的 Modbus 从设备通信,RPi 在 python 3.8 中具有 pymodbus lib。这是这个库的链接 http://riptideio.github.io/pymodbus/

我担心的是打印持有寄存器响应时。我已经阅读了有关它的其他帖子,人们建议将“.registers”与打印命令一起使用。

如何使用 pymodbus 从寄存器中读取

有时,我会打印出该值,但有时我会看到此错误

首先,我想知道为什么这有时有效,有时无效。正如我在 pymodbus 文档中看到的那样,没有名为 registers 的属性,那么它第一次是如何工作的?这是我的代码:

有没有更好的库/方法/方法来克服这个问题?我想要的只是为寄存器提供稳定的读/写输出。稍后我想调用一个由此创建的类,所以不希望出现有时我确实得到输出而其他时候抛出错误的情况。