1.获取计算机所有com信息
使用serial模块实现
# 列出计算机的COM口
import serial.tools.list_ports
all_comports = serial.tools.list_ports.comports()
for comport in all_comports:print(comport.device, comport.name, comport.description, comport.interface)# COM8 COM8 USB Serial Port (COM8) None# COM3 COM3 USB-SERIAL CH340 (COM3) None
enery_comports = []
for i in range(len(all_comports)):enery_comports.append(list(all_comports[i]))print(enery_comports)#[['COM8', 'USB Serial Port (COM8)', 'USB VID:PID=0403:6001 SER=A9080U1DA'], ['COM3', 'USB-SERIAL CH340 (COM3)', 'USB VID:PID=1A86:7523 SER= LOCATION=1-1']]
print(all_comports[1].description)
# USB-SERIAL CH340 (COM3)
print(len(all_comports))
# 2
2.使用Modbus RTU读取下位机数据
import serial
import modbus_tk.defines as cst
from modbus_tk import modbus_rtu
# modbus通讯
def modbusfunc(self, PORT='com8', BAUDRATE=9600, BYTESIZE=8, PARITY='N', STOPBITS=1):red = []alarm = ''try:# 设定串口为从站master = modbus_rtu.RtuMaster(serial.Serial(port=PORT, baudrate=BAUDRATE, bytesize=BYTESIZE, parity=PARITY, stopbits=STOPBITS))master.set_timeout(5.0)master.set_verbose(True)# 读保持寄存器# 1号站点,0-15号寄存器red = master.execute(1, cst.READ_HOLDING_REGISTERS, 0, 18) # 这里可以修改需要读取的功能码alarm = '正常'return list(red), alarmexcept Exception as exc:alarm = str(exc)return red, alarm # 如果异常就返回【】,故障信息