回复: Qt串口问题
#11 回 fsu0413 的帖子 [winston_zbb 12-31 10:20]
fsu0413:这个前提难道不是串口跑在网页上吗?
LZ也没说程序跑在网页上 (2020-12-31 08:37)
我的串口没有跑在网页上,随便建一个在主线程上的串口,每30ms发送一次数据,然后打开网页就会出现错误,串口断开 错误代码是QSerialPort::ResourceError,错误说明是An I/O error occurred when a resource becomes unavailable, e.g. when the device is unexpectedly removed from the system.这个情况不是每次都发生。
我之后的测试发现,使用exec() 打开一个新的界面,也有概率是串口中断,错误代码还是QSerialPort::ResourceError。
我对qt的串口理解不深,如果您有什么想法,望不吝赐教
#12 回 九重水 的帖子 [winston_zbb 12-31 11:31]
九重水:代码真乱……
麻烦楼主清晰地再讲一遍遇到的问题。
另外问一下楼上的,上海房租多少钱一般,一房一厅或单间,单身汉住的那种。 @liudianwu (2020-12-26 10:17)
我今天又重新测试了一下,发现网页刷新对串口又没有影响力,我都怀疑上次网页刷新串口中断是否是我的错觉。
但是目前还有几个问题:
1、串口每隔30ms发送一次数据时,如果打开一个新的界面,新界面与串口毫无关系,此时串口会停顿一下,有时候会出现串口断开的情况,错误代码是QSerialPort::ResourceError
描述为:
An I/O error occurred when a resource becomes unavailable, e.g. when the device is unexpectedly removed from the system.
我之前测试的时候,基本上打开新界面都会断开。后来,没改程序,重新生成,打开新界面,串口发送会顿一下(通过串口线上的收发指示灯看到的),然后接着发送。
2、我添加了一个按钮,按钮的功能是执行一个过程,这个过程时间比较长,大概1分钟左右执行完。里面有一个while函数,通过网口与设备通讯,通过网口往设备发送接收指令时,串口会中断,且中断指令为QSerialPort::ResourceError。
#13 [fsu0413 12-31 18:35]
我能想到的就是主线程被阻塞导致串口接收发送失败,试着把串口放在单独的线程里去操作吧
#14 [fsu0413 12-31 18:42]
我对串口也不了解,我只是针对这种看起来很不科学的现象做出我自己的理解。。。
LZ看起来试了把串口放在子线程当中,不过我觉得。。。
嘛,QThread的设计本身有问题,如果LZ不慎踩雷,那么事实上串口并没有在子线程里跑,可能需要LZ再看看了。。。。
#15 回 fsu0413 的帖子 [winston_zbb 01-05 16:25]
fsu0413:我对串口也不了解,我只是针对这种看起来很不科学的现象做出我自己的理解。。。
LZ看起来试了把串口放在子线程当中,不过我觉得。。。
嘛,QThread的设计本身有问题,如果LZ不慎踩雷,那么事实上串口并没有在子线程里跑,可能需要LZ再看看了。。。。 (2020-12-31 18:42)
首先,多谢回复!我给您说一下,我最近测试出的的最新情况,如果可以的话,可以帮我分析一下原因。
1、串口放在子线程(有可能是我的子线程没设置对),串口每隔50ms发送一串数据,同时从仪表接收一串数据。此时打开串口,串口收发正常。
2、如果我的程序界面比较复杂,我点最大化和最小化,多点几次,就会出现异常中断,错误代码是QSerialPort::ResourceError 说明:An I/O error occurred when a resource becomes unavailable, e.g. when the device is unexpectedly removed from the system.这个错误代码和我拔掉串口的错误代码相同。但是点击重连之后,串口还是能重新连上。
3、我个人理解:每次重绘界面的时候,如果我写的子线程有问题,可能由于主线程工作量太大导致串口不发送命令,从而导致误判断为串口已拔出。不知道您有什么理解