问题标签 [minimalmodbus]

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 回答
588 浏览

python - 使用 RS485 和 minimummodbus 处理 Python 脚本的超时

目前在 RS485 总线上读取 1(一个)RS485 kWh 表,类型 DDS238-1ZN 通过 Python 脚本“辅助”模块 minimummodbus。添加更多 kWh-meter 意味着(在安装之前或安装期间)添加的 kWh-meter 的 Slave-Adress 必须从最初的“1”转移。这种换档动作从扫描 RS485 总线开始,以确定 kWh 电表的实际位置。

第一步是以下简单的 Python 脚本

对从地址 00 和 01 的检查按预期产生结果 (257),但(由于没有设备)显然对从地址 02 的响应因超时而失败。

有关进一步的问题描述,请参阅http://www.domoticz.com/forum/viewtopic.php?f=31&t=13592#p102901

从测试运行中,我可以看到发生了超时。如果我知道这种超时信号的布局,可以触发一个超时信号,以检查下一个从属地址。

在互联网上搜索替代方案,我看到了所有类型的“精彩 & 精心”解决方案来捕获超时,但从我的简单脚本的角度来看,我正在寻找一些非常基本的东西(最好是“单线”)来启用退出超时以检查下一个从地址 3 等。

看看上面提到的那些解决方案,下面的半代码设置可能是一个简单/基本的解决方案吗?[为此我一直在寻找 C 函数 fread() 的方向]

关于使用 Python 或 MinimalModbus 执行半代码的脚本的任何提示,与第一个脚本兼容?

0 投票
1 回答
1821 浏览

python - RS485 Modbus-RTU 设备给出的这个错误是什么

我正在使用minimummodbus使用USB-RS485 适配器电缆通过 RS485与PID 控制器(Love 16C-3)进行通信。

但是,当尝试读取寄存器时,会显示以下错误。这个错误是什么意思?

来自硬件手册

在此处输入图像描述

Python代码

在此处输入图像描述

0 投票
2 回答
1424 浏览

python - Gefran 800P 和 minimummodbus (Mac):“ValueError:Modbus RTU 响应太短(最小长度 4 个字节)。响应:'\x00'”

我是 Python (FYI) 的初学者,并尝试使用 minimummodbus 库 (Python + Mac) 与 Gefran 800P 程序员/控制器进行通信。我正在使用 USB 到 RS485 串行转换器电缆 ( http://www.ftdichip.com/Support/Documents/DataSheets/Cables/DS_USB_RS485_CABLES.pdf ) 与 Gefran 设备进行通信。设备背面的引脚 (15+17(Rx+Tx) & 16+18(Gnd+Gnd)) 分别连接到转换器电缆的 Data +(A) 和 Data -(B) (RS485-2wired联系)。我不知道该设备的从属地址,并且手册中没有提到地址(http://www.primusthai.com/marketing/Gefran%20800%20(Controller).pdf)。

我努力了:

  1. 将从机的地址从 0 更改为 247,我总是收到相同的消息。
  2. 尝试检查不同的寄存器地址并使用功能代码(3&4),使用程序员设置确保代码和设备中的两个参数相同。没有任何作用!也许我错过了一些东西。期待您的帮助。我现在真的被困在这一点上一个多星期了!

下面是我的代码,当我运行它时,它给了我一个错误“ValueError: Too short Modbus RTU response (minimum length 4 bytes). Response: '\x00'”。

0 投票
1 回答
170 浏览

python - python minimummdobus 如何正确解释寄存器?

我在我的 raspbian 测试系统上使用 python。用于与PT100 温度传感器连接的 10 通道设备 (Temco P3-PT10) 通信,即时通讯使用minimummodbus

因此我想读取寄存器 100~101 的通道 1 的温度: 描述说:“当设置 INT 时,100 将显示 0 和 101 显示通道 1 的温度,设置浮动时 250= 25.0C,100 和 101 显示25.0000C"

我开始阅读:

我得到了以下输出:

地址 100 R: 62915 F: -4.95029165077e+32 // 地址 101 R: 16684 F: 10.7924995422

第一列显示寄存器值,第二列显示返回的浮点值。

我的问题: - 什么存储为寄存器值?我可以将它们转换为浮动吗?- 为什么浮动的第一个值是负数?

我做错了什么吗?

谢谢你的帮助!

0 投票
1 回答
855 浏览

python - MinimalModbus read_registry 错误

我正在尝试使用 MinimalModbus 从 modbus 设备读取注册表信息。但是,每次我尝试读取40003值为的注册表时,都会220收到此错误:

我知道其中的价值,40003并且我正在关注该设备的通信文档。这是我的代码:

我对每个注册表都有这个问题,我找不到有关Àñ.

0 投票
1 回答
533 浏览

python - Tkinter:对每秒发生的事件进行多处理

我制作了一个从 modbus 从设备读取的 Tkinter 程序。它每秒读取设备并将输出显示在标签上。但是,我有多个选项卡,它们为每个连接的设备运行相同的代码。在读取设备时,整个 GUI 会冻结,因此在读取完成之前您无法移动程序或按下按钮。多处理有助于冻结吗?如果是这样,我该如何实施?

这是我的代码:

0 投票
2 回答
544 浏览

python - 通过 rs-232 使用 minimummodbus 初始化设备

我正在寻找有关使用 python (2.7) 库“minimalmodbus”(0.7 版)与 Test Equity Modela 115a-F4T 热室通信的一些建议。

我对使用 python 编程硬件很陌生,所以我不太确定我的方法是否缺少一些基本的初始化命令。这是我的代码:

这是我的输出:

热室通电。我通过串行到 USB 电缆连接到它。我还在电缆的串行端(在腔体上)放置了一个零调制解调器适配器,正如腔体手册中所指出的那样。我假设我的第一行代码是初始化控制室的代码。但是,我的错误消息表明并非如此。

在这里寻找一些帮助或指导。谢谢你。

0 投票
1 回答
907 浏览

python - 在minimalmodbus python中从slave中提取有效负载

我正在使用 minimummodbus 与使用 rs485 协议的微动流量计进行通信,并且我正在使用 usb-rs485 转换器。微动 modbus 文档在此处给出。

http://www2.emersonprocess.com/siteadmincenter/PM%20Micro%20Motion%20Documents/Modbus-Map-Manual-20001741.pdf

当我使用此代码从 2 个寄存器中读取浮点数时

它给了我这样的回应:

应该是 29.879 或 29.78687 之类的。这是由于字节串的顺序。这里给出了一个解决方法。 https://minimalmodbus.readthedocs.io/en/master/advancedusage.html#workaround-for-floats-with-wrong-byte-order

正如它使用此代码在那里写的那样

或类似的东西,我们可以正确设置字节顺序以获得正常输出。但我坚持使用

返回 singed int 并且如果您读取 2 个寄存器,它将在列表中给出 2 个值。

我应该如何让字节串正确设置其顺序。现在我的问题是如何从从站保存有效负载。我想将此字节字符串保存到变量中的'\x01\x03\x04\x9f3Aâ\x941',以便我可以更改字节顺序。并将其传递给 _bytestringToFloat() 以便我可以获得实际值。我是新手,所以请帮忙。

0 投票
2 回答
984 浏览

modbus - Modbus 读取成功,但 modbus 写入返回 null(使用最少的 modbus)

我正在使用以下参数从设备读取和写入寄存器波特率 - 9600 stopbit-1 no_of_bits - 8 parity - 奇数

我目前正在使用最小的 modbus 库。我的读取寄存器的代码粘贴在下面

【参考线程Python modbus库

读取寄存器工作正常。

但是我的 write_register 在这里失败了。我正在读取设备的第 5 个寄存器。代码如下。

Traceback(最近一次调用最后一次):文件“C:/Users/Admin/PycharmProjects/weight_calibrate/weight_calibrate.py”,第 17 行,在 mmc.write_register(4, 5, 0, 6, False) 文件“C:\Users \Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\minimalmodbus-0.7-py3.6.egg\minimalmodbus.py",第 296 行,在 write_register self._genericCommand(functioncode, registeraddress, value, numberOfDecimals , signed=signed) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\minimalmodbus-0.7-py3.6.egg\minimalmodbus.py”,第 697 行,在 _genericCommand payloadFromSlave = self._performCommand(functioncode, payloadToSlave) 文件 "C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\minimalmodbus-0.7-py3.6.egg\minimalmodbus.py",第 795 行,在 _performCommand 响应 = self._communicate(request, number_of_bytes_to_read) 文件“C:\Users\Admin\AppData\Local\Programs\Python\Python36\lib\site-packages\minimalmodbus-0.7-py3.6.egg\minimalmodbus.py ", line 930, in _communicate raise IOError('No communication with the instrument (no answer)') OSError: No communication with the instrument (no answer)

我检查了请求中的数据包是完美的,甚至是CRC。然而,设备的响应为空,这就是代码失败的地方。

最小的modbus.py

因为答案是 b''

我可以使用工具简单地使用 modbus master 8.0.7 写入设备的寄存器,并且请求数据包在两种情况下都具有相同的内容。这表明我有权写入端口。此外,由于即使读取实际上也会将请求写入端口,所以文件权限可能不是我假设的问题。

请建议我是否在这里遗漏任何设置..

我还尝试了库 modbus_tk ,但在这种情况下它也失败了。

0 投票
2 回答
7117 浏览

python - 我可以使用 Python 读取从计算机上接收到的 Modbus RS485 数据吗?

我正在使用从属计算机,并希望将通过 Modbus RS485 从主计算机传输的数据保存到文本文件中。主机不断向我正在工作的从机发送写入和读取请求,下面是串口监视器捕获的图片。

在此处输入图像描述

我刚刚发现使用 minimummodbus 可以读取寄存器。但它似乎只有在您是主设备时才有效。我可以在从属计算机上做类似的事情吗? http://minimalmodbus.readthedocs.io/en/master/usage.html