]> git.mxchange.org Git - flightgear.git/commitdiff
Roy Vegard Ovesen:
authorehofman <ehofman>
Sun, 25 Sep 2005 07:49:18 +0000 (07:49 +0000)
committerehofman <ehofman>
Sun, 25 Sep 2005 07:49:18 +0000 (07:49 +0000)
I've prepared a patch as suggested by Hans-Georg Wunder and Jeff McBride.

In addition I've removed the ability to completely leave out the integral
action by setting Ti to zero. The velocity form of the PID algorithm _needs_
the integral action.

src/Autopilot/xmlauto.cxx

index bee93b588f9d53c6655ca96f62fa7816d85ab7a2..9c917720d743c65a7ad0d8fdd0ffb0d01ccd368d 100644 (file)
@@ -306,9 +306,6 @@ void FGPIDController::update( double dt ) {
             delta_u_n = Kp * ( (ep_n - ep_n_1)
                                + ((Ts/Ti) * e_n)
                                + ((Td/Ts) * (edf_n - 2*edf_n_1 + edf_n_2)) );
-        } else if ( Ti <= 0.0 ) {
-            delta_u_n = Kp * ( (ep_n - ep_n_1)
-                               + ((Td/Ts) * (edf_n - 2*edf_n_1 + edf_n_2)) );
         }
 
         if ( debug ) {
@@ -321,10 +318,10 @@ void FGPIDController::update( double dt ) {
 
         // Integrator anti-windup logic:
         if ( delta_u_n > (u_max - u_n_1) ) {
-            delta_u_n = 0;
+            delta_u_n = u_max - u_n_1;
             if ( debug ) cout << " max saturation " << endl;
         } else if ( delta_u_n < (u_min - u_n_1) ) {
-            delta_u_n = 0;
+            delta_u_n = u_min - u_n_1;
             if ( debug ) cout << " min saturation " << endl;
         }