main_datei_in.cpp

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

CPP
237
字号

#include "main_Datei_in.h"

ofstream Outfile;
ofstream Testfile;

//****************************************************************
int main(void)
{
	int Daten_Ende = 0;		//Ende der emfangenen Daten (aus Datei)

	//Initialisierung Datenarray (n_max Zeilen, 8 Spalten)
	for(n=0; n<n_max; n++)
	{
		for(int s=0; s<8; s++)
		{
			Daten[n][s]= 0;
		}
	}
	//Daten einlesen
	Datei_lesen();
	Daten_Ende = n-1;		//Ende der Datenzeile (letze ignorieren)
	n = 1;					//n auf erste Datenzeile setzen

	Simulationszeit = Daten[Daten_Ende][s_Zeit];
	cout<<"Simulationszeit[s]: " << Simulationszeit << endl;

	Outfile.open("Zeppelin.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" 
			<< "virtuell links" << "\t" << "virtuell_rechts" << "\t"
			<< "Weg" << "\t" << "v_Modell"<< "\t"
			<< "v_Fusion" << "\t" << "Abschnitt" << "\t" << "Korre" "\t"
			<< "Steigung" << endl;

virtuell_init();

while (Zeit < Simulationszeit)
{
int i = 0;


	float Mittelwert = 0;
	if (Task_fertig == 0)
	{
		switch (Taskaufruf)
		{
		case 1: delta_Richtung = 0;						//delta_Richtung aus alten Zyklus l鰏chen

				DatenShift(Messung_h, 5);
				Messung_h[0] = Daten[n][s_hinten];
				//Mittelwert = MittelwertFilter(Messung_h);
				Mittelwert = Messung_h[0];
				Kalman_Filter(Entf_hinten, Mittelwert, Gain_hinten, P_min_hinten);//Messwert Filtern
				
				Task_fertig	= 1; break;
	
		case 2:			
				DatenShift(Messung_l, 5);
				Messung_l[0] = Daten[n][s_links];
				Mittelwert = MittelwertFilter(Messung_l);
				//Mittelwert = Messung_l[0];
				Kalman_Filter(Entf_links, Mittelwert, Gain_links, P_min_links);//Messwert Filtern
				Task_fertig	= 1; break;
	
		case 3:	
				DatenShift(Messung_r, 5);
				Messung_r[0] = Daten[n][s_rechts];
				//Mittelwert = MittelwertFilter(Messung_r);
				Mittelwert = Messung_r[0];
				Kalman_Filter(Entf_rechts, Mittelwert, Gain_rechts, P_min_rechts);//Messwert Filtern
				Task_fertig	= 1; break;
	
		case 4:	DatenShift(Messung_o, 5);
				Messung_o[0] = Daten[n][s_oben];
				//Mittelwert = MittelwertFilter(Messung_o);
				Mittelwert = Messung_o[0];
				Kalman_Filter(Entf_oben, Mittelwert, Gain_oben, P_min_oben);//Messwert Filtern

				Task_fertig	= 1; break;
	
		case 5:	DatenShift(Messung_u, 5);
				Messung_u[0] = Daten[n][s_unten];		
				//Mittelwert = MittelwertFilter(Messung_u);
				Mittelwert = Messung_u[0];
				Kalman_Filter(Entf_unten, Mittelwert, Gain_unten, P_min_unten);//Messwert Filtern
				Task_fertig	= 1; break;
	
		case 6:	DatenShift(Messung_v, 5);
				Messung_v[0] = Daten[n][s_vorne];
				//Mittelwert = MittelwertFilter(Messung_v);
				Mittelwert = Messung_v[0];
				Kalman_Filter(Entf_vorne, Mittelwert, Gain_vorne, P_min_vorne);//Messwert Filtern
					
				Richtung_ist[0] += delta_Richtung;
				Position_bestimmen();
				Hoehe_ist = Entf_unten[0];				//Messwert unten wird Hoehe_ist
				Zeit += Prozesszyklus;	//globale Zeit um Prozesszyklus erh鰄en
				//	Kameradaten einlesen	
		
				//um ein 躡erlaufen der Richtungsdaten zu verhindern
				if (Richtung_ist[0] > 180)
				{
					Richtungs_Orientierung -= 360;
					Richtung_soll -= 360; 
					Richtung_ist[0] -= 360;
				}				
				if (Richtung_ist[0] < -180)
				{
					Richtungs_Orientierung += 360; 
					Richtung_soll += 360; 
					Richtung_ist[0] += 360;
				}				
				if (Sonderfall()){ FlugRegelung(); }
				else
				{
					if (Regel_Sperrzeit > 0){ Regel_Sperrzeit--; Richtung_ist[0] =0; }
					else
					{
//						if (Zeit > 90)
//							StartpunktAnfliegen();					
						virtuelle_Sensoren();
						Strategie();
						FlugRegelung();
					}
				}
				//----------------------------------------------------------------------------------
				//Ausgabe in Excel Datei
				Outfile << Zeit << "\t" << x << "\t" << x_Position[0] << "\t" 
				<< x <<"\t" << y_Position[0] << "\t"
				<< Hoehe_soll << "\t" << x << "\t" << Hoehe_ist << "\t"
				<< Richtung_soll << "\t" << x << "\t" << Richtung_ist[0] << "\t"
				<< HauptMotor_Leistung << "\t" << Servo_Winkel << "\t" << HeckMotor_Leistung << "\t"<< Handlung << "\t" 
				<< Messung_v[0] << "\t"<< Entf_vorne[0] << "\t"
				<< Messung_h[0] << "\t"<< Entf_hinten[0]<< "\t" 
				<< Messung_o[0] << "\t"<< Entf_oben[0]<< "\t" 
				<< Messung_u[0] << "\t"<< Entf_unten[0]<< "\t" 
				<< Messung_r[0] << "\t"<< Entf_rechts[0]<< "\t" 
				<< Messung_l[0] << "\t"<< Entf_links[0] << "\t" << virtuell_links << "\t" 
				<< virtuell_rechts << "\t" 
				<< s_Zeppelin << "\t" << v_Modell << "\t"
				<< v_Zeppelin[0] << "\t" << x << "\t" << fabs(Korrelations_Koeffizient(MessDaten_links)) <<"\t"
				<< Steigungs_Koeffizient(MessDaten_links) << endl;
				//----------------------------------------------------------------------------------

			n++;
			Task_fertig = 1;break;

	default: Task_fertig = 1;break;
	}//case Ende
	}//if Task_fertig

	//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	
	//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;

}

//**********************************************************************
void Datei_lesen()
{
	string Text;
	
	n=0;
	ifstream fin;//("Messwerte.txt");
	fin.open("Messwerte.txt");
	cout << "Hier der Inhalt der Datei:\n\n";
	cout.precision(3);
	
	while (fin.good() && n<n_max) 
	{
		int Spalte = 0;		//16 Spalten zum Auslesen (0..7)
							//Zeit, vorne, hinten, oben, unten, rechts, links, Gyro

		while (Spalte < 8)
		{			
			if (n==0)
			{
				cout.width(6);
				fin >> Text;
				cout << Text << " | ";

			}
			else
			{
				if (Spalte < 8)
				{
					cout.width(6);
					fin >> Daten[n][Spalte];
					cout << Daten[n][Spalte] << " | ";
				}
			}
			Spalte++;
		}
		cout << endl;
		n++;
	}
	n -= 1;					//wenn Dateiende, dann n++ wieder r點kg鋘g
	fin.close();

}



⌨️ 快捷键说明

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