1
0
Fork 0

Updates from the Jon and Tony show.

This commit is contained in:
curt 1999-12-20 20:24:49 +00:00
parent 797fb48d03
commit c319dac02a
11 changed files with 351 additions and 189 deletions

View file

@ -37,6 +37,9 @@ HISTORY
04/03/99 JSB Changed Aero() method to correct body axis force calculation
from wind vector. Fix provided by Tony Peden.
05/03/99 JSB Changed (for the better?) the way configurations are read in.
9/17/99 TP Combined force and moment functions. Added aero reference
point to config file. Added calculations for moments due to
difference in cg and aero reference point
********************************************************************************
COMMENTS, REFERENCES, and NOTES
@ -157,16 +160,17 @@ bool FGAircraft::LoadAircraft(string aircraft_path, string engine_path, string f
int axis;
string axis_descript;
axis = -1;
axis = -1;
aircraftDef = aircraft_path + "/" + fname + "/" + fname + ".cfg";
ifstream aircraftfile(aircraftDef.c_str());
cout << "Reading Aircraft Configuration File: " << aircraftDef << endl;
Output->SocketStatusOutput("Reading Aircraft Configuration File: " + aircraftDef);
numTanks = numEngines = 0;
numSelectedOxiTanks = numSelectedFuelTanks = 0;
while (!aircraftfile.fail()) {
holding_string.erase();
holding_string.erase();
aircraftfile >> holding_string;
#if defined(__BORLANDC__) || defined(FG_HAVE_NATIVE_SGI_COMPILERS) || defined(_MSC_VER)
if (holding_string.compare(0, 2, "//") != 0) {
@ -174,125 +178,132 @@ bool FGAircraft::LoadAircraft(string aircraft_path, string engine_path, string f
if (holding_string.compare("//",0,2) != 0) {
#endif
if (holding_string == "AIRCRAFT") {
cout << "Reading in Aircraft parameters ..." << endl;
cout << "Reading in Aircraft parameters ..." << endl;
} else if (holding_string == "AERODYNAMICS") {
cout << "Reading in Aerodynamic parameters ..." << endl;
} else if (holding_string == "AC_NAME") {
aircraftfile >> AircraftName; // String with no embedded spaces
cout << "Aircraft Name: " << AircraftName << endl;
} else if (holding_string == "AC_WINGAREA") {
aircraftfile >> WingArea;
cout << "Aircraft Wing Area: " << WingArea << endl;
} else if (holding_string == "AC_WINGSPAN") {
aircraftfile >> WingSpan;
cout << "Aircraft WingSpan: " << WingSpan << endl;
} else if (holding_string == "AC_CHORD") {
aircraftfile >> cbar;
cout << "Aircraft Chord: " << cbar << endl;
} else if (holding_string == "AC_IXX") {
aircraftfile >> baseIxx;
cout << "Aircraft Base Ixx: " << baseIxx << endl;
} else if (holding_string == "AC_IYY") {
aircraftfile >> baseIyy;
cout << "Aircraft Base Iyy: " << baseIyy << endl;
} else if (holding_string == "AC_IZZ") {
aircraftfile >> baseIzz;
cout << "Aircraft Base Izz: " << baseIzz << endl;
} else if (holding_string == "AC_IXZ") {
aircraftfile >> baseIxz;
cout << "Aircraft Base Ixz: " << baseIxz << endl;
} else if (holding_string == "AC_EMPTYWT") {
aircraftfile >> EmptyWeight;
EmptyMass = EmptyWeight / GRAVITY;
cout << "Aircraft Empty Weight: " << EmptyWeight << endl;
} else if (holding_string == "AC_CGLOC") {
aircraftfile >> baseXcg >> baseYcg >> baseZcg;
cout << "Aircraft Base C.G.: " << baseXcg << " " << baseYcg << " " << baseZcg << endl;
} else if (holding_string == "AC_EYEPTLOC") {
aircraftfile >> Xep >> Yep >> Zep;
cout << "Pilot Eyepoint: " << Xep << " " << Yep << " " << Zep << endl;
} else if (holding_string == "AC_TANK") {
cout << "Reading in Aerodynamic parameters ..." << endl;
} else if (holding_string == "AC_NAME") {
aircraftfile >> AircraftName; // String with no embedded spaces
cout << "Aircraft Name: " << AircraftName << endl;
} else if (holding_string == "AC_WINGAREA") {
aircraftfile >> WingArea;
cout << "Aircraft Wing Area: " << WingArea << endl;
} else if (holding_string == "AC_WINGSPAN") {
aircraftfile >> WingSpan;
cout << "Aircraft WingSpan: " << WingSpan << endl;
} else if (holding_string == "AC_CHORD") {
aircraftfile >> cbar;
cout << "Aircraft Chord: " << cbar << endl;
} else if (holding_string == "AC_IXX") {
aircraftfile >> baseIxx;
cout << "Aircraft Base Ixx: " << baseIxx << endl;
} else if (holding_string == "AC_IYY") {
aircraftfile >> baseIyy;
cout << "Aircraft Base Iyy: " << baseIyy << endl;
} else if (holding_string == "AC_IZZ") {
aircraftfile >> baseIzz;
cout << "Aircraft Base Izz: " << baseIzz << endl;
} else if (holding_string == "AC_IXZ") {
aircraftfile >> baseIxz;
cout << "Aircraft Base Ixz: " << baseIxz << endl;
} else if (holding_string == "AC_EMPTYWT") {
aircraftfile >> EmptyWeight;
EmptyMass = EmptyWeight / GRAVITY;
cout << "Aircraft Empty Weight: " << EmptyWeight << endl;
} else if (holding_string == "AC_AERORP") {
aircraftfile >> Xrp >> Yrp >> Zrp;
cout << "Aerodynamic Reference Point: " << Xrp << " " << Yrp << " " << Zrp << endl;
} else if (holding_string == "AC_CGLOC") {
aircraftfile >> baseXcg >> baseYcg >> baseZcg;
cout << "Aircraft Base C.G.: " << baseXcg << " " << baseYcg << " " << baseZcg << endl;
} else if (holding_string == "AC_EYEPTLOC") {
aircraftfile >> Xep >> Yep >> Zep;
cout << "Pilot Eyepoint: " << Xep << " " << Yep << " " << Zep << endl;
} else if (holding_string == "AC_TANK") {
Tank[numTanks] = new FGTank(aircraftfile);
switch(Tank[numTanks]->GetType()) {
case FGTank::ttFUEL:
numSelectedFuelTanks++;
cout << "Reading in Fuel Tank #" << numSelectedFuelTanks << " parameters ..." << endl;
cout << "Reading in Fuel Tank #" << numSelectedFuelTanks << " parameters ..." << endl;
break;
case FGTank::ttOXIDIZER:
numSelectedOxiTanks++;
cout << "Reading in Oxidizer Tank #" << numSelectedOxiTanks << " parameters ..." << endl;
cout << "Reading in Oxidizer Tank #" << numSelectedOxiTanks << " parameters ..." << endl;
break;
}
numTanks++;
} else if (holding_string == "AC_ENGINE") {
} else if (holding_string == "AC_GEAR") {
lGear.push_back(new FGLGear(aircraftfile));
} else if (holding_string == "AC_ENGINE") {
aircraftfile >> tag;
cout << "Reading in " << tag << " Engine parameters ..." << endl;
cout << "Reading in " << tag << " Engine parameters ..." << endl;
Engine[numEngines] = new FGEngine(FDMExec, engine_path, tag, numEngines);
numEngines++;
} else if (holding_string == "}") {
} else if (holding_string == "}") {
} else if (holding_string == "{") {
} else if (holding_string == "{") {
} else if (holding_string == "LIFT") {
} else if (holding_string == "LIFT") {
axis_descript = " Lift Coefficients ...";
axis = LiftCoeff;
} else if (holding_string == "DRAG") {
axis_descript = " Lift Coefficients ...";
axis = LiftCoeff;
axis_descript = " Drag Coefficients ...";
axis = DragCoeff;
} else if (holding_string == "DRAG") {
} else if (holding_string == "SIDE") {
axis_descript = " Drag Coefficients ...";
axis = DragCoeff;
axis_descript = " Side Coefficients ...";
axis = SideCoeff;
} else if (holding_string == "SIDE") {
} else if (holding_string == "ROLL") {
axis_descript = " Side Coefficients ...";
axis = SideCoeff;
axis_descript = " Roll Coefficients ...";
axis = RollCoeff;
} else if (holding_string == "ROLL") {
} else if (holding_string == "PITCH") {
axis_descript = " Roll Coefficients ...";
axis = RollCoeff;
axis_descript = " Pitch Coefficients ...";
axis = PitchCoeff;
} else if (holding_string == "PITCH") {
} else if (holding_string == "YAW") {
axis_descript = " Pitch Coefficients ...";
axis = PitchCoeff;
axis_descript = " Yaw Coefficients ...";
axis = YawCoeff;
} else if (holding_string == "YAW") {
}
axis_descript = " Yaw Coefficients ...";
axis = YawCoeff;
}
if (axis >= 0) {
cout << axis_descript << endl;
aircraftfile >> tag;
gpos = aircraftfile.tellg();
aircraftfile >> tag;
if ( !(tag == "}") ) {
while ( !(tag == "}") ) {
aircraftfile.seekg(gpos);
Coeff[axis][coeff_ctr[axis]] = new FGCoefficient(FDMExec, aircraftfile);
coeff_ctr[axis]++;
aircraftfile >> tag;
gpos = aircraftfile.tellg();
aircraftfile >> tag;
}
} else {
cout << " None found ..." << endl;
}
}
axis = -1;
if (axis >= 0) {
cout << axis_descript << endl;
aircraftfile >> tag;
gpos = aircraftfile.tellg();
aircraftfile >> tag;
if ( !(tag == "}") ) {
while ( !(tag == "}") ) {
aircraftfile.seekg(gpos);
Coeff[axis][coeff_ctr[axis]] = new FGCoefficient(FDMExec, aircraftfile);
coeff_ctr[axis]++;
aircraftfile >> tag;
gpos = aircraftfile.tellg();
aircraftfile >> tag;
}
} else {
cout << " None found ..." << endl;
}
}
axis = -1;
} else {
aircraftfile.getline(scratch, 127);
aircraftfile.getline(scratch, 127);
}
}
cout << "End of Configuration File Parsing." << endl;
cout << "End of Configuration File Parsing." << endl;
return true;
}
@ -307,8 +318,7 @@ bool FGAircraft::Run(void)
MassChange();
FProp(); FAero(); FGear(); FMass();
MProp(); MAero(); MGear(); MMass();
FMProp(); FMAero(); FMGear(); FMMass();
PutState();
} else { // skip Run() execution this time
@ -344,13 +354,13 @@ void FGAircraft::MassChange()
case FGTank::ttFUEL:
if (Tank[t]->GetSelected()) {
Fshortage = Tank[t]->Reduce((Engine[e]->CalcFuelNeed()/
numSelectedFuelTanks)*(dt*rate) + Fshortage);
numSelectedFuelTanks)*(dt*rate) + Fshortage);
}
break;
case FGTank::ttOXIDIZER:
if (Tank[t]->GetSelected()) {
Oshortage = Tank[t]->Reduce((Engine[e]->CalcOxidizerNeed()/
numSelectedOxiTanks)*(dt*rate) + Oshortage);
numSelectedOxiTanks)*(dt*rate) + Oshortage);
}
break;
}
@ -362,7 +372,7 @@ void FGAircraft::MassChange()
if (Tank[t]->GetSelected()) {
Fshortage = Tank[t]->Reduce((Engine[e]->CalcFuelNeed()/
numSelectedFuelTanks)*(dt*rate) + Fshortage);
numSelectedFuelTanks)*(dt*rate) + Fshortage);
}
break;
}
@ -379,7 +389,7 @@ void FGAircraft::MassChange()
// Calculate new CG here.
Xt = Yt = Zt = 0;
Xt = Yt = Zt = Tw = 0;
Xw = Yw = Zw = 0;
for (t=0; t<numTanks; t++) {
Xt += Tank[t]->GetX()*Tank[t]->GetContents();
@ -411,57 +421,44 @@ void FGAircraft::MassChange()
}
void FGAircraft::FAero(void)
void FGAircraft::FMAero(void)
{
float F[3];
float Fxaero,Fyaero,Fzaero;
float dxcg,dycg,dzcg;
int axis_ctr,ctr;
F[0] = F[1] = F[2] = 0.0;
for (int axis_ctr = 0; axis_ctr < 3; axis_ctr++)
for (int ctr=0; ctr < coeff_ctr[axis_ctr]; ctr++)
for (axis_ctr = 0; axis_ctr < 3; axis_ctr++)
for (ctr=0; ctr < coeff_ctr[axis_ctr]; ctr++)
F[axis_ctr] += Coeff[axis_ctr][ctr]->TotalValue();
Fxaero = - F[DragCoeff]*cos(alpha)*cos(beta)
- F[SideCoeff]*cos(alpha)*sin(beta)
+ F[LiftCoeff]*sin(alpha);
Fyaero = F[DragCoeff]*sin(beta)
+ F[SideCoeff]*cos(beta);
Fzaero = - F[DragCoeff]*sin(alpha)*cos(beta)
- F[SideCoeff]*sin(alpha)*sin(beta)
- F[LiftCoeff]*cos(alpha);
Forces[0] += - F[DragCoeff]*cos(alpha)*cos(beta)
- F[SideCoeff]*cos(alpha)*sin(beta)
+ F[LiftCoeff]*sin(alpha);
Forces[1] += F[DragCoeff]*sin(beta)
+ F[SideCoeff]*cos(beta);
+ F[SideCoeff]*cos(beta);
Forces[2] += - F[DragCoeff]*sin(alpha)*cos(beta)
- F[SideCoeff]*sin(alpha)*sin(beta)
- F[LiftCoeff]*cos(alpha);
}
dxcg = (Xcg - Xrp)/12; //cg and rp values are in inches
dycg = (Ycg - Yrp)/12;
dzcg = (Zcg - Zrp)/12;
void FGAircraft::FGear(void)
{
if (GearUp) {
// crash routine
} else {
}
}
Moments[0] += -Fzaero*dycg - Fyaero*dzcg; //rolling moment
Moments[1] += Fxaero*dzcg - Fzaero*dxcg; //pitching moment
Moments[2] += Fxaero*dycg + Fyaero*dxcg; //yawing moment
void FGAircraft::FMass(void)
{
Forces[0] += -GRAVITY*sin(tht) * Mass;
Forces[1] += GRAVITY*sin(phi)*cos(tht) * Mass;
Forces[2] += GRAVITY*cos(phi)*cos(tht) * Mass;
}
void FGAircraft::FProp(void)
{
for (int i=0;i<numEngines;i++) {
Forces[0] += Engine[i]->CalcThrust();
}
}
void FGAircraft::MAero(void)
{
int axis_ctr, ctr;
for (axis_ctr = 0; axis_ctr < 3; axis_ctr++) {
for (ctr = 0; ctr < coeff_ctr[axis_ctr+3]; ctr++) {
Moments[axis_ctr] += Coeff[axis_ctr+3][ctr]->TotalValue();
@ -470,24 +467,33 @@ void FGAircraft::MAero(void)
}
void FGAircraft::MGear(void)
void FGAircraft::FMGear(void)
{
if (GearUp) {
// crash routine
} else {
for (int i=0;i<lGear.size();i++) {
// lGear[i].
}
}
}
void FGAircraft::MMass(void)
void FGAircraft::FMMass(void)
{
Forces[0] += -GRAVITY*sin(tht) * Mass;
Forces[1] += GRAVITY*sin(phi)*cos(tht) * Mass;
Forces[2] += GRAVITY*cos(phi)*cos(tht) * Mass;
}
void FGAircraft::MProp(void)
void FGAircraft::FMProp(void)
{
for (int i=0;i<numEngines;i++) {
Forces[0] += Engine[i]->CalcThrust();
}
}
void FGAircraft::GetState(void)
{
dt = State->Getdt();

View file

@ -100,17 +100,21 @@ INCLUDES
# include <Include/compiler.h>
# ifdef FG_HAVE_STD_INCLUDES
# include <fstream>
# include <vector>
# else
# include <fstream.h>
# include <vector.h>
# endif
#else
# include <fstream>
# include <vector>
#endif
#include "FGModel.h"
#include "FGCoefficient.h"
#include "FGEngine.h"
#include "FGTank.h"
#include "FGLGear.h"
/*******************************************************************************
DEFINITIONS
@ -125,7 +129,7 @@ CLASS DECLARATION
class FGAircraft : public FGModel
{
public:
FGAircraft(FGFDMExec*);
FGAircraft(FGFDMExec*);
~FGAircraft(void);
bool Run(void);
@ -155,20 +159,17 @@ public:
private:
void GetState(void);
void PutState(void);
void FAero(void);
void FGear(void);
void FMass(void);
void FProp(void);
void MAero(void);
void MGear(void);
void MMass(void);
void MProp(void);
void FMAero(void);
void FMGear(void);
void FMMass(void);
void FMProp(void);
void MassChange(void);
float Moments[3];
float Forces[3];
string AircraftName;
float baseIxx, baseIyy, baseIzz, baseIxz, EmptyMass, Mass;
float Ixx, Iyy, Izz, Ixz;
float Xrp, Yrp, Zrp;
float baseXcg, baseYcg, baseZcg;
float Xcg, Ycg, Zcg;
float Xep, Yep, Zep;
@ -200,6 +201,7 @@ private:
numCoeffs};
string Axis[6];
vector <FGLGear*> lGear;
protected:

View file

@ -53,6 +53,8 @@ SENTRY
#define KTSTOFPS 1.68781
#define FPSTOKTS 0.592484
#define HPTOFTLBSSEC 550
/******************************************************************************/

View file

@ -60,6 +60,7 @@ INCLUDES
#include "FGPosition.h"
#include "FGAuxiliary.h"
#include "FGOutput.h"
#include "FGDefs.h"
/*******************************************************************************
************************************ CODE **************************************
@ -96,16 +97,37 @@ FGEngine::FGEngine(FGFDMExec* fdex, string enginePath, string engineName, int nu
else if (tag == "TURBOJET") Type = etTurboJet;
else Type = etUnknown;
enginefile >> X;
enginefile >> Y;
enginefile >> Z;
enginefile >> SLThrustMax;
enginefile >> VacThrustMax;
enginefile >> MaxThrottle;
enginefile >> MinThrottle;
enginefile >> SLFuelFlowMax;
if (Type == 1)
switch(Type)
{
case etUnknown:
cerr << "Unknown engine type: " << tag << endl;
break;
case etPiston:
enginefile >> X;
enginefile >> Y;
enginefile >> Z;
enginefile >> BrakeHorsePower;
enginefile >> MaxThrottle;
enginefile >> MinThrottle;
enginefile >> SLFuelFlowMax;
enginefile >> SpeedSlope;
enginefile >> SpeedIntercept;
enginefile >> AltitudeSlope;
break;
case etRocket:
enginefile >> X;
enginefile >> Y;
enginefile >> Z;
enginefile >> SLThrustMax;
enginefile >> VacThrustMax;
enginefile >> MaxThrottle;
enginefile >> MinThrottle;
enginefile >> SLFuelFlowMax;
enginefile >> SLOxiFlowMax;
break;
}
enginefile.close();
} else {
cerr << "Unable to open engine definition file " << engineName << endl;
@ -135,7 +157,7 @@ float FGEngine::CalcRocketThrust(void)
} else {
PctPower = Throttle / MaxThrottle;
Thrust = PctPower*((1.0 - Atmosphere->Getrho() / 0.002378)*(VacThrustMax - SLThrustMax) +
SLThrustMax); // desired thrust
SLThrustMax); // desired thrust
Flameout = false;
}
@ -147,6 +169,18 @@ float FGEngine::CalcRocketThrust(void)
float FGEngine::CalcPistonThrust(void)
{
float v,h,pa;
Throttle = FCS->GetThrottle(EngineNumber);
v=State->GetVt();
h=State->Geth();
if(v < 10)
v=10;
if(h < 0)
h=0;
pa=(SpeedSlope*v + SpeedIntercept)*(1 +AltitudeSlope*h)*BrakeHorsePower;
Thrust= Throttle*(pa*HPTOFTLBSSEC)/v;
return Thrust;
}

View file

@ -47,7 +47,7 @@ INCLUDES
#ifdef FGFS
# include <Include/compiler.h>
# include STL_STRING
FG_USING_STD(string);
FG_USING_STD(string);
#else
# include <string>
#endif
@ -106,6 +106,11 @@ private:
float MaxThrottle;
float MinThrottle;
float BrakeHorsePower;
float SpeedSlope;
float SpeedIntercept;
float AltitudeSlope;
float Thrust;
float Throttle;
float FuelNeed, OxidizerNeed;

View file

@ -57,19 +57,25 @@ INCLUDES
FGOutput::FGOutput(FGFDMExec* fdmex) : FGModel(fdmex)
{
Name = "FGOutput";
FirstPass = true;
sFirstPass = dFirstPass = true;
#ifdef FG_WITH_JSBSIM_SOCKET
socket = new FGfdmSocket("localhost",1138);
#endif
}
FGOutput::~FGOutput(void)
{
if (socket) delete socket;
}
bool FGOutput::Run(void)
{
if (!FGModel::Run()) {
DelimitedOutput("JSBSimData.csv");
SocketOutput();
// DelimitedOutput("JSBSimData.csv");
} else {
}
return false;
@ -78,7 +84,7 @@ bool FGOutput::Run(void)
void FGOutput::DelimitedOutput(void)
{
if (FirstPass) {
if (dFirstPass) {
cout << "Time,";
cout << "Altitude,";
cout << "Phi,";
@ -112,7 +118,7 @@ void FGOutput::DelimitedOutput(void)
cout << "M,";
cout << "N";
cout << endl;
FirstPass = false;
dFirstPass = false;
}
cout << State->Getsim_time() << ",";
@ -154,7 +160,7 @@ void FGOutput::DelimitedOutput(void)
void FGOutput::DelimitedOutput(string fname)
{
if (FirstPass) {
if (sFirstPass) {
datafile.open(fname.c_str());
datafile << "Time,";
datafile << "Altitude,";
@ -189,7 +195,7 @@ void FGOutput::DelimitedOutput(string fname)
datafile << "M,";
datafile << "N";
datafile << endl;
FirstPass = false;
sFirstPass = false;
}
datafile << State->Getsim_time() << ",";
@ -228,3 +234,97 @@ void FGOutput::DelimitedOutput(string fname)
datafile.flush();
}
void FGOutput::SocketOutput(void)
{
string asciiData;
if (socket <= 0) return;
socket->Clear();
if (sFirstPass) {
socket->Append("<LABELS>");
socket->Append("Time");
socket->Append("Altitude");
socket->Append("Phi");
socket->Append("Tht");
socket->Append("Psi");
socket->Append("Rho");
socket->Append("Vtotal");
socket->Append("U");
socket->Append("V");
socket->Append("W");
socket->Append("Vn");
socket->Append("Ve");
socket->Append("Vd");
socket->Append("Udot");
socket->Append("Vdot");
socket->Append("Wdot");
socket->Append("P");
socket->Append("Q");
socket->Append("R");
socket->Append("PDot");
socket->Append("QDot");
socket->Append("RDot");
socket->Append("Fx");
socket->Append("Fy");
socket->Append("Fz");
socket->Append("Latitude");
socket->Append("Longitude");
socket->Append("QBar");
socket->Append("Alpha");
socket->Append("L");
socket->Append("M");
socket->Append("N");
sFirstPass = false;
socket->Send();
}
socket->Clear();
socket->Append(State->Getsim_time());
socket->Append(State->Geth());
socket->Append(Rotation->Getphi());
socket->Append(Rotation->Gettht());
socket->Append(Rotation->Getpsi());
socket->Append(Atmosphere->GetDensity());
socket->Append(State->GetVt());
socket->Append(Translation->GetU());
socket->Append(Translation->GetV());
socket->Append(Translation->GetW());
socket->Append(Position->GetVn());
socket->Append(Position->GetVe());
socket->Append(Position->GetVd());
socket->Append(Translation->GetUdot());
socket->Append(Translation->GetVdot());
socket->Append(Translation->GetWdot());
socket->Append(Rotation->GetP());
socket->Append(Rotation->GetQ());
socket->Append(Rotation->GetR());
socket->Append(Rotation->GetPdot());
socket->Append(Rotation->GetQdot());
socket->Append(Rotation->GetRdot());
socket->Append(Aircraft->GetFx());
socket->Append(Aircraft->GetFy());
socket->Append(Aircraft->GetFz());
socket->Append(State->Getlatitude());
socket->Append(State->Getlongitude());
socket->Append(State->Getqbar());
socket->Append(Translation->Getalpha());
socket->Append(Aircraft->GetL());
socket->Append(Aircraft->GetM());
socket->Append(Aircraft->GetN());
socket->Send();
}
void FGOutput::SocketStatusOutput(string out_str)
{
string asciiData;
if (socket <= 0) return;
socket->Clear();
asciiData = string("<STATUS>") + out_str;
socket->Append(asciiData.c_str());
socket->Send();
}

View file

@ -54,7 +54,7 @@ INCLUDES
# include <fstream>
#endif
//using namespace std;
#include "FGfdmSocket.h"
/*******************************************************************************
CLASS DECLARATION
@ -70,12 +70,15 @@ public:
void DelimitedOutput(void);
void DelimitedOutput(string);
void SocketOutput(void);
void SocketStatusOutput(string);
protected:
private:
bool FirstPass;
bool sFirstPass, dFirstPass;
ofstream datafile;
FGfdmSocket* socket;
};
/******************************************************************************/

View file

@ -110,7 +110,7 @@ bool FGState::Reset(string path, string fname)
resetfile.close();
Initialize(U, V, W, phi*DEGTORAD, tht*DEGTORAD, psi*DEGTORAD,
latitude*DEGTORAD, longitude*DEGTORAD, h);
latitude*DEGTORAD, longitude*DEGTORAD, h);
return true;
} else {
@ -179,7 +179,7 @@ void FGState::Initialize(float U, float V, float W,
void FGState::Initialize(FGInitialCondition *FGIC)
{
float tht,psi,phi;
float U,V,W;
@ -193,8 +193,7 @@ void FGState::Initialize(FGInitialCondition *FGIC)
phi = FGIC->GetPhiRadIC();
psi = FGIC->GetPsiRadIC();
Initialize(U, V, W, phi*DEGTORAD, tht*DEGTORAD, psi*DEGTORAD,
latitude*DEGTORAD, longitude*DEGTORAD, h);
Initialize(U, V, W, phi, tht, psi,latitude, longitude, h);
}

View file

@ -95,6 +95,7 @@ public:
inline float Getadot(void) {return adot;}
inline float Getbdot(void) {return bdot;}
inline float GetLocalAltitudeOverRunway(void) {return LocalAltitudeOverRunway;}
inline float Geth(void) {return h;}
inline float Geta(void) {return a;}
inline float GetMach(void) {return Mach;}
@ -115,6 +116,7 @@ public:
inline void Setqbar(float tt) {qbar = tt;}
inline void SetLocalAltitudeOverRunway(float tt) {LocalAltitudeOverRunway = tt;}
inline void Seth(float tt) {h = tt;}
inline void Seta(float tt) {a = tt;}
inline void SetMach(float tt) {Mach = tt;}
@ -124,6 +126,7 @@ public:
inline float IncrTime(void) {sim_time+=dt;return sim_time;}
private:
float Vt; // Total velocity
@ -136,6 +139,7 @@ private:
float Mach; // Mach number
FGFDMExec* FDMExec;
float LocalAltitudeOverRunway;
protected:

View file

@ -40,28 +40,30 @@ INCLUDES
*******************************************************************************/
#if __BCPLUSPLUS__ >= 0x0540 // If compiling under Borland C++Builder
//---------------------------------------------------------------------------
#pragma hdrstop
#include <condefs.h>
USEUNIT("FGAircraft.cpp");
USEUNIT("FGAtmosphere.cpp");
USEUNIT("FGAuxiliary.cpp");
USEUNIT("FGCoefficient.cpp");
USEUNIT("FGEngine.cpp");
USEUNIT("FGFCS.cpp");
USEUNIT("FGFDMExec.cpp");
USEUNIT("FGInitialCondition.cpp");
USEUNIT("FGModel.cpp");
USEUNIT("FGOutput.cpp");
USEUNIT("FGPosition.cpp");
USEUNIT("FGRotation.cpp");
USEUNIT("FGState.cpp");
USEUNIT("FGTank.cpp");
USEUNIT("FGTranslation.cpp");
USEUNIT("FGUtility.cpp");
USERES("JSBSim.res");
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
#pragma hdrstop
#include <condefs.h>
USEUNIT("FGAircraft.cpp");
USEUNIT("FGAtmosphere.cpp");
USEUNIT("FGAuxiliary.cpp");
USEUNIT("FGCoefficient.cpp");
USEUNIT("FGEngine.cpp");
USEUNIT("FGFCS.cpp");
USEUNIT("FGFDMExec.cpp");
USEUNIT("FGInitialCondition.cpp");
USEUNIT("FGModel.cpp");
USEUNIT("FGOutput.cpp");
USEUNIT("FGPosition.cpp");
USEUNIT("FGRotation.cpp");
USEUNIT("FGState.cpp");
USEUNIT("FGTank.cpp");
USEUNIT("FGTranslation.cpp");
USEUNIT("FGUtility.cpp");
USERES("JSBSim.res");
USEUNIT("FGLGear.cpp");
USEUNIT("FGfdmSocket.cpp");
//---------------------------------------------------------------------------
#pragma argsused
#endif
#include "FGFDMExec.h"
@ -114,7 +116,9 @@ int main(int argc, char** argv)
FDMExec->GetState()->Getsim_time() < 6.0)
{
FDMExec->GetFCS()->SetDe(0.05);
}
} else {
FDMExec->GetFCS()->SetDe(0.00);
}
FDMExec->Run();
}
@ -125,7 +129,8 @@ int main(int argc, char** argv)
}
#ifndef FGFS
WinMain()
int WinMain()
{
return 0;
}
#endif

View file

@ -10,6 +10,7 @@ libJSBsim_a_SOURCES = FGAircraft.cpp FGAircraft.h \
FGFCS.cpp FGFCS.h \
FGFDMExec.cpp FGFDMExec.h \
FGInitialCondition.cpp FGInitialCondition.h \
FGLGear.cpp FGLGear.h \
FGModel.cpp FGModel.h \
FGOutput.cpp FGOutput.h \
FGPosition.cpp FGPosition.h \
@ -18,7 +19,8 @@ libJSBsim_a_SOURCES = FGAircraft.cpp FGAircraft.h \
FGTranslation.cpp FGTranslation.h \
FGUtility.cpp FGUtility.h \
FGEngine.cpp FGEngine.h \
FGTank.cpp FGTank.h
FGTank.cpp FGTank.h \
FGfdmSocket.cpp FGfdmSocket.h
noinst_PROGRAMS = testJSBsim