Qt QSerialPort一次只读取8个字节

时间:2017-03-19 17:12:13

标签: c++ qt serial-port

我是Qt和串口编程的新手。 我在rhel 7服务器上使用Qt 5.3。

我在串口上收到大小为75字节的数据包。使用QSerialPort::readAll()函数读取数据包时,一次只读取8个字节。在检查QSerialPort::bytesAvailable()函数时,它显示8个字节。

在Google上我发现QSerialPort::readAll()可以一次读取512个字节。

我是否遗漏了需要明确指定的内容?

提前谢谢

2 个答案:

答案 0 :(得分:0)

这可能是您特定串行端口FIFO缓冲区设置的问题。例如,您可以尝试在设备管理器中更改该系统设置。但是,我建议不要依赖它并连接到QSerialPort::readyRead()信号并读取数据并将其放在用户定义的缓冲区中。

QByteArray _MyBuffer;
void MyReadHandler() {
    _MyBuffer.append(readAll());
    if (_MyBuffer.count() >= 75) {
        // Do something with your data...
    } else {
        // Wait for more data...
    }
}

在此插槽中,您可以等待特定数量的数据,然后再进行处理。

答案 1 :(得分:0)

通常可以通过串行编程(以及通信编程)进行部分读取。串口也很慢,并且没有"包"的概念。操作系统会在到达时为您提供字符。有一些方法可以优化这一点,但这并不能阻止您的代码和协议处理通信时间和故障。

您可能最终会得到一个带有计时器的代码,该计时器逐渐构建数据包,检查它然后对其进行处理。