久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
電力采集程序qt源碼
[打印本頁]
作者:
zhangsmart1101
時(shí)間:
2024-8-22 08:51
標(biāo)題:
電力采集程序qt源碼
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow), m_serialPort(new QSerialPort()), m_timer(new QTimer)
{
ui->setupUi(this);
QComboBox* serialCbo = findChild<QComboBox*>("cboSerial", Qt::FindChildOption::FindChildrenRecursively);
//獲取所有串口信息
foreach(const QSerialPortInfo &info,QSerialPortInfo::availablePorts())
{
qDebug() << "serialPortName:" << info.portName();
qDebug() << "isBusy:" << info.isBusy();
qDebug() << "isNull:" << info.isNull();
qDebug() << "serialCbo:" << serialCbo;
if(!info.isBusy()){
serialCbo->addItem(info.portName());
}
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_btnOpenSerial_clicked()
{
QPushButton* btn = findChild<QPushButton*>("btnOpenSerial", Qt::FindChildOption::FindChildrenRecursively);
if(btn->text() == "打開串口"){//打開
if(m_serialPort->isOpen())//如果串口已經(jīng)打開了 先給他關(guān)閉了
{
m_serialPort->clear();
m_serialPort->close();
}
//設(shè)置串口名字 假設(shè)我們上面已經(jīng)成功獲取到了 并且使用第一個(gè)
QComboBox* serialCbo = findChild<QComboBox*>("cboSerial", Qt::FindChildOption::FindChildrenRecursively);
m_serialPort->setPortName(serialCbo->currentText());
QLabel* serialState = findChild<QLabel*>("lblSerialState", Qt::FindChildOption::FindChildrenRecursively);
if(!m_serialPort->open(QIODevice::ReadWrite))//用ReadWrite 的模式嘗試打開串口
{
serialState->setText(serialCbo->currentText() + "打開失敗!");
return;
}
//打開成功
serialState->setText(serialCbo->currentText() + "打開成功!");
m_serialPort->setBaudRate(QSerialPort::Baud9600,QSerialPort::AllDirections);//設(shè)置波特率和讀寫方向
m_serialPort->setDataBits(QSerialPort::Data8); //數(shù)據(jù)位為8位
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//無流控制
m_serialPort->setParity(QSerialPort::NoParity); //無校驗(yàn)位
m_serialPort->setStopBits(QSerialPort::OneStop); //一位停止位
//連接信號(hào)槽 當(dāng)下位機(jī)發(fā)送數(shù)據(jù)QSerialPortInfo 會(huì)發(fā)送個(gè) readyRead 信號(hào),我們定義個(gè)槽void receiveInfo()解析數(shù)據(jù)
connect(m_serialPort,SIGNAL(readyRead()),this, SLOT(receiveInfo()));
connect(m_timer,SIGNAL(timeout()),this, SLOT(timeUpdate()));
btn->setText("關(guān)閉串口");
}else {//關(guān)閉
QComboBox* serialCbo = findChild<QComboBox*>("cboSerial", Qt::FindChildOption::FindChildrenRecursively);
QLabel* serialState = findChild<QLabel*>("lblSerialState", Qt::FindChildOption::FindChildrenRecursively);
if (m_serialPort->isOpen())
{
m_serialPort->close();
serialState->setText(serialCbo->currentText() + "關(guān)閉成功!");
btn->setText("打開串口");
return;
}
serialState->setText(serialCbo->currentText() + "不能重復(fù)關(guān)閉!");
}
}
float power;
int i = 1;
QByteArray buf;
void MainWindow::receiveInfo()
{
m_timer->start(100);
buf.append(m_serialPort->readAll());
}
void MainWindow::timeUpdate(){
m_timer->stop();
if(buf.length() > 0){
qDebug() << "receive..." << buf.length();
//上述方法不是每次都返回21,每次可能不能完全讀完,分幾次讀取,或一次讀完的都有
if(buf.length() != 25){//只對(duì)正確的情況做處理,其余數(shù)據(jù)不全的忽略
return;
}
//buf[17] 返回類型為 QByteRef 類型,并非char,不能用它
//而應(yīng)該用at()
//取電壓
qDebug("volt %02x-%02x", buf.at(3), buf.at(4));
float volt = ((unsigned char)buf.at(3) << 8) + (unsigned char)buf.at(4);
qDebug() << volt;
volt *= 0.1;
QString data = QString("電壓:%1 V").arg(volt);
QLabel* lblVolt = findChild<QLabel*>("lblVolt", Qt::FindChildOption::FindChildrenRecursively);
lblVolt->setText(data);
//取電流
float circuit = (buf.at(5) << 8) + buf.at(6);
circuit += ((buf.at(7) << 8) + buf.at(8)) << 16;
data = QString("電流:%1 mA").arg(circuit);
QLabel* lblCircut = findChild<QLabel*>("lblCircut", Qt::FindChildOption::FindChildrenRecursively);
lblCircut->setText(data);
//取功率
power = (buf.at(9) << 8) + buf.at(10);
power += ((buf.at(11) << 8) + buf.at(12)) << 16;
power *= 0.1;
data = QString("功率:%1 W").arg(power);
QLabel* lblPower = findChild<QLabel*>("lblPower", Qt::FindChildOption::FindChildrenRecursively);
lblPower->setText(data);
//取頻率
qDebug("%02x-%02x", buf.at(17), buf.at(18));
float freq = ((unsigned char)buf.at(17) << 8) + (unsigned char)buf.at(18);
freq *= 0.1;
data = QString("頻率:%1 Hz").arg(freq);
QLabel* lblFreq = findChild<QLabel*>("lblFreq", Qt::FindChildOption::FindChildrenRecursively);
lblFreq->setText(data);
QLabel* serialState = findChild<QLabel*>("lblSerialState", Qt::FindChildOption::FindChildrenRecursively);
QString statebuf = QString("正在采集 %1 次").arg(i);
serialState->setText(statebuf);
//update 圖形
//PaintFrame* frame = findChild<PaintFrame*>("frame", Qt::FindChildOption::FindChildrenRecursively);
//frame->update(i, 140-(int)power, i, 140);
}
buf.clear();
}
復(fù)制代碼
部分代碼下載(可能有錯(cuò)誤,僅供參考):
electricty.rar
(8.6 KB, 下載次數(shù): 0)
2024-8-22 08:51 上傳
點(diǎn)擊文件名下載附件
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
国产h视频在线观看
|
欧美一区二区三区的
|
午夜精品在线
|
日本激情视频
|
欧美啪啪网
|
中文字幕在线播放视频
|
欧美日本在线观看
|
成人欧美视频
|
欧美日韩毛片
|
精品黑人一区二区三区国语馆
|
日韩视频一区二区
|
一区在线观看
|
亚洲免费福利视频
|
亚洲成人av
|
国产精品99久久久久久久久久久久
|
国产一区二区影院
|
国产成人精品一区二区三区在线
|
日韩1级片
|
欧美日韩a
|
男女免费视频
|
亚洲国产激情
|
精品国产三级
|
国产一区二区三区在线视频
|
黄色大片在线
|
中文字幕影院
|
玖玖视频在线
|
国产精品国产精品国产专区不卡
|
国产三级视频在线播放
|
不卡av在线播放
|
久久亚洲免费视频
|
色婷婷丁香
|
色综合99
|
亚洲男人天堂网
|
www久久久
|
欧美三级韩国三级日本三斤在线观看
|
亚洲第一在线
|
欧美日韩一区在线
|
久操av在线
|
亚洲第一毛片
|
国产一级18片视频
|
解开岳的丰满奶罩bd
|