如何使用 modbus-tk RTU 设置简单的从站和主站 (Python)
How to set up simple slave and master with modbus-tk RTU (Python)
我想通过 Modbus 协议在 Raspberry PI(从站)和我的 PC(主站)之间建立通信。目前,我正在使用 modbus-tk
(python) 来设置通信协议。
问题是主机无法从从机读取寄存器。我可以知道我的代码有什么问题吗?我很困惑。
我从 Slave 得到的错误是:
Handle request failed: Invalid CRC in request or Request length is invalid
我从师父那里得到的错误是:
ModbusInvalidResponseError
注意:目的是为了使用Master读取slave的数据
这是从站的代码:
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import serial
import time
modbusServ = modbus_rtu.RtuServer(serial.Serial('/dev/ttyUSB0'),baudrate= 19200,
bytesize=8, parity='N', stopbits=1, xonxoff=0)
print("start")
modbusServ.start()
slave_1 = modbus_tk.modbus.Slave(1)
slave_1.add_block ( "1", modbus_tk.defines.HOLDING_REGISTERS, 1, 5)
aa= (1,2,3,4,5) # data in the register
while True:
slave_1.set_values ("1", 1, aa)
time.sleep(0.5)
这是大师的代码:
import sys
import serial
#add logging capability
import logging
import modbus_tk.modbus
import modbus_tk.defines as cst
import modbus_tk.modbus_rtu as modbus_rtu
logger = modbus_tk.utils.create_logger("console")
while True:
master = modbus_rtu.RtuMaster(serial.Serial('COM3', baudrate= 19200, bytesize=8, parity='N', stopbits=1))
master.open
master.set_timeout(3)
master.set_verbose(True)
logger.info("connected")
logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 1, 5))
这是我用来连接 Raspberry Pi 和我的 PC 的 USB-to-rs485 设备的数据表和图片:
https://www.enika.cz/data/files/produkty/komponenty/mereni-a-regulace/UT-890A%20User%20manual.pdf
https://c.76.my/Malaysia/ut-890-usb-to-rs485-converter-belco-1605-07-belco@2569.jpg
非常感谢您的帮助。
即使从站通过该端口连接,主站也不会从 COM 端口读取数据。使用 ttyUSB0 而不是 COM3 完成读取。
这应该可以帮助您阅读数据。
我想通过 Modbus 协议在 Raspberry PI(从站)和我的 PC(主站)之间建立通信。目前,我正在使用 modbus-tk
(python) 来设置通信协议。
问题是主机无法从从机读取寄存器。我可以知道我的代码有什么问题吗?我很困惑。
我从 Slave 得到的错误是:
Handle request failed: Invalid CRC in request or Request length is invalid
我从师父那里得到的错误是:
ModbusInvalidResponseError
注意:目的是为了使用Master读取slave的数据
这是从站的代码:
import modbus_tk
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
import serial
import time
modbusServ = modbus_rtu.RtuServer(serial.Serial('/dev/ttyUSB0'),baudrate= 19200,
bytesize=8, parity='N', stopbits=1, xonxoff=0)
print("start")
modbusServ.start()
slave_1 = modbus_tk.modbus.Slave(1)
slave_1.add_block ( "1", modbus_tk.defines.HOLDING_REGISTERS, 1, 5)
aa= (1,2,3,4,5) # data in the register
while True:
slave_1.set_values ("1", 1, aa)
time.sleep(0.5)
这是大师的代码:
import sys
import serial
#add logging capability
import logging
import modbus_tk.modbus
import modbus_tk.defines as cst
import modbus_tk.modbus_rtu as modbus_rtu
logger = modbus_tk.utils.create_logger("console")
while True:
master = modbus_rtu.RtuMaster(serial.Serial('COM3', baudrate= 19200, bytesize=8, parity='N', stopbits=1))
master.open
master.set_timeout(3)
master.set_verbose(True)
logger.info("connected")
logger.info(master.execute(1, cst.READ_HOLDING_REGISTERS, 1, 5))
这是我用来连接 Raspberry Pi 和我的 PC 的 USB-to-rs485 设备的数据表和图片:
https://www.enika.cz/data/files/produkty/komponenty/mereni-a-regulace/UT-890A%20User%20manual.pdf
https://c.76.my/Malaysia/ut-890-usb-to-rs485-converter-belco-1605-07-belco@2569.jpg
非常感谢您的帮助。
即使从站通过该端口连接,主站也不会从 COM 端口读取数据。使用 ttyUSB0 而不是 COM3 完成读取。 这应该可以帮助您阅读数据。