0
点赞
收藏
分享

微信扫一扫

python通过RS485、Modbus协议读取/修改仪表数据

目标

python通过RS485的Modbus协议读取仪表相应的寄存器数据。

准备工作

  1. 软件

安装第三方库:serial、pyserial、modbus_tk

pip install serial
pip install pyserial
pip install modbus_tk


  1. 硬件
  • 一根USB转RS485的转接线(电脑本身不带RS485接口时需要)
  • 一个带Modbus通讯的仪表(例子中使用的时一个温湿度模块)

硬件连接

仪表连接对应的电源,通讯信号线A-A、B-B对应连接;

软件测试

  1. 将转接线插入电脑USB接口,通过设备管理器确认串口标号。

python通过RS485、Modbus协议读取/修改仪表数据_转接线

  1. 接通设备电源;
  2. 编写程序,如下:

# 设备测试 2024年1月9日
# serial、pyserial、modbus_tk
import time

import serial
import serial.tools.list_ports
from modbus_tk import modbus_rtu
import modbus_tk.defines as cst


# 创建串口实例
def create_port(port_name="COM4"):
    try:
        port_v = modbus_rtu.RtuMaster(serial.Serial(port=port_name, baudrate=9600, bytesize=8, parity='N', stopbits=1))
        port_v.set_timeout(5.0)
        port_v.set_verbose(True)
        return port_v
    except Exception as exc:
        return "err:" + str(exc)


# 读取数据
def read_data(master, device=1, address=0, length=1):
    try:
        # 读保持寄存器
        re_data = master.execute(device, cst.HOLDING_REGISTERS, address, length)  # 设备地址、功能码、寄存机初始地址、长度
        return re_data
    except Exception as exc:
        return "err:" + str(exc)


# 写入数据
def write_data(master, device=1, address=10, length=1, value=2):
    try:
        # 写寄存器
        re_data = master.execute(device, cst.WRITE_SINGLE_REGISTER, address, length, value)  # 设备地址、功能码、寄存机初始地址、长度、数值
        return re_data
    except Exception as exc:
        return "err:" + str(exc)


port = create_port()

while 1:
    time.sleep(1)

    # 读取数据
    show_data = read_data(port, device=1, length=2)
    print(show_data)

这时按照设备提供寄存器地址,就可以读取像要的数值;

python通过RS485、Modbus协议读取/修改仪表数据_寄存器_02

  1. RS485可以连接多个从站仪表。但是仪表的设备号不可以重复。修改地址寄存器值,方法见上方程序中的“write_data”函数。修改完毕后设备断电重启即可。

python通过RS485、Modbus协议读取/修改仪表数据_寄存器_03

举报

相关推荐

0 条评论