Как настроить простое ведомое устройство и ведущее устройство с помощью Modbus-TK RTU (Python)

Я хотел установить связь между Raspberry PI (slave) и моим ПК (Master) по протоколу Modbus. В настоящее время я использую modbus-tk (python) для настройки протокола связи.

Проблема в том, что Мастер не смог прочитать регистр от ведомого. Могу ли я узнать, что не так с моим кодом? Я очень смущен.

Ошибка, которую я получил от Раба, была:
Handle request failed: Invalid CRC in request or Request length is invalid

Ошибка, которую я получил от Учителя, была:
ModbusInvalidResponseError

Примечание: цель состоит в том, чтобы использовать мастер для чтения данных от ведомого.

Вот код для раба:

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))

Вот таблица данных и изображение устройства USB-to-rs485, которое я использую для подключения моего Raspberry Pi и моего ПК:
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

Большое спасибо за помощь.

1 ответ

Ведущий не читает с COM-порта, хотя подчиненный подключен через этот порт. Чтение выполняется с использованием ttyUSB0 вместо COM3. Это должно помочь вам прочитать данные.

Другие вопросы по тегам