先说一下我的需求:扫描电脑可用串口并连接进行通信,该设备一般是一直插在电脑上的,由于电脑可用串口不一定只有一个也不一定就是对应的设备,所以需要在可用串口中筛选,另外还有一个随时插拔的串口设备需要连接通信。
实现思想:
软件启动时通过QT的 QSerialPortInfo 获取可用串口,遍历进行指令询问,判断有无回复,无则连接下一个,有则判断是否正确,正确就连接成功,错误进行下一次连接;另一个随时拔插的设备使用window注册表的事件来获取插入
具体实现:
1.软件打开获取可用串口,设备使用的串口描述均为 “USB-SERIAL CH340″进一步缩小范围,打开定时器
2.定时器超时处理,先判断串口字符串数组是否为空,空则定时器停止重新获取可用串口继续超时处理,不为空判断连接标志,真则已连接终止定时器,否则未连接,此时判断串口对象是否打开,打开读取数值,检查是否正确,正确连接标志为真退出,不正确关闭串口,下一个超时串口对象连接可用串口数组的第一个,并删除数组首项,发送指定字符串。
3.我这边使用定时器读取串口,若是使用readReady信 读取需要先判断连接状态为真,否则信 处理会先把接收数据读取,导致定时器读取串口数据为空断开连接进行下一项连接。
4.串口拔出,在 QSerialPort 中是有这个信 的,有的人说是 QSerialPort::ResourceError 这个信 ,我自己插拔测试发现并没有触发该信 ,触发的是 QSerialPort::PermissionError 这个信 ,我并没有深究,知道原因的可留言告诉我。
5.另一个随时拔插的设备使用window注册表方式监测插入,上述信 监测拔出
5.1头文件
5.2重写函数获取新插入串口 ,进行连接发送指令接收判断对否
5.3最后在main.c中添加
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!