From a2049b110f44e28cba48b5d3d0adccd6df39a8ed Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 6 Apr 2001 22:59:31 +0000 Subject: [PATCH] More JSBSim updates. --- src/FDM/JSBSim/FGAircraft.cpp | 4 ++ src/FDM/JSBSim/FGAircraft.h | 3 +- src/FDM/JSBSim/FGControls.cpp | 5 +-- src/FDM/JSBSim/FGControls.h | 5 +-- src/FDM/JSBSim/FGDefs.h | 3 +- src/FDM/JSBSim/FGEngine.h | 2 +- src/FDM/JSBSim/FGOutput.cpp | 17 ++++++++ src/FDM/JSBSim/FGPropulsion.cpp | 74 ++++++++++++++++++++------------- src/FDM/JSBSim/FGRocket.cpp | 6 +-- src/FDM/JSBSim/FGRocket.h | 5 +++ src/FDM/JSBSim/FGState.cpp | 7 ++++ src/FDM/JSBSim/FGThruster.h | 5 ++- 12 files changed, 94 insertions(+), 42 deletions(-) diff --git a/src/FDM/JSBSim/FGAircraft.cpp b/src/FDM/JSBSim/FGAircraft.cpp index 1ff7e5951..08d8b1be2 100644 --- a/src/FDM/JSBSim/FGAircraft.cpp +++ b/src/FDM/JSBSim/FGAircraft.cpp @@ -613,6 +613,10 @@ void FGAircraft::ReadOutput(FGConfigFile* AC_cfg) { *AC_cfg >> parameter; if (parameter == "ON") subsystems += ssFCS; } + if (parameter == "PROPULSION") { + *AC_cfg >> parameter; + if (parameter == "ON") subsystems += ssPropulsion; + } } Output->SetSubsystems(subsystems); diff --git a/src/FDM/JSBSim/FGAircraft.h b/src/FDM/JSBSim/FGAircraft.h index db1d62d7c..524eb0f8b 100644 --- a/src/FDM/JSBSim/FGAircraft.h +++ b/src/FDM/JSBSim/FGAircraft.h @@ -196,7 +196,8 @@ public: /** Subsystem: Coefficients (= 256) */ ssCoefficients = 256, /** Subsystem: Position (= 512) */ ssPosition = 512, /** Subsystem: Ground Reactions (= 1024) */ ssGroundReactions = 1024, - /** Subsystem: Ground Reactions (= 2048) */ ssFCS = 2048 + /** Subsystem: FCS (= 2048) */ ssFCS = 2048, + /** Subsystem: Propulsion (= 4096) */ ssPropulsion = 4096 } subsystems; private: diff --git a/src/FDM/JSBSim/FGControls.cpp b/src/FDM/JSBSim/FGControls.cpp index 2814fa9b0..f35d82753 100644 --- a/src/FDM/JSBSim/FGControls.cpp +++ b/src/FDM/JSBSim/FGControls.cpp @@ -53,9 +53,8 @@ FGControls::~FGControls() { // $Log$ -// Revision 1.24 2001/04/05 19:14:37 curt -// Synced with latest JSBSim cvs. -// reinit fix from Norman. +// Revision 1.25 2001/04/06 20:59:31 curt +// More JSBSim updates. // // Revision 1.7 2001/03/22 14:10:24 jberndt // Fixed ID comment diff --git a/src/FDM/JSBSim/FGControls.h b/src/FDM/JSBSim/FGControls.h index f14da400b..3212f9839 100644 --- a/src/FDM/JSBSim/FGControls.h +++ b/src/FDM/JSBSim/FGControls.h @@ -178,9 +178,8 @@ extern FGControls controls; // $Log$ -// Revision 1.23 2001/04/05 19:14:37 curt -// Synced with latest JSBSim cvs. -// reinit fix from Norman. +// Revision 1.24 2001/04/06 20:59:31 curt +// More JSBSim updates. // // Revision 1.10 2001/03/22 14:10:24 jberndt // Fixed ID comment diff --git a/src/FDM/JSBSim/FGDefs.h b/src/FDM/JSBSim/FGDefs.h index 076eedb7f..30c5d5bbb 100644 --- a/src/FDM/JSBSim/FGDefs.h +++ b/src/FDM/JSBSim/FGDefs.h @@ -97,7 +97,8 @@ enum eParam { FG_PITCH_TRIM_CMD, FG_LEFT_BRAKE_CMD, FG_CENTER_BRAKE_CMD, - FG_RIGHT_BRAKE_CMD + FG_RIGHT_BRAKE_CMD, + FG_SET_LOGGING }; enum eAction { diff --git a/src/FDM/JSBSim/FGEngine.h b/src/FDM/JSBSim/FGEngine.h index fb23f9751..becf4a3d8 100644 --- a/src/FDM/JSBSim/FGEngine.h +++ b/src/FDM/JSBSim/FGEngine.h @@ -108,7 +108,7 @@ public: FGEngine(FGFDMExec* exec); virtual ~FGEngine(); - enum EngineType {etUnknown, etRocket, etPiston, etTurboProp, etTurboJet}; + enum EngineType {etUnknown, etRocket, etPiston, etTurboProp, etTurboJet, etTurboShaft}; virtual float GetThrottleMin(void) { return MinThrottle; } virtual float GetThrottleMax(void) { return MaxThrottle; } diff --git a/src/FDM/JSBSim/FGOutput.cpp b/src/FDM/JSBSim/FGOutput.cpp index 21d95e9d5..cf1afb5b9 100644 --- a/src/FDM/JSBSim/FGOutput.cpp +++ b/src/FDM/JSBSim/FGOutput.cpp @@ -199,6 +199,10 @@ void FGOutput::DelimitedOutput(void) cout << ", "; cout << Aircraft->GetGroundReactionStrings(); } + if (SubSystems & FGAircraft::ssPropulsion) { + cout << ", "; + cout << Propulsion->GetPropulsionStrings(); + } cout << endl; dFirstPass = false; @@ -268,6 +272,11 @@ void FGOutput::DelimitedOutput(void) cout << ", "; cout << Aircraft->GetGroundReactionValues(); } + if (SubSystems & FGAircraft::ssPropulsion) { + cout << ", "; + cout << Propulsion->GetPropulsionValues(); + } + cout << endl; } @@ -346,6 +355,10 @@ void FGOutput::DelimitedOutput(string fname) datafile << ", "; datafile << FCS->GetComponentStrings(); } + if (SubSystems & FGAircraft::ssPropulsion) { + datafile << ", "; + datafile << Propulsion->GetPropulsionStrings(); + } datafile << endl; sFirstPass = false; } @@ -418,6 +431,10 @@ void FGOutput::DelimitedOutput(string fname) datafile << ", "; datafile << FCS->GetComponentValues(); } + if (SubSystems & FGAircraft::ssPropulsion) { + datafile << ", "; + datafile << Propulsion->GetPropulsionValues(); + } datafile << endl; datafile.flush(); } diff --git a/src/FDM/JSBSim/FGPropulsion.cpp b/src/FDM/JSBSim/FGPropulsion.cpp index 68335b4a6..555887df1 100644 --- a/src/FDM/JSBSim/FGPropulsion.cpp +++ b/src/FDM/JSBSim/FGPropulsion.cpp @@ -295,29 +295,40 @@ string FGPropulsion::GetPropulsionStrings(void) PropulsionStrings += ", "; firstime = false; } -/* - switch(Engines[i].GetType()) { - case etPiston: - PropulsionStrings += (Engines[i].GetName() + "_PwrAvail, "); + + switch(Engines[i]->GetType()) { + case FGEngine::etPiston: + PropulsionStrings += (Engines[i]->GetName() + "_PwrAvail"); + break; + case FGEngine::etRocket: + PropulsionStrings += (Engines[i]->GetName() + "_ChamberPress"); break; - case etRocket: + case FGEngine::etTurboJet: + case FGEngine::etTurboProp: + case FGEngine::etTurboShaft: break; - case etTurboJet: - case etTurboProp: - case etTurboShaft: + default: + PropulsionStrings += "INVALID ENGINE TYPE"; break; } - switch(Thrusters[i].GetType()) { - case ttNozzle: - PropulsionStrings += (Thrusters[i].GetName() + "_Thrust, "); + PropulsionStrings += ", "; + + switch(Thrusters[i]->GetType()) { + case FGThruster::ttNozzle: + PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust"); break; - case ttRotor: + case FGThruster::ttRotor: break; - case ttPropeller: + case FGThruster::ttPropeller: + PropulsionStrings += (Thrusters[i]->GetName() + "_Torque, "); + PropulsionStrings += (Thrusters[i]->GetName() + "_Thrust, "); + PropulsionStrings += (Thrusters[i]->GetName() + "_RPM"); break; - } -*/ + default: + PropulsionStrings += "INVALID THRUSTER TYPE"; + break; + } } return PropulsionStrings; @@ -336,29 +347,34 @@ string FGPropulsion::GetPropulsionValues(void) PropulsionValues += ", "; firstime = false; } -/* - switch(Engines[i].GetType()) { - case etPiston: - PropulsionValues += (string(gcvt(Thrusters[i].GetPowerAvailable(), 10, buff)) + ", "); + + switch(Engines[i]->GetType()) { + case FGEngine::etPiston: + PropulsionValues += (string(gcvt(((FGRocket*)Engines[i])->GetPowerAvailable(), 10, buff))); break; - case etRocket: + case FGEngine::etRocket: + PropulsionValues += (string(gcvt(((FGRocket*)Engines[i])->GetChamberPressure(), 10, buff))); break; - case etTurboJet: - case etTurboProp: - case etTurboShaft: + case FGEngine::etTurboJet: + case FGEngine::etTurboProp: + case FGEngine::etTurboShaft: break; } - switch(Thrusters[i].GetType()) { - case ttNozzle: - PropulsionValues += (string(gcvt(Thrusters[i].GetThrust(), 10, buff)) + ", "); + PropulsionValues += ", "; + + switch(Thrusters[i]->GetType()) { + case FGThruster::ttNozzle: + PropulsionValues += (string(gcvt(((FGNozzle*)Thrusters[i])->GetThrust(), 10, buff))); break; - case ttRotor: + case FGThruster::ttRotor: break; - case ttPropeller: + case FGThruster::ttPropeller: + PropulsionValues += (string(gcvt(((FGPropeller*)Thrusters[i])->GetTorque(), 10, buff)) + ", "); + PropulsionValues += (string(gcvt(((FGPropeller*)Thrusters[i])->GetThrust(), 10, buff)) + ", "); + PropulsionValues += (string(gcvt(((FGPropeller*)Thrusters[i])->GetRPM(), 10, buff))); break; } -*/ } return PropulsionValues; diff --git a/src/FDM/JSBSim/FGRocket.cpp b/src/FDM/JSBSim/FGRocket.cpp index 3b38c0d49..0befe8c77 100644 --- a/src/FDM/JSBSim/FGRocket.cpp +++ b/src/FDM/JSBSim/FGRocket.cpp @@ -88,6 +88,7 @@ FGRocket::FGRocket(FGFDMExec* exec, FGConfigFile* Eng_cfg) : FGEngine(exec) } EngineNumber = 0; + Type = etRocket; kFactor = (2.0*SHR*SHR/(SHR-1.0))*pow(2.0/(SHR+1), (SHR+1)/(SHR-1)); @@ -107,7 +108,6 @@ float FGRocket::Calculate(float pe) { float lastThrust; float Cf; - float chamberPress; ConsumeFuel(); @@ -119,8 +119,8 @@ float FGRocket::Calculate(float pe) Flameout = true; } else { PctPower = Throttle / MaxThrottle; - chamberPress = maxPC*PctPower * (1.0 + Variance * ((float)rand()/(float)RAND_MAX - 0.5)); - Cf = sqrt(kFactor*(1 - pow(pe/(chamberPress), (SHR-1)/SHR))); + PC = maxPC*PctPower * (1.0 + Variance * ((float)rand()/(float)RAND_MAX - 0.5)); + Cf = sqrt(kFactor*(1 - pow(pe/(PC), (SHR-1)/SHR))); Flameout = false; } diff --git a/src/FDM/JSBSim/FGRocket.h b/src/FDM/JSBSim/FGRocket.h index c99446c55..db4c2700f 100644 --- a/src/FDM/JSBSim/FGRocket.h +++ b/src/FDM/JSBSim/FGRocket.h @@ -117,6 +117,10 @@ public: @param pe nozzle exit pressure @return thrust coefficient times chamber pressure */ float Calculate(float pe); + + /** Gets the chamber pressure. + @return chamber pressure in psf. */ + float GetChamberPressure(void) {return PC;} private: float SHR; @@ -124,6 +128,7 @@ private: float propEff; float kFactor; float Variance; + float PC; void Debug(void); }; diff --git a/src/FDM/JSBSim/FGState.cpp b/src/FDM/JSBSim/FGState.cpp index f4b4f2e6b..4d930ece6 100644 --- a/src/FDM/JSBSim/FGState.cpp +++ b/src/FDM/JSBSim/FGState.cpp @@ -134,6 +134,7 @@ FGState::FGState(FGFDMExec* fdex) : mTb2l(3,3), RegisterVariable(FG_LEFT_BRAKE_CMD, " left_brake_cmd " ); RegisterVariable(FG_RIGHT_BRAKE_CMD," right_brake_cmd "); RegisterVariable(FG_CENTER_BRAKE_CMD," center_brake_cmd "); + RegisterVariable(FG_SET_LOGGING, " data_logging " ); if (debug_lvl & 2) cout << "Instantiated: FGState" << endl; } @@ -300,6 +301,12 @@ void FGState::SetParameter(eParam val_idx, float val) { FDMExec->GetFCS()->SetRBrake(val); break; + case FG_SET_LOGGING: + if (val < -0.01) FDMExec->GetOutput()->Disable(); + else if (val > 0.01) FDMExec->GetOutput()->Enable(); + else FDMExec->GetOutput()->Toggle(); + break; + default: cerr << "Parameter '" << val_idx << "' (" << paramdef[val_idx] << ") not handled" << endl; } diff --git a/src/FDM/JSBSim/FGThruster.h b/src/FDM/JSBSim/FGThruster.h index fc9389c95..723a09fc6 100644 --- a/src/FDM/JSBSim/FGThruster.h +++ b/src/FDM/JSBSim/FGThruster.h @@ -57,15 +57,18 @@ public: FGThruster(FGFDMExec *FDMExec); virtual ~FGThruster(); - enum Type {ttNozzle, ttRotor, ttPropeller}; + enum eType {ttNozzle, ttRotor, ttPropeller}; virtual float Calculate(float) {return 0.0;} void SetName(string name) {Name = name;} virtual float GetPowerRequired(void) {return 0.0;} virtual void SetdeltaT(float dt) {deltaT = dt;} float GetThrust(void) {return Thrust;} + eType GetType(void) {return Type;} + string GetName(void) {return Name;} protected: + eType Type; string Name; float Thrust; float PowerRequired; -- 2.39.5