]> git.mxchange.org Git - flightgear.git/commitdiff
Add support for normalized control surface positions
authortony <tony>
Thu, 28 Feb 2002 13:30:25 +0000 (13:30 +0000)
committertony <tony>
Thu, 28 Feb 2002 13:30:25 +0000 (13:30 +0000)
src/FDM/JSBSim/filtersjb/FGFCSComponent.h
src/FDM/JSBSim/filtersjb/FGGain.cpp
src/FDM/JSBSim/filtersjb/FGGain.h
src/FDM/JSBSim/filtersjb/FGKinemat.cpp
src/FDM/JSBSim/filtersjb/FGKinemat.h

index c8df597b44d1e8137eeb2c5305fae28cd1774d9b..6c8c51984e74b327b53c1a9913bf59c4cf06d126 100644 (file)
@@ -100,7 +100,10 @@ public:
   virtual bool Run(void);
   virtual void SetOutput(void);
   inline double GetOutput (void) {return Output;}
+  inline int GetOutputIdx(void) { return OutputIdx; }
   inline string GetName(void) {return Name;}
+  inline string GetType(void) { return Type; }
+  virtual double GetOutputPct(void) { return 0; }
 
 protected:
    /// Pilot/Aircraft, FCS, Autopilot inputs
index b2548f8d7a7b3e73c2ce94aff6827407fc9b35ff..23b3d6541a593868b144eb49f28a77382b040f07 100644 (file)
@@ -58,6 +58,8 @@ FGGain::FGGain(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
   Gain = 1.000;
   Rows = 0;
   Min = Max = 0.0;
+  OutputPct=0;
+  invert=false;
   ScheduledBy = FG_UNDEF;
 
   Type = AC_cfg->GetValue("TYPE");
@@ -84,6 +86,8 @@ FGGain::FGGain(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
       *AC_cfg >> Min;
     } else if (token == "MAX") {
       *AC_cfg >> Max;
+    } else if (token == "INVERT") {
+      invert=true;  
     } else if (token == "ROWS") {
       *AC_cfg >> Rows;
       Table = new FGTable(Rows);
@@ -130,8 +134,15 @@ bool FGGain::Run(void )
          SchedGain = Table->GetValue(LookupVal);
     Output = Gain * SchedGain * Input;
   } else if (Type == "AEROSURFACE_SCALE") {
-    if (Output >= 0.0) Output = Input * Max;
-    else Output = Input * (-Min);
+    if(!invert) {
+      OutputPct = Input;
+      if (Input >= 0.0) Output = Input * Max;
+      else Output = Input * -Min;
+    } else {
+      OutputPct=-1*Input;
+      if (Input <= 0.0) Output = Input * -Max;
+      else Output = Input * Min;
+    } 
     Output *= Gain;
   }
 
@@ -179,6 +190,7 @@ void FGGain::Debug(int from)
       if (IsOutput) cout << "      OUTPUT: " << sOutputIdx << endl;
       cout << "      MIN: " << Min << endl;
       cout << "      MAX: " << Max << endl;
+      if(invert) cout << "      Invert mapping" << endl;
       if (ScheduledBy != FG_UNDEF) {
         cout << "      Scheduled by parameter: " << ScheduledBy << endl;
         Table->Print();
index 7fced50e1058dafdfcf2a86d1de00bfb4ec71e1e..23c233b47d2204a13d9573d35533f360593aac7d 100644 (file)
@@ -70,7 +70,9 @@ class FGGain  : public FGFCSComponent
 public:
   FGGain(FGFCS* fcs, FGConfigFile* AC_cfg);
   ~FGGain();
-
+  
+  double GetOutputPct() { return OutputPct; }
+  
   bool Run (void);
 
 private:
@@ -79,6 +81,8 @@ private:
   FGState* State;
   double Gain;
   double Min, Max;
+  double OutputPct;
+  bool invert;
   int Rows;
   eParam ScheduledBy;
 
index 15375be44773fd9bbbdbb7f560e9173e3c1f1c49..4e94e865266417af84c61b4c21babef13b4d0195 100644 (file)
@@ -55,6 +55,8 @@ FGKinemat::FGKinemat(FGFCS* fcs, FGConfigFile* AC_cfg) : FGFCSComponent(fcs),
 
   Detents.clear();
   TransitionTimes.clear();
+  
+  OutputPct=0;
 
   Type = AC_cfg->GetValue("TYPE");
   Name = AC_cfg->GetValue("NAME");
@@ -157,7 +159,11 @@ bool FGKinemat::Run(void ) {
     lastInputCmd = InputCmd;
     Output = OutputPos;
   }
-
+  
+  if( Detents[NumDetents-1] > 0 ) {
+    OutputPct = Output / Detents[NumDetents-1];
+  }
+  
   if (IsOutput) SetOutput();
 
   return true;
index cea2b549e34cf1d98b921d1a54d58046e377374e..c4891b96faa8d75fadbd24198b781cfcf6aaa89b 100644 (file)
@@ -70,6 +70,9 @@ class FGKinemat  : public FGFCSComponent {
 public:
   FGKinemat(FGFCS* fcs, FGConfigFile* AC_cfg);
   ~FGKinemat();
+  
+  double GetOutputPct() { return OutputPct; }
+    
   bool Run (void );
   
 private:
@@ -80,6 +83,7 @@ private:
   double lastInputCmd;
   double InputCmd;
   double OutputPos;
+  double OutputPct;
   bool  InTransit;
 
   void Debug(int from);