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), alarm
except Exception as exc:
alarm = str(exc)
return red, alarm # 如果异常就返回【】,故障信息