久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
電力采集程序qt源碼
[打印本頁]
作者:
zhangsmart1101
時間:
2024-8-22 08:51
標題:
電力采集程序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())//如果串口已經打開了 先給他關閉了
{
m_serialPort->clear();
m_serialPort->close();
}
//設置串口名字 假設我們上面已經成功獲取到了 并且使用第一個
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);//設置波特率和讀寫方向
m_serialPort->setDataBits(QSerialPort::Data8); //數據位為8位
m_serialPort->setFlowControl(QSerialPort::NoFlowControl);//無流控制
m_serialPort->setParity(QSerialPort::NoParity); //無校驗位
m_serialPort->setStopBits(QSerialPort::OneStop); //一位停止位
//連接信號槽 當下位機發送數據QSerialPortInfo 會發送個 readyRead 信號,我們定義個槽void receiveInfo()解析數據
connect(m_serialPort,SIGNAL(readyRead()),this, SLOT(receiveInfo()));
connect(m_timer,SIGNAL(timeout()),this, SLOT(timeUpdate()));
btn->setText("關閉串口");
}else {//關閉
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() + "關閉成功!");
btn->setText("打開串口");
return;
}
serialState->setText(serialCbo->currentText() + "不能重復關閉!");
}
}
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){//只對正確的情況做處理,其余數據不全的忽略
return;
}
//buf[17] 返回類型為 QByteRef 類型,并非char,不能用它
//而應該用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();
}
復制代碼
部分代碼下載(可能有錯誤,僅供參考):
electricty.rar
(8.6 KB, 下載次數: 0)
2024-8-22 08:51 上傳
點擊文件名下載附件
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美 日韩 国产 成人 在线 91
|
一区二区视屏
|
91在线影院
|
色偷偷888欧美精品久久久
|
午夜视频大全
|
精品日韩一区二区
|
日日夜夜91
|
国产日韩精品久久
|
亚洲国产一区二区在线
|
中文字幕免费视频
|
玖玖视频
|
国产精品视频不卡
|
婷婷不卡
|
蜜桃精品噜噜噜成人av
|
国产精品免费av
|
久久涩涩
|
国产99小视频
|
日本黄色大片免费
|
久久国内精品
|
国产精品中文字幕在线观看
|
凹凸日日摸日日碰夜夜
|
色接久久
|
日韩成人免费av
|
动漫www.被爆羞羞av44
|
欧美理伦片在线播放
|
国产一区黄色
|
欧美一级特黄aaa大片在线观看
|
免费午夜剧场
|
一区二区电影
|
97超碰站
|
在线观看成人小视频
|
亚洲成人一二区
|
中文字幕久久久
|
天堂成人国产精品一区
|
无毛av
|
国产在线精品一区二区三区
|
国产一级特黄aaa大片评分
|
久久精品视频在线免费观看
|
国产黄色小视频在线观看
|
国产精品视频一
|
欧洲一区二区三区
|