INCLUDES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-#ifdef FGFS
-# include <simgear/compiler.h>
-# ifdef FG_HAVE_STD_INCLUDES
-# include <vector>
-# else
-# include <vector.h>
-# endif
-#else
-# include <vector>
-#endif
-
#include "FGModel.h"
#include "FGInitialCondition.h"
+#include "FGJSBBase.h"
+#include <vector>
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
DEFINITIONS
FORWARD DECLARATIONS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-class FGState;
-class FGAtmosphere;
-class FGFCS;
-class FGPropulsion;
-class FGAircraft;
-class FGTranslation;
-class FGRotation;
-class FGPosition;
-class FGAuxiliary;
-class FGOutput;
class FGInitialCondition;
-struct condition {
- vector <eParam> TestParam;
- vector <eParam> SetParam;
- vector <float> TestValue;
- vector <float> SetValue;
- vector <string> Comparison;
- vector <float> TC;
- vector <bool> Persistent;
- vector <eAction> Action;
- vector <eType> Type;
- vector <bool> Triggered;
- vector <float> newValue;
- vector <float> OriginalValue;
- vector <float> StartTime;
- vector <float> EndTime;
-
- condition() {
- }
-};
-
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
COMMENTS, REFERENCES, and NOTES [use "class documentation" below for API docs]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
other flight simulator) this class is typically instantiated by an interface
class on the simulator side.
- <h4>Scripting support provided in the Executive</h4>
-
- <p>There is simple scripting support provided in the FGFDMExec
- class. Commands are specified using the <u>Simple Scripting
- Directives for JSBSim</u> (SSDJ). The script file is in XML
- format. A test condition (or conditions) can be set up in the
- script and when the condition evaluates to true, the specified
- action[s] is/are taken. A test condition can be <em>persistent</em>,
- meaning that if a test condition evaluates to true, then passes
- and evaluates to false, the condition is reset and may again be
- triggered. When the set of tests evaluates to true for a given
- condition, an item may be set to another value. This value might
- be a boolean, a value, or a delta value, and the change from the
- current value to the new value can be either via a step function,
- a ramp, or an exponential approach. The speed of a ramp or
- approach is specified via the time constant. Here is the format
- of the script file:</p>
-
- <pre><strong><?xml version="1.0"?>
- <runscript name="C172-01A">
-
- <!--
- This run is for testing C172 runs
- -->
-
- <use aircraft="c172">
- <use initialize="reset00">
-
- <run start="0.0" end="4.5" dt="0.05">
- <when>
- <parameter name="FG_TIME" comparison="ge" value="0.25">
- <parameter name="FG_TIME" comparison="le" value="0.50">
- <set name="FG_AILERON_CMD" type="FG_VALUE" value="0.25"
- action="FG_STEP" persistent="false" tc ="0.25">
- </when>
- <when>
- <parameter name="FG_TIME" comparison="ge" value="0.5">
- <parameter name="FG_TIME" comparison="le" value="1.5">
- <set name="FG_AILERON_CMD" type="FG_DELTA" value="0.5"
- action="FG_EXP" persistent="false" tc ="0.5">
- </when>
- <when>
- <parameter name="FG_TIME" comparison="ge" value="1.5">
- <parameter name="FG_TIME" comparison="le" value="2.5">
- <set name="FG_RUDDER_CMD" type="FG_DELTA" value="0.5"
- action="FG_RAMP" persistent="false" tc ="0.5">
- </when>
- </run>
-
- </runscript></strong></pre>
-
- <p>The first line must always be present. The second line
- identifies this file as a script file, and gives a descriptive
- name to the script file. Comments are next, delineated by the
- <!-- and --> symbols. The aircraft and initialization files
- to be used are specified in the "use" lines. Next,
- comes the "run" section, where the conditions are
- described in "when" clauses.</p>
+ When an aircraft model is loaded the config file is parsed and for each of the
+ sections of the config file (propulsion, flight control, etc.) the
+ corresponding "ReadXXX()" method is called. From within this method the
+ "Load()" method of that system is called (e.g. LoadFCS).
<h4>JSBSim Debugging Directives</h4>
FGModel object executes its Run() method</li>
<li><b>8</b>: When this value is set, various runtime state variables
are printed out periodically</li>
+ <li><b>16</b>: When set various parameters are sanity checked and
+ a message is printed out when they go out of bounds</li>
</ol>
*/
CLASS DECLARATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-class FGFDMExec
+class FGFDMExec : public FGJSBBase
{
public:
/// Default constructor
@return Currently returns 0 always. */
int Schedule(FGModel* model, int rate);
- /** This executes each scheduled model in succession, as well as running any
- scripts which are loaded.
+ /** This executes each scheduled model in succession.
@return true if successful, false if sim should be ended */
bool Run(void);
@return true if successful*/
bool LoadModel(string AircraftPath, string EnginePath, string model);
- /** Loads a script to drive JSBSim (usually in standalone mode).
- The language is the Simple Script Directives for JSBSim (SSDJ).
- @param script the filename (including path name, if any) for the script.
- @return true if successful */
- bool LoadScript(string script);
-
- /** This function is called each pass through the executive Run() method IF
- scripting is enabled. */
- void RunScript(void);
-
bool SetEnginePath(string path) {EnginePath = path; return true;}
bool SetAircraftPath(string path) {AircraftPath = path; return true;}
- bool SetScriptPath(string path) {ScriptPath = path; return true;}
/// @name Top-level executive State and Model retrieval mechanism
//@{
/// Returns the FGPropulsion pointer.
inline FGPropulsion* GetPropulsion(void) {return Propulsion;}
/// Returns the FGAircraft pointer.
+ inline FGMassBalance* GetMassBalance(void) {return MassBalance;}
+ /// Returns the FGAerodynamics pointer
+ inline FGAerodynamics* GetAerodynamics(void){return Aerodynamics;}
+ /// Returns the FGInertial pointer.
+ inline FGInertial* GetInertial(void) {return Inertial;}
+ /// Returns the FGGroundReactions pointer.
+ inline FGGroundReactions* GetGroundReactions(void) {return GroundReactions;}
+ /// Returns the FGAircraft pointer.
inline FGAircraft* GetAircraft(void) {return Aircraft;}
/// Returns the FGTranslation pointer.
inline FGTranslation* GetTranslation(void) {return Translation;}
bool frozen;
bool terminate;
int Error;
- int Frame;
+ unsigned int Frame;
+ unsigned int IdFDM;
+ static unsigned int FDMctr;
bool modelLoaded;
- bool Scripted;
string AircraftPath;
string EnginePath;
- string ScriptPath;
- string ScriptName;
- float StartTime;
- float EndTime;
- vector <struct condition> Conditions;
-
- FGState* State;
- FGAtmosphere* Atmosphere;
- FGFCS* FCS;
- FGPropulsion* Propulsion;
- FGAircraft* Aircraft;
- FGTranslation* Translation;
- FGRotation* Rotation;
- FGPosition* Position;
- FGAuxiliary* Auxiliary;
- FGOutput* Output;
+ string CFGVersion;
+
+ FGState* State;
+ FGAtmosphere* Atmosphere;
+ FGFCS* FCS;
+ FGPropulsion* Propulsion;
+ FGMassBalance* MassBalance;
+ FGAerodynamics* Aerodynamics;
+ FGInertial* Inertial;
+ FGGroundReactions* GroundReactions;
+ FGAircraft* Aircraft;
+ FGTranslation* Translation;
+ FGRotation* Rotation;
+ FGPosition* Position;
+ FGAuxiliary* Auxiliary;
+ FGOutput* Output;
+
+ bool ReadMetrics(FGConfigFile*);
+ bool ReadPropulsion(FGConfigFile*);
+ bool ReadFlightControls(FGConfigFile*);
+ bool ReadAerodynamics(FGConfigFile*);
+ bool ReadUndercarriage(FGConfigFile*);
+ bool ReadPrologue(FGConfigFile*);
+ bool ReadOutput(FGConfigFile*);
bool Allocate(void);
bool DeAllocate(void);
- void Debug(void);
+ void Debug(int from);
};
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%