• 3879阅读
  • 4回复

[提问]求思路 PC端UI控制 [复制链接]

上一主题 下一主题
离线harold00124
 

只看楼主 倒序阅读 楼主  发表于: 2016-11-22

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

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

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

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

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

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

自己拉了UI写了一下代码但是实在没有头绪怎么继续写下去了
window.open('http://www.qtcn.org/bbs/attachment/Mon_1611/18_176460_348a3b7b297a9ef.jpg?350');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >




頭文件
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QSpinBox>
  5. #include <QDebug>
  6. #define Gain_Dsp            //
  7. #define Level_Dsp           //
  8. #define Aux_Send_Dsp        //
  9. #define Rev_Send_Dsp        //
  10. #define Pan_Dsp             //
  11. #define Eq_Hi_Dsp           //
  12. #define Eq_Hi_Freq_Dsp      //
  13. #define Eq_Mid_Dsp          //
  14. #define Eq_Mid_Freq_Dsp     //
  15. #define Eq_Mid_Q_Dsp        //
  16. #define Eq_Lo_Dsp           //
  17. #define Eq_Lo_Freq_Dsp      //
  18. #define Gate_Dsp            //
  19. #define Gate_Threshold_Dsp  //
  20. #define Gate_Release_Dsp    //
  21. #define Comp_Dsp            //
  22. #define Comp_Threshold_Dsp  //
  23. #define Comp_Ratio_Dsp      //
  24. #define Comp_Attack_Dsp     //
  25. #define Comp_Release_Dsp    //
  26. #define Delay_Dsp           //
  27. #define Aux_Delay_Dsp       //
  28. #define Solo_Dsp            //
  29. #define Mute_Dsp            //
  30. namespace Ui {
  31. class MainWindow;
  32. }
  33. class MainWindow : public QMainWindow
  34. {
  35.     Q_OBJECT
  36. public:
  37.     explicit MainWindow(QWidget *parent = 0);
  38.     ~MainWindow();
  39. public slots:
  40.     void Ch1_Gain(int Gainvalue);
  41.     void Ch1_Level(int Levelvalue);
  42.     void Ch1_AuxSend(int AuxSendvalue);
  43.     void Ch1_RevSend(int RevSendvalue);
  44.     void Ch1_Pan(int Panvalue);
  45. private:
  46.     Ui::MainWindow *ui;
  47. };
  48. #endif // MAINWINDOW_H

文件
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QtSerialPort/QSerialPort>
  4. QSerialPort *Txserialport;
  5. QSerialPort *Rxserialport;
  6. MainWindow::MainWindow(QWidget *parent) :
  7.     QMainWindow(parent),
  8.     ui(new Ui::MainWindow)
  9. {
  10.     ui->setupUi(this);
  11.     Rxserialport=new QSerialPort(this);//讀取串口設置
  12.     Txserialport=new QSerialPort(this);//傳送串口設置
  13.     Rxserialport->open(QIODevice::ReadWrite);
  14.     Txserialport->open(QIODevice::ReadWrite);
  15.     Rxserialport->setBaudRate(QSerialPort::Baud115200);
  16.     Txserialport->setBaudRate(QSerialPort::Baud115200);
  17.     Rxserialport->setDataBits(QSerialPort::Data8);
  18.     Txserialport->setDataBits(QSerialPort::Data8);
  19.     Rxserialport->setParity(QSerialPort::SpaceParity);
  20.     Txserialport->setParity(QSerialPort::SpaceParity);
  21.     Rxserialport->setStopBits(QSerialPort::OneStop);
  22.     Txserialport->setStopBits(QSerialPort::OneStop);
  23.     
  24.     
  25.     
  26.     
  27.     
  28.     
  29.     connect(ui->Gain_spinBox,SIGNAL(valueChanged(int)),
  30.             this,SLOT(Ch1_Gain(int)));
  31.     connect(ui->Level_spinBox,SIGNAL(valueChanged(int)),
  32.             this,SLOT(Ch1_Gain(int)));
  33.     connect(ui->Aux_Send_spinBox,SIGNAL(valueChanged(int)),
  34.             this,SLOT(Ch1_AuxSend(int)));
  35.     connect(ui->Rev_Send_spinBox,SIGNAL(valueChanged(int)),
  36.             this,SLOT(Ch1_RevSend(int)));
  37.     connect(ui->Pan_comboBox,SIGNAL(currentIndexChanged(int)),
  38.             this,SLOT(Ch1_Pan(int)));
  39. }
  40. MainWindow::~MainWindow()
  41. {
  42.     delete ui;
  43.     Rxserialport->close();
  44.     Txserialport->close();
  45. }
  46. //發射端
  47. void MainWindow::Ch1_Gain(int Gainvalue)
  48. {
  49.     Txserialport->write(ui->Gain_spinBox->text().toStdString().data());
  50. }
  51. void MainWindow::Ch1_Level(int Levelvalue)
  52. {
  53.     Txserialport->write(ui->Level_spinBox->text().toStdString().data());
  54. }
  55. void MainWindow::Ch1_AuxSend(int AuxSendvalue)
  56. {
  57.     Txserialport->write(ui->Aux_Send_spinBox->text().toStdString().data());
  58. }
  59. void MainWindow::Ch1_RevSend(int RevSendvalue)
  60. {
  61.     Txserialport->write(ui->Aux_Send_spinBox->text().toStdString().data());
  62. }
  63. void MainWindow::Ch1_Pan(int Panvalue)
  64. {
  65.     Txserialport->write(ui->Pan_comboBox->currentText().toStdString().data());
  66. }









离线tonyzhou1985

只看该作者 1楼 发表于: 2016-11-22
楼主台湾的,繁体看得好累
1条评分金钱+1
harold00124 金钱 +1 謝謝回復 我改成簡體的好了 2016-11-22
离线harold00124

只看该作者 2楼 发表于: 2016-11-22
后来跟老板问清楚了


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

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

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





头文件
  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. #include <QSpinBox>
  5. #include <QDebug>
  6. #define Gain_Dsp            "0x0001"
  7. #define Level_Dsp           "0x0002"
  8. #define Aux_Send_Dsp        "0x0003"
  9. #define Rev_Send_Dsp        "0x0004"
  10. #define Pan_Dsp             "0x0005"
  11. #define Eq_Hi_Dsp           "0x0006"
  12. #define Eq_Hi_Freq_Dsp      "0x0007"
  13. #define Eq_Mid_Dsp          "0x0008"
  14. #define Eq_Mid_Freq_Dsp     "0x0009"
  15. #define Eq_Mid_Q_Dsp        "0x000A"
  16. #define Eq_Lo_Dsp           "0x000B"
  17. #define Eq_Lo_Freq_Dsp      "0x000C"
  18. #define Gate_Dsp            "0x000D"
  19. #define Gate_Threshold_Dsp  "0x000E"
  20. #define Gate_Release_Dsp    "0x000F"
  21. #define Comp_Dsp            "0x0010"
  22. #define Comp_Threshold_Dsp  "0x0011"
  23. #define Comp_Ratio_Dsp      "0x0012"
  24. #define Comp_Attack_Dsp     "0x0013"
  25. #define Comp_Release_Dsp    "0x0014"
  26. #define Delay_Dsp           "0x0015"
  27. #define Aux_Delay_Dsp       "0x0016"
  28. #define Solo_Dsp            "0x0017"
  29. #define Mute_Dsp            "0x0018"
  30. namespace Ui {
  31. class MainWindow;
  32. }
  33. class MainWindow : public QMainWindow
  34. {
  35.     Q_OBJECT
  36. public:
  37.     explicit MainWindow(QWidget *parent = 0);
  38.     ~MainWindow();
  39. public slots:
  40.     void Rxreaddate();
  41. private:
  42.     Ui::MainWindow *ui;
  43. };
  44. #endif // MAINWINDOW_H



主文件
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QtSerialPort/QSerialPort>
  4. #include <QSerialPortInfo>
  5. #include <QDebug>
  6. QSerialPort *Txserialport;
  7. QSerialPort *Rxserialport;
  8. QByteArray Txbyarray;
  9. QByteArray Rxbyarray;
  10. MainWindow::MainWindow(QWidget *parent) :
  11.     QMainWindow(parent),
  12.     ui(new Ui::MainWindow)
  13. {
  14.     ui->setupUi(this);
  15.     Rxserialport=new QSerialPort(this);//讀取串口設置
  16.     Txserialport=new QSerialPort(this);//傳送串口設置
  17.     Rxserialport->setPortName("COM5");
  18.     Txserialport->setPortName("COM3");
  19.     Rxserialport->open(QIODevice::ReadOnly);
  20.     Txserialport->open(QIODevice::WriteOnly);
  21.     Rxserialport->setBaudRate(QSerialPort::Baud115200);
  22.     Txserialport->setBaudRate(QSerialPort::Baud115200);
  23.     Rxserialport->setDataBits(QSerialPort::Data8);
  24.     Txserialport->setDataBits(QSerialPort::Data8);
  25.     Rxserialport->setParity(QSerialPort::SpaceParity);
  26.     Txserialport->setParity(QSerialPort::SpaceParity);
  27.     Rxserialport->setStopBits(QSerialPort::OneStop);
  28.     Txserialport->setStopBits(QSerialPort::OneStop);
  29.     connect(Rxserialport,SIGNAL(readyRead()),
  30.             this,SLOT(Rxreaddate()));
  31.     Txserialport->write(Gain_Dsp);
  32.     qDebug()<<"Gain_Dsp:"<<Gain_Dsp;
  33.     Txserialport->write(Level_Dsp);
  34.     qDebug()<<"Level_Dsp:"<<Level_Dsp;
  35.     Txserialport->write(Aux_Send_Dsp);
  36.     qDebug()<<"Aux_Send_Dsp:"<<Aux_Send_Dsp;
  37.     Txserialport->write(Rev_Send_Dsp);
  38.     qDebug()<<"Rev_Send_Dsp:"<<Rev_Send_Dsp;
  39.     Txserialport->write(Pan_Dsp);
  40.     qDebug()<<"Pan_Dsp:"<<Pan_Dsp;
  41.     
  42.     Txserialport->write(Eq_Hi_Dsp);
  43.     qDebug()<<"Eq_Hi_Dsp:"<<Eq_Hi_Dsp;
  44.     Txserialport->write(Eq_Hi_Freq_Dsp);
  45.     qDebug()<<"Eq_Hi_Freq_Dsp:"<<Eq_Hi_Freq_Dsp;
  46.     Txserialport->write(Eq_Mid_Dsp);
  47.     qDebug()<<"Eq_Mid_Dsp:"<<Eq_Mid_Dsp;
  48.     Txserialport->write(Eq_Mid_Freq_Dsp);
  49.     qDebug()<<"Eq_Mid_Freq_Dsp:"<<Eq_Mid_Freq_Dsp;
  50.     Txserialport->write(Eq_Mid_Q_Dsp);
  51.     qDebug()<<"Eq_Mid_Q_Dsp:"<<Eq_Mid_Q_Dsp;
  52.     Txserialport->write(Eq_Lo_Dsp);
  53.     qDebug()<<"Eq_Lo_Dsp:"<<Eq_Lo_Dsp;
  54.     Txserialport->write(Eq_Lo_Freq_Dsp);
  55.     qDebug()<<"Eq_Lo_Freq_Dsp:"<<Eq_Lo_Freq_Dsp;
  56.     Txserialport->write(Gate_Dsp);
  57.     qDebug()<<"Gate_Dsp:"<<Gate_Dsp;
  58.     Txserialport->write(Gate_Threshold_Dsp);
  59.     qDebug()<<"Gate_Threshold_Dsp:"<<Gate_Threshold_Dsp;
  60.     Txserialport->write(Gate_Release_Dsp);
  61.     qDebug()<<"Gate_Release_Dsp:"<<Gate_Release_Dsp;
  62.     Txserialport->write(Comp_Dsp);
  63.     qDebug()<<"Comp_Dsp:"<<Comp_Dsp;
  64.     Txserialport->write(Comp_Threshold_Dsp);
  65.     qDebug()<<"Comp_Threshold_Dsp:"<<Comp_Threshold_Dsp;
  66.     Txserialport->write(Comp_Ratio_Dsp);
  67.     qDebug()<<"Comp_Ratio_Dsp:"<<Comp_Ratio_Dsp;
  68.     Txserialport->write(Comp_Attack_Dsp);
  69.     qDebug()<<"Comp_Attack_Dsp:"<<Comp_Attack_Dsp;
  70.     Txserialport->write(Comp_Release_Dsp);
  71.     qDebug()<<"Comp_Release_Dsp:"<<Comp_Release_Dsp;
  72.     Txserialport->write(Delay_Dsp);
  73.     qDebug()<<"Delay_Dsp:"<<Delay_Dsp;
  74.     Txserialport->write(Aux_Delay_Dsp);
  75.     qDebug()<<"Aux_Delay_Dsp:"<<Aux_Delay_Dsp;
  76.     Txserialport->write(Solo_Dsp);
  77.     qDebug()<<"Solo_Dsp:"<<Solo_Dsp;
  78.     Txserialport->write(Mute_Dsp);
  79.     qDebug()<<"Mute_Dsp:"<<Mute_Dsp;
  80. }
  81. MainWindow::~MainWindow()
  82. {
  83.     delete ui;
  84.     Rxserialport->close();
  85.     Txserialport->close();
  86. }
  87. void MainWindow::Rxreaddate()
  88. {
  89.     Rxbyarray=Rxserialport->readAll();
  90. }





离线uidab

只看该作者 3楼 发表于: 2016-11-22
要按照16进制显示.
1条评分金钱+10
harold00124 金钱 +10 謝謝提點!小弟會從這個方向去找處理方法!! 2016-11-22
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
离线harold00124

只看该作者 4楼 发表于: 2016-11-23
请教一下大大 我今天想了一整天 不知道这样的想法对不对

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

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

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

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

快速回复
限100 字节
 
上一个 下一个