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

511 lines
16 KiB
C++

#include "PowerSystem.h"
#include "ui_PowerSystem.h"
QVector<double> test = {1,2,3,4,5,6,7};
double get_mean(QVector<double> in)
{
double sum = std::accumulate(in.begin(), in.end(), 0.0);
double mean = sum / in.size(); //均值
qDebug() << in.size() << sum;
return mean;
}
PowerSystem::PowerSystem(QWidget *parent) :
QWidget(parent),
ui(new Ui::PowerSystem)
{
ui->setupUi(this);
m_parent = parent;
test.clear();
for(int i = 1;i<101;i++)
{
test.append(i);
}
qDebug() << "get_mean" << get_mean(test);
setWindowTitle(tr("PowerSyste"));
//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);
*/
ui->checkBox_17->setHidden(true);
//设置灯
setColor(ui->checkBox_1,state::success);
setColor(ui->checkBox_2,state::success);
setColor(ui->checkBox_3,state::success);
// setColor(ui->checkBox_4,state::success); //P3t超新
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);
//setColor(ui->checkBox_15,state::success);
setColor(ui->checkBox_16,state::success);
setColor(ui->checkBox_17,state::success);
// setColor(ui->checkBox_18,state::success); //舵机控制器
setColor(ui->checkBox_19,state::success);
setColor(ui->checkBox_20,state::success);
setColor(ui->checkBox_21,state::success);
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档)");
cmdList.insert(0xb5,"关加力");
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,"加力点火快速阀");
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);
/*
ScopeRPM->chart()->axisX()->hide();
ScopeTemp->chart()->axisX()->hide();
ScopeAlt->chart()->axisX()->hide();
ScopeMa->chart()->axisX()->hide();
*/
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);
//设置默认大小
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());
averageMa.clear();
averageTime.clear();
//设置开车时间
connect(&timer, &QTimer::timeout,
this, [=]()
{
time = time.addSecs(1);
// qDebug() << time;
ui->label_13->setText(time.toString("hh:mm:ss") );
});
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));
qDebug() << "mach" << AMa;
});
}
PowerSystem::~PowerSystem()
{
delete ui;
}
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());
}
void PowerSystem::resizeEvent(QResizeEvent *event)
{
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());
//qDebug() << ui->frame_Ma->size();
}
void PowerSystem::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::RightButton)
{
qDebug() << event;
}
}
void PowerSystem::closeEvent(QCloseEvent *event)
{
setFloat();
event->ignore();
}
void PowerSystem::contextMenuEvent(QContextMenuEvent *event)
{
/*
QMenu *menu = new QMenu(this);
QAction *pAction = new QAction("float",this);
connect(pAction,SIGNAL(triggered(bool)),
this,SLOT(setFloat()));
menu->addAction(pAction);
menu->move(cursor().pos());
menu->show();
*/
}
void PowerSystem::setFloat(void)
{
if(this->parent())
{
this->setParent(nullptr);
QScreen *screen=QGuiApplication::primaryScreen ();;
this->move((screen->availableGeometry().width()-this->width())/2,(screen->availableGeometry().height()-this->height())/2);
this->show();
this->resize(m_parent->size());
updateUI();
}
else
{
this->setParent(m_parent);
this->move(0,0);
//this->hide();
this->show();
this->resize(m_parent->size());
//qDebug() << m_parent->children();
updateUI();
}
}
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);
float cr = 0;
if(t->P1t != 0)
{
cr = ((float)t->P5t * 1.0f)/t->P1t;
setValue(ui->label_CR,QString::number(cr,'f',3));
}
else
{
cr = 0;
setValue(ui->label_CR,QString::number(0));
}
if(t->SysState & 0x0010)
{
setValue(ui->label_RM,"正式运行");
}
else
{
setValue(ui->label_RM,"地面调试");
}
if((t->SysState & 0x0020) > 0)
{
setValue(ui->label_NMS,"N2传感器");
}
else{
setValue(ui->label_NMS,"N1传感器");
}
setValue(ui->label_P5t,QString::number(t->P5t,'f',1));
setValue(ui->label_RPM_mea,QString::number(t->RPM_mea,'f',0));
// static quint64 StartTime = QDateTime::currentMSecsSinceEpoch();;
static quint64 timeRPM = QDateTime::currentMSecsSinceEpoch();;
static bool isStartTime = false;
if(t->RPM_mea >= 10000)
{
if((QDateTime::currentMSecsSinceEpoch() - timeRPM) > 3000)//3s
{
if(!isStartTime)
{
isStartTime = true;
timer.start(1000);
// StartTime = QDateTime::currentMSecsSinceEpoch();
}
}
}
else
{
isStartTime = false;
timeRPM = QDateTime::currentMSecsSinceEpoch();
if(timer.isActive() )
{
timer.stop();
time = QTime(0, 0);
}
}
setValue(ui->label_T5,QString::number(t->T5 * 0.1 - 273.15,'f',1));
setValue(ui->label_Kfuel,QString::number(t->Kfuel,'f',1));
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));
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));
//setValue(ui->label_CR,QString::number(((float)t->P5t)/t->P1t,'f',1));
// setValue(ui->label_DJS,QString::number(t->DJS / 4.0,'f',1)); //舵机位移
setValue(ui->label_Vcc,QString::number(t->Vcc / 5.0,'f',1));
setValue(ui->label_P3t,QString::number(t->Tbak));
// 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
//setValue()
//setValue(ui->label_Tbak,QString::number(t->Tbak,'f',1));
//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));
// setValue(ui->label_CFuelMode,QString::number(t->CFuelMode,'f',1)); //内部参数
setValue(ui->label_Cmd,cmdList.value(t->Cmd));
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));
//P3t超新
// setColor(ui->checkBox_4,((t->SysState & 0x0800) > 0)?(state::failure):(state::success));
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));
//setColor(ui->checkBox_15,((t->Fault & 0x0080) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_16,((t->Fault & 0x0100) > 0)?(state::failure):(state::success));
setColor(ui->checkBox_17,((t->Fault & 0x0200) > 0)?(state::failure):(state::success));
// setColor(ui->checkBox_18,((t->Fault & 0x0400) > 0)?(state::failure):(state::success)); //舵机控制器
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));
ScopeRPM->setSerieData(tr("物理"),t->RPM_mea);
ScopeRPM->setSerieData(tr("期望"),t->RPM_des);
ScopeTemp->setSerieData(tr("压比"),cr);
//从新做一个函数
ScopeAlt->setSerieData(tr("流量计流量"),t->Tbak);
}
void PowerSystem::setCCMState(mavlink_ccmstate_t *t)
{
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));
}
void PowerSystem::setFuel(QVariant press, QVariant value)
{
setValue(ui->label_fuelpress,press.toString());
setValue(ui->label_fuelvalue,value.toString());
}
void PowerSystem::setMa(qint64 time, QVariant Ma)
{
if(AMaTimer)
{
if(!AMaTimer->isActive())
{
AMaTimer->start();
}
}
averageMa.append(Ma.toDouble());
averageTime.append(time);
/*
while(averageTime.size() > 91)
{
averageTime.removeFirst();
averageMa.removeFirst();
}
*/
while(averageTime.back() - averageTime.first() >= (101))
{
averageTime.removeFirst();
averageMa.removeFirst();
}
qDebug() << "size of time:" << averageTime.size() << averageMa.size() << averageTime.back() << averageTime.first() << (averageTime.back() - averageTime.first());
ScopeMa->setSerieData(tr("马赫"),Ma);
}
void PowerSystem::setAlt(QVariant Alt)
{
//ScopeAlt->setSerieData(tr("海拔"),Alt);
}