Python实现Modbus RS-485串口通信教程

为了实现Python和Modbus RS-485串口通信,我们需要安装modbus_tk和serial模块。modbus_tk是一个用于实现Modbus通信协议的Python库。Modbus是一种常用的串行通信协议,用于在工业自动化领域中实现设备之间的通信。modbus_tk库提供了一组功能强大的工具和类,用于开发Modbus主站(Master)和从站(Slave)应用程序。

以下是一个简单的示例代码,可以从Modbus从站读写寄存器以及扫描总线上的设备:

import modbus_tk.exceptions as modbus_exceptions
import modbus_tk.modbus_rtu as modbus_rtu
import serial
import modbus_tk.defines as cst


def scan_rs485_devices(port, baudrate):
    devices = []

    # 创建串口连接
    conn = serial.Serial(port=port, baudrate=baudrate, bytesize=8, parity='N', stopbits=1, xonxoff=0)
    master = modbus_rtu.RtuMaster(conn)
    master.set_timeout(1)  # 设置超时时间
    master.set_verbose(True)
    # 扫描设备地址
    for address in range(1, 248):
        try:
            response = master.execute(address, cst.READ_HOLDING_REGISTERS, 0, 1)
            devices.append(address)
        except modbus_exceptions.ModbusError:
            continue
        except Exception as e:
            print(f"Error scanning device at address {address}: {str(e)}")

    # 读取指定设备寄存器的指定位置的值 master.execute(设备地址, 读的功能码3, 寄存器地址, 读取长度)
    response = master.execute(101, 3, 0x041F, 1)
    print('采集结果----->', response)

    # # 给指定设备的寄存器写值  master.execute(设备地址, 写的功能码6, 寄存器地址, output_value=写入的值)
    # response = master.execute(101, 6, 0x041F, output_value=0x55AA)
    # print('写入返回结果----->', response)  # 返回一个数组,第一个为寄存器地址,第二个为里面的值

    conn.close()
    master.close()  # 关闭串口连接

    return devices


# 设置串口名称和波特率
serial_port = '/dev/ttyXRUSB0'
baud_rate = 9600

# 扫描 RS-485 设备
devices = scan_rs485_devices(serial_port, baud_rate)

# 打印扫描到的设备地址
print("Scanned devices:")
for device in devices:
    print(f"Device address: {device}")

物联沃分享整理
物联沃-IOTWORD物联网 » Python实现Modbus RS-485串口通信教程

发表评论