模拟串口式电流传感器_rs485数据上报


 1. 导入模块

  pip install pyserial

import serial
import time
import serial.tools.list_ports

 2. 获取可用串口

# 获取可用串口
def get_serial():
    try:
        port_list = list(serial.tools.list_ports.comports())
        # print(port_list)
        if len(port_list) == 0:
            print('无可用串口')
        else:
            # for i in range(0, len(port_list)):
            #     print(port_list[i])
            print("获取成功:", len(port_list))
        return port_list
    except Exception as e:
        print("串口获取失败:", e)

 3. 打开串口

 1 # 打开串口
 2 def open_Serial(portx):
 3     global ser
 4     try:
 5         # 打开串口,并得到串口对象
 6         ser = serial.Serial(portx, 9600, timeout=0)
 7         # 判断是否打开成功
 8         if (False == ser.is_open):
 9             ser = -1
10     except Exception as e:
11         print("---串口打开异常---:", e)
12     print(type(ser))
13     return ser

 4. 读取数据

# 读数据 (16进制数)
def DReadPort(ser):
    global readbuf
    try:
        for i in range(20):
            # 判断是否有数据需要读
            if ser.in_waiting:
                readbuf = ser.read(ser.in_waiting)
                break
                # print(readbuf)
            else:
                time.sleep(0.005)
                # print("sleep:%d" % i)
        # 返回读取到的数组
        return readbuf

    except Exception as e:
        print("--读取数据异常--", e)

 5. 写数据

# 写数据(十六进制)
def DWritePort(ser, data):
    try:
        data1 = bytearray(data)  
        result = ser.write(data1)  # 写数据
        print("写数据:", data1)
        return result
    except Exception as e:
        print("---写数据失败---", e)

  6. 试运行

if __name__ == "__main__":
    a = get_serial()  # 获取可用串口
    print(a[2][0])  # 第3个串口号(第一个是com1)
    port = a[2][0]  # 打印串口号
    print(open_Serial(port))  # 打印打开串口信息
    print("串口是否打开成功:", open_Serial(port).is_open)  # 打印串口是否打开
    ser = open_Serial(port)  # 串口对象
    while True:

        # test_A_O2(ser, 600, 1)  # 测试数据
        dd = DReadPort(ser)     # 读数据
        if len(dd) == 8:
            print(dd[0])
            print(dd)
            if dd[0] == 11:
                data = [0x0B, 0x03, 0x02, 0x00, 0x22, 0xA0, 0x5C]
                DWritePort(ser, data)
                print("write", data)
            elif dd[0] == 12:
                data = [0x0C, 0x03, 0x02, 0x00, 0x22, 0x15, 0x9C]
                DWritePort(ser, data)
                print("write", data)
            elif dd[0] == 13:
                data = [0x0D, 0x03, 0x02, 0x00, 0x22, 0x28, 0x5C]
                DWritePort(ser, data)
                print("write", data)
            elif dd[0] == 14:
                data = [0x0E, 0x03, 0x02, 0x00, 0x22, 0x6C, 0x5C]
                DWritePort(ser, data)
                print("write", data)
            else:
                pass