X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2FFGFDMExec.h;h=b982654e7aa613158ec47548c21fbb0b5ac18d76;hb=031ed14fb2dd1168dcf4a0ab641a0af3e85e649e;hp=5e1ee07193a5c30f40a7301ea6541943267c407a;hpb=e503591af4f16814d78ded49c5979e273d81a0be;p=flightgear.git diff --git a/src/FDM/JSBSim/FGFDMExec.h b/src/FDM/JSBSim/FGFDMExec.h index 5e1ee0719..b982654e7 100644 --- a/src/FDM/JSBSim/FGFDMExec.h +++ b/src/FDM/JSBSim/FGFDMExec.h @@ -41,7 +41,10 @@ SENTRY INCLUDES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#include "models/FGModel.h" +#include +#include + +//#include "models/FGModel.h" #include "models/FGOutput.h" #include "models/FGInput.h" #include "initialization/FGTrim.h" @@ -53,14 +56,11 @@ INCLUDES #include "models/FGPropagate.h" #include "math/FGColumnVector3.h" -#include -#include - /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFINITIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#define ID_FDMEXEC "$Id$" +#define ID_FDMEXEC "$Id: FGFDMExec.h,v 1.56 2010/11/18 20:37:10 jberndt Exp $" /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FORWARD DECLARATIONS @@ -70,6 +70,20 @@ namespace JSBSim { class FGScript; class FGTrim; +class FGAerodynamics; +class FGAircraft; +class FGAtmosphere; +class FGAuxiliary; +class FGBuoyantForces; +class FGExternalReactions; +class FGGroundReactions; +class FGFCS; +class FGInertial; +class FGInput; +class FGOutput; +class FGPropagate; +class FGPropulsion; +class FGMassBalance; /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS DOCUMENTATION @@ -87,8 +101,8 @@ CLASS DOCUMENTATION file: @code - fdmex = new FGFDMExec( … ); - result = fdmex->LoadModel( … ); + fdmex = new FGFDMExec( ... ); + result = fdmex->LoadModel( ... ); @endcode When an aircraft model is loaded, the config file is parsed and for each of the @@ -169,7 +183,7 @@ CLASS DOCUMENTATION property actually maps toa function call of DoTrim(). @author Jon S. Berndt - @version $Revision$ + @version $Revision: 1.56 $ */ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -207,11 +221,14 @@ class FGFDMExec : public FGJSBBase, public FGXMLFileRead public: /// Default constructor - FGFDMExec(FGPropertyManager* root = 0); + FGFDMExec(FGPropertyManager* root = 0, unsigned int* fdmctr = 0); /// Default destructor ~FGFDMExec(); + /** Unbind all tied JSBSim properties. */ + void Unbind(void) {instance->Unbind();} + /** This routine places a model into the runlist at the specified rate. The "rate" is not really a clock rate. It represents how many calls to the FGFDMExec::Run() method must be made before the model is executed. A @@ -222,7 +239,7 @@ public: @param model A pointer to the model being scheduled. @param rate The rate at which to execute the model as described above. @return Currently returns 0 always. */ - int Schedule(FGModel* model, int rate); + void Schedule(FGModel* model, int rate); /** This function executes each scheduled model in succession. @return true if successful, false if sim should be ended */ @@ -252,8 +269,8 @@ public: @param addModelToPath set to true to add the model name to the AircraftPath, defaults to true @return true if successful */ - bool LoadModel(string AircraftPath, string EnginePath, string SystemsPath, - string model, bool addModelToPath = true); + bool LoadModel(const string& AircraftPath, const string& EnginePath, const string& SystemsPath, + const string& model, bool addModelToPath = true); /** Loads an aircraft model. The paths to the aircraft and engine config file directories must be set prior to calling this. See @@ -265,105 +282,103 @@ public: @param addModelToPath set to true to add the model name to the AircraftPath, defaults to true @return true if successful*/ - bool LoadModel(string model, bool addModelToPath = true); + bool LoadModel(const string& model, bool addModelToPath = true); /** Loads a script @param Script the full path name and file name for the script to be loaded. @return true if successfully loadsd; false otherwise. */ - bool LoadScript(string Script); + bool LoadScript(const string& Script, double deltaT); /** Sets the path to the engine config file directories. @param path path to the directory under which engine config files are kept, for instance "engine" */ - bool SetEnginePath(string path) { EnginePath = path; return true; } + bool SetEnginePath(const string& path) { EnginePath = RootDir + path; return true; } /** Sets the path to the aircraft config file directories. @param path path to the aircraft directory. For instance: "aircraft". Under aircraft, then, would be directories for various modeled aircraft such as C172/, x15/, etc. */ - bool SetAircraftPath(string path) { AircraftPath = path; return true; } + bool SetAircraftPath(const string& path) { AircraftPath = RootDir + path; return true; } /** Sets the path to the systems config file directories. @param path path to the directory under which systems config files are kept, for instance "systems" */ - bool SetSystemsPath(string path) { SystemsPath = path; return true; } + bool SetSystemsPath(const string& path) { SystemsPath = RootDir + path; return true; } /// @name Top-level executive State and Model retrieval mechanism //@{ /// Returns the FGAtmosphere pointer. - inline FGAtmosphere* GetAtmosphere(void) {return Atmosphere;} + FGAtmosphere* GetAtmosphere(void) {return Atmosphere;} /// Returns the FGFCS pointer. - inline FGFCS* GetFCS(void) {return FCS;} + FGFCS* GetFCS(void) {return FCS;} /// Returns the FGPropulsion pointer. - inline FGPropulsion* GetPropulsion(void) {return Propulsion;} + FGPropulsion* GetPropulsion(void) {return Propulsion;} /// Returns the FGAircraft pointer. - inline FGMassBalance* GetMassBalance(void) {return MassBalance;} + FGMassBalance* GetMassBalance(void) {return MassBalance;} /// Returns the FGAerodynamics pointer - inline FGAerodynamics* GetAerodynamics(void){return Aerodynamics;} + FGAerodynamics* GetAerodynamics(void){return Aerodynamics;} /// Returns the FGInertial pointer. - inline FGInertial* GetInertial(void) {return Inertial;} + FGInertial* GetInertial(void) {return Inertial;} /// Returns the FGGroundReactions pointer. - inline FGGroundReactions* GetGroundReactions(void) {return GroundReactions;} + FGGroundReactions* GetGroundReactions(void) {return GroundReactions;} /// Returns the FGExternalReactions pointer. - inline FGExternalReactions* GetExternalReactions(void) {return ExternalReactions;} + FGExternalReactions* GetExternalReactions(void) {return ExternalReactions;} /// Returns the FGBuoyantForces pointer. - inline FGBuoyantForces* GetBuoyantForces(void) {return BuoyantForces;} + FGBuoyantForces* GetBuoyantForces(void) {return BuoyantForces;} /// Returns the FGAircraft pointer. - inline FGAircraft* GetAircraft(void) {return Aircraft;} + FGAircraft* GetAircraft(void) {return Aircraft;} /// Returns the FGPropagate pointer. - inline FGPropagate* GetPropagate(void) {return Propagate;} + FGPropagate* GetPropagate(void) {return Propagate;} /// Returns the FGAuxiliary pointer. - inline FGAuxiliary* GetAuxiliary(void) {return Auxiliary;} + FGAuxiliary* GetAuxiliary(void) {return Auxiliary;} /// Returns the FGInput pointer. - inline FGInput* GetInput(void) {return Input;} + FGInput* GetInput(void) {return Input;} /// Returns the FGGroundCallback pointer. - inline FGGroundCallback* GetGroundCallback(void) {return GroundCallback;} - /// Returns the FGState pointer. - inline FGState* GetState(void) {return State;} + FGGroundCallback* GetGroundCallback(void) {return GroundCallback;} /// Retrieves the script object - inline FGScript* GetScript(void) {return Script;} + FGScript* GetScript(void) {return Script;} // Returns a pointer to the FGInitialCondition object - inline FGInitialCondition* GetIC(void) {return IC;} + FGInitialCondition* GetIC(void) {return IC;} // Returns a pointer to the FGTrim object FGTrim* GetTrim(void); //@} /// Retrieves the engine path. - inline string GetEnginePath(void) {return EnginePath;} + const string& GetEnginePath(void) {return EnginePath;} /// Retrieves the aircraft path. - inline string GetAircraftPath(void) {return AircraftPath;} + const string& GetAircraftPath(void) {return AircraftPath;} /// Retrieves the systems path. - inline string GetSystemsPath(void) {return SystemsPath;} + const string& GetSystemsPath(void) {return SystemsPath;} /// Retrieves the full aircraft path name. - inline string GetFullAircraftPath(void) {return FullAircraftPath;} + const string& GetFullAircraftPath(void) {return FullAircraftPath;} /** Retrieves the value of a property. @param property the name of the property @result the value of the specified property */ - inline double GetPropertyValue(string property) {return instance->GetDouble(property);} + inline double GetPropertyValue(const string& property) {return instance->GetDouble(property);} /** Sets a property value. @param property the property to be set @param value the value to set the property to */ - inline void SetPropertyValue(string property, double value) { + inline void SetPropertyValue(const string& property, double value) { instance->SetDouble(property, value); } /// Returns the model name. - string GetModelName(void) { return modelName; } - + const string& GetModelName(void) { return modelName; } +/* /// Returns the current time. double GetSimTime(void); /// Returns the current frame time (delta T). double GetDeltaT(void); - +*/ /// Returns a pointer to the property manager object. FGPropertyManager* GetPropertyManager(void); /// Returns a vector of strings representing the names of all loaded models (future) vector EnumerateFDMs(void); /// Gets the number of child FDMs. - int GetFDMCount(void) {return ChildFDMList.size();} + int GetFDMCount(void) {return (int)ChildFDMList.size();} /// Gets a particular child FDM. childData* GetChildFDM(int i) {return ChildFDMList[i];} /// Marks this instance of the Exec object as a "child" object. @@ -384,12 +399,12 @@ public: be logged. @param fname the filename of an output directives file. */ - bool SetOutputDirectives(string fname); + bool SetOutputDirectives(const string& fname); /** Sets (or overrides) the output filename @param fname the name of the file to output data to @return true if successful, false if there is no output specified for the flight model */ - bool SetOutputFileName(string fname) { + bool SetOutputFileName(const string& fname) { if (Outputs.size() > 0) Outputs[0]->SetOutputFileName(fname); else return false; return true; @@ -449,11 +464,13 @@ public: * @param check The string to search for in the property catalog. * @return the carriage-return-delimited string containing all matching strings * in the catalog. */ - string QueryPropertyCatalog(string check); + string QueryPropertyCatalog(const string& check); // Print the contents of the property catalog for the loaded aircraft. void PrintPropertyCatalog(void); + vector& GetPropertyCatalog(void) {return PropertyCatalog;} + /// Use the MSIS atmosphere model. void UseAtmosphereMSIS(void); @@ -465,12 +482,60 @@ public: void SetTrimMode(int mode){ ta_mode = mode; } int GetTrimMode(void) const { return ta_mode; } + /// Returns the cumulative simulation time in seconds. + double GetSimTime(void) const { return sim_time; } + + /// Returns the simulation delta T. + double GetDeltaT(void) {return dT;} + + /// Suspends the simulation and sets the delta T to zero. + void SuspendIntegration(void) {saved_dT = dT; dT = 0.0;} + + /// Resumes the simulation by resetting delta T to the correct value. + void ResumeIntegration(void) {dT = saved_dT;} + + /** Returns the simulation suspension state. + @return true if suspended, false if executing */ + bool IntegrationSuspended(void) {return dT == 0.0;} + + /** Sets the current sim time. + @param cur_time the current time + @return the current simulation time. */ + double Setsim_time(double cur_time) { + sim_time = cur_time; + return sim_time; + } + + /** Sets the integration time step for the simulation executive. + @param delta_t the time step in seconds. */ + void Setdt(double delta_t) { dT = delta_t; } + + /** Sets the root directory where JSBSim starts looking for its system directories. + @param rootDir the string containing the root directory. */ + void SetRootDir(const string& rootDir) {RootDir = rootDir;} + + /** Retrieves teh Root Directory. + @return the string representing the root (base) JSBSim directory. */ + const string& GetRootDir(void) const {return RootDir;} + + /** Increments the simulation time. + @return the new simulation time. */ + double IncrTime(void) { + sim_time += dT; + return sim_time; + } + + /** Retrieves the current debug level setting. */ + int GetDebugLevel(void) const {return debug_lvl;}; + private: - static unsigned int FDMctr; int Error; unsigned int Frame; unsigned int IdFDM; unsigned short Terminate; + double dT; + double saved_dT; + double sim_time; bool holding; bool Constructing; bool modelLoaded; @@ -482,15 +547,12 @@ private: string SystemsPath; string CFGVersion; string Release; + string RootDir; bool trim_status; int ta_mode; - static FGPropertyManager *master; - - FGModel* FirstModel; FGGroundCallback* GroundCallback; - FGState* State; FGAtmosphere* Atmosphere; FGFCS* FCS; FGPropulsion* Propulsion; @@ -509,11 +571,16 @@ private: FGTrim* Trim; FGPropertyManager* Root; + bool StandAlone; FGPropertyManager* instance; + + // The FDM counter is used to give each child FDM an unique ID. The root FDM has the ID 0 + unsigned int* FDMctr; vector PropertyCatalog; vector Outputs; vector ChildFDMList; + vector Models; bool ReadFileHeader(Element*); bool ReadChild(Element*); @@ -521,6 +588,7 @@ private: void ResetToInitialConditions(int mode); bool Allocate(void); bool DeAllocate(void); + void Initialize(FGInitialCondition *FGIC); void Debug(int from); };