通過虛擬串口的調試,可以模擬檢驗串口程序的正確性。
參考網上的串口案例進行學習,好多案例中都強調在.Pro工程文件中添加
QT += serialport,由於自己一直使用VS結合QT,所以一開始不清楚工程文件在哪裏,最後才知道工程文件是利用QTCreator創建的。
- 首先通過QTCreator創建串口項目,同時在.Pro文件中添加
QT += serialport
QT += serialport,主要作用是將QtSerialPort類的相關文件和庫函數連接到程序中
2. 在頭文件中增加
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
private slots:
void on_OpenSerialButton_clicked();
void ReadData();
void on_SendButton_clicked();
和串口類的全局變量
QSerialPort *serial;
3. 接下來進行.cpp文件的編寫,首先要進行循環遍歷查找串口 ,之後進行串口初始化設置,和讀寫函數
foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
QSerialPort serial;
serial.setPort(info);
if(serial.open(QIODevice::ReadWrite))
{
ui->PortBox->addItem(serial.portName());
serial.close();
}
}
void MainWindow::on_OpenSerialButton_clicked()
{
if(ui->OpenSerialButton->text() == tr("打開串口"))
{
serial = new QSerialPort;
//設置串口名
serial->setPortName(ui->PortBox->currentText());
//打開串口
serial->open(QIODevice::ReadWrite);
//設置波特率
serial->setBaudRate(QSerialPort::Baud115200);//設置波特率爲115200
//設置數據位數
switch (ui->BitBox->currentIndex())
{
case 8:
serial->setDataBits(QSerialPort::Data8);//設置數據位8
break;
default:
break;
}
//設置校驗位
switch (ui->ParityBox->currentIndex())
{
case 0:
serial->setParity(QSerialPort::NoParity);
break;
default:
break;
}
//設置停止位
switch (ui->BitBox->currentIndex())
{
case 1:
serial->setStopBits(QSerialPort::OneStop);//停止位設置爲1
break;
case 2:
serial->setStopBits(QSerialPort::TwoStop);
default:
break;
}
//設置流控制
serial->setFlowControl(QSerialPort::NoFlowControl);//設置爲無流控制
//關閉設置菜單使能
ui->PortBox->setEnabled(false);
ui->BaudBox->setEnabled(false);
ui->BitBox->setEnabled(false);
ui->ParityBox->setEnabled(false);
ui->StopBox->setEnabled(false);
ui->OpenSerialButton->setText(tr("關閉串口"));
//連接信號槽
QObject::connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReadData);
}
else
{
//關閉串口
serial->clear();
serial->close();
serial->deleteLater();
//恢復設置使能
ui->PortBox->setEnabled(true);
ui->BaudBox->setEnabled(true);
ui->BitBox->setEnabled(true);
ui->ParityBox->setEnabled(true);
ui->StopBox->setEnabled(true);
ui->OpenSerialButton->setText(tr("打開串口"));
}
}
//讀取接收到的信息
void MainWindow::ReadData()
{
QByteArray buf;
buf = serial->readAll();
if(!buf.isEmpty())
{
QString str = ui->textEdit->toPlainText();
str+=tr(buf);
ui->textEdit->clear();
ui->textEdit->append(str);
}
buf.clear();
}
//發送按鈕槽函數
void MainWindow::on_SendButton_clicked()
{
serial->write(ui->textEdit_2->toPlainText().toLatin1());
}
- 進行UI界面的設計
- 之後通過VS中的QT工具打開剛纔保存好的.Pro文件,運行後出現串口對話框
- 通過之前學習的虛擬串口可以打開兩個COM口進行串口驗證
- 同時打開串口調試軟件進行互相通訊 ,結果發現不能發送命令,原來是程序中缺少了發送函數的信號和槽的連接
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_SendButton_clicked()));
- 之後就可以正常通訊了
初步完成了QT的串口界面,之後學習如何實現MODBU協議的通訊