在使用pyserial开发的串口程序的时候,开发设备串口号是5,程序打包后运行正常,可以打开串口并通信。当换到别的电脑上发现打开串口一直报异常:串口不存在或被占用,用其他串口助手可以操作该串口。
排除是串口设备的问题,更改设备管理器中的串口号,将COM12修改为COM5后,程序可以正常运行,后多次测试,发现串口号大于等于10之后,都不能正常打开。
列举当前系统串口号的程序如下:
def serialList(self): #扫描获取端口号列表,并以列表形式返回
comList = []
portList = list(serial.tools.list_ports.comports()) #获取当前可用串口信息
portList.sort(reverse = True)
for port in portList:
# comList.append(port[0])
port_str = port[1] #将串口信息格式重新调整,便于显示
port_str = '%s:%s' % (port[0], port_str)
comList.append(port_str) #将调整后的串口信息加入列表中
return comList
找到代码中获取串口号的程序,获取当前串口名称:
self.serial.com.port = self.serialCOMComboBox.currentText()
获取系统设备串口名称的格式如下:
COM12:USB Serial Port (COM12)
pyserial只需要用到其中的COM12即可,因此使用split将COM12分割出来。使用代码如下:
serial_port_str = self.serialCOMComboBox.currentText()
serial_port_str = serial_port_str.split(":", 1)
self.serial.com.port = serial_port_str[0]
分割后的结果为:
[‘COM12’, ‘USB Serial Port (COM12)’]
加上其他串口参数之后就可以使用serial.open正常打开串口啦。