欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-22 10:25:58
...

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

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

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

#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
private slots:
    void on_OpenSerialButton_clicked();

    void ReadData();

    void on_SendButton_clicked();

和串口类的全局变量

   QSerialPort *serial;

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

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

相关标签: QT串口