QT5.6串口通讯初步调试2018.8.28

通过虚拟串口的调试,可以模拟检验串口程序的正确性。
参考网上的串口案例进行学习,好多案例中都强调在.Pro工程文件中添加
QT += serialport,由于自己一直使用VS结合QT,所以一开始不清楚工程文件在哪里,最后才知道工程文件是利用QTCreator创建的。

  1. 首先通过QTCreator创建串口项目,同时在.Pro文件中添加
QT       += serialport

QT5.6串口通讯初步调试2018.8.28_第1张图片
QT += serialport,主要作用是将QtSerialPort类的相关文件和库函数连接到程序中
2. 在头文件中增加

#include 
#include 
private slots:
    void on_OpenSerialButton_clicked();

    void ReadData();

    void on_SendButton_clicked();

和串口类的全局变量

   QSerialPort *serial;

QT5.6串口通讯初步调试2018.8.28_第2张图片
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界面的设计
    QT5.6串口通讯初步调试2018.8.28_第3张图片
  2. 之后通过VS中的QT工具打开刚才保存好的.Pro文件,运行后出现串口对话框
    QT5.6串口通讯初步调试2018.8.28_第4张图片
  3. 通过之前学习的虚拟串口可以打开两个COM口进行串口验证
    QT5.6串口通讯初步调试2018.8.28_第5张图片
  4. 同时打开串口调试软件进行互相通讯 ,结果发现不能发送命令,原来是程序中缺少了发送函数的信号和槽的连接
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_SendButton_clicked()));
  1. 之后就可以正常通讯了
    QT5.6串口通讯初步调试2018.8.28_第6张图片

初步完成了QT的串口界面,之后学习如何实现MODBU协议的通讯

你可能感兴趣的:(Qt学习,QT串口)