qt在被另一个程序打开后从串行端口读取数据
我正在使用windows 8.1中的Qt版本5.5.1。 当我跑步时, 程序成功连接到端口,但未接收任何数据 但当我关闭这个程序并打开Hercules_3-2-6应用程序(rs232终端软件)时,该应用程序读取数据, 关闭Hercules_3-2-6应用程序并再次打开终端示例后,该程序工作并读取数据,直到重新启动计算机 我多次重复这个过程 但在Hercules_3-2-6应用程序打开一次端口之前,终端项目在重启系统后不会收到任何数据 港口规格: 姓名:COM3,, 波特率:9600, 数据位:8, 平价:无, 停止位:1, 流量控制:无qt在被另一个程序打开后从串行端口读取数据,qt,Qt,我正在使用windows 8.1中的Qt版本5.5.1。 当我跑步时, 程序成功连接到端口,但未接收任何数据 但当我关闭这个程序并打开Hercules_3-2-6应用程序(rs232终端软件)时,该应用程序读取数据, 关闭Hercules_3-2-6应用程序并再次打开终端示例后,该程序工作并读取数据,直到重新启动计算机 我多次重复这个过程 但在Hercules_3-2-6应用程序打开一次端口之前,终端项目在重启系统后不会收到任何数据 港口规格: 姓名:COM3,, 波特率:9600, 数据位:8
void MainWindow::openSerialPort()
{
SettingsDialog::Settings p = settings->settings();
serial->setPortName(p.name);
serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
if (serial->open(QIODevice::ReadWrite)) {
console->setEnabled(true);
console->setLocalEchoEnabled(p.localEchoEnabled);
ui->actionConnect->setEnabled(false);
ui->actionDisconnect->setEnabled(true);
ui->actionConfigure->setEnabled(false);
showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
} else {
QMessageBox::critical(this, tr("Error"), serial->errorString());
showStatusMessage(tr("Open error"));
}
}
void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}
只需在打开串行端口后配置它即可。如果在这些说明之后打开端口:
serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
他们被忽视了。您的第二个程序为您正确配置串行端口,并且在启动程序时仍保留该配置。
试试这个:
void MainWindow::openSerialPort()
{
SettingsDialog::Settings p = settings->settings();
serial->setPortName(p.name);
if (serial->open(QIODevice::ReadWrite)) {
serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
console->setEnabled(true);
console->setLocalEchoEnabled(p.localEchoEnabled);
ui->actionConnect->setEnabled(false);
ui->actionDisconnect->setEnabled(true);
ui->actionConfigure->setEnabled(false);
showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
} else {
QMessageBox::critical(this, tr("Error"), serial->errorString());
showStatusMessage(tr("Open error"));
}
}
void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}
配置串口时必须注意,任何选项都可能返回true或false;最佳做法是检查和管理每一个可能返回的错误。能否显示连接设置的代码?这将有助于指出问题所在。我使用qtserialport终端示例。