查看完整版本: [-- 求思路 PC端UI控制 --]

QTCN开发网 -> Qt嵌入式开发 -> 求思路 PC端UI控制 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

harold00124 2016-11-22 11:37

求思路 PC端UI控制


小弟刚学QT未满一个月很多东西都还不是很熟 而且自己也不算本科生
因为工作关系才开始接触QT

要写一个由PC端控制连结USB转Rs232port的硬体设备

硬体设备端一个介面有大概23个左右的变数,总共有7个操控介面要切换

开启程式的的时候抓取硬体设备的资料并且依相应的DSP Address的值放到对应的控件内

然后UI修改值之后发送修改值到到硬体相对应的DSP Address内

之前有用过Serialport简单控制一个模拟器过 但是DSP Address我没碰过 要怎么写这样的通信协定

自己拉了UI写了一下代码但是实在没有头绪怎么继续写下去了
[attachment=16090]




頭文件
  1. #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #include <QMainWindow>
    #include <QSpinBox>
    #include <QDebug>


    #define Gain_Dsp            //
    #define Level_Dsp           //
    #define Aux_Send_Dsp        //
    #define Rev_Send_Dsp        //
    #define Pan_Dsp             //

    #define Eq_Hi_Dsp           //
    #define Eq_Hi_Freq_Dsp      //

    #define Eq_Mid_Dsp          //
    #define Eq_Mid_Freq_Dsp     //
    #define Eq_Mid_Q_Dsp        //

    #define Eq_Lo_Dsp           //
    #define Eq_Lo_Freq_Dsp      //

    #define Gate_Dsp            //
    #define Gate_Threshold_Dsp  //
    #define Gate_Release_Dsp    //

    #define Comp_Dsp            //
    #define Comp_Threshold_Dsp  //
    #define Comp_Ratio_Dsp      //
    #define Comp_Attack_Dsp     //
    #define Comp_Release_Dsp    //

    #define Delay_Dsp           //
    #define Aux_Delay_Dsp       //

    #define Solo_Dsp            //
    #define Mute_Dsp            //




    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();

    public slots:


        void Ch1_Gain(int Gainvalue);
        void Ch1_Level(int Levelvalue);
        void Ch1_AuxSend(int AuxSendvalue);
        void Ch1_RevSend(int RevSendvalue);
        void Ch1_Pan(int Panvalue);



    private:
        Ui::MainWindow *ui;
    };

    #endif // MAINWINDOW_H

主文件
  1. #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QtSerialPort/QSerialPort>
    QSerialPort *Txserialport;
    QSerialPort *Rxserialport;

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        Rxserialport=new QSerialPort(this);//讀取串口設置
        Txserialport=new QSerialPort(this);//傳送串口設置
        Rxserialport->open(QIODevice::ReadWrite);
        Txserialport->open(QIODevice::ReadWrite);
        Rxserialport->setBaudRate(QSerialPort::Baud115200);
        Txserialport->setBaudRate(QSerialPort::Baud115200);
        Rxserialport->setDataBits(QSerialPort::Data8);
        Txserialport->setDataBits(QSerialPort::Data8);
        Rxserialport->setParity(QSerialPort::SpaceParity);
        Txserialport->setParity(QSerialPort::SpaceParity);
        Rxserialport->setStopBits(QSerialPort::OneStop);
        Txserialport->setStopBits(QSerialPort::OneStop);
        
        
        
        
        
        
        connect(ui->Gain_spinBox,SIGNAL(valueChanged(int)),
                this,SLOT(Ch1_Gain(int)));
        connect(ui->Level_spinBox,SIGNAL(valueChanged(int)),
                this,SLOT(Ch1_Gain(int)));
        connect(ui->Aux_Send_spinBox,SIGNAL(valueChanged(int)),
                this,SLOT(Ch1_AuxSend(int)));
        connect(ui->Rev_Send_spinBox,SIGNAL(valueChanged(int)),
                this,SLOT(Ch1_RevSend(int)));
        connect(ui->Pan_comboBox,SIGNAL(currentIndexChanged(int)),
                this,SLOT(Ch1_Pan(int)));



    }

    MainWindow::~MainWindow()
    {
        delete ui;
        Rxserialport->close();
        Txserialport->close();
    }

    //發射端
    void MainWindow::Ch1_Gain(int Gainvalue)
    {
        Txserialport->write(ui->Gain_spinBox->text().toStdString().data());
    }
    void MainWindow::Ch1_Level(int Levelvalue)
    {
        Txserialport->write(ui->Level_spinBox->text().toStdString().data());
    }
    void MainWindow::Ch1_AuxSend(int AuxSendvalue)
    {
        Txserialport->write(ui->Aux_Send_spinBox->text().toStdString().data());
    }
    void MainWindow::Ch1_RevSend(int RevSendvalue)
    {
        Txserialport->write(ui->Aux_Send_spinBox->text().toStdString().data());
    }
    void MainWindow::Ch1_Pan(int Panvalue)
    {
        Txserialport->write(ui->Pan_comboBox->currentText().toStdString().data());
    }










tonyzhou1985 2016-11-22 14:26
楼主台湾的,繁体看得好累

harold00124 2016-11-22 15:58
后来跟老板问清楚了


程式打开后
马上透过write发送Dsp Address (格式类似0x00FF)
然后等待硬体回应后接收一个16进制8位元的值
把这个值转为10进制后放置到相对应的控件内
把所有在硬体的Dsp内的值都呼叫后载入到UI的控件上

然后从UI更改的值一样变为相对应的16进制8位元
并且发送到设备的时候格式是 Dsp Address+值

后来我按照样的方式去key代码,然后用小设备作廻圈
Tx接COM3 Rx接监测器程式
呼叫有发出去 但是我发现都是乱码 请问为什么会这样??


[attachment=16092]


头文件
  1. #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #include <QMainWindow>
    #include <QSpinBox>
    #include <QDebug>


    #define Gain_Dsp            "0x0001"
    #define Level_Dsp           "0x0002"
    #define Aux_Send_Dsp        "0x0003"
    #define Rev_Send_Dsp        "0x0004"
    #define Pan_Dsp             "0x0005"

    #define Eq_Hi_Dsp           "0x0006"
    #define Eq_Hi_Freq_Dsp      "0x0007"

    #define Eq_Mid_Dsp          "0x0008"
    #define Eq_Mid_Freq_Dsp     "0x0009"
    #define Eq_Mid_Q_Dsp        "0x000A"

    #define Eq_Lo_Dsp           "0x000B"
    #define Eq_Lo_Freq_Dsp      "0x000C"

    #define Gate_Dsp            "0x000D"
    #define Gate_Threshold_Dsp  "0x000E"
    #define Gate_Release_Dsp    "0x000F"

    #define Comp_Dsp            "0x0010"
    #define Comp_Threshold_Dsp  "0x0011"
    #define Comp_Ratio_Dsp      "0x0012"
    #define Comp_Attack_Dsp     "0x0013"
    #define Comp_Release_Dsp    "0x0014"

    #define Delay_Dsp           "0x0015"
    #define Aux_Delay_Dsp       "0x0016"

    #define Solo_Dsp            "0x0017"
    #define Mute_Dsp            "0x0018"




    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();

    public slots:
        void Rxreaddate();



    private:
        Ui::MainWindow *ui;
    };

    #endif // MAINWINDOW_H



主文件
  1. #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QtSerialPort/QSerialPort>
    #include <QSerialPortInfo>
    #include <QDebug>
    QSerialPort *Txserialport;
    QSerialPort *Rxserialport;
    QByteArray Txbyarray;
    QByteArray Rxbyarray;

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);

        Rxserialport=new QSerialPort(this);//讀取串口設置
        Txserialport=new QSerialPort(this);//傳送串口設置

        Rxserialport->setPortName("COM5");
        Txserialport->setPortName("COM3");

        Rxserialport->open(QIODevice::ReadOnly);
        Txserialport->open(QIODevice::WriteOnly);

        Rxserialport->setBaudRate(QSerialPort::Baud115200);
        Txserialport->setBaudRate(QSerialPort::Baud115200);

        Rxserialport->setDataBits(QSerialPort::Data8);
        Txserialport->setDataBits(QSerialPort::Data8);

        Rxserialport->setParity(QSerialPort::SpaceParity);
        Txserialport->setParity(QSerialPort::SpaceParity);

        Rxserialport->setStopBits(QSerialPort::OneStop);
        Txserialport->setStopBits(QSerialPort::OneStop);

        connect(Rxserialport,SIGNAL(readyRead()),
                this,SLOT(Rxreaddate()));

        Txserialport->write(Gain_Dsp);
        qDebug()<<"Gain_Dsp:"<<Gain_Dsp;
        Txserialport->write(Level_Dsp);
        qDebug()<<"Level_Dsp:"<<Level_Dsp;
        Txserialport->write(Aux_Send_Dsp);
        qDebug()<<"Aux_Send_Dsp:"<<Aux_Send_Dsp;
        Txserialport->write(Rev_Send_Dsp);
        qDebug()<<"Rev_Send_Dsp:"<<Rev_Send_Dsp;
        Txserialport->write(Pan_Dsp);
        qDebug()<<"Pan_Dsp:"<<Pan_Dsp;
        
        Txserialport->write(Eq_Hi_Dsp);
        qDebug()<<"Eq_Hi_Dsp:"<<Eq_Hi_Dsp;
        Txserialport->write(Eq_Hi_Freq_Dsp);
        qDebug()<<"Eq_Hi_Freq_Dsp:"<<Eq_Hi_Freq_Dsp;
        Txserialport->write(Eq_Mid_Dsp);
        qDebug()<<"Eq_Mid_Dsp:"<<Eq_Mid_Dsp;
        Txserialport->write(Eq_Mid_Freq_Dsp);
        qDebug()<<"Eq_Mid_Freq_Dsp:"<<Eq_Mid_Freq_Dsp;
        Txserialport->write(Eq_Mid_Q_Dsp);
        qDebug()<<"Eq_Mid_Q_Dsp:"<<Eq_Mid_Q_Dsp;
        Txserialport->write(Eq_Lo_Dsp);
        qDebug()<<"Eq_Lo_Dsp:"<<Eq_Lo_Dsp;
        Txserialport->write(Eq_Lo_Freq_Dsp);
        qDebug()<<"Eq_Lo_Freq_Dsp:"<<Eq_Lo_Freq_Dsp;
        Txserialport->write(Gate_Dsp);
        qDebug()<<"Gate_Dsp:"<<Gate_Dsp;
        Txserialport->write(Gate_Threshold_Dsp);
        qDebug()<<"Gate_Threshold_Dsp:"<<Gate_Threshold_Dsp;
        Txserialport->write(Gate_Release_Dsp);
        qDebug()<<"Gate_Release_Dsp:"<<Gate_Release_Dsp;
        Txserialport->write(Comp_Dsp);
        qDebug()<<"Comp_Dsp:"<<Comp_Dsp;
        Txserialport->write(Comp_Threshold_Dsp);
        qDebug()<<"Comp_Threshold_Dsp:"<<Comp_Threshold_Dsp;
        Txserialport->write(Comp_Ratio_Dsp);
        qDebug()<<"Comp_Ratio_Dsp:"<<Comp_Ratio_Dsp;
        Txserialport->write(Comp_Attack_Dsp);
        qDebug()<<"Comp_Attack_Dsp:"<<Comp_Attack_Dsp;
        Txserialport->write(Comp_Release_Dsp);
        qDebug()<<"Comp_Release_Dsp:"<<Comp_Release_Dsp;

        Txserialport->write(Delay_Dsp);
        qDebug()<<"Delay_Dsp:"<<Delay_Dsp;
        Txserialport->write(Aux_Delay_Dsp);
        qDebug()<<"Aux_Delay_Dsp:"<<Aux_Delay_Dsp;

        Txserialport->write(Solo_Dsp);
        qDebug()<<"Solo_Dsp:"<<Solo_Dsp;
        Txserialport->write(Mute_Dsp);
        qDebug()<<"Mute_Dsp:"<<Mute_Dsp;




    }

    MainWindow::~MainWindow()
    {
        delete ui;
        Rxserialport->close();
        Txserialport->close();
    }

    void MainWindow::Rxreaddate()
    {
        Rxbyarray=Rxserialport->readAll();

    }






uidab 2016-11-22 19:02
要按照16进制显示.

harold00124 2016-11-23 16:54
请教一下大大 我今天想了一整天 不知道这样的想法对不对

我参考了版上的串口调试工具源码

首先我#Define 的位址是属于 16进制的字串组

所以我要先把字串用QbyteArray 转为字节组
再把字节组转为16进制字串符 才能成功发送?

还是有其他更好的办法可以解决?



查看完整版本: [-- 求思路 PC端UI控制 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled