Files
gcs-nf/App/ToolsUI/PowerSystem/PowerSystem.cpp
T

511 lines
16 KiB
C++
Raw Normal View History

2023-04-17 17:24:51 +08:00
#include "PowerSystem.h"
2020-10-06 15:18:29 +08:00
#include "ui_PowerSystem.h"
2023-05-15 13:56:25 +08:00
2023-06-03 17:24:33 +08:00
QVector<double> test = {1,2,3,4,5,6,7};
2023-05-15 13:56:25 +08:00
double get_mean(QVector<double> in)
{
double sum = std::accumulate(in.begin(), in.end(), 0.0);
double mean = sum / in.size(); //均值
2023-06-03 17:24:33 +08:00
qDebug() << in.size() << sum;
2023-05-15 13:56:25 +08:00
return mean;
}
2020-10-06 15:18:29 +08:00
PowerSystem::PowerSystem(QWidget *parent) :
QWidget(parent),
ui(new Ui::PowerSystem)
{
ui->setupUi(this);
2020-10-07 19:50:45 +08:00
m_parent = parent;
2023-06-03 17:24:33 +08:00
test.clear();
for(int i = 1;i<101;i++)
{
test.append(i);
}
qDebug() << "get_mean" << get_mean(test);
2022-08-15 10:47:43 +08:00
2020-10-07 19:50:45 +08:00
setWindowTitle(tr("PowerSyste"));
2020-10-06 17:11:59 +08:00
2020-10-07 12:24:23 +08:00
//load qss
QFile file(":/qss/PowerSystem.qss");
file.open(QFile::ReadOnly);
QTextStream filetext(&file);
QString stylesheet = filetext.readAll();
this->setStyleSheet(stylesheet);
file.close();
//设置label
/*
setColor(ui->label_RS,state::success);
setColor(ui->label_NMS,state::success);
setColor(ui->label_ITP,state::success);
setColor(ui->label_CR,state::success);
setColor(ui->label_ITT,state::success);
setColor(ui->label_RPM_mea,state::success);
setColor(ui->label_RM,state::success);
setColor(ui->label_ATP,state::success);
setColor(ui->label_T5,state::success);
setColor(ui->label_TRPM,state::success);
*/
2022-05-31 18:22:08 +08:00
ui->checkBox_17->setHidden(true);
2020-10-07 12:24:23 +08:00
//设置灯
setColor(ui->checkBox_1,state::success);
setColor(ui->checkBox_2,state::success);
setColor(ui->checkBox_3,state::success);
2022-08-15 10:47:43 +08:00
// setColor(ui->checkBox_4,state::success); //P3t超新
2020-10-07 12:24:23 +08:00
setColor(ui->checkBox_5,state::success);
setColor(ui->checkBox_6,state::success);
setColor(ui->checkBox_7,state::success);
setColor(ui->checkBox_8,state::success);
setColor(ui->checkBox_9,state::success);
setColor(ui->checkBox_10,state::success);
setColor(ui->checkBox_11,state::success);
setColor(ui->checkBox_12,state::success);
setColor(ui->checkBox_13,state::success);
setColor(ui->checkBox_14,state::success);
2022-07-13 14:25:23 +08:00
//setColor(ui->checkBox_15,state::success);
2020-10-07 12:24:23 +08:00
setColor(ui->checkBox_16,state::success);
setColor(ui->checkBox_17,state::success);
2022-08-15 10:47:43 +08:00
// setColor(ui->checkBox_18,state::success); //舵机控制器
2020-10-07 12:24:23 +08:00
setColor(ui->checkBox_19,state::success);
setColor(ui->checkBox_20,state::success);
setColor(ui->checkBox_21,state::success);
2020-10-06 15:18:29 +08:00
2020-10-13 18:41:23 +08:00
2020-10-15 22:21:38 +08:00
cmdList.insert(0x13,"冷运转");
cmdList.insert(0x43,"停车");
cmdList.insert(0x73,"紧急停车");
cmdList.insert(0x15,"地面起动");
cmdList.insert(0x25,"空中起动");
cmdList.insert(0x45,"给定转速");
cmdList.insert(0x75,"开半加力(基准档)");
cmdList.insert(0x1c,"开半加力(1档)");
cmdList.insert(0x2c,"开半加力(2档)");
cmdList.insert(0x3c,"开半加力(3档)");
cmdList.insert(0x4c,"开半加力(4档)");
cmdList.insert(0x5c,"开半加力(5档)");
cmdList.insert(0x6c,"开半加力(6档)");
cmdList.insert(0x7c,"开半加力(7档)");
cmdList.insert(0x8c,"开半加力(8档)");
cmdList.insert(0x9c,"开半加力(9档)");
cmdList.insert(0x85,"开全加力(基准档)");
cmdList.insert(0x16,"开全加力(1档)");
cmdList.insert(0x26,"开全加力(2档)");
cmdList.insert(0x36,"开全加力(3档)");
cmdList.insert(0x46,"开全加力(4档)");
cmdList.insert(0x56,"开全加力(5档)");
cmdList.insert(0x66,"开全加力(6档)");
cmdList.insert(0x76,"开全加力(7档)");
cmdList.insert(0x86,"开全加力(8档)");
cmdList.insert(0x96,"开全加力(9档)");
2020-12-04 11:33:50 +08:00
cmdList.insert(0xb5,"关加力");
2020-10-15 22:21:38 +08:00
cmdList.insert(0xd5,"手动转速控制");
cmdList.insert(0x19,"核心机主燃油泵");
cmdList.insert(0x29,"加力主燃油泵");
cmdList.insert(0x49,"加力点火燃油泵");
cmdList.insert(0x79,"尾喷口舵机");
cmdList.insert(0x89,"点火器");
cmdList.insert(0xb9,"起动控制1");
cmdList.insert(0xd9,"起动控制2");
cmdList.insert(0x1a,"核心机点火油阀");
cmdList.insert(0x2a,"核心机优先油阀");
cmdList.insert(0x4a,"核心机轻吹油阀");
cmdList.insert(0x7a,"核心机起动气阀");
cmdList.insert(0x8a,"核心机主油阀");
cmdList.insert(0xba,"加力主油阀");
cmdList.insert(0xda,"加力轻吹阀");
cmdList.insert(0xea,"加力点火快速阀");
2020-10-13 18:41:23 +08:00
2022-02-25 15:50:42 +08:00
ui->frame_RPM->resize(590,176);
ui->frame_Temp->resize(590,176);
ui->frame_Alt->resize(590,176);
ui->frame_Ma->resize(590,176);
ScopeRPM = new Chart(ui->frame_RPM);
ScopeTemp = new Chart(ui->frame_Temp);
ScopeAlt = new Chart(ui->frame_Alt);
ScopeMa = new Chart(ui->frame_Ma);
2020-10-27 18:56:30 +08:00
/*
ScopeRPM->chart()->axisX()->hide();
ScopeTemp->chart()->axisX()->hide();
ScopeAlt->chart()->axisX()->hide();
ScopeMa->chart()->axisX()->hide();
2020-10-27 18:56:30 +08:00
*/
2020-10-27 18:56:30 +08:00
ScopeRPM->chart()->legend()->setAlignment(Qt::AlignRight);
ScopeTemp->chart()->legend()->setAlignment(Qt::AlignRight);
ScopeAlt->chart()->legend()->setAlignment(Qt::AlignRight);
ScopeMa->chart()->legend()->setAlignment(Qt::AlignRight);
ScopeRPM->setOperation(false);
ScopeTemp->setOperation(false);
ScopeAlt->setOperation(false);
ScopeMa->setOperation(false);
ScopeRPM->setRenderHint(QPainter::Antialiasing);
ScopeTemp->setRenderHint(QPainter::Antialiasing);
ScopeAlt->setRenderHint(QPainter::Antialiasing);
ScopeMa->setRenderHint(QPainter::Antialiasing);
2022-01-22 15:28:20 +08:00
//设置默认大小
ScopeRPM->setGeometry(0,0,ui->frame_RPM->width(),ui->frame_RPM->height());
ScopeTemp->setGeometry(0,0,ui->frame_Temp->width(),ui->frame_Temp->height());
ScopeAlt->setGeometry(0,0,ui->frame_Alt->width(),ui->frame_Alt->height());
ScopeMa->setGeometry(0,0,ui->frame_Ma->width(),ui->frame_Ma->height());
2022-08-15 18:35:06 +08:00
2022-08-16 13:11:25 +08:00
averageMa.clear();
averageTime.clear();
2022-08-15 18:35:06 +08:00
//设置开车时间
connect(&timer, &QTimer::timeout,
2022-08-16 13:11:25 +08:00
this, [=]()
2022-08-15 18:35:06 +08:00
{
2022-08-16 13:11:25 +08:00
time = time.addSecs(1);
// qDebug() << time;
2022-08-15 18:35:06 +08:00
ui->label_13->setText(time.toString("hh:mm:ss") );
2022-08-16 13:11:25 +08:00
});
2023-05-15 13:56:25 +08:00
AMaTimer = new QTimer();
AMaTimer->setInterval(1000);
connect(AMaTimer,&QTimer::timeout,this,[=](){
double AMa = get_mean(averageMa);
ui->label_Average_Ma->setText(QString::number(AMa,'f',3));
2023-06-03 17:24:33 +08:00
qDebug() << "mach" << AMa;
2023-05-15 13:56:25 +08:00
});
2020-10-06 15:18:29 +08:00
}
PowerSystem::~PowerSystem()
{
delete ui;
}
2022-03-10 11:22:25 +08:00
void PowerSystem::updateUI()
{
ScopeRPM->setGeometry(0,0,ui->frame_RPM->width(),ui->frame_RPM->height());
ScopeTemp->setGeometry(0,0,ui->frame_Temp->width(),ui->frame_Temp->height());
ScopeAlt->setGeometry(0,0,ui->frame_Alt->width(),ui->frame_Alt->height());
ScopeMa->setGeometry(0,0,ui->frame_Ma->width(),ui->frame_Ma->height());
}
2020-10-10 12:12:30 +08:00
void PowerSystem::resizeEvent(QResizeEvent *event)
{
2022-01-22 15:28:20 +08:00
qDebug() << "resize event";
ScopeRPM->setGeometry(0,0,ui->frame_RPM->width(),ui->frame_RPM->height());
ScopeTemp->setGeometry(0,0,ui->frame_Temp->width(),ui->frame_Temp->height());
ScopeAlt->setGeometry(0,0,ui->frame_Alt->width(),ui->frame_Alt->height());
ScopeMa->setGeometry(0,0,ui->frame_Ma->width(),ui->frame_Ma->height());
2022-02-25 15:50:42 +08:00
//qDebug() << ui->frame_Ma->size();
2020-10-10 12:12:30 +08:00
}
2020-10-06 15:18:29 +08:00
2020-10-06 17:11:59 +08:00
void PowerSystem::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::RightButton)
{
qDebug() << event;
}
}
2020-10-06 15:18:29 +08:00
2020-10-07 19:50:45 +08:00
void PowerSystem::closeEvent(QCloseEvent *event)
{
setFloat();
event->ignore();
}
2020-10-06 15:18:29 +08:00
2020-10-06 17:11:59 +08:00
void PowerSystem::contextMenuEvent(QContextMenuEvent *event)
{
/*
2020-10-06 17:11:59 +08:00
QMenu *menu = new QMenu(this);
2020-10-06 15:18:29 +08:00
2020-10-06 17:11:59 +08:00
QAction *pAction = new QAction("float",this);
connect(pAction,SIGNAL(triggered(bool)),
this,SLOT(setFloat()));
menu->addAction(pAction);
menu->move(cursor().pos());
menu->show();
*/
2020-10-06 17:11:59 +08:00
}
void PowerSystem::setFloat(void)
{
if(this->parent())
{
this->setParent(nullptr);
2020-10-10 15:25:17 +08:00
QScreen *screen=QGuiApplication::primaryScreen ();;
this->move((screen->availableGeometry().width()-this->width())/2,(screen->availableGeometry().height()-this->height())/2);
2020-10-16 17:06:18 +08:00
this->show();
2022-01-24 18:30:30 +08:00
this->resize(m_parent->size());
2022-03-10 11:22:25 +08:00
updateUI();
2020-10-06 17:11:59 +08:00
}
else
{
2020-10-07 19:50:45 +08:00
this->setParent(m_parent);
2020-10-06 17:11:59 +08:00
this->move(0,0);
2022-01-22 15:28:20 +08:00
//this->hide();
this->show();
this->resize(m_parent->size());
2020-10-16 17:06:18 +08:00
//qDebug() << m_parent->children();
2022-03-10 11:22:25 +08:00
updateUI();
2020-10-06 17:11:59 +08:00
}
}
2020-10-06 15:18:29 +08:00
2020-10-07 12:24:23 +08:00
void PowerSystem::setColor(QWidget *w,state s)
{
w->setProperty("state",s);
w->style()->unpolish(w);
w->style()->polish(w);
}
void PowerSystem::setValue(QLabel *w,QString s)
{
w->setText(s);
}
void PowerSystem::setTurbineState(mavlink_turbinestate_t *t)
{
QString runState;
switch (t->SysState & 0x000F) {
case 0x00: runState = "静止"; break;
case 0x01: runState = "地面检查"; break;
case 0x02: runState = "冷运转"; break;
case 0x03: runState = "(预留)"; break;
case 0x04: runState = "停车"; break;
case 0x05: runState = "地起"; break;
case 0x06: runState = "空起(预留)"; break;
case 0x07: runState = "手动"; break;
case 0x08: runState = "安全"; break;
case 0x09: runState = "稳态"; break;
case 0x0a: runState = "减速"; break;
case 0x0b: runState = "加速"; break;
case 0x0c: runState = "关加力"; break;
case 0x0d: runState = "加力点火"; break;
case 0x0e: runState = "半加力"; break;
case 0x0f: runState = "全加力"; break;
}
setValue(ui->label_RS,runState);
2020-12-13 11:00:31 +08:00
float cr = 0;
2020-10-08 16:13:38 +08:00
if(t->P1t != 0)
{
2020-12-13 11:00:31 +08:00
cr = ((float)t->P5t * 1.0f)/t->P1t;
setValue(ui->label_CR,QString::number(cr,'f',3));
2020-10-08 16:13:38 +08:00
}
else
{
2020-12-13 11:00:31 +08:00
cr = 0;
setValue(ui->label_CR,QString::number(0));
2020-10-08 16:13:38 +08:00
}
2020-10-15 22:21:38 +08:00
if(t->SysState & 0x0010)
2020-10-07 12:24:23 +08:00
{
setValue(ui->label_RM,"正式运行");
}
2020-10-15 22:21:38 +08:00
else
{
2020-10-07 12:24:23 +08:00
setValue(ui->label_RM,"地面调试");
}
if((t->SysState & 0x0020) > 0)
{
setValue(ui->label_NMS,"N2传感器");
}
else{
setValue(ui->label_NMS,"N1传感器");
}
2020-10-06 15:18:29 +08:00
setValue(ui->label_P5t,QString::number(t->P5t,'f',1));
2020-12-07 16:29:08 +08:00
setValue(ui->label_RPM_mea,QString::number(t->RPM_mea,'f',0));
2022-08-15 18:35:06 +08:00
2022-08-16 13:11:25 +08:00
// static quint64 StartTime = QDateTime::currentMSecsSinceEpoch();;
static quint64 timeRPM = QDateTime::currentMSecsSinceEpoch();;
static bool isStartTime = false;
if(t->RPM_mea >= 10000)
2022-08-15 18:35:06 +08:00
{
2022-08-16 13:11:25 +08:00
if((QDateTime::currentMSecsSinceEpoch() - timeRPM) > 3000)//3s
2022-08-15 18:35:06 +08:00
{
2022-08-16 13:11:25 +08:00
if(!isStartTime)
2022-08-15 18:35:06 +08:00
{
2022-08-16 13:11:25 +08:00
isStartTime = true;
2022-08-15 18:35:06 +08:00
timer.start(1000);
2022-08-16 13:11:25 +08:00
// StartTime = QDateTime::currentMSecsSinceEpoch();
2022-08-15 18:35:06 +08:00
}
}
2022-08-16 13:11:25 +08:00
}
else
{
isStartTime = false;
timeRPM = QDateTime::currentMSecsSinceEpoch();
if(timer.isActive() )
2022-08-15 18:35:06 +08:00
{
2022-08-16 13:11:25 +08:00
timer.stop();
time = QTime(0, 0);
2022-08-15 18:35:06 +08:00
}
}
2020-12-08 00:03:40 +08:00
setValue(ui->label_T5,QString::number(t->T5 * 0.1 - 273.15,'f',1));
setValue(ui->label_Kfuel,QString::number(t->Kfuel,'f',1));
2020-12-07 16:29:08 +08:00
setValue(ui->label_RPM_des,QString::number(t->RPM_des,'f',0));
setValue(ui->label_RPM_des_ap,QString::number(t->RPM_des_ap,'f',0));
2020-10-15 22:21:38 +08:00
setValue(ui->label_stage_ap,(t->stage_ap == 1)?(tr("正常档位")):(tr("加速档")));
setValue(ui->label_temp_ap,QString::number(t->temp_ap + 200 - 273.15,'f',1));
setValue(ui->label_tas_ap,QString::number(t->tas_ap*10.0,'f',1));
setValue(ui->label_asl_ap,QString::number(t->asl_ap*100.0,'f',1));
setValue(ui->label_KabMain,QString::number(t->KabMain*30.0,'f',1));
setValue(ui->label_KabFire,QString::number(t->KabFire*30.0,'f',1));
setValue(ui->label_KDj,QString::number(t->KDj*30.0,'f',1));
setValue(ui->label_T1t,QString::number(t->T1t + 200 - 273.15,'f',1));
setValue(ui->label_P1t,QString::number(t->P1t,'f',1));
2020-12-13 11:00:31 +08:00
//setValue(ui->label_CR,QString::number(((float)t->P5t)/t->P1t,'f',1));
2022-08-15 10:47:43 +08:00
// setValue(ui->label_DJS,QString::number(t->DJS / 4.0,'f',1)); //舵机位移
setValue(ui->label_Vcc,QString::number(t->Vcc / 5.0,'f',1));
2023-04-17 17:24:51 +08:00
setValue(ui->label_P3t,QString::number(t->Tbak));
2022-08-15 10:47:43 +08:00
// setValue(ui->label_rP51_Def,QString::number(t->Tbak * 0.01,'f',2)); //rP51_Def
// setValue(ui->label_Wf_Def,QString::number(t->RPM_bak,'f',0)); //Wf_Def
2020-11-21 18:19:28 +08:00
//setValue()
//setValue(ui->label_Tbak,QString::number(t->Tbak,'f',1));
2020-11-21 18:19:28 +08:00
//setValue(ui->label_RPM_bak,QString::number(t->RPM_bak,'f',1));
//setValue(ui->label_IOState,QString::number(t->IOState,'f',1));
//setValue(ui->label_SysState,QString::number(t->SysState,'f',1));
//setValue(ui->label_Fault,QString::number(t->Fault,'f',1));
//setValue(ui->label_rev,QString::number(t->rev,'f',1));
2022-08-15 10:47:43 +08:00
// setValue(ui->label_CFuelMode,QString::number(t->CFuelMode,'f',1)); //内部参数
2020-10-14 21:28:47 +08:00
2020-10-15 22:21:38 +08:00
setValue(ui->label_Cmd,cmdList.value(t->Cmd));
2020-10-07 12:24:23 +08:00
setColor(ui->checkBox_1,((t->SysState & 0x0100) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_2,((t->SysState & 0x0200) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_3,((t->SysState & 0x0400) > 0)?(state::failure):(state::success));
2022-08-15 10:47:43 +08:00
//P3t超新
// setColor(ui->checkBox_4,((t->SysState & 0x0800) > 0)?(state::failure):(state::success));
2020-10-07 12:24:23 +08:00
setColor(ui->checkBox_5,((t->SysState & 0x1000) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_6,((t->SysState & 0x2000) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_7,((t->SysState & 0x4000) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_8,((t->Fault & 0x0001) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_9,((t->Fault & 0x0002) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_10,((t->Fault & 0x0004) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_11,((t->Fault & 0x0008) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_12,((t->Fault & 0x0010) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_13,((t->Fault & 0x0020) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_14,((t->Fault & 0x0040) > 0)?(state::failure):(state::success));
2022-07-13 14:25:23 +08:00
//setColor(ui->checkBox_15,((t->Fault & 0x0080) > 0)?(state::failure):(state::success));
2020-10-07 12:24:23 +08:00
setColor(ui->checkBox_16,((t->Fault & 0x0100) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_17,((t->Fault & 0x0200) > 0)?(state::failure):(state::success));
2022-08-15 10:47:43 +08:00
// setColor(ui->checkBox_18,((t->Fault & 0x0400) > 0)?(state::failure):(state::success)); //舵机控制器
2020-10-07 12:24:23 +08:00
setColor(ui->checkBox_19,((t->Fault & 0x0800) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_20,((t->Fault & 0x1000) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_21,((t->Fault & 0x2000) > 0)?(state::failure):(state::success));
2020-10-06 15:18:29 +08:00
2020-12-13 11:00:31 +08:00
ScopeRPM->setSerieData(tr("物理"),t->RPM_mea);
ScopeRPM->setSerieData(tr("期望"),t->RPM_des);
2020-10-13 18:41:23 +08:00
2020-12-13 11:00:31 +08:00
ScopeTemp->setSerieData(tr("压比"),cr);
2020-10-13 18:41:23 +08:00
2020-10-24 20:07:28 +08:00
//从新做一个函数
2023-04-17 17:24:51 +08:00
ScopeAlt->setSerieData(tr("流量计流量"),t->Tbak);
2020-10-13 18:41:23 +08:00
2020-10-07 12:24:23 +08:00
}
2020-10-06 15:18:29 +08:00
2020-10-15 22:21:38 +08:00
void PowerSystem::setCCMState(mavlink_ccmstate_t *t)
{
2021-07-06 09:38:55 +08:00
ui->label_STEMP1->setText(QString::number(t->temp[1] * 0.1,'f',1));
ui->label_STEMP2->setText(QString::number(t->temp[0] * 0.1,'f',1));
2020-10-15 22:21:38 +08:00
}
2020-11-21 18:19:28 +08:00
void PowerSystem::setFuel(QVariant press, QVariant value)
{
setValue(ui->label_fuelpress,press.toString());
setValue(ui->label_fuelvalue,value.toString());
}
2023-05-15 13:56:25 +08:00
2023-05-17 16:27:12 +08:00
void PowerSystem::setMa(qint64 time, QVariant Ma)
{
2023-05-15 13:56:25 +08:00
if(AMaTimer)
{
if(!AMaTimer->isActive())
{
AMaTimer->start();
}
}
averageMa.append(Ma.toDouble());
2023-05-17 16:27:12 +08:00
averageTime.append(time);
2023-05-15 13:56:25 +08:00
2023-06-03 17:24:33 +08:00
/*
while(averageTime.size() > 91)
2023-05-15 13:56:25 +08:00
{
averageTime.removeFirst();
2023-05-15 13:56:25 +08:00
averageMa.removeFirst();
}
2023-06-03 17:24:33 +08:00
*/
while(averageTime.back() - averageTime.first() >= (101))
{
averageTime.removeFirst();
averageMa.removeFirst();
}
2023-05-15 13:56:25 +08:00
2023-06-03 17:24:33 +08:00
qDebug() << "size of time:" << averageTime.size() << averageMa.size() << averageTime.back() << averageTime.first() << (averageTime.back() - averageTime.first());
2023-05-15 13:56:25 +08:00
ScopeMa->setSerieData(tr("马赫"),Ma);
2023-05-15 13:56:25 +08:00
}
void PowerSystem::setAlt(QVariant Alt)
{
2020-12-07 16:29:08 +08:00
//ScopeAlt->setSerieData(tr("海拔"),Alt);
}
2020-11-21 18:19:28 +08:00