QT5.6串口通訊初步調試2018.8.28

通過虛擬串口的調試,可以模擬檢驗串口程序的正確性。
參考網上的串口案例進行學習,好多案例中都強調在.Pro工程文件中添加
QT += serialport,由於自己一直使用VS結合QT,所以一開始不清楚工程文件在哪裏,最後才知道工程文件是利用QTCreator創建的。

  1. 首先通過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());
}
  1. 進行UI界面的設計
    這裏寫圖片描述
  2. 之後通過VS中的QT工具打開剛纔保存好的.Pro文件,運行後出現串口對話框
    這裏寫圖片描述
  3. 通過之前學習的虛擬串口可以打開兩個COM口進行串口驗證
    這裏寫圖片描述
  4. 同時打開串口調試軟件進行互相通訊 ,結果發現不能發送命令,原來是程序中缺少了發送函數的信號和槽的連接
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_SendButton_clicked()));
  1. 之後就可以正常通訊了
    這裏寫圖片描述

初步完成了QT的串口界面,之後學習如何實現MODBU協議的通訊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章