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

python - Python:将 uint16_t 数组转换为字符串(通过 RS-485 来自 Arduino)

我正在尝试通过 modbus rtu 发送 json(我知道,modbus 的使用非常糟糕。)

我的架构类似于: 在此处输入图像描述

我已将 Arduino USB 连接到 PC 作为 COM5 和 RS485 转换器连接到 USB-RS485 到 PC 作为 COM4。

在此处输入图像描述

如果我使用QModBus应用程序从 Arduino 读取数据,我会看到很多字节(COM4)。

用于控制:在我从 QModBus 发送“读取保持寄存器”后,Arduino 串行监视器在“Arduino usb 端口”(COM5)上打印有效字符串。所以我的意思是 modbus 字节没问题:

在此处输入图像描述

有我的 Arduino 代码:

但我不知道如何在 python 中将这些字节转换回 json 字符串。我的代码:

代码打印我与 QModBus 相同的值:

你能帮忙吗,如何将这些数字转换为 json 字符串,正如你在 arduino 串行监视器中看到的那样?

以及如何将 python 字符串转换为“uint_16t”以通过 modbus 发送。

谢谢!

0 投票
1 回答
351 浏览

modbus - modbus如何部分损坏?

我有一个 modbus 从站,我从中接收到似乎部分损坏的响应。我已确认在某些情况下通信良好。在其他情况下,我收到校验和错误。

如果发送命令01 04 00 05 00 01 21 CB,其中 04 是读取输入寄存器,05 是地址,我返回 3 次F8 9E 01 04 02 00 97B8 9A 01 04 02 00 9238 9D 01 04 02 00 93。由于01 04 02 00每次都是一致的,因此信号似乎并未完全被丢弃,但前两个字节显然导致校验和失败。

什么问题导致了这种行为?

我在 Raspberry Pi 上使用 python minimummodbus库。

编辑说明:我将其发布到 SO 是因为它在 SE 网络上有所有 modbus 问题,但如果有人能想到一个更好的地方,我愿意移动它

0 投票
0 回答
524 浏览

python - python最小modbus写浮点字交换

我试图使用最小的 modbus 来 write_float 的 PLC 需要交换单词。

我已经使用有效的 Modbus Poll 测试了硬件。Minimal Modbus write_float 也可以使用,但字序错误。我检查了适用于解决方法的 read_float 的文档解决方案。

尝试使用单独的 write_register 作弊也会产生负值错误:

例如:

我需要:

我得到:

0 投票
1 回答
270 浏览

python - MinimalModbus 批量读取超时

请在这里找人帮忙。我正在与 modbus 设备通信并按预期取回数据,我对此很陌生,所以我需要一些建议,我试图读取我的设备(伊顿 SC200)上的所有位寄存器以用于自定义 HMI。如果我尝试 for next 循环,或者甚至在发布的代码中,com 端口会失去通信。

我得到的回应是这样的:

我已将 Timeout 更改为从 0.5 到 2 的各种值,以查看这是否是问题所在,有时我会运行完整的数据,而有时我什么也得不到。任何帮助将不胜感激。

0 投票
2 回答
6539 浏览

modbus - 自动发现网络中 modbus 设备的从设备 ID

通过广播机制获得有效的ip范围后如何确定连接到网络的设备是否为modbus设备或如何自动发现连接到网关的modbus设备的slave id?

0 投票
1 回答
2635 浏览

python - minimalmodbus read data bits

data blocks I cant seem to be able to read

I'm only quite new to python and modbus and I have been struggling to work out how to read the MSBytes and LSBytes of this controller using both pymodbus and minimalmodbus for a week or two now so hopefully someone in the brains trust here might be able to poke me in the right direction.

This particular controller has 3 digital/coil registers (2 register addresses are read only with 8 MSBytes and 8 LSBytes and one register 1536 as pictured above which has read and write 8 MSbytes and 8 LSBytes) However I'm confused because I can't seem to be able to work out how to read them correctly.

I only seem to get errors when I try to read them with a read_coil/bits only function but read_register and read_registers functions returns a single boolean result of 0 or 1 with a count of 1 register.

Using minimalmodbus

returns: 0

returns: [0]

returns: error

UPDATE 12-09-2018:

Reading register when control is Off/standby.

In: client.read_register(1536, 0, 3, False) Out: 1

Reading register when control is On.

In: client.read_register(1536, 0, 3, False) Out: 0

Reading register when control is in defrost.

In: client.read_register(1536, 0, 3, False) Out: 4

Response from trying to write to registers:

The control documentation says to use functioncode 6 to write changes to registers however it seems to take the new value without error but doesn't update or change the controller register.

If I use functioncode 6

In: client.write_register(1536, 1, 0, 6, False) (no error or output, and register value doesn't change)

If I use functioncode 16 as suggested it leaves the following error.

In: client.write_register(1536, 1, 0, 16, False)


0 投票
1 回答
1686 浏览

python - pyserial/Modbus - 故障排除“与仪器无通信”

Beaglebone Black Wireless:Ubuntu 16.04,

电脑:Ubuntu 16.04,

Python 3.5.2

我正在尝试使用 Beaglebone Black 通过 Modbus 与设备通信。我读过有人用 USB/RS485 加密狗使用minimalmodbus. 我试过改变设置;每个可能的波特率,较短的电缆等。Beagle 中必须有一些东西需要配置/错误配置用于此类工作。

代码

...使用USB/RS485加密狗。使用这个加密狗/代码组合在我的计算机上(过去 4 个月)产生了完美的结果,但在今天的 Beagle 上却没有。

计算机:收到的消息:

比格犬:收到错误:

我正在寻找可能的故障排除途径。我已经验证了电缆不是太长,并且 USB 加密狗是可以的。我还排除了任何代码问题。

编辑1:忘记包括lsusbls /dev/ttyUSB*

/dev/ttyUSB0

编辑2:

我能够使用pyserial和短接 Rxd 和 Txd + 和 - 端子来实现环回设置。

编辑3:

我已经尝试了所有可能的接线配置。计算机上只有一种配置有效(Tx+ -> A 和 Tx- -> B)。在使用minimalmodbus调试功能时,我可以看到相同的消息正在发送到 Beagle 上的设备和计算机 ( '\x01\x03\x07Ø\x00\x02ED' (01 03 07 D8 00 02 45 44) )。计算机收到响应,而 Beagle 没有。

Beagle 将适配器安装到/dev/ttyUSB0.

编辑4:

@Carlo Zanocco 要求输出ls /dev/ | grep tty

编辑5:

输出stty -F /dev/ttyUSB0 -a

0 投票
1 回答
745 浏览

python-2.7 - snmpd 通过运行 python

我试图通过 snmp 查询 modbus 设备,使用 snmpd 传递 python 脚本来检索数据。

这是 readvolt.py 的样子:

以及我的 snmpd.conf 中的这一行:

我的问题:我从 python 获得了回溯,找不到 minimummodbus 模块,但是当我尝试直接从主机运行 readvolt.py 时,它按预期工作(它可以打印出结果(伏特))

我还尝试使用简单的python脚本(test.py)来确保snmpd pass是否可以在snmp管理器的snmpget响应时运行python脚本

它运行正常:

这里有什么问题 ?似乎python在通过snmpd pass运行时无法导入外部模块。我在想如果这是一个访问控制问题,Debian-snmp 无权访问串行端口..

0 投票
1 回答
759 浏览

python - 在 minimummodbus 中写入多个从站时出错

我正在尝试使用 Modbus RTU 与温度控制器连接。我对这个话题不是很熟悉,但是我已经能够编写可以读取我的三个温度控制器的温度的代码,但是当我尝试依次写入三个温度控制器时出现错误。我一直在运行的代码是:

同样,当我打印当前温度时,代码不会出错,如果我一次只写入一个寄存器(注释掉其他寄存器并运行它们),它会更改设定点温度并且不会引发错误。

对我来说更有趣的是,当我运行这段代码时,我第一次运行它时,“左”温度控制器的设定值发生了变化,然后抛出了一个错误。下次我运行代码时,“中间”温度控制器的设定值会发生变化,然后会引发错误。上次我运行代码时,正确的温度控制器的设定点发生了变化,没有出现错误。

我往往会遇到不同的错误,我无法真正辨别出一种模式。他们包括:

我尝试将波特率更改为 4800,但我这样做时没有任何效果。从 Modbus RTU 更改为 ascii 时,我也遇到了类似的错误。当奇偶校验设置为默认值时,我也遇到了同样的错误。我还尝试让代码休眠并更改超时,我认为这有助于解决最后一个错误。

任何关于如何尝试停止出现这些错误的建议将不胜感激。

谢谢

编辑

我尝试删除小数位数但仍然得到相同的错误,设置点现在更新,以便 80 变成 8.0,这没什么大不了的。

这是我运行代码时得到的完整响应,现在没有小数位数:

左边的温度确实发生了变化。我仍然偶尔会收到仪器超时错误,但上面的错误似乎是最常见的错误。我想我会检查我是如何连接接口的,因为我想知道这是否是问题所在。

编辑二

我想我想通了,我只需要增加超时时间(我以为我已经有,但我想还不够)minimalmodbus.TIMEOUT = 3似乎让一切正常。

谢谢您的帮助!

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'