久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 354|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

電力采集程序qt源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:312272 發(fā)表于 2024-8-22 08:51 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QTimer>
  4. #include <QDebug>

  5. MainWindow::MainWindow(QWidget *parent) :
  6.     QMainWindow(parent),
  7.     ui(new Ui::MainWindow), m_serialPort(new QSerialPort()), m_timer(new QTimer)
  8. {
  9.     ui->setupUi(this);

  10.     QComboBox* serialCbo = findChild<QComboBox*>("cboSerial", Qt::FindChildOption::FindChildrenRecursively);

  11.     //獲取所有串口信息
  12.     foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
  13.     {
  14.         qDebug() << "serialPortName:" << info.portName();
  15.         qDebug() << "isBusy:" << info.isBusy();
  16.         qDebug() << "isNull:" << info.isNull();
  17.         qDebug() << "serialCbo:" << serialCbo;
  18.         if(!info.isBusy()){
  19.             serialCbo->addItem(info.portName());
  20.         }
  21.     }
  22. }

  23. MainWindow::~MainWindow()
  24. {
  25.     delete ui;
  26. }

  27. void MainWindow::on_btnOpenSerial_clicked()
  28. {
  29.     QPushButton* btn = findChild<QPushButton*>("btnOpenSerial", Qt::FindChildOption::FindChildrenRecursively);
  30.     if(btn->text() == "打開串口"){//打開
  31.         if(m_serialPort->isOpen())//如果串口已經(jīng)打開了 先給他關(guān)閉了
  32.         {
  33.             m_serialPort->clear();
  34.             m_serialPort->close();
  35.         }

  36.         //設(shè)置串口名字 假設(shè)我們上面已經(jīng)成功獲取到了 并且使用第一個(gè)
  37.         QComboBox* serialCbo = findChild<QComboBox*>("cboSerial", Qt::FindChildOption::FindChildrenRecursively);
  38.         m_serialPort->setPortName(serialCbo->currentText());

  39.         QLabel* serialState = findChild<QLabel*>("lblSerialState", Qt::FindChildOption::FindChildrenRecursively);
  40.         if(!m_serialPort->open(QIODevice::ReadWrite))//用ReadWrite 的模式嘗試打開串口
  41.         {
  42.             serialState->setText(serialCbo->currentText() + "打開失敗!");
  43.             return;
  44.         }
  45.         //打開成功
  46.         serialState->setText(serialCbo->currentText() + "打開成功!");

  47.         m_serialPort->setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//設(shè)置波特率和讀寫方向
  48.         m_serialPort->setDataBits(QSerialPort::Data8);        //數(shù)據(jù)位為8位
  49.         m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//無流控制
  50.         m_serialPort->setParity(QSerialPort::NoParity);    //無校驗(yàn)位
  51.         m_serialPort->setStopBits(QSerialPort::OneStop); //一位停止位

  52.         //連接信號(hào)槽 當(dāng)下位機(jī)發(fā)送數(shù)據(jù)QSerialPortInfo 會(huì)發(fā)送個(gè) readyRead 信號(hào),我們定義個(gè)槽void receiveInfo()解析數(shù)據(jù)
  53.         connect(m_serialPort,SIGNAL(readyRead()),this, SLOT(receiveInfo()));
  54.         connect(m_timer,SIGNAL(timeout()),this, SLOT(timeUpdate()));
  55.         btn->setText("關(guān)閉串口");
  56.     }else {//關(guān)閉
  57.         QComboBox* serialCbo = findChild<QComboBox*>("cboSerial", Qt::FindChildOption::FindChildrenRecursively);
  58.         QLabel* serialState = findChild<QLabel*>("lblSerialState", Qt::FindChildOption::FindChildrenRecursively);
  59.         if (m_serialPort->isOpen())
  60.         {
  61.             m_serialPort->close();
  62.             serialState->setText(serialCbo->currentText() + "關(guān)閉成功!");
  63.             btn->setText("打開串口");
  64.             return;
  65.         }
  66.         serialState->setText(serialCbo->currentText() + "不能重復(fù)關(guān)閉!");
  67.     }
  68. }

  69. float power;
  70. int i = 1;

  71. QByteArray buf;

  72. void MainWindow::receiveInfo()
  73. {
  74.     m_timer->start(100);
  75.     buf.append(m_serialPort->readAll());
  76. }

  77. void MainWindow::timeUpdate(){
  78.     m_timer->stop();
  79.     if(buf.length() > 0){
  80.         qDebug() << "receive..." << buf.length();
  81.         //上述方法不是每次都返回21,每次可能不能完全讀完,分幾次讀取,或一次讀完的都有
  82.         if(buf.length() != 25){//只對(duì)正確的情況做處理,其余數(shù)據(jù)不全的忽略
  83.             return;
  84.         }

  85.         //buf[17] 返回類型為 QByteRef 類型,并非char,不能用它
  86.         //而應(yīng)該用at()

  87.         //取電壓
  88.         qDebug("volt %02x-%02x", buf.at(3), buf.at(4));
  89.         float volt = ((unsigned char)buf.at(3) << 8) + (unsigned char)buf.at(4);
  90.         qDebug() << volt;
  91.         volt *= 0.1;
  92.         QString data = QString("電壓:%1 V").arg(volt);
  93.         QLabel* lblVolt = findChild<QLabel*>("lblVolt", Qt::FindChildOption::FindChildrenRecursively);
  94.         lblVolt->setText(data);

  95.         //取電流
  96.         float circuit = (buf.at(5) << 8) + buf.at(6);
  97.         circuit += ((buf.at(7) << 8) + buf.at(8)) << 16;

  98.         data = QString("電流:%1 mA").arg(circuit);
  99.         QLabel* lblCircut = findChild<QLabel*>("lblCircut", Qt::FindChildOption::FindChildrenRecursively);
  100.         lblCircut->setText(data);

  101.         //取功率
  102.         power = (buf.at(9) << 8) + buf.at(10);
  103.         power += ((buf.at(11) << 8) + buf.at(12)) << 16;
  104.         power *= 0.1;

  105.         data = QString("功率:%1 W").arg(power);
  106.         QLabel* lblPower = findChild<QLabel*>("lblPower", Qt::FindChildOption::FindChildrenRecursively);
  107.         lblPower->setText(data);

  108.         //取頻率
  109.         qDebug("%02x-%02x", buf.at(17), buf.at(18));
  110.         float freq = ((unsigned char)buf.at(17) << 8) + (unsigned char)buf.at(18);

  111.         freq *= 0.1;
  112.         data = QString("頻率:%1 Hz").arg(freq);
  113.         QLabel* lblFreq = findChild<QLabel*>("lblFreq", Qt::FindChildOption::FindChildrenRecursively);
  114.         lblFreq->setText(data);

  115.         QLabel* serialState = findChild<QLabel*>("lblSerialState", Qt::FindChildOption::FindChildrenRecursively);
  116.         QString statebuf = QString("正在采集 %1 次").arg(i);
  117.         serialState->setText(statebuf);

  118.         //update 圖形
  119.         //PaintFrame* frame = findChild<PaintFrame*>("frame", Qt::FindChildOption::FindChildrenRecursively);
  120.         //frame->update(i, 140-(int)power, i, 140);
  121.     }
  122.     buf.clear();
  123. }
復(fù)制代碼

部分代碼下載(可能有錯(cuò)誤,僅供參考): electricty.rar (8.6 KB, 下載次數(shù): 0)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三 | 免费一区二区三区 | 在线观看日韩av | 国产精品久久精品 | 亚洲一二三视频 | 亚洲综合资源 | 99热这里都是精品 | 成人免费视频 | 在线免费观看a级片 | av网址在线 | 免费在线黄 | 美女国产| 狠狠操婷婷 | 国产91一区| 国产欧美精品一区二区色综合朱莉 | 中文av网站 | 成人久久 | 午夜影院中文字幕 | 97av在线 | 日韩精品久久一区二区三区 | 成人在线黄色 | 久久久久久成人 | 久久久av中文字幕 | 美日韩免费 | 欧美精品一区二区三区蜜桃视频 | 亚洲人成人一区二区在线观看 | 成人影院在线视频 | 久草新在线| 91久久北条麻妃一区二区三区 | 一区二区免费 | 欧美日韩国产精品一区 | 国产区精品 | 日韩精品av一区二区三区 | 99精品国产一区二区青青牛奶 | 日韩视频免费看 | 亚洲最新网址 | 日本三级网 | 欧美日韩在线一区二区三区 | 国产1区| 日韩成人免费视频 | 国产福利在线小视频 |