fgfcs.h

来自「6 DOF Missle Simulation」· C头文件 代码 · 共 582 行 · 第 1/2 页

H
582
字号
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Header:       FGGFCS.h Author:       Jon S. Berndt Date started: 12/12/98 ------------- Copyright (C) 1999  Jon S. Berndt (jsb@hal-pc.org) ------------- This program is free software; you can redistribute it and/or modify it under 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 Lesser General Public License for more details. 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 Lesser General Public License can also be found on the world wide web at http://www.gnu.org.HISTORY--------------------------------------------------------------------------------12/12/98   JSB   Created%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SENTRY%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/#ifndef FGFCS_H#define FGFCS_H/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%INCLUDES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/#include <vector>#include <string>#include <models/flight_control/FGFCSComponent.h>#include <models/FGModel.h>#include <models/FGLGear.h>#include <input_output/FGXMLFileRead.h>/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%DEFINITIONS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/#define ID_FCS "$Id$"/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FORWARD DECLARATIONS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/namespace JSBSim {typedef enum { ofRad=0, ofDeg, ofNorm, ofMag , NForms} OutputForm;/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CLASS DOCUMENTATION%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*//** Encapsulates the Flight Control System (FCS) functionality.    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">      <channel>        <summer name="Pitch Trim Sum">           <input> fcs/elevator-cmd-norm </input>           <input> fcs/pitch-trim-cmd-norm </input>           <clipto>             <min>-1</min>             <max>1</max>           </clipto>        </summer>        <aerosurface_scale name="Pitch Command Scale">          <input> fcs/pitch-trim-sum </input>          <range>            <min> -50 </min>            <max>  50 </max>          </range>        </aerosurface_scale>        ... etc.    @endcode    In the above case we can see the first few components of the pitch channel    defined. The input to the first component (a summer), as can be seen in the "Pitch trim    sum" component, is really the sum of two parameters: elevator command (from    the stick - a pilot input), and pitch trim.    The next component created is an aerosurface scale component - a type of    gain (see the LoadFCS() method for insight on how the various types of    components map into the actual component classes).  This continues until the    final component for an axis when the    \<output> element is usually used to specify where the output is supposed to go. See the    individual components for more information on how they are mechanized.    Another option for the flight controls portion of the config file is that in    addition to using the "NAME" attribute in,    @code    <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>    @endcode    In this case, the FCS would be read in from another file.    <h2>Properties</h2>    @property fcs/aileron-cmd-norm normalized aileron command    @property fcs/elevator-cmd-norm normalized elevator command    @property fcs/rudder-cmd-norm    @property fcs/steer-cmd-norm    @property fcs/flap-cmd-norm    @property fcs/speedbrake-cmd-norm    @property fcs/spoiler-cmd-norm    @property fcs/pitch-trim-cmd-norm    @property fcs/roll-trim-cmd-norm    @property fcs/yaw-trim-cmd-norm    @property gear/gear-cmd-norm    @property fcs/left-aileron-pos-rad    @property fcs/left-aileron-pos-deg    @property fcs/left-aileron-pos-norm    @property fcs/mag-left-aileron-pos-rad    @property fcs/right-aileron-pos-rad    @property fcs/right-aileron-pos-deg    @property fcs/right-aileron-pos-norm    @property fcs/mag-right-aileron-pos-rad    @property fcs/elevator-pos-rad    @property fcs/elevator-pos-deg    @property fcs/elevator-pos-norm    @property fcs/mag-elevator-pos-rad    @property fcs/rudder-pos-rad    @property fcs/rudder-pos-deg    @property fcs/rudder-pos-norm    @property fcs/mag-rudder-pos-rad    @property fcs/flap-pos-rad    @property fcs/flap-pos-deg    @property fcs/flap-pos-norm    @property fcs/speedbrake-pos-rad    @property fcs/speedbrake-pos-deg    @property fcs/speedbrake-pos-norm    @property fcs/mag-speedbrake-pos-rad    @property fcs/spoiler-pos-rad    @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 FGActuator    @see FGDeadBand    @see FGFCSFunction    @see FGFilter    @see FGGain    @see FGKinemat    @see FGPID    @see FGSensor    @see FGSummer    @see FGSwitch    @see FGFCSComponent    @see Element*//*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%CLASS DECLARATION%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/class FGFCS : public FGModel, public FGXMLFileRead{public:  /** Constructor      @param Executive a pointer to the parent executive object */  FGFCS(FGFDMExec*);  /// Destructor  ~FGFCS();  bool InitModel(void);  /** Runs the Flight Controls model; called by the Executive      @return false if no error */  bool Run(void);  /// @name Pilot input command retrieval  //@{  /** Gets the aileron command.      @return aileron command in range from -1.0 - 1.0 */  inline 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; }  /** Gets the rudder command.      @return rudder command in range from -1.0 - 1.0 */  inline 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; }  /** Gets the flaps command.      @return flaps command in range from 0 to 1.0 */  inline 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; }  /** Gets the spoiler command.      @return spoiler command in range from 0 to 1.0 */  inline double GetDspCmd(void) const { return DspCmd; }  /** Gets the throttle command.      @param engine engine ID number      @return throttle command in range from 0 - 1.0 for the given engine */  double GetThrottleCmd(int engine) const;  /** 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]; }  /** 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]; }  /** 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]; }  /** Gets the pitch trim command.      @return pitch trim command in range from -1.0 to 1.0 */  inline 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; }  /** Gets the aileron trim command.      @return aileron trim command in range from -1.0 - 1.0 */  inline 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; }  //@}  /// @name Aerosurface position retrieval  //@{  /** Gets the left aileron position.      @return aileron position in radians */  inline 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 )                         const { return DaRPos[form]; }  /** Gets the elevator position.      @return elevator position in radians */  inline double GetDePos( int form = ofRad )                         const { return DePos[form]; }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?