【发布时间】:2014-10-20 06:41:05
【问题描述】:
我可以连接到我的串口,但我需要一直从中读取数据。
它工作了大约 39 分钟,但在它停在serial.flush() 行之后。
当我停止 Qt 并再次启动它时,它也会停在serial.flush()。我需要重新启动调制解调器才能让它再次工作......
我不确定我是否正确执行此操作...
// Open Serial connexion
QSerialPort serial;
serial.setPortName("usbserial-26214A");
serial.open(QIODevice::ReadWrite);
serial.setBaudRate(QSerialPort::Baud115200);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::HardwareControl);
if (serial.isOpen() && serial.isWritable())
{
qDebug() << "Serial is open";
QByteArray output;
QByteArray input;
while(true)
{
output = "AT+CPMS=\"SM\"\r";
serial.write(output);
serial.flush();
serial.waitForBytesWritten(1000);
serial.waitForReadyRead(1000);
input = serial.readAll();
}
}
//编辑
如果删除flush 它可以工作,但代码运行速度非常快。它不等待WaitFor...
在第二个循环之后,他没有时间读取数据。
serial.isOpen() && serial.isWritable() 总是在 while 循环中发送 true。
程序在 30 分钟后停止在 flush!
【问题讨论】:
-
如果 waitForBytesWritten() 省略 flush() 应该是安全的。我想这不会解决问题。是否可以始终在 AT+CPMS 序列之前运行软复位?不确定连接问题是否与您的应用程序有关。
-
如果删除
flush行,循环会非常快,而waitFor...似乎没有。如何进行软重置? -
应用程序是否通过简单地重启调制解调器来继续?还是您还必须重新启动应用程序?在第一种情况下,我会假设调制解调器卡住了。可能你应该调试调制解调器的状态并检查是否有命令可以恢复它。
-
通过重启调制解调器它可以工作。我还必须重新启动应用程序,因为我找不到错误...
serial.isOpen() || serial.isWritable()为真,serial.errorString为空 -
你为什么要阻止?你为什么不使用异步 API?
标签: c++ qt serial-port qtcore qtserialport