【问题标题】:Qt serial port: write and read dataQt串口:读写数据
【发布时间】: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() &amp;&amp; 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


【解决方案1】:

如果 serial.isOpen() &amp;&amp; serial.isWritable() 在 while 循环中为真,但您无法访问它可能来自您计算机上的偏好。

在 OSX 上:系统偏好设置 -> 网络 -> 选择串行 -> 高级 -> PPP:
能够:要求每 10 分钟保持联系,
禁用:在会话结束时断开连接,
disable:更改用户时断开连接

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多