Looks like if the engine is Starved once, it always stays that way
even if the aircraft is refuelled. I have tried to make this work, and
hacked the state machine.
Please review my changes as I may have broken something.
* I have moved the selection of the next state into the appropriate
handler - I think it belongs there
* I have overridden the ConsumeFuel function so that it automatically
sets the state to tpOff if out of fuel.
* The starter operates as follows: the engine is spin-up. After that
state is set to tpStart. In the next iteration Start() will check if
there is fuel or not.
This probably belongs to the jsbsim mail list, but I am not subscribed
there and Jon seems to be reading fg-devel anyway. Sorry if this
caused any inconvenience.
Greets,
Csaba
Index: src/FDM/JSBSim/models/propulsion/FGTurbine.cpp
===
RCS file:
/var/cvs/FlightGear-0.9/source/src/FDM/JSBSim/models/propulsion/FGTurbine.cpp,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 FGTurbine.cpp
--- src/FDM/JSBSim/models/propulsion/FGTurbine.cpp 6 Jan 2007 10:49:26
- 1.1.2.1
+++ src/FDM/JSBSim/models/propulsion/FGTurbine.cpp 4 Jun 2007 17:44:54
-
@@ -91,29 +91,7 @@
AugmentCmd = 0.0;
}
- // When trimming is finished check if user wants engine OFF or RUNNING
- if ((phase == tpTrim) (dt 0)) {
-if (Running !Starved) {
- phase = tpRun;
- N2 = IdleN2 + ThrottlePos * N2_factor;
- N1 = IdleN1 + ThrottlePos * N1_factor;
- OilTemp_degK = 366.0;
- Cutoff = false;
- }
-else {
- phase = tpOff;
- Cutoff = true;
- EGT_degC = TAT;
- }
-}
-
- if (!Running Cutoff Starter) {
- if (phase == tpOff) phase = tpSpinUp;
- }
- if (!Running !Cutoff (N2 15.0)) phase = tpStart;
- if (Cutoff (phase != tpSpinUp)) phase = tpOff;
if (dt == 0) phase = tpTrim;
- if (Starved) phase = tpOff;
if (Stalled) phase = tpStall;
if (Seized) phase = tpSeize;
@@ -135,6 +113,16 @@
//%%
+void FGTurbine::ConsumeFuel(void)
+{
+ FGEngine::ConsumeFuel();
+ if (Cutoff || Starved) {
+phase = tpOff;
+ }
+}
+
+//%%
+
double FGTurbine::Off(void)
{
double qbar = Auxiliary-Getqbar();
@@ -148,6 +136,11 @@
NozzlePosition = Seek(NozzlePosition, 1.0, 0.8, 0.8);
EPR = Seek(EPR, 1.0, 0.2, 0.2);
Augmentation = false;
+
+ if (Cutoff Starter) {
+phase = tpSpinUp;
+ }
+
return 0.0;
}
@@ -209,8 +202,6 @@
}
ConsumeFuel();
- if (Cutoff) phase = tpOff;
- if (Starved) phase = tpOff;
return thrust;
}
@@ -228,6 +219,11 @@
OilTemp_degK = Seek(OilTemp_degK, TAT + 273.0, 0.2, 0.2);
EPR = 1.0;
NozzlePosition = 1.0;
+
+ if (N2 15.0) {
+phase = tpStart;
+ }
+
return 0.0;
}
@@ -235,7 +231,7 @@
double FGTurbine::Start(void)
{
- if ((N2 15.0) !Starved) { // minimum 15% N2 needed for start
+ if (N2 15.0) { // minimum 15% N2 needed for start
Cranking = true; // provided for sound effects signal
if (N2 IdleN2) {
N2 = Seek(N2, IdleN2, 2.0, N2/2.0);
@@ -320,6 +316,20 @@
thrust = thrust * InjectionLookup-GetValue();
}
+// When trimming is finished check if user wants engine OFF or RUNNING
+if (Running !Starved) {
+ phase = tpRun;
+ N2 = IdleN2 + ThrottlePos * N2_factor;
+ N1 = IdleN1 + ThrottlePos * N1_factor;
+ OilTemp_degK = 366.0;
+ Cutoff = false;
+}
+else {
+ phase = tpOff;
+ Cutoff = true;
+ EGT_degC = TAT;
+}
+
return thrust;
}
Index: src/FDM/JSBSim/models/propulsion/FGTurbine.h
===
RCS file:
/var/cvs/FlightGear-0.9/source/src/FDM/JSBSim/models/propulsion/FGTurbine.h,v
retrieving revision 1.1.2.1
diff -u -r1.1.2.1 FGTurbine.h
--- src/FDM/JSBSim/models/propulsion/FGTurbine.h6 Jan 2007 10:49:26
- 1.1.2.1
+++ src/FDM/JSBSim/models/propulsion/FGTurbine.h4 Jun 2007 17:44:54
-
@@ -152,6 +152,7 @@
double GetPowerAvailable(void);
double GetThrust(void) const {return Thrust;}
double Seek(double* var, double target, double accel, double decel);
+ void ConsumeFuel(void);
phaseType GetPhase(void) { return phase; }
-
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/___
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel