X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FFDM%2FJSBSim%2Fmodels%2FFGFCS.h;h=79535f261dda2c0b83edf5fee016cbb668637722;hb=f220feb6842355cae023ba898d045d4b1e73e34b;hp=450d2b95100a0a5082e70799b6ef4854cb0448ff;hpb=ae77c7d75a87daa741807c9169b7d59b6c6f0c9e;p=flightgear.git diff --git a/src/FDM/JSBSim/models/FGFCS.h b/src/FDM/JSBSim/models/FGFCS.h index 450d2b951..79535f261 100644 --- a/src/FDM/JSBSim/models/FGFCS.h +++ b/src/FDM/JSBSim/models/FGFCS.h @@ -4,23 +4,23 @@ Author: Jon S. Berndt Date started: 12/12/98 - ------------- Copyright (C) 1999 Jon S. Berndt (jsb@hal-pc.org) ------------- + ------------- Copyright (C) 1999 Jon S. Berndt (jon@jsbsim.org) ------------- This program is free software; you can redistribute it and/or modify it under - the terms of the GNU General Public License as published by the Free Software + the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License along with + You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - Further information about the GNU General Public License can also be found on + Further information about the GNU Lesser General Public License can also be found on the world wide web at http://www.gnu.org. HISTORY @@ -38,22 +38,13 @@ SENTRY INCLUDES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -#ifdef FGFS -# include -# ifdef SG_HAVE_STD_INCLUDES -# include -# else -# include -# endif -#else -# include -#endif +#include #include #include #include #include -#include +#include /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFINITIONS @@ -74,12 +65,13 @@ CLASS DOCUMENTATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ /** Encapsulates the Flight Control System (FCS) functionality. - This class owns and contains the list of FGFCSComponents - that define the control system for this aircraft. The config file for the - aircraft contains a description of the control path that starts at an input - or command and ends at an effector, e.g. an aerosurface. The FCS components - which comprise the control laws for an axis are defined sequentially in - the configuration file. For instance, for the X-15: + This class also encapsulates the identical "system" and "autopilot" capability. + FGFCS owns and contains the list of FGFCSComponents + that define a system or systems for the modeled aircraft. The config file + for the aircraft contains a description of the control path that starts at + an input or command and ends at an effector, e.g. an aerosurface. The FCS + components which comprise the control laws for an axis are defined + sequentially in the configuration file. For instance, for the X-15: @code @@ -119,14 +111,14 @@ CLASS DOCUMENTATION addition to using the "NAME" attribute in, @code - \ + @endcode one can also supply a filename: @code - \ - \ + + @endcode In this case, the FCS would be read in from another file. @@ -170,28 +162,32 @@ CLASS DOCUMENTATION @property fcs/spoiler-pos-deg @property fcs/spoiler-pos-norm @property fcs/mag-spoiler-pos-rad + @property fcs/wing-fold-pos-norm @property gear/gear-pos-norm + @property gear/tailhook-pos-norm @author Jon S. Berndt @version $Revision$ - @see FGFCSComponent - @see FGXMLElement - @see FGGain - @see FGSummer - @see FGSwitch + @see FGActuator + @see FGDeadBand @see FGFCSFunction - @see FGCondition - @see FGGradient @see FGFilter - @see FGDeadBand + @see FGGain @see FGKinemat + @see FGPID + @see FGSensor + @see FGSummer + @see FGSwitch + @see FGFCSComponent + @see Element */ /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% CLASS DECLARATION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/ -class FGFCS : public FGModel { +class FGFCS : public FGModel, public FGXMLFileRead +{ public: /** Constructor @@ -200,6 +196,8 @@ public: /// Destructor ~FGFCS(); + bool InitModel(void); + /** Runs the Flight Controls model; called by the Executive @return false if no error */ bool Run(void); @@ -208,31 +206,31 @@ public: //@{ /** Gets the aileron command. @return aileron command in range from -1.0 - 1.0 */ - inline double GetDaCmd(void) const { return DaCmd; } + double GetDaCmd(void) const { return DaCmd; } /** Gets the elevator command. @return elevator command in range from -1.0 - 1.0 */ - inline double GetDeCmd(void) const { return DeCmd; } + double GetDeCmd(void) const { return DeCmd; } /** Gets the rudder command. @return rudder command in range from -1.0 - 1.0 */ - inline double GetDrCmd(void) const { return DrCmd; } + double GetDrCmd(void) const { return DrCmd; } /** Gets the steering command. @return steering command in range from -1.0 - 1.0 */ - inline double GetDsCmd(void) const { return DsCmd; } + double GetDsCmd(void) const { return DsCmd; } /** Gets the flaps command. @return flaps command in range from 0 to 1.0 */ - inline double GetDfCmd(void) const { return DfCmd; } + double GetDfCmd(void) const { return DfCmd; } /** Gets the speedbrake command. @return speedbrake command in range from 0 to 1.0 */ - inline double GetDsbCmd(void) const { return DsbCmd; } + double GetDsbCmd(void) const { return DsbCmd; } /** Gets the spoiler command. @return spoiler command in range from 0 to 1.0 */ - inline double GetDspCmd(void) const { return DspCmd; } + double GetDspCmd(void) const { return DspCmd; } /** Gets the throttle command. @param engine engine ID number @@ -242,73 +240,73 @@ public: /** Gets the mixture command. @param engine engine ID number @return mixture command in range from 0 - 1.0 for the given engine */ - inline double GetMixtureCmd(int engine) const { return MixtureCmd[engine]; } + double GetMixtureCmd(int engine) const { return MixtureCmd[engine]; } /** Gets the prop pitch command. @param engine engine ID number @return pitch command in range from 0.0 - 1.0 for the given engine */ - inline double GetPropAdvanceCmd(int engine) const { return PropAdvanceCmd[engine]; } + double GetPropAdvanceCmd(int engine) const { return PropAdvanceCmd[engine]; } /** Gets the prop feather command. @param engine engine ID number @return feather command for the given engine (on / off)*/ - inline bool GetFeatherCmd(int engine) const { return PropFeatherCmd[engine]; } + bool GetFeatherCmd(int engine) const { return PropFeatherCmd[engine]; } /** Gets the pitch trim command. @return pitch trim command in range from -1.0 to 1.0 */ - inline double GetPitchTrimCmd(void) const { return PTrimCmd; } + double GetPitchTrimCmd(void) const { return PTrimCmd; } /** Gets the rudder trim command. @return rudder trim command in range from -1.0 - 1.0 */ - inline double GetYawTrimCmd(void) const { return YTrimCmd; } + double GetYawTrimCmd(void) const { return YTrimCmd; } /** Gets the aileron trim command. @return aileron trim command in range from -1.0 - 1.0 */ - inline double GetRollTrimCmd(void) const { return RTrimCmd; } + double GetRollTrimCmd(void) const { return RTrimCmd; } /** Get the gear extend/retract command. 0 commands gear up, 1 down. defaults to down. @return the current value of the gear extend/retract command*/ - inline double GetGearCmd(void) const { return GearCmd; } + double GetGearCmd(void) const { return GearCmd; } //@} /// @name Aerosurface position retrieval //@{ /** Gets the left aileron position. @return aileron position in radians */ - inline double GetDaLPos( int form = ofRad ) + double GetDaLPos( int form = ofRad ) const { return DaLPos[form]; } /// @name Aerosurface position retrieval //@{ /** Gets the right aileron position. @return aileron position in radians */ - inline double GetDaRPos( int form = ofRad ) + double GetDaRPos( int form = ofRad ) const { return DaRPos[form]; } /** Gets the elevator position. @return elevator position in radians */ - inline double GetDePos( int form = ofRad ) + double GetDePos( int form = ofRad ) const { return DePos[form]; } /** Gets the rudder position. @return rudder position in radians */ - inline double GetDrPos( int form = ofRad ) + double GetDrPos( int form = ofRad ) const { return DrPos[form]; } /** Gets the speedbrake position. @return speedbrake position in radians */ - inline double GetDsbPos( int form = ofRad ) + double GetDsbPos( int form = ofRad ) const { return DsbPos[form]; } /** Gets the spoiler position. @return spoiler position in radians */ - inline double GetDspPos( int form = ofRad ) + double GetDspPos( int form = ofRad ) const { return DspPos[form]; } /** Gets the flaps position. @return flaps position in radians */ - inline double GetDfPos( int form = ofRad ) + double GetDfPos( int form = ofRad ) const { return DfPos[form]; } /** Gets the throttle position. @@ -319,7 +317,7 @@ public: /** Gets the mixture position. @param engine engine ID number @return mixture position for the given engine in range from 0 - 1.0 */ - inline double GetMixturePos(int engine) const { return MixturePos[engine]; } + double GetMixturePos(int engine) const { return MixturePos[engine]; } /** Gets the steering position. @return steering position in degrees */ @@ -327,23 +325,31 @@ public: /** Gets the gear position (0 up, 1 down), defaults to down @return gear position (0 up, 1 down) */ - inline double GetGearPos(void) const { return GearPos; } + double GetGearPos(void) const { return GearPos; } + + /** Gets the tailhook position (0 up, 1 down) + @return tailhook position (0 up, 1 down) */ + double GetTailhookPos(void) const { return TailhookPos; } + + /** Gets the wing fold position (0 unfolded, 1 folded) + @return wing fold position (0 unfolded, 1 folded) */ + double GetWingFoldPos(void) const { return WingFoldPos; } /** Gets the prop pitch position. @param engine engine ID number @return prop pitch position for the given engine in range from 0 - 1.0 */ - inline double GetPropAdvance(int engine) const { return PropAdvance[engine]; } + double GetPropAdvance(int engine) const { return PropAdvance[engine]; } /** Gets the prop feather position. @param engine engine ID number @return prop fether for the given engine (on / off)*/ - inline bool GetPropFeather(int engine) const { return PropFeather[engine]; } + bool GetPropFeather(int engine) const { return PropFeather[engine]; } //@} /** Retrieves the State object pointer. This is used by the FGFCS-owned components. @return pointer to the State object */ - inline FGState* GetState(void) { return State; } + FGState* GetState(void) { return State; } /** Retrieves all component names for inclusion in output stream @param delimeter either a tab or comma string depending on output type @@ -360,43 +366,43 @@ public: //@{ /** Sets the aileron command @param cmd aileron command */ - inline void SetDaCmd( double cmd ) { DaCmd = cmd; } + void SetDaCmd( double cmd ) { DaCmd = cmd; } /** Sets the elevator command @param cmd elevator command in percent*/ - inline void SetDeCmd(double cmd ) { DeCmd = cmd; } + void SetDeCmd(double cmd ) { DeCmd = cmd; } /** Sets the rudder command @param cmd rudder command in percent*/ - inline void SetDrCmd(double cmd) { DrCmd = cmd; } + void SetDrCmd(double cmd) { DrCmd = cmd; } /** Sets the steering command @param cmd steering command in percent*/ - inline void SetDsCmd(double cmd) { DsCmd = cmd; } + void SetDsCmd(double cmd) { DsCmd = cmd; } /** Sets the flaps command @param cmd flaps command in percent*/ - inline void SetDfCmd(double cmd) { DfCmd = cmd; } + void SetDfCmd(double cmd) { DfCmd = cmd; } /** Sets the speedbrake command @param cmd speedbrake command in percent*/ - inline void SetDsbCmd(double cmd) { DsbCmd = cmd; } + void SetDsbCmd(double cmd) { DsbCmd = cmd; } /** Sets the spoilers command @param cmd spoilers command in percent*/ - inline void SetDspCmd(double cmd) { DspCmd = cmd; } + void SetDspCmd(double cmd) { DspCmd = cmd; } /** Sets the pitch trim command @param cmd pitch trim command in percent*/ - inline void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; } + void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; } /** Sets the rudder trim command @param cmd rudder trim command in percent*/ - inline void SetYawTrimCmd(double cmd) { YTrimCmd = cmd; } + void SetYawTrimCmd(double cmd) { YTrimCmd = cmd; } /** Sets the aileron trim command @param cmd aileron trim command in percent*/ - inline void SetRollTrimCmd(double cmd) { RTrimCmd = cmd; } + void SetRollTrimCmd(double cmd) { RTrimCmd = cmd; } /** Sets the throttle command for the specified engine @param engine engine ID number @@ -427,31 +433,31 @@ public: //@{ /** Sets the left aileron position @param cmd left aileron position in radians*/ - inline void SetDaLPos( int form , double pos ); + void SetDaLPos( int form , double pos ); /** Sets the right aileron position @param cmd right aileron position in radians*/ - inline void SetDaRPos( int form , double pos ); + void SetDaRPos( int form , double pos ); /** Sets the elevator position @param cmd elevator position in radians*/ - inline void SetDePos( int form , double pos ); + void SetDePos( int form , double pos ); /** Sets the rudder position @param cmd rudder position in radians*/ - inline void SetDrPos( int form , double pos ); + void SetDrPos( int form , double pos ); /** Sets the flaps position @param cmd flaps position in radians*/ - inline void SetDfPos( int form , double pos ); + void SetDfPos( int form , double pos ); /** Sets the speedbrake position @param cmd speedbrake position in radians*/ - inline void SetDsbPos( int form , double pos ); + void SetDsbPos( int form , double pos ); /** Sets the spoiler position @param cmd spoiler position in radians*/ - inline void SetDspPos( int form , double pos ); + void SetDspPos( int form , double pos ); /** Sets the actual throttle setting for the specified engine @param engine engine ID number @@ -471,6 +477,13 @@ public: @param gear position 0 up, 1 down */ void SetGearPos(double gearpos) { GearPos = gearpos; } + /** Set the tailhook position + @param tailhook position 0 up, 1 down */ + void SetTailhookPos(double hookpos) { TailhookPos = hookpos; } + + /** Set the wing fold position + @param wing fold position 0 unfolded, 1 folded */ + void SetWingFoldPos(double foldpos) { WingFoldPos = foldpos; } /** Sets the actual prop pitch setting for the specified engine @param engine engine ID number @@ -501,16 +514,35 @@ public: @param bg which brakegroup to retrieve the command for @return the brake setting for the supplied brake group argument */ double GetBrake(FGLGear::BrakeGroup bg); + + /** Gets the left brake. + @return the left brake setting. */ + double GetLBrake(void) const {return LeftBrake;} + + /** Gets the right brake. + @return the right brake setting. */ + double GetRBrake(void) const {return RightBrake;} + + /** Gets the center brake. + @return the center brake setting. */ + double GetCBrake(void) const {return CenterBrake;} //@} + enum SystemType { stFCS, stSystem, stAutoPilot }; + /** Loads the Flight Control System. Load() is called from FGFDMExec. @param el pointer to the Element instance + @param systype type of system (FCS, Autopilot, System) @return true if succesful */ - bool Load(Element* el); + bool Load(Element* el, SystemType systype); + + ifstream* FindSystemFile(string system_filename); + string FindSystemFullPathname(string system_filename); void AddThrottle(void); void AddGear(void); + double GetDt(void); FGPropertyManager* GetPropertyManager(void) { return PropertyManager; } @@ -530,15 +562,15 @@ private: vector SteerPosDeg; double LeftBrake, RightBrake, CenterBrake; // Brake settings double GearCmd,GearPos; + double TailhookPos, WingFoldPos; - vector FCSComponents; - vector APComponents; - vector interface_properties; - vector sensors; + typedef vector FCSCompVec; + FCSCompVec Systems; + FCSCompVec FCSComponents; + FCSCompVec APComponents; void bind(void); void bindModel(void); void bindThrottle(unsigned int); - void unbind(FGPropertyManager *node); void Debug(int from); }; }