使用pyserial能否设置虚拟串口设备ID,适配Qt串口扫描匹配需求
问题解答
核心疑问答复
- pyserial无法设置串口设备的序列号:pyserial仅作为串口通信工具,仅能实现串口数据的读写功能,无法修改串口(包括虚拟串口)驱动层暴露给操作系统的设备属性,序列号属于设备驱动层面的配置项,不归串口通信库管控。
可行实现方案
方案1:直接配置com0com虚拟串口的序列号(最推荐,无需修改现有业务代码)
com0com本身支持自定义虚拟串口的所有设备属性,包含序列号,操作方式如下:
打开com0com安装目录下的命令行工具setupc.exe,执行对应修改命令即可,示例:
# 给序号为0的串口对的A端设置序列号为DEV2024001 setupc.exe change CNCA0 serialNumber=DEV2024001
你只需要把CNCA0替换为你Qt程序要连接的那端对应的com0com端口标识即可,配置完成后你现有的Qt扫描逻辑无需任何改动,就能正常识别到对应序列号的虚拟串口。
方案2:给Qt代码加测试模式开关(适配临时测试需求)
你可以在Qt代码中新增测试模式配置项,开启测试模式后跳过序列号匹配逻辑,直接连接指定的虚拟串口,或者新增规则:如果扫描到的端口描述带com0com标识,直接跳过校验建立连接,该方案不会影响正式环境的设备匹配逻辑。
方案3:新增应用层序列号握手逻辑
如果不想修改虚拟串口配置也不想修改扫描逻辑,可以在通信协议层新增握手规则:Qt扫描到串口后先发送查询设备序列号的指令,Python模拟端收到指令后返回预设的序列号,Qt匹配通过后再走后续业务流程,该方案需要同时调整Qt连接逻辑和Python模拟脚本,改动量相对较大。
附:Qt端串口扫描参考代码
bool foundDevice = false; foreach (const QSerialPortInfo &serialPortinfo, QSerialPortInfo::availablePorts()) { qDebug() << "Checking port " << serialPortinfo.serialNumber(); if (serialPortinfo.serialNumber() == m_deviceSerialNumber) { qDebug() << "Found device"; connectPort(serialPortinfo.portName()); foundDevice = true; break; } }
内容的提问来源于stack exchange,提问作者ArmadilloChubbz65
相关产品推荐
相关产品推荐

