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

python-3.x - Minimalmodbus 功能码 0x46 和子功能 06

我正在使用 Python 3.x 中的 minimummodbus 与辐照传感器通信。我可以建立通信并读取传感器的寄存器。传感器的波特率为 9600,但我想将其更改为 38400。

传感器的数据表上说可以通过使用功能代码 0x46 和子功能 06 来完成。

数据表

我发现minimalmodbus只使用了功能码1、2、3、4、5、6、15和16,我还没有发现任何使用子功能的可能性。

我有什么选择可以更改波特率,还是应该将另一个库的 minimummodbus 更改为 pyModbus?

0 投票
1 回答
374 浏览

python-3.x - 如何使用最小的modbus在python中实现slave?

我正在使用 python minimamlmodbus 库使用这个库我想实现从属和主控通信,我将成为从属,仪器将成为主控

我已经使用最小的modbus成功地实现了主从通信,其中master是我,slave是仪器。

我使用以下代码实现主从通信

我希望仪器成为主机,python 接口是从机,这可能吗?

0 投票
0 回答
50 浏览

python - 从仪器读取时如何调整日期时间序列?

我正在使用 minimummodbus 通过 Modbus RS-485 进行通信。该代码每 6 秒读取 4 个寄存器。然后,每分钟将每个变量的平均值保存在 csv 文件中。目标是每分钟都有时间序列数据,但有时我会丢失 1 分钟的数据,因为在循环的每一步中读数之间的睡眠时间并不相同。

我试图通过休息完成过程所需的时间来调整时间,但很难调整它。

任何想法如何改进它或任何关于不同方式的建议以准确地每分钟保存数据?

以下是我使用实际代码获得的数据

18:11 有一个小跳跃。

0 投票
1 回答
97 浏览

python - 处理来自从属寄存器的异常响应 - 制造商添加了额外的“FF”

我正在通过 RS485(Windows COM 端口上的 USB 到 RS485 适配器)成功地与微控制器通信。我编写了一个小程序minimalmodbus来处理 modbus RTU 通信,它运行良好。

我正在与之通信的微控制器也有 TTL 引脚,制造商做了一些非常奇怪的事情。'FF'他们在单元响应之前添加 hex ( ) x 3。正如你可以想象的那样,这让我在试图理清如何处理响应时感到头疼。我正在修改minimalmodbus库的各个部分(本地开发安装副本),试图强制它接受完整的答案,然后去除前三个'FF'十六进制字符以获得正确的有效负载。到目前为止,我没有成功。我认为这家制造商这样做是为了使用 3 x'FF'作为计时机制,并且他们提供了一个 USB 密钥,该 USB 密钥具有此'FF'过滤器作为选项可用。我的程序将通过此键使用此FF过滤器工作。但是我希望使用自己的设备和minimalmodbus库,所以我想知道如何去除这些主角'FF'。有人有什么想法吗?@乔纳斯伯格

我正在尝试修改minimalmodbus安装在 pip3`` 开发下的分叉库的部分。到目前为止,我得到的最好的是一个有点奇怪但值得一提的回应。我发送read_register询问hex(225)并返回十进制值 2500。同样,如果我hex(220)返回 2000,发送hex(224)给我 2400 作为响应。我想也许该设备正在回应询问,所以我现在正在尝试有关回声忽略功能的选项,但minimalmodbus到目前为止没有成功。

如果使用得当,我的代码可以正常工作,所以我认为这在这种情况下不会有帮助。我真的需要'FF'通过修改minimalmodbus包来去除前三个(十六进制)值。

根据我修改的内容,我会收到各种错误。原始错误是校验和错误:

我从图书馆评论了这一部分,minimalmodbus作为尝试解决我的问题的开始。显然,有一个更好的方法可以克服这个问题,希望其他人以前也遇到过这个问题。

0 投票
2 回答
2436 浏览

python - 无法使用 minimummodbus 与 Modbus 设备通信

我无法与使用 minimummodbus、Modbus RTU 的设备通信。

我已通过 USB 到 rs-485 适配器(FTDI 芯片)A 到 A 和 B 到 B 将设备连接到树莓派。

设备配置如下:

  • 端口设置

    • 波特率:9600
    • 奇偶校验:否
    • 停止位:1
    • 静音间隔:70 毫秒。
    • 传输方式:RTU
  • 接口 2 线 RS485

    • ECM 接头:DB9
    • 连接:A 在引脚 1、4 上。B 在引脚 6、9 上

Modbus 保持寄存器(为本示例的目的而简化)

  • 交换浮点格式:
    • 40001 (地址 0) 参数 1
    • 40003(地址 2)参数 2

我曾尝试使用原始串行命令与设备通信,以及使用 pymodbus,现在我最近尝试使用最小 modbus。请参阅下面我的代码尝试使用 minimummodbus。

此外,我知道串行适配器在我将其用于各种其他串行传感器时也能正常工作。唯一的区别是我现在正在使用 modbus。

即使有错误或不正确,我也希望收到某种回复,但我什么也没得到。minimummodbus 的调试输出显示“IOError: No communication with the instrument(no answer)”

我的代码与传感器要求有什么明显的错误吗?我与制造商确认了我的接线,并且是正确的。

0 投票
2 回答
961 浏览

python - 在 Python 中处理 minimummodbus 异常

我正在尝试创建一个小型家庭监控系统。我有一系列将测量数据传输到基站的无线发射器。我可以使用 Modbus RTU 查询该基站,以找出每个发射器的最新测量值。

为了存储测量结果和可视化,我使用了 InfluxDB 和 Grafana。我的一切都在 Raspberry Pi Model 3B+ 上运行,包括与基站的 RS-485 通信。

我选择使用 Python 从 Modbus RTU 读取数据,然后将其转发到 InfluxDB 进行存储,因为 Python 已经为两者提供了现成的库。但是,我正在努力使 Python 脚本稳定。不可避免地,我时不时地在 Modbus 传输中遇到 CRC 错误,并且当 minimummodbus 库引发这些异常之一时,脚本似乎卡住了。

我不确定我应该如何解决这个问题。

目前我正在使用 try-except-else 结构,但是因为我是 Python 的新手,所以我无法让它按照我想要的方式工作。如果我失去一个测量点也没关系。这意味着如果我得到一个 CRC 错误,我可以忘记那个测量并像什么都没发生过一样继续进行。

我目前使用的代码(最小化)如下所示:

最终发生的是脚本可以像梦一样运行几个小时,然后,当传输中发生单个 CRC 错误时,它会进入一个永无止境的异常循环,如下所示:

当我使用 CTRL-C 退出时,脚本实际上看起来在 sleep 命令中:

所以我很困惑,如果它实际上在程序循环中,为什​​么它不向控制台输出正常的打印命令。

在实际脚本中,我有三打 instrument.read_register 调用,所以我不确定是否应该创建一个不同的函数来处理 per-read_register 调用的异常或什么?在过去的一周里,我尝试了六种代码的变体,但由于脚本陷入异常循环,我在 Grafana 中获得的数据非常糟糕。

有什么建议么?

0 投票
1 回答
236 浏览

python - 试图通过 python 控制 DGH D8500 modbus

我有这个名为 DGH D8500 的两通道模拟输出 modbus RTU 协议 USB 接口。我需要通过python动态和自动化地控制通道的电压。我连接它我用它自己的程序尝试了它,但我无法使用 python 与它通信,我尝试使用 pymodbus 和 minimummodbus 但我似乎没有收到任何类型的响应:

波特率 = 9600,奇偶校验 = 无,字节大小 = 8,停止字节 1

Pymodbus 代码

Pymodbus 错误

最小总线代码

最小的Modbus错误

我真的不太明白这是我第一次使用这个,我正在按照步骤的说明进行操作,但由于我的知识很少,这可能只是我的一个小错误。

0 投票
1 回答
2292 浏览

checksum - 如何修复 modbus 中的校验和错误

我有一个脚本,它应该从与 MODBUS 连接的传感器收集浓度数据。当我运行脚本时,会发生此错误:

rtu 模式下的校验和错误: '\x00\x00' 而不是 'c\x85' 。响应是:'\x01\x04\x0e\x00\x00\x00\x00\x00\x00'(简单响应:'\x01\x04\x0e\x00\x00\x00\x00\x00\x00')

这是我的代码:

如何更改对传感器的请求或来自传感器的响应,以使两个数据流的校验和相同?

真诚的,卢卡斯

0 投票
1 回答
327 浏览

python - Python minimummodbus 读取 16 位寄存器

我们有一个加热控制器,它使用 16 位寄存器来读取数据。

示例:寄存器 512 - 0 到 16 位用于读取温度。

此代码适用于此示例

但是这个控制器也有这个位表的第 516 个寄存器:

在此处输入图像描述

无法从此寄存器中获取任何数据。从该寄存器中获取“状态”的位操作必须是什么?

我在谷歌上搜索了两天都没有成功。我不擅长位操作。

任何答案都非常感谢。谢谢!

0 投票
1 回答
5704 浏览

python - Modbus RTU master - 带有最小modbus的python脚本

我想在 MODBUS RTU master 中使用 python 脚本控制执行器。我尝试使用库 minimummodbus 与我的奴隶进行通信(写入位,写入和读取寄存器)。

当我开始我的代码时,我有一些错误。那么,有人可以帮我找到解决方案吗?

我的代码:

错误: