From 111eff7ae01c6059dca32678c1e5c1567d3d0f7f Mon Sep 17 00:00:00 2001 From: ehofman Date: Sun, 25 Sep 2005 07:49:18 +0000 Subject: [PATCH] Roy Vegard Ovesen: 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 | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Autopilot/xmlauto.cxx b/src/Autopilot/xmlauto.cxx index bee93b588..9c917720d 100644 --- a/src/Autopilot/xmlauto.cxx +++ b/src/Autopilot/xmlauto.cxx @@ -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; } -- 2.39.5