【问题标题】:Basic Communications with QSerialPort与 QSerialPort 的基本通信
【发布时间】:2017-03-29 19:56:20
【问题描述】:

我正在尝试在 QT 中安装一些基本的串行通信 我从 QSerialPortInfo 获取端口 COM19,并通过 Arduino 成功与端口通话。但是,我无法通过 QT 取回任何东西。

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QTextStream>
#include <QFile>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
        qDebug() << "Name  :" << info.portName();
        qDebug() << "Description  :" << info.description();
        qDebug() << "Manufactuer :"  << info.manufacturer();

        QSerialPort serial;
        serial.setPort(info);

        if(serial.open(QIODevice::ReadWrite))
            qDebug() << serial.errorString();

            serial.write("M114 \n");

            qDebug() << serial.readAll();

            serial.close();
            // Now we need to send and receive commands

            serial.setPortName("COM19");
            serial.setBaudRate(QSerialPort::Baud57600);
            serial.setDataBits(QSerialPort::Data8);
            serial.setParity(QSerialPort::NoParity);
            serial.setStopBits(QSerialPort::OneStop);
            serial.setFlowControl(QSerialPort::NoFlowControl);

            if(serial.open(QIODevice::ReadWrite)){
                qDebug() << "opened";
              }else{
                qDebug() << "Not opened";
            }
           qDebug() << serial.errorString();

            serial.write("M114 \n");
            qDebug() << serial.readAll();

            serial.close();


    }





    MainWindow w;
    w.show();

    return a.exec();
}

如您所见,我正在尝试按照文档内容进行简单连接,并在其中写出所有波特率信息。他们抛出两个不同的错误。

就像我说的,我通过 arduino 连接到同一个端口并取得了成功。有什么想法有什么问题吗?

Name  : "COM19" 
Description  : "USB Serial (Communication Class, Abstract Control Model)" 
Manufactuer : "PJRC.COM, LLC." 
"Unknown error" 
"" 
opened 
"The handle is invalid." 
"" 

关于我做错了什么有什么想法吗?

我的想法是向设备发送命令,然后将它们读回控制台。

【问题讨论】:

    标签: c++ qt serial-port


    【解决方案1】:

    代码看起来有点混乱。您打开所有可用端口,然后尝试做错事。

    注意:您可以像使用 shell 应用程序一样使用 GUI 应用程序。错了。

    试试:

    #include "mainwindow.h"
    #include <QApplication>
    #include <QDebug>
    #include <QTextStream>
    #include <QFile>
    #include <QtSerialPort/QSerialPort>
    #include <QtSerialPort/QSerialPortInfo>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
    
        QSerialPort serial;
        serial.setPortName("COM19");
    
        if(serial.open(QIODevice::ReadWrite)){
            //Now the serial port is open try to set configuration
            if(!serial.setBaudRate(QSerialPort::Baud57600))
                qDebug()<<serial.errorString();
    
            if(!serial.setDataBits(QSerialPort::Data8))
                qDebug()<<serial.errorString();
    
            if(!serial.setParity(QSerialPort::NoParity))
                qDebug()<<serial.errorString();
    
            if(!serial.setStopBits(QSerialPort::OneStop))
                qDebug()<<serial.errorString();
    
            if(!serial.setFlowControl(QSerialPort::NoFlowControl))
                qDebug()<<serial.errorString();
    
            //If any error was returned the serial il corrctly configured
    
            serial.write("M114 \n");
            //the serial must remain opened
    
            if(serial.waitForReadyRead(100)){
                //Data was returned
                qDebug()<<"Response: "<<serial.readAll();
            }else{
                //No data
                qDebug()<<"Time out";
            }
    
            //I have finish alla operation
            serial.close();
        }else{
            qDebug()<<"Serial COM19 not opened. Error: "<<serial.errorString();
        }
    
        MainWindow w;
        w.show();
    
        return a.exec();
    }
    

    【讨论】:

      【解决方案2】:

      从第十个端口开始,他的名字将是\\.\COM10

      您可以在设备管理器中将端口重新分配给其他号码

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-08
        • 1970-01-01
        • 2011-12-10
        • 1970-01-01
        • 1970-01-01
        • 2014-06-05
        • 1970-01-01
        相关资源
        最近更新 更多