QSerialPort
是 Qt 框架中用于串口通信的类,它提供了与串行端口进行数据读写和配置的功能。这个类封装了底层操作系统对串口的处理,使得开发者可以方便地在跨平台应用中实现串口通信。
回顾:
写数据 (Writing Data)
要向串口写数据,首先需要打开串口并配置相关参数(如波特率、数据位、校验位等)。写数据通常使用 write()
方法。例如:
QSerialPort serial;
serial.setPortName("COM1");
serial.setBaudRate(QSerialPort::Baud9600);//数值越大, 传输速率越快
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
if (serial.open(QIODevice::ReadWrite)) {
serial.write("Your data here");
}
读数据 (Reading Data)
读取数据通常在 readyRead()
信号触发时进行。你可以连接此信号到一个槽函数,每当有新数据到达时,槽函数就会被调用。在槽函数中,你可以使用 read()
或 readAll()
方法来获取数据。
QObject::connect(&serial, &QSerialPort::readyRead, [&]() {
QByteArray data = serial.readAll();
// 处理数据
});
本节重点
错误处理 (Error Handling)
QSerialPort
提供了 errorOccurred()
信号来报告错误。这个信号在出现错误时被触发,并提供一个 QSerialPort::SerialPortError
枚举值,表示发生的错误类型。
错误类型包括:
QSerialPort::NoError
:没有错误。QSerialPort::DeviceNotFoundError
:找不到设备。QSerialPort::PermissionError
:没有足够的权限。QSerialPort::OpenError
:打开设备时出错。QSerialPort::ParityError
:奇偶校验错误。QSerialPort::FramingError
:帧错误。QSerialPort::BreakConditionError
:断线条件错误。QSerialPort::WriteError
:写数据时出错。QSerialPort::ReadError
:读数据时出错。QSerialPort::ResourceError
:设备被意外移除或系统资源不足。QSerialPort::UnsupportedOperationError
:不支持的操作。QSerialPort::UnknownError
:未知错误。QSerialPort::TimeoutError
:操作超时。QSerialPort::NotOpenError
:尝试操作一个未打开的设备。
可以连接 errorOccurred()
信号到一个槽函数来处理错误:
QObject::connect(&serial, &QSerialPort::errorOccurred, [&](QSerialPort::SerialPortError error) {
if (error == QSerialPort::ResourceError) {
qDebug() << "串口错误:" << serial.errorString();
serial.close();
}
});
QString ERRORString ;
switch (error) {
case QSerialPort::NoError:
ERRORString= "No Error";
break;
case QSerialPort::DeviceNotFoundError:
ERRORString= "Device Not Found";
break;
case QSerialPort::PermissionError:
ERRORString= "Permission Denied";
break;
case QSerialPort::OpenError:
ERRORString= "Open Error";
break;
case QSerialPort::ParityError:
ERRORString= "Parity Error";
break;
case QSerialPort::FramingError:
ERRORString= "Framing Error";
break;
case QSerialPort::BreakConditionError:
ERRORString= "Break Condition";
break;
case QSerialPort::WriteError:
ERRORString= "Write Error";
break;
case QSerialPort::ReadError:
ERRORString= "Read Error";
break;
case QSerialPort::ResourceError:
ERRORString= "Resource Error";
break;
case QSerialPort::UnsupportedOperationError:
ERRORString= "Unsupported Operation";
break;
case QSerialPort::UnknownError:
ERRORString= "Unknown Error";
break;
case QSerialPort::TimeoutError:
ERRORString= "Timeout Error";
break;
case QSerialPort::NotOpenError:
ERRORString= "Not Open Error";
break;
default:
ERRORString= "Other Error";
}
qDebug()<<"SerialPortWorker::errorOccurred ,info is "<<ERRORString;
错误处理是串口通信中非常重要的部分,它可以帮助诊断和解决通信问题,确保应用程序的稳定性和可靠性。