update gencode, init on ground or in air

This commit is contained in:
matt
2020-12-14 21:30:15 +08:00
parent 7e86e11134
commit fa477f6eab
13 changed files with 5536 additions and 5150 deletions
+103 -10
View File
@@ -5,6 +5,10 @@
#include <QFileDialog>
#include <QDateTime>
extern "C"{
#include "SIL_capi.h"
}
void MainWindow::scan_param()
{
const rtwCAPI_ModelMappingStaticInfo *sm = (*getmap_func)();
@@ -126,6 +130,18 @@ void MainWindow::scan_param()
{
Att0[2] = param_value.toDouble();
}
else if (param_name == "V0")
{
V0[0] = param_value.toDouble();
}
else if (param_name == "V0(1)")
{
V0[1] = param_value.toDouble();
}
else if (param_name == "V0(2)")
{
V0[2] = param_value.toDouble();
}
else if (param_name == "hground")
{
hground = param_value.toDouble();
@@ -247,6 +263,7 @@ MainWindow::MainWindow(QWidget *parent)
getmap_func = (SIL_GetCAPIStaticMap_ptr)(mdl->resolve("SIL_GetCAPIStaticMap"));
u = (ExtU_SIL_T *)mdl->resolve("SIL_U");
y = (ExtY_SIL_T *)mdl->resolve("SIL_Y");
V0 = (double *)mdl->resolve("V0");
m = (RT_MODEL_SIL_T *)mdl->resolve("SIL_M_");
}
else
@@ -256,6 +273,7 @@ MainWindow::MainWindow(QWidget *parent)
getmap_func = &SIL_GetCAPIStaticMap;
u = &SIL_U;
y = &SIL_Y;
V0 = ::V0;
m = (RT_MODEL_SIL_T *)SIL_M;
}
@@ -264,14 +282,16 @@ MainWindow::MainWindow(QWidget *parent)
if (init_func && step_func && u && y && getmap_func)
{
(*init_func)();
SIL_InitializeDataMapInfo();
scan_param();
ui->lineEditLat->setText(QString("%1").arg(X0[0]));
ui->lineEditLon->setText(QString("%1").arg(X0[1]));
ui->lineEditAlt->setText(QString("%1").arg(hground));
ui->lineEditHdg->setText(QString("%1").arg(Att0[2]*57.3));
ui->lineEditSpeed->setText(QString("%1").arg(V0[0]));
gear_height = X0[2] - hground;
ui->lineEditAGL->setText(QString("%1").arg(gear_height));
qgc_sock = new QUdpSocket(this);
if (qgc_sock->bind(QHostAddress::LocalHost, 6061))
@@ -327,31 +347,54 @@ void MainWindow::update200Hz(void)
ui->lineEditDal->setText(QString("%1").arg(y->da*-57.3,6,'f',2));
ui->lineEditDar->setText(QString("%1").arg(y->da*57.3,6,'f',2));
ui->lineEditDr->setText(QString("%1").arg(y->dr*57.3,6,'f',2));
u->fault = 0;
if (ui->checkBoxTurbine->checkState() == Qt::Checked)
{
u->fault |= 1;
}
else
{
u->fault &= 0xFFFFFFFE;
}
if (ui->checkBoxDel->checkState() == Qt::Checked)
{
u->fault |= 2;
}
else
{
u->fault &= 0xFFFFFFFD;
}
if (ui->checkBoxDer->checkState() == Qt::Checked)
{
u->fault |= 4;
}
else
{
u->fault &= 0xFFFFFFFB;
}
if (ui->checkBoxDr->checkState() == Qt::Checked)
{
u->fault |= 8;
}
else
{
u->fault &= 0xFFFFFFF7;
}
if (ui->checkBoxDal->checkState() == Qt::Checked)
{
u->fault |= 0x10;
}
else
{
u->fault &= 0xFFFFFFEF;
}
if (ui->checkBoxDar->checkState() == Qt::Checked)
{
u->fault |= 0x20;
}
else
{
u->fault &= 0xFFFFFFDF;
}
}
}
@@ -385,13 +428,18 @@ void MainWindow::onFire()
onecase.push_back(val);
}
double hground;
val = ui->lineEditAlt->text().toDouble(&ok);
if (ok)
{
head.push_back("X0(2)");
onecase.push_back(val+gear_height);
hground = val;
head.push_back("hground");
onecase.push_back(val);
onecase.push_back(hground);
if (ui->radioButtonOnGround->isChecked())
{
head.push_back("X0(2)");
onecase.push_back(hground+gear_height);
}
}
val = ui->lineEditHdg->text().toDouble(&ok);
@@ -401,7 +449,26 @@ void MainWindow::onFire()
onecase.push_back(val/57.3);
}
if (ui->radioButtonInAir->isChecked())
{
head.push_back("Att0(1)");
onecase.push_back(0);
val = ui->lineEditSpeed->text().toDouble(&ok);
if (ok)
{
head.push_back("V0");
onecase.push_back(val);
}
val = ui->lineEditAGL->text().toDouble(&ok);
if (ok)
{
head.push_back("X0(2)");
onecase.push_back(hground+val);
}
}
setup_param(head, onecase);
(*init_func)();
QString filename = QString("sil")
+QDateTime::currentDateTime().toString("yyyyMMddhhmmss")
@@ -416,11 +483,24 @@ void MainWindow::onFire()
connect(timer200Hz, SIGNAL(timeout()), this, SLOT(update200Hz()));
timer200Hz->start(5);
stage = 2;
ui->pushButton_start->setText(QString("Launch"));
ui->pushButtonLaunch->setEnabled(true);
ui->tabWidget->setCurrentIndex(1);
if (ui->radioButtonOnGround->isChecked())
{
stage = 2;
ui->pushButton_start->setText(QString("Launch"));
ui->pushButtonLaunch->setEnabled(true);
ui->tabWidget->setCurrentIndex(1);
u->fault = 0x0;
}
if (ui->radioButtonInAir->isChecked())
{
stage = 3;
ui->pushButton_start->setText(QString("Flying"));
ui->pushButtonLaunch->setText(QString("Flying"));
ui->pushButton_start->setEnabled(false);
ui->pushButtonLaunch->setEnabled(false);
ui->tabWidget->setCurrentIndex(1);
u->fault = 0x40;
}
}
else if (stage == 2)
{
@@ -509,3 +589,16 @@ void MainWindow::onTimes(int i)
times = i;
}
void MainWindow::onAG()
{
if (ui->radioButtonOnGround->isChecked())
{
ui->lineEditSpeed->setEnabled(false);
ui->lineEditAGL->setEnabled(false);
}
if (ui->radioButtonInAir->isChecked())
{
ui->lineEditSpeed->setEnabled(true);
ui->lineEditAGL->setEnabled(true);
}
}