我的任务是开发一个用于测试设备的自动化系统。我有我的处置:
- 树莓派 (3b+/4)
- modbus 模块:icp con m - 7051D、m - 7055D、m-7061D 等。
首先我想了解,如何在 RPi 上实现 modbus 协议,它是如何工作的。为了做到这一点,我在 RPi 上使用了 pymodbus 库,它作为主机工作,在 PC 上使用了 modbusMAT,用于接收和解码来自 RPi 的指令。它们通过 rs-485 - USB 适配器连接。我写了一些简单的代码,用于编写线圈。RPi 正在与 PC 通信,但问题是,输出对我来说没有意义。
这是代码:
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
client = ModbusClient(method = 'rtu', port='/dev/ttyUSB0', stopbits=1, bytesize = 8, parity='N', baurdrate = '9600', timeout=0.3)
connection = client.connect()
print (connection)
client.write_coils(1, 1, unit=0x01)
来自 modbusMat 控制台的屏幕截图
输出:
[9C][84][8C][E4][FF]
[9C][08][8C][B4][FF]
[9C][84][8C][E4][FF]
[38][18][18][8C][CA]
输出与我所做的参数更改有关。从上到下:
address=1, values=1, unit=0x01
address=2, values=1, unit=0x01
address=1, values=2, unit=0x01
address=1, values=1, unit=0x02
我的理解是,如果我将地址设置为 1,那么控制台上的地址字节应该是相同的 - [01],而不是 [9C]。
我之前设法通过 RS-485 而不是从 RPi 成功地从 PC 向 icp 模块(打开、关闭线圈)发送了一些指令。