main_modellsim.cpp

来自「this the code of bootstation」· C++ 代码 · 共 162 行

CPP
162
字号


#include "main_ModellSim.h"

ofstream Outfile;

//****************************************************************
int main(void)
{

	cout<<"Simulationszeit[s]: ";
	cin>>Simulationszeit;

	Outfile.open("Zeppelin_Modell.xls");
	Outfile << "Zeit[s]" << "\t" << "Pos_x (Modell)" << "\t" << "x_Pos (Kalman)" << "\t"
			<< "Pos_y (Modell)" <<"\t" << "y_Pos (Kalman)" << "\t"
			<< "H鰄e_soll" << "\t" << "H鰄e_Modell" << "\t" << "H鰄e_ist" << "\t" 
			<< "Richtung_soll" << "\t" << "Richtung_Modell" << "\t" << "Richtung_ist" << "\t"
			<< "HauptMotor" << "\t" << "Servo_Winkel" << "\t" << "HeckMotor" << "\t" << "Handlung" << "\t"
			<< "Sensor_vorne" << "\t" << "Entf_vorne" << "\t"
			<< "Sensor_hinten" << "\t" << "Entf_hinten" << "\t"	
			<< "Sensor_oben" << "\t" << "Entf_oben"<< "\t"
			<< "Sensor_unten" << "\t" << "Entf_unten"<< "\t"
			<< "Sensor_rechts" << "\t" << "Entf_rechts"<< "\t"
			<< "Sensor_links" << "\t" << "Entf_links" << "\t" << "v_Zeppelin" << endl;
	
while (Zeit < Simulationszeit)
{

	if (Zeit > 6)
	{
		Zeit=Zeit;
	}

	switch (Taskaufruf)
	{


	case 1: Messung_v = Sen_vorne_lesen();	//Messung starten, Messwert auslesen
			Kalman_Filter(Entf_vorne, Messung_v, Gain_vorne, P_min_vorne);//Messwert Filtern
			Task_fertig	= true; break;

	case 2:	Messung_h = Sen_hinten_lesen();	//Messung starten, Messwert auslesen	
			Kalman_Filter(Entf_hinten, Messung_h, Gain_hinten, P_min_hinten);//Messwert Filtern
			Task_fertig	= true; break;

	case 3:	Messung_o = Sen_oben_lesen();		//Messung starten, Messwert auslesen	
			Kalman_Filter(Entf_oben, Messung_o, Gain_oben, P_min_oben);//Messwert Filtern
			Task_fertig	= true; break;;

	case 4:	Messung_u = Sen_unten_lesen();	//Messung starten, Messwert auslesen		
			Kalman_Filter(Entf_unten, Messung_u, Gain_unten, P_min_unten);//Messwert Filtern
			Task_fertig	= true; break;

	case 5:	Messung_r = Sen_rechts_lesen();	//Messung starten, Messwert auslesen			
			Kalman_Filter(Entf_rechts, Messung_r, Gain_rechts, P_min_rechts);//Messwert Filtern
			Task_fertig	= true; break;

	case 6:	Messung_l = Sen_links_lesen();	//Messung starten, Messwert auslesen			
			Kalman_Filter(Entf_links, Messung_l, Gain_links, P_min_links);//Messwert Filtern
			
			Hoehe_ist = Entf_unten[0];
			
			//Zeit-Variable i um die Prozesszyklusdauer erh鰄en
			Zeit += Prozesszyklus;

			//膎derung der Richtung zum letzten Zyklus berechnen (Richtung_grd sp鋞er vom Gyro)
			Richtung_ist[0] = Richtung_grd;

			//delta_Richtung = Richtung_grd - Richtung_ist[0];
			//Geschwindigkeitsmessung, Winkelkorrektur und Positionsbestimmung
			Position_bestimmen();

			virtuelle_Sensoren();

		//----------------------------------------------------------------------------------
		//Ausgabe in Excel Datei
				Outfile << Zeit << "\t" << Pos_x << "\t" << x_Position[0] << "\t" 
				<< Pos_y <<"\t" << y_Position[0] << "\t"
				<< Hoehe_soll << "\t" << Hoehe_m << "\t" << Hoehe_ist << "\t"
				<< Richtung_soll << "\t" << Richtung_grd << "\t" << Richtung_ist[0] << "\t"
				<< HauptMotor_Leistung << "\t" << Servo_Winkel << "\t" << HeckMotor_Leistung << "\t"<< Handlung << "\t" 
				<< Messung_v << "\t"<< Entf_vorne[0] << "\t"
				<< Messung_h << "\t"<< Entf_hinten[0]<< "\t" 
				<< Messung_o << "\t"<< Entf_oben[0]<< "\t" 
				<< Messung_u << "\t"<< Entf_unten[0]<< "\t" 
				<< Messung_r << "\t"<< Entf_rechts[0]<< "\t" 
				<< Messung_l << "\t"<< Entf_links[0] << "\t" << v_Zeppelin[0] << "\t" 
				<< 	"x" << "\t" << delta_v << endl;
		//----------------------------------------------------------------------------------
			
			if (Sonderfall())
			{

			}
			else
			{
				if (Start_Sperrzeit > 0){ Start_Sperrzeit--; }
				else
				{
					if (Zeit > 80 ) StartpunktAnfliegen();
					Strategie();
					FlugRegelung();
				}
			}
			Task_fertig	= true;	break;

	default: break;
	}//case Ende


	//um ein theoretisch m鰃liches 躡erlaufen der Richtungsdaten zu verhindern
	if (Richtung_ist[0] > 180 || Richtung_grd > 180)
	{
		Richtungs_Orientierung -= 360; Richtung_soll -= 360; Richtung_ist[0] -= 360; Richtung_grd -= 360; 
		Richtung_alt = Richtung_grd/360*Umfang;
	}
	
	if (Richtung_ist[0] < -180 || Richtung_grd < -180)
	{
		Richtungs_Orientierung += 360; Richtung_soll += 360; Richtung_ist[0] += 360; Richtung_grd += 360; 
		Richtung_alt = Richtung_grd/360*Umfang;
	}




	//Testumgebung-------------------------------------------------------------------------
	//Schnittstelle zwischen der Regelung und dem physikalischem Verhalten
	//(wird 6x pro Zyklus aufgerufen --> AufrufeProZyklus=6 in Verhalten.h)
	Verhalten(Servo_Winkel, HauptMotor_Leistung, HeckMotor_Leistung);//physikalisches Verhalten
	//Testgel鋘de aufrufen	
	Testfeld();
	//manueller Aufruf der ISR (ist sp鋞er Timer-Interrupt)
	ISR();	
	//-------------------------------------------------------------------------------------




}//while Simulation

	Outfile.close();
return(0);
}//Funktion

//********************************************************************
bool Sonderfall()
{
return (false);
}

//*********************************************************************
void ISR()
{
	if (Taskaufruf > 5) Taskaufruf = 1;
	else Taskaufruf++;
	Task_fertig = false;

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?