QSerialPort:数据分为两个数据包

时间:2016-04-27 07:45:38

标签: qt serial-port qtserialport

我使用QSerialPort类通过网络使用Network<->Serial转换器(Moxa NPort)从硬件模块读取数据。设备发送正确的数据,但接收器无法立即读取整个数据包。例如客户端发送:

0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0xa

和接收者

0x01 0x02 0x03 0x04 0x05 0x06

首先尝试和

0x07 0x08 0x09 0xa

第二次尝试阅读。

端口打开如下:

m_port.setBaudRate(QSerialPort::Baud9600);
m_port.setDataBits(QSerialPort::Data8);
m_port.setStopBits(QSerialPort::OneStop);
m_port.setFlowControl(QSerialPort::NoFlowControl);
m_port.setParity(QSerialPort::NoParity);
m_port.open(QSerialPort::ReadWrite);
m_port.setBreakEnabled(false);

这就是程序读取的方式。 (以下功能由500ms间隔的定时器执行,实现简单的轮询协议)

qint64 written_data_size = this->m_port.write(m_openGate);
if(written_data_size == -1){
    emit message("Unable to write to serial port.");
    return;
}
m_port.flush();
bool bytes_written = this->m_port.waitForBytesWritten(100);
if(!bytes_written){
    emit message("No data has been written to serial port.");
    return;
}
// Read status
this->m_port.waitForReadyRead(100);
QByteArray data = this->m_port.readAll(); // ===> Not all packet is read

0 个答案:

没有答案