INCLUDES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
-#ifdef FGFS
-# include <simgear/compiler.h>
-# ifdef SG_HAVE_STD_INCLUDES
-# include <vector>
-# else
-# include <vector.h>
-# endif
-#else
-# include <vector>
-#endif
+#include <vector>
#include <string>
#include <models/flight_control/FGFCSComponent.h>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
/** 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
<flight_control name="X-15 SAS">
addition to using the "NAME" attribute in,
@code
- \<flight_control name="X-15 SAS">
+ <flight_control name="X-15 SAS">
@endcode
one can also supply a filename:
@code
- \<flight_control name="X-15 SAS" file="X15.xml">
- \</flight_control>
+ <flight_control name="X-15 SAS" file="X15.xml">
+ </flight_control>
@endcode
In this case, the FCS would be read in from another file.
@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
*/
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/// Destructor
~FGFCS();
+ bool InitModel(void);
+
/** Runs the Flight Controls model; called by the Executive
@return false if no error */
bool Run(void);
//@{
/** 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
/** 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.
/** 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 */
/** 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
//@{
/** 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
//@{
/** 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
@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
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);
vector <double> SteerPosDeg;
double LeftBrake, RightBrake, CenterBrake; // Brake settings
double GearCmd,GearPos;
+ double TailhookPos, WingFoldPos;
- vector <FGFCSComponent*> FCSComponents;
- vector <FGFCSComponent*> APComponents;
+ typedef vector <FGFCSComponent*> FCSCompVec;
+ FCSCompVec Systems;
+ FCSCompVec FCSComponents;
+ FCSCompVec APComponents;
+ FCSCompVec sensors;
vector <double*> interface_properties;
- vector <FGFCSComponent*> sensors;
void bind(void);
void bindModel(void);
void bindThrottle(unsigned int);
- void unbind(FGPropertyManager *node);
void Debug(int from);
};
}