[Flightgear-devel] JSBSim turbine state machine

2007-06-04 Thread Csaba Halász

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


Re: [Flightgear-devel] JSBSim turbine state machine

2007-06-04 Thread Jon S. Berndt
 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

Yes. Thanks for the patch. I'll take a look.

Jon


-
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