问题标签 [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.
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 发送。
谢谢!
modbus - modbus如何部分损坏?
我有一个 modbus 从站,我从中接收到似乎部分损坏的响应。我已确认在某些情况下通信良好。在其他情况下,我收到校验和错误。
如果发送命令01 04 00 05 00 01 21 CB
,其中 04 是读取输入寄存器,05 是地址,我返回 3 次F8 9E 01 04 02 00 97
,B8 9A 01 04 02 00 92
和38 9D 01 04 02 00 93
。由于01 04 02 00
每次都是一致的,因此信号似乎并未完全被丢弃,但前两个字节显然导致校验和失败。
什么问题导致了这种行为?
我在 Raspberry Pi 上使用 python minimummodbus库。
编辑说明:我将其发布到 SO 是因为它在 SE 网络上有所有 modbus 问题,但如果有人能想到一个更好的地方,我愿意移动它
python - python最小modbus写浮点字交换
我试图使用最小的 modbus 来 write_float 的 PLC 需要交换单词。
我已经使用有效的 Modbus Poll 测试了硬件。Minimal Modbus write_float 也可以使用,但字序错误。我检查了适用于解决方法的 read_float 的文档解决方案。
尝试使用单独的 write_register 作弊也会产生负值错误:
例如:
我需要:
我得到:
python - MinimalModbus 批量读取超时
请在这里找人帮忙。我正在与 modbus 设备通信并按预期取回数据,我对此很陌生,所以我需要一些建议,我试图读取我的设备(伊顿 SC200)上的所有位寄存器以用于自定义 HMI。如果我尝试 for next 循环,或者甚至在发布的代码中,com 端口会失去通信。
我得到的回应是这样的:
我已将 Timeout 更改为从 0.5 到 2 的各种值,以查看这是否是问题所在,有时我会运行完整的数据,而有时我什么也得不到。任何帮助将不胜感激。
modbus - 自动发现网络中 modbus 设备的从设备 ID
通过广播机制获得有效的ip范围后如何确定连接到网络的设备是否为modbus设备或如何自动发现连接到网关的modbus设备的slave id?
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)
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:忘记包括lsusb
和ls /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
:
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 无权访问串行端口..
python - 在 minimummodbus 中写入多个从站时出错
我正在尝试使用 Modbus RTU 与温度控制器连接。我对这个话题不是很熟悉,但是我已经能够编写可以读取我的三个温度控制器的温度的代码,但是当我尝试依次写入三个温度控制器时出现错误。我一直在运行的代码是:
同样,当我打印当前温度时,代码不会出错,如果我一次只写入一个寄存器(注释掉其他寄存器并运行它们),它会更改设定点温度并且不会引发错误。
对我来说更有趣的是,当我运行这段代码时,我第一次运行它时,“左”温度控制器的设定值发生了变化,然后抛出了一个错误。下次我运行代码时,“中间”温度控制器的设定值会发生变化,然后会引发错误。上次我运行代码时,正确的温度控制器的设定点发生了变化,没有出现错误。
我往往会遇到不同的错误,我无法真正辨别出一种模式。他们包括:
我尝试将波特率更改为 4800,但我这样做时没有任何效果。从 Modbus RTU 更改为 ascii 时,我也遇到了类似的错误。当奇偶校验设置为默认值时,我也遇到了同样的错误。我还尝试让代码休眠并更改超时,我认为这有助于解决最后一个错误。
任何关于如何尝试停止出现这些错误的建议将不胜感激。
谢谢
编辑
我尝试删除小数位数但仍然得到相同的错误,设置点现在更新,以便 80 变成 8.0,这没什么大不了的。
这是我运行代码时得到的完整响应,现在没有小数位数:
左边的温度确实发生了变化。我仍然偶尔会收到仪器超时错误,但上面的错误似乎是最常见的错误。我想我会检查我是如何连接接口的,因为我想知道这是否是问题所在。
编辑二
我想我想通了,我只需要增加超时时间(我以为我已经有,但我想还不够)minimalmodbus.TIMEOUT = 3
似乎让一切正常。
谢谢您的帮助!
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'