回复: Qt串口问题
#6 回 九重水 的帖子 [suzhuorui 12-28 10:24]
九重水:即使不是跑网页上,也是跟网页刷新的联动了。
楼主用QSerialPort类,在刷新网页时,整个serial被摧毁了,自然而言断开了连接。
这种情况下需要重连机制,但是跟串口弄到一起感觉非常违和。
还是弄个‘长连接’吧。
....... (2020-12-28 09:35)
为什么跟网页刷新联动了呢,我看里面也没写跟web有关的代码呀?小白困惑
#7 回 九重水 的帖子 [fsu0413 12-28 21:31]
九重水:即使不是跑网页上,也是跟网页刷新的联动了。
楼主用QSerialPort类,在刷新网页时,整个serial被摧毁了,自然而言断开了连接。
这种情况下需要重连机制,但是跟串口弄到一起感觉非常违和。
还是弄个‘长连接’吧。
....... (2020-12-28 09:35)
我没有理解你的观点。
网页又不走串口,怎么能断开连接呢?
#8 回 fsu0413 的帖子 [九重水 12-29 11:32]
fsu0413:我没有理解你的观点。
网页又不走串口,怎么能断开连接呢? (2020-12-28 21:31)
网页版的串口通信是有的。
有些人做网页版的串口调试,没做好,就跟网页刷新连在了一起。
实际上,网页读取写入串口数据时,每一次都需要连接。
就好像我们访问网站页面时,每次都要连接一次。
这种情况下,你把串口类比于网口就行了。
#9 回 九重水 的帖子 [fsu0413 12-31 08:37]
九重水:网页版的串口通信是有的。
有些人做网页版的串口调试,没做好,就跟网页刷新连在了一起。
实际上,网页读取写入串口数据时,每一次都需要连接。
就好像我们访问网站页面时,每次都要连接一次。
....... (2020-12-29 11:32)
这个前提难道不是串口跑在网页上吗?
LZ也没说程序跑在网页上
#10 回 fsu0413 的帖子 [winston_zbb 12-31 10:06]
fsu0413:
serial = new QSerialPort();
connect(timer, SIGNAL(timeout()), this, SLOT(custom_timeout()));
connect(serial, SIGNAL(errorOccurred(QSerialPort::SerialPortError)), this,
SLOT(custom_error(QSerialPort::SerialPortError)));
timer->start(1);
.......
多谢帮我格式化代码,对这个论坛不太熟悉,所以用的不好。
我现在遇到的问题是串口经常中断,使用QSerialPort::SerialPortError类监测到的错误代码是
QSerialPort::ResourceError
描述是:
An I/O error occurred when a resource becomes unavailable, e.g. when the device is unexpectedly removed from the system.
最开始的时候,我把串口放到主线程中,程序中不关联任何网页相关的,串口每隔20ms发送一次数据。只要刷新网页,串口就会断开,且中断代码是QSerialPort::ResourceError 。
后来,我把串口发送和接收放到了子线程中,刷新网页不会出现问题通讯中断的问题,有一个问题,我使用exec()函数打开一个新的界面时,串口有可能会中断,错误代码还是QSerialPort::ResourceError 。但是这种情况出现是有概率的,并不是每次都出错。
还有一种出错的情况,我的一个按键,里面有while 循环函数,循环函数中用到了Sleep(20)函数。此时也有一定概率出错,错误代码QSerialPort::ResourceError。
注:Sleep函数如下
QTime dieTime = QTime::currentTime().addMSecs(msec);while( QTime::currentTime()