*AC_cfg >> parameter;
if (parameter == "ON") subsystems += ssFCS;
}
+ if (parameter == "PROPULSION") {
+ *AC_cfg >> parameter;
+ if (parameter == "ON") subsystems += ssPropulsion;
+ }
}
Output->SetSubsystems(subsystems);
/** 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:
// $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
// $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
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 {
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; }
cout << ", ";
cout << Aircraft->GetGroundReactionStrings();
}
+ if (SubSystems & FGAircraft::ssPropulsion) {
+ cout << ", ";
+ cout << Propulsion->GetPropulsionStrings();
+ }
cout << endl;
dFirstPass = false;
cout << ", ";
cout << Aircraft->GetGroundReactionValues();
}
+ if (SubSystems & FGAircraft::ssPropulsion) {
+ cout << ", ";
+ cout << Propulsion->GetPropulsionValues();
+ }
+
cout << endl;
}
datafile << ", ";
datafile << FCS->GetComponentStrings();
}
+ if (SubSystems & FGAircraft::ssPropulsion) {
+ datafile << ", ";
+ datafile << Propulsion->GetPropulsionStrings();
+ }
datafile << endl;
sFirstPass = false;
}
datafile << ", ";
datafile << FCS->GetComponentValues();
}
+ if (SubSystems & FGAircraft::ssPropulsion) {
+ datafile << ", ";
+ datafile << Propulsion->GetPropulsionValues();
+ }
datafile << endl;
datafile.flush();
}
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;
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;
}
EngineNumber = 0;
+ Type = etRocket;
kFactor = (2.0*SHR*SHR/(SHR-1.0))*pow(2.0/(SHR+1), (SHR+1)/(SHR-1));
{
float lastThrust;
float Cf;
- float chamberPress;
ConsumeFuel();
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;
}
@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;
float propEff;
float kFactor;
float Variance;
+ float PC;
void Debug(void);
};
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;
}
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;
}
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;