]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/models/FGFCS.h
Merge branch 'next' of gitorious.org:fg/flightgear into next
[flightgear.git] / src / FDM / JSBSim / models / FGFCS.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3  Header:       FGGFCS.h
4  Author:       Jon S. Berndt
5  Date started: 12/12/98
6
7  ------------- Copyright (C) 1999  Jon S. Berndt (jon@jsbsim.org) -------------
8
9  This program is free software; you can redistribute it and/or modify it under
10  the terms of the GNU Lesser General Public License as published by the Free Software
11  Foundation; either version 2 of the License, or (at your option) any later
12  version.
13
14  This program is distributed in the hope that it will be useful, but WITHOUT
15  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
17  details.
18
19  You should have received a copy of the GNU Lesser General Public License along with
20  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
21  Place - Suite 330, Boston, MA  02111-1307, USA.
22
23  Further information about the GNU Lesser General Public License can also be found on
24  the world wide web at http://www.gnu.org.
25
26 HISTORY
27 --------------------------------------------------------------------------------
28 12/12/98   JSB   Created
29
30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
31 SENTRY
32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
33
34 #ifndef FGFCS_H
35 #define FGFCS_H
36
37 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 INCLUDES
39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
40
41 #include <iosfwd>
42 #include <vector>
43
44 #include <string>
45 #include "models/flight_control/FGFCSComponent.h"
46 #include "models/FGModel.h"
47 #include "models/FGLGear.h"
48 #include "input_output/FGXMLFileRead.h"
49
50 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
51 DEFINITIONS
52 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
53
54 #define ID_FCS "$Id: FGFCS.h,v 1.40 2011/10/31 14:54:41 bcoconni Exp $"
55
56 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
57 FORWARD DECLARATIONS
58 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
59
60 namespace JSBSim {
61
62 typedef enum { ofRad=0, ofDeg, ofNorm, ofMag , NForms} OutputForm;
63
64 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
65 CLASS DOCUMENTATION
66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
67
68 /** Encapsulates the Flight Control System (FCS) functionality.
69     This class also encapsulates the identical "system" and "autopilot" capability.
70     FGFCS owns and contains the list of FGFCSComponents
71     that define a system or systems for the modeled aircraft. The config file
72     for the aircraft contains a description of the control path that starts at
73     an input or command and ends at an effector, e.g. an aerosurface. The FCS
74     components which comprise the control laws for an axis are defined
75     sequentially in the configuration file. For instance, for the X-15:
76
77     @code
78     <flight_control name="X-15 SAS">
79       <channel>
80         <summer name="Pitch Trim Sum">
81            <input> fcs/elevator-cmd-norm </input>
82            <input> fcs/pitch-trim-cmd-norm </input>
83            <clipto>
84              <min>-1</min>
85              <max>1</max>
86            </clipto>
87         </summer>
88
89         <aerosurface_scale name="Pitch Command Scale">
90           <input> fcs/pitch-trim-sum </input>
91           <range>
92             <min> -50 </min>
93             <max>  50 </max>
94           </range>
95         </aerosurface_scale>
96
97         ... etc.
98     @endcode
99
100     In the above case we can see the first few components of the pitch channel
101     defined. The input to the first component (a summer), as can be seen in the "Pitch trim
102     sum" component, is really the sum of two parameters: elevator command (from
103     the stick - a pilot input), and pitch trim.
104     The next component created is an aerosurface scale component - a type of
105     gain (see the LoadFCS() method for insight on how the various types of
106     components map into the actual component classes).  This continues until the
107     final component for an axis when the
108     \<output> element is usually used to specify where the output is supposed to go. See the
109     individual components for more information on how they are mechanized.
110
111     Another option for the flight controls portion of the config file is that in
112     addition to using the "NAME" attribute in,
113
114     @code
115     <flight_control name="X-15 SAS">
116     @endcode
117
118     one can also supply a filename:
119
120     @code
121     <flight_control name="X-15 SAS" file="X15.xml">
122     </flight_control>
123     @endcode
124
125     In this case, the FCS would be read in from another file.
126
127     <h2>Properties</h2>
128     @property fcs/aileron-cmd-norm normalized aileron command
129     @property fcs/elevator-cmd-norm normalized elevator command
130     @property fcs/rudder-cmd-norm
131     @property fcs/steer-cmd-norm
132     @property fcs/flap-cmd-norm
133     @property fcs/speedbrake-cmd-norm
134     @property fcs/spoiler-cmd-norm
135     @property fcs/pitch-trim-cmd-norm
136     @property fcs/roll-trim-cmd-norm
137     @property fcs/yaw-trim-cmd-norm
138     @property gear/gear-cmd-norm
139     @property fcs/left-aileron-pos-rad
140     @property fcs/left-aileron-pos-deg
141     @property fcs/left-aileron-pos-norm
142     @property fcs/mag-left-aileron-pos-rad
143     @property fcs/right-aileron-pos-rad
144     @property fcs/right-aileron-pos-deg
145     @property fcs/right-aileron-pos-norm
146     @property fcs/mag-right-aileron-pos-rad
147     @property fcs/elevator-pos-rad
148     @property fcs/elevator-pos-deg
149     @property fcs/elevator-pos-norm
150     @property fcs/mag-elevator-pos-rad
151     @property fcs/rudder-pos-rad
152     @property fcs/rudder-pos-deg
153     @property fcs/rudder-pos-norm
154     @property fcs/mag-rudder-pos-rad
155     @property fcs/flap-pos-rad
156     @property fcs/flap-pos-deg
157     @property fcs/flap-pos-norm
158     @property fcs/speedbrake-pos-rad
159     @property fcs/speedbrake-pos-deg
160     @property fcs/speedbrake-pos-norm
161     @property fcs/mag-speedbrake-pos-rad
162     @property fcs/spoiler-pos-rad
163     @property fcs/spoiler-pos-deg
164     @property fcs/spoiler-pos-norm
165     @property fcs/mag-spoiler-pos-rad
166     @property fcs/wing-fold-pos-norm
167     @property gear/gear-pos-norm
168     @property gear/tailhook-pos-norm
169
170     @author Jon S. Berndt
171     @version $Revision: 1.40 $
172     @see FGActuator
173     @see FGDeadBand
174     @see FGFCSFunction
175     @see FGFilter
176     @see FGGain
177     @see FGKinemat
178     @see FGPID
179     @see FGSensor
180     @see FGSummer
181     @see FGSwitch
182     @see FGFCSComponent
183     @see Element
184 */
185
186 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
187 CLASS DECLARATION
188 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
189
190 class FGFCS : public FGModel, public FGXMLFileRead
191 {
192
193 public:
194   /** Constructor
195       @param Executive a pointer to the parent executive object */
196   FGFCS(FGFDMExec*);
197   /// Destructor
198   ~FGFCS();
199
200   bool InitModel(void);
201
202   /** Runs the Flight Controls model; called by the Executive
203       Can pass in a value indicating if the executive is directing the simulation to Hold.
204       @param Holding if true, the executive has been directed to hold the sim from 
205                      advancing time. Some models may ignore this flag, such as the Input
206                      model, which may need to be active to listen on a socket for the
207                      "Resume" command to be given.
208       @return false if no error */
209   bool Run(bool Holding);
210
211   /// @name Pilot input command retrieval
212   //@{
213   /** Gets the aileron command.
214       @return aileron command in range from -1.0 - 1.0 */
215   double GetDaCmd(void) const { return DaCmd; }
216
217   /** Gets the elevator command.
218       @return elevator command in range from -1.0 - 1.0 */
219   double GetDeCmd(void) const { return DeCmd; }
220
221   /** Gets the rudder command.
222       @return rudder command in range from -1.0 - 1.0 */
223   double GetDrCmd(void) const { return DrCmd; }
224
225   /** Gets the steering command.
226       @return steering command in range from -1.0 - 1.0 */
227   double GetDsCmd(void) const { return DsCmd; }
228
229   /** Gets the flaps command.
230       @return flaps command in range from 0 to 1.0 */
231   double GetDfCmd(void) const { return DfCmd; }
232
233   /** Gets the speedbrake command.
234       @return speedbrake command in range from 0 to 1.0 */
235   double GetDsbCmd(void) const { return DsbCmd; }
236
237   /** Gets the spoiler command.
238       @return spoiler command in range from 0 to 1.0 */
239   double GetDspCmd(void) const { return DspCmd; }
240
241   /** Gets the throttle command.
242       @param engine engine ID number
243       @return throttle command in range from 0 - 1.0 for the given engine */
244   double GetThrottleCmd(int engine) const;
245
246   const vector<double>& GetThrottleCmd() const {return ThrottleCmd;}
247
248   /** Gets the mixture command.
249       @param engine engine ID number
250       @return mixture command in range from 0 - 1.0 for the given engine */
251   double GetMixtureCmd(int engine) const { return MixtureCmd[engine]; }
252
253   const vector<double>& GetMixtureCmd() const {return MixtureCmd;}
254
255   /** Gets the prop pitch command.
256       @param engine engine ID number
257       @return pitch command in range from 0.0 - 1.0 for the given engine */
258   double GetPropAdvanceCmd(int engine) const { return PropAdvanceCmd[engine]; }
259
260   /** Gets the prop feather command.
261       @param engine engine ID number
262       @return feather command for the given engine (on / off)*/
263   bool GetFeatherCmd(int engine) const { return PropFeatherCmd[engine]; }
264
265   /** Gets the pitch trim command.
266       @return pitch trim command in range from -1.0 to 1.0 */
267   double GetPitchTrimCmd(void) const { return PTrimCmd; }
268
269   /** Gets the rudder trim command.
270       @return rudder trim command in range from -1.0 - 1.0 */
271   double GetYawTrimCmd(void) const { return YTrimCmd; }
272
273   /** Gets the aileron trim command.
274       @return aileron trim command in range from -1.0 - 1.0 */
275   double GetRollTrimCmd(void) const { return RTrimCmd; }
276
277   /** Get the gear extend/retract command. 0 commands gear up, 1 down.
278       defaults to down.
279       @return the current value of the gear extend/retract command*/
280   double GetGearCmd(void) const { return GearCmd; }
281   //@}
282
283   /// @name Aerosurface position retrieval
284   //@{
285   /** Gets the left aileron position.
286       @return aileron position in radians */
287   double GetDaLPos( int form = ofRad )
288                          const { return DaLPos[form]; }
289
290   /** Gets the right aileron position.
291       @return aileron position in radians */
292   double GetDaRPos( int form = ofRad )
293                          const { return DaRPos[form]; }
294
295   /** Gets the elevator position.
296       @return elevator position in radians */
297   double GetDePos( int form = ofRad )
298                          const { return DePos[form]; }
299
300   /** Gets the rudder position.
301       @return rudder position in radians */
302   double GetDrPos( int form = ofRad )
303                          const { return DrPos[form]; }
304
305   /** Gets the speedbrake position.
306       @return speedbrake position in radians */
307   double GetDsbPos( int form = ofRad )
308                          const { return DsbPos[form]; }
309
310   /** Gets the spoiler position.
311       @return spoiler position in radians */
312   double GetDspPos( int form = ofRad )
313                          const { return DspPos[form]; }
314
315   /** Gets the flaps position.
316       @return flaps position in radians */
317   double GetDfPos( int form = ofRad )
318                          const { return DfPos[form]; }
319
320   /** Gets the throttle position.
321       @param engine engine ID number
322       @return throttle position for the given engine in range from 0 - 1.0 */
323   double GetThrottlePos(int engine) const;
324
325   const vector<double>& GetThrottlePos() const {return ThrottlePos;}
326
327   /** Gets the mixture position.
328       @param engine engine ID number
329       @return mixture position for the given engine in range from 0 - 1.0 */
330   double GetMixturePos(int engine) const { return MixturePos[engine]; }
331
332   const vector<double>& GetMixturePos() const {return MixturePos;}
333
334   /** Gets the steering position.
335       @return steering position in degrees */
336   double GetSteerPosDeg(int gear) const { return SteerPosDeg[gear]; }
337
338   const vector<double>& GetSteerPosDeg() const {return SteerPosDeg;}
339
340   /** Gets the gear position (0 up, 1 down), defaults to down
341       @return gear position (0 up, 1 down) */
342   double GetGearPos(void) const { return GearPos; }
343
344   /** Gets the tailhook position (0 up, 1 down)
345       @return tailhook position (0 up, 1 down) */
346   double GetTailhookPos(void) const { return TailhookPos; }
347
348   /** Gets the wing fold position (0 unfolded, 1 folded)
349       @return wing fold position (0 unfolded, 1 folded) */
350   double GetWingFoldPos(void) const { return WingFoldPos; }
351
352   /** Gets the prop pitch position.
353       @param engine engine ID number
354       @return prop pitch position for the given engine in range from 0 - 1.0 */
355   double GetPropAdvance(int engine) const { return PropAdvance[engine]; }
356
357   const vector<double>& GetPropAdvance() const { return PropAdvance; }
358
359   /** Gets the prop feather position.
360       @param engine engine ID number
361       @return prop fether for the given engine (on / off)*/
362   bool GetPropFeather(int engine) const { return PropFeather[engine]; }
363
364   const vector<bool>& GetPropFeather() const { return PropFeather; }
365   //@}
366
367   /** Retrieves all component names for inclusion in output stream
368       @param delimiter either a tab or comma string depending on output type
369       @return a string containing the descriptive names for all components */
370   std::string GetComponentStrings(const std::string& delimiter) const;
371
372   /** Retrieves all component outputs for inclusion in output stream
373       @param delimiter either a tab or comma string depending on output type
374       @return a string containing the numeric values for the current set of
375       component outputs */
376   std::string GetComponentValues(const std::string& delimiter) const;
377
378   /// @name Pilot input command setting
379   //@{
380   /** Sets the aileron command
381       @param cmd aileron command */
382   void SetDaCmd( double cmd ) { DaCmd = cmd; }
383
384   /** Sets the elevator command
385       @param cmd elevator command in percent*/
386   void SetDeCmd(double cmd ) { DeCmd = cmd; }
387
388   /** Sets the rudder command
389       @param cmd rudder command in percent*/
390   void SetDrCmd(double cmd) { DrCmd = cmd; }
391
392   /** Sets the steering command
393       @param cmd steering command in percent*/
394   void SetDsCmd(double cmd) { DsCmd = cmd; }
395
396   /** Sets the flaps command
397       @param cmd flaps command in percent*/
398   void SetDfCmd(double cmd) { DfCmd = cmd; }
399
400   /** Sets the speedbrake command
401       @param cmd speedbrake command in percent*/
402   void SetDsbCmd(double cmd) { DsbCmd = cmd; }
403
404   /** Sets the spoilers command
405       @param cmd spoilers command in percent*/
406   void SetDspCmd(double cmd) { DspCmd = cmd; }
407
408   /** Sets the pitch trim command
409       @param cmd pitch trim command in percent*/
410   void SetPitchTrimCmd(double cmd) { PTrimCmd = cmd; }
411
412   /** Sets the rudder trim command
413       @param cmd rudder trim command in percent*/
414   void SetYawTrimCmd(double cmd) { YTrimCmd = cmd; }
415
416   /** Sets the aileron trim command
417       @param cmd aileron trim command in percent*/
418   void SetRollTrimCmd(double cmd) { RTrimCmd = cmd; }
419
420   /** Sets the throttle command for the specified engine
421       @param engine engine ID number
422       @param cmd normalized throttle command (0.0 - 1.0)*/
423   void SetThrottleCmd(int engine, double cmd);
424
425   /** Sets the mixture command for the specified engine
426       @param engine engine ID number
427       @param cmd normalized mixture command (0.0 - 1.0)*/
428   void SetMixtureCmd(int engine, double cmd);
429
430   /** Set the gear extend/retract command, defaults to down
431       @param gear command 0 for up, 1 for down */
432    void SetGearCmd(double gearcmd) { GearCmd = gearcmd; }
433
434   /** Sets the propeller pitch command for the specified engine
435       @param engine engine ID number
436       @param cmd mixture command in percent (0.0 - 1.0)*/
437   void SetPropAdvanceCmd(int engine, double cmd);
438
439    /** Sets the propeller feather command for the specified engine
440       @param engine engine ID number
441       @param cmd feather (bool)*/
442   void SetFeatherCmd(int engine, bool cmd);
443   //@}
444
445   /// @name Aerosurface position setting
446   //@{
447   /** Sets the left aileron position
448       @param cmd left aileron position in radians*/
449   void SetDaLPos( int form , double pos );
450
451   /** Sets the right aileron position
452       @param cmd right aileron position in radians*/
453   void SetDaRPos( int form , double pos );
454
455   /** Sets the elevator position
456       @param cmd elevator position in radians*/
457   void SetDePos( int form , double pos );
458
459   /** Sets the rudder position
460       @param cmd rudder position in radians*/
461   void SetDrPos( int form , double pos );
462
463    /** Sets the flaps position
464       @param cmd flaps position in radians*/
465   void SetDfPos( int form , double pos );
466
467   /** Sets the speedbrake position
468       @param cmd speedbrake position in radians*/
469   void SetDsbPos( int form , double pos );
470
471   /** Sets the spoiler position
472       @param cmd spoiler position in radians*/
473   void SetDspPos( int form , double pos );
474
475   /** Sets the actual throttle setting for the specified engine
476       @param engine engine ID number
477       @param cmd normalized throttle setting (0.0 - 1.0)*/
478   void SetThrottlePos(int engine, double cmd);
479
480   /** Sets the actual mixture setting for the specified engine
481       @param engine engine ID number
482       @param cmd normalized mixture setting (0.0 - 1.0)*/
483   void SetMixturePos(int engine, double cmd);
484
485   /** Sets the steering position
486       @param cmd steering position in degrees*/
487   void SetSteerPosDeg(int gear, double pos) { SteerPosDeg[gear] = pos; }
488
489   /** Set the gear extend/retract position, defaults to down
490       @param gear position 0 up, 1 down       */
491    void SetGearPos(double gearpos) { GearPos = gearpos; }
492
493   /** Set the tailhook position
494       @param tailhook position 0 up, 1 down       */
495    void SetTailhookPos(double hookpos) { TailhookPos = hookpos; }
496
497   /** Set the wing fold position
498       @param wing fold position 0 unfolded, 1 folded  */
499    void SetWingFoldPos(double foldpos) { WingFoldPos = foldpos; }
500
501   /** Sets the actual prop pitch setting for the specified engine
502       @param engine engine ID number
503       @param cmd prop pitch setting in percent (0.0 - 1.0)*/
504   void SetPropAdvance(int engine, double cmd);
505
506   /** Sets the actual prop feather setting for the specified engine
507       @param engine engine ID number
508       @param cmd prop fether setting (bool)*/
509   void SetPropFeather(int engine, bool cmd);
510   //@}
511
512     /// @name Landing Gear brakes
513   //@{
514   /** Sets the left brake group
515       @param cmd brake setting in percent (0.0 - 1.0) */
516   void SetLBrake(double cmd) {BrakePos[FGLGear::bgLeft] = cmd;}
517
518   /** Sets the right brake group
519       @param cmd brake setting in percent (0.0 - 1.0) */
520   void SetRBrake(double cmd) {BrakePos[FGLGear::bgRight] = cmd;}
521
522   /** Sets the center brake group
523       @param cmd brake setting in percent (0.0 - 1.0) */
524   void SetCBrake(double cmd) {BrakePos[FGLGear::bgCenter] = cmd;}
525
526   /** Gets the brake for a specified group.
527       @param bg which brakegroup to retrieve the command for
528       @return the brake setting for the supplied brake group argument */
529   double GetBrake(FGLGear::BrakeGroup bg);
530
531   const vector<double>& GetBrakePos() const {return BrakePos;}
532
533   /** Gets the left brake.
534       @return the left brake setting. */
535   double GetLBrake(void) const {return BrakePos[FGLGear::bgLeft];}
536
537   /** Gets the right brake.
538       @return the right brake setting. */
539   double GetRBrake(void) const {return BrakePos[FGLGear::bgRight];}
540
541   /** Gets the center brake.
542       @return the center brake setting. */
543   double GetCBrake(void) const {return BrakePos[FGLGear::bgCenter];}
544   //@}
545
546   enum SystemType { stFCS, stSystem, stAutoPilot }; 
547
548   /** Loads the Flight Control System.
549       Load() is called from FGFDMExec.
550       @param el pointer to the Element instance
551       @param systype type of system (FCS, Autopilot, System) 
552       @return true if succesful */
553   bool Load(Element* el, SystemType systype);
554
555   std::ifstream* FindSystemFile(const std::string& system_filename);
556   std::string FindSystemFullPathname(const std::string& system_filename);
557
558   void AddThrottle(void);
559   void AddGear(unsigned int NumGear);
560   double GetDt(void);
561
562   FGPropertyManager* GetPropertyManager(void) { return PropertyManager; }
563
564   bool GetTrimStatus(void) const { return FDMExec->GetTrimStatus(); }
565
566   struct Inputs {
567     unsigned int NumGear;
568   } in;
569
570 private:
571   double DaCmd, DeCmd, DrCmd, DsCmd, DfCmd, DsbCmd, DspCmd;
572   double DePos[NForms], DaLPos[NForms], DaRPos[NForms], DrPos[NForms];
573   double DfPos[NForms], DsbPos[NForms], DspPos[NForms];
574   double PTrimCmd, YTrimCmd, RTrimCmd;
575   std::vector <double> ThrottleCmd;
576   std::vector <double> ThrottlePos;
577   std::vector <double> MixtureCmd;
578   std::vector <double> MixturePos;
579   std::vector <double> PropAdvanceCmd;
580   std::vector <double> PropAdvance;
581   std::vector <bool> PropFeatherCmd;
582   std::vector <bool> PropFeather;
583   std::vector <double> SteerPosDeg;
584   double LeftBrake, RightBrake, CenterBrake; // Brake settings
585   vector <double> BrakePos; // left, center, right - defined by FGLGear:: enum
586   double GearCmd,GearPos;
587   double TailhookPos, WingFoldPos;
588
589   typedef std::vector <FGFCSComponent*> FCSCompVec;
590   FCSCompVec Systems;
591   FCSCompVec FCSComponents;
592   FCSCompVec APComponents;
593   void bind(void);
594   void bindModel(void);
595   void bindThrottle(unsigned int);
596   void Debug(int from);
597 };
598 }
599
600 #endif
601