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

python - Pymodbus TCP `read_holding_registers` 返回陈旧/旧数据

我已经开始使用pymodbus从 modbus 读取值以存储在异地数据库中。我一直在努力解决一个问题,即响应中收到的值与我在 Jace 上看到的值不同。

我也试过modbus-tk了,我得到了同样的错误响应,所以它一定是我的 Python 代码中的某些东西导致了这个问题。从我们的遗留系统 (VB.Net) 检索到的读数与我在 Jace 上看到的输出相同。

这是从 modbus 检索数据的简单函数。我们有 2 个寄存器,4016040162一个正在读取366,这是正确的,第二个正在读取367(这是我遇到问题的那个)。我也看到了与其他寄存器相同的问题,即使我可以在 Jace 上看到值增加了,读数也不会更新。

Pymodbus 调试日志

杰斯阅读

配置

更新

在 Sanju 的帮助下,有人向我指出我使用的偏移量可能不正确。情况确实如此,通过将偏移量更改 1 (40162 - 40001 = 161) 我能够从寄存器中检索正确的值,wordorder需要更改为Endian.Big.

更新代码

0 投票
1 回答
755 浏览

python - 如何通过重新启动应用程序克服 ModbusTcpServer 中的“地址已在使用中”?

描述和代码:

我正在使用带pymodbus库的同步 ModbusTcpServer 来创建 Modbus 从站/服务器,代码如下:

当客户端应用程序连接到此服务器并且我关闭此代码(使用Ctrl+ C)并再次运行时遇到此错误:

OSError: [Errno 98] Address already in use 我知道在创建套接字时我们可以用它socket.SO_REUSEADDR来克服这个问题。

另外,我可以.close()在客户端连接来解决这个问题,但我想要一个稳定的服务器。


问题:

有没有内置的方法来克服这个问题?socket.SO_REUSEADDR我在异步 ModbusTcpServer (in ) 中找到了这个参数 ( ),async.py但在 Synchronous ModbusTcpServer ( sync.py) 中没有。


[注意]:

版本

  • 蟒蛇:3.6.5
  • 操作系统:Ubuntu 16.04
  • Pymodbus:1.5.2
  • Modbus 硬件(如果使用):否

Pymodbus 特定的

  • 服务器:tcp - 同步
  • 客户端:tcp - 同步
0 投票
0 回答
41 浏览

python - Python集中信息

我目前正在 Pyhton (Kivy) 做一些机器的开发,将安装在城市的各个地方,我希望机器的所有信息都集中并实时更新。

例子:

用户 X 在机器 1 上注册,5 分钟后他移动到机器 2,并可以使用他在机器 1 上提供的信息进入。

你推荐什么方法来进行这个开发?

0 投票
1 回答
581 浏览

python - 当 write_registers() 更通用(pyModbus)时,我应该使用 write_register() 吗?

我开始在 Python 3.7 中使用 pyModbus。在 pyModbus.client.sync.ModbusTcpClient 中有两种写法:

write_register() write_registers()

使用带有 1 个元素的寄存器列表的 write_register() 而不是 write_registers() 有什么好处吗?总是使用后者会简化我的代码,但我想我会检查一下。

0 投票
2 回答
585 浏览

python - 测试请求 Modbus TCP

我有一个问题,我通过 Modbus TCP 进行通信测试,每个请求大约需要 200 毫秒,是否可以改善这些时间?

这是我用于测试的代码:

0 投票
1 回答
1018 浏览

python - 没有互联网连接时停止 python 脚本中止

我有一个在使用 Azure IOT SDK 的 revPi 上运行的 python 脚本。该脚本基本上接受来自 .json 文件的一堆 modbus 寄存器,添加一些属性并将其发送到 Azure IOT 中心进行分析。

该脚本目前过于依赖网络连接,并且由于基础设施限制,连接不可靠,并且经常导致脚本经常死机/中止。如何使脚本在这个糟糕的互联网连接上运行?使用的主要库是 pymodbus 和 iothub_client。

0 投票
1 回答
1972 浏览

pymodbus3 - pyModBus : 检查线圈是真还是假

我正在尝试学习如何通过 python ModBus 模块向 PLC 引入值我目前正在尝试做的只是读取线圈 1 的值以检查它是真还是 ,所以我正在使用

我得到这个作为响应ReadBitResponse(8)我怎样才能从读取线圈中获得“真”值

0 投票
0 回答
49 浏览

pyserial - 从十六进制 pyModBus 中删除尾随位

我想构建一个函数,将请求从 ModBus 发送到十六进制的串行。我或多或少有一个工作功能,但有两个问题。

第一期

我无法使用.split('\r \n')方法删除这部分 b'\r', b'\n' ,因为它不是字符串。

问题 2 从持有寄存器 40 (33) 获取值时,我尝试使用.to_bytes()方法,我不断得到 b'\x00!', b'\r' 并且我期待 b'\x21'

我的功能是生成我的请求并通过 pyserial 发送。

作为一个额外的问题,这是正确的做事方式吗?

0 投票
1 回答
82 浏览

python - pySerial 捕获长响应

大家好,我正在编写一个脚本,该脚本将使用数据通信标准由视觉委员会的数据通信标准委员会镜头处理部门开发)通过串行端口从主机获取数据,并将数据传递到ModBus协议中设备来执行它的操作。

由于我在财务上无法访问主机,因此我正在尝试开发一个辅助脚本来模拟主机。我目前处于需要从串口读取大量信息的阶段,而我只获得了部分数据。我希望在我的主机模拟器脚本上的send_job()函数上发送整个字符串。

伙计们也可以告诉我这是否是一个好方法吗?机器唯一应该做的就是从主机响应中获取 2 个值并将它们分配给两个 modbus 保持寄存器。

注意:初始化函数是硬编码的,因为它总是相同的,除了状态之外,实际的响应数据无关紧要。此外,作业请求是硬编码的,我只传递从 modbus 保持寄存器获得的作业#,关于主机如何解决这个问题的确切逻辑并不重要,我只需要以这种格式发送从设备扫描的作业编号。

主脚本:

主机仿真脚本:

我在屏幕上看到的内容:主脚本

我在屏幕上看到的内容:主机仿真脚本

0 投票
1 回答
318 浏览

python - 使用python在modbus中读取响应消息

我正在尝试在 pymodbus 模块的帮助下使用 python 通过 modbus 发送查询并获取响应消息(数据)。

正在打印的响应是发送的请求消息和进程状态。我有兴趣阅读从从站发送的数据,而不是进程状态。你能帮我解决这个问题吗?