Written 20 July 2004. For a standard second-order oscillation process (1) g(s) = k e-theta*s / (tau0^2 s^2 + 2*tau0*zeta*s + 1) direct synthesis (IMC) for setpoints gives the controller (2) c(s) = (1/k)*(1/(tauc+theta)*s) (tauO^2 s^2 + 2*tau0*zeta*s + 1) Let us consider the limiting case of a double-integrating process (3) g(s) = k'' e-theta*s /s^2 Note that we have k'' = k / tau0^2 The double-integrating process (3) is on the form (1) with tau0=infinity, tau0*zeta=0, and k'' = k / tau0^2 (k="infinity^2") For (3) the controller (2) becomes c(s) = (1/k'')*(1/(tauc+theta)) s which is a pure D-controller with Kc*taud = (1/k'')*(tauc+theta). This controller will NOT work well for an input (load) disturbance. In fact, for the double-integrating process I recommend the tunings in (26) and (27) where you see that integral action has been added (Note that these are for the cascade-form controller). Note that the "D-term" for the controller in (26)/(27) is the same as just found, that is, Kc*taud = (1/k'')/(tauc+theta) -------------------------------------------------------------------------------------------------------------------- More generally: Can we find a simple "correction" for integrating processes that includes also oscillating processes? -------------------------------------------------------------------------------------------------------------------- Will in the following work with the PID-controller in the form: (*) c(s) = Kc' + KI'/s + KD'/s = Kc' * (1 + 1/tauI'*s + tauD'*s) ------------------------------------------------------ IMC setpoint settings for general second-order process ------------------------------------------------------ (1) g(s) = k e-theta*s / (tau0^2 s^2 + 2*tau0*zeta*s + 1) Controller (2) for process (1) corresponds to the following "ideal" settings: Kc' = (1/k) * 2*tau0*zeta / (tauc+theta) tauI' = 2*tau0*zeta tauD' = 0.5*tau0/zeta For the controller form in (*) Kc' = (1/k) * 2*tau0*zeta / (tauc+theta) KI' = Kc'/tauI' = (1/k) / (tauc+theta) KD' = Kc'*tauD' = (1/k)*tau0^2 / (tauc+theta) or in terms of k'' (A) Kc' = (1/k'') * (1/(tauc+theta)) * (1/tau0)* 2*zeta KI' = (1/k'') * (1/(tauc+theta)) * (1/tau0^2) KD' = (1/k'') * (1/(tauc+theta)) Note: double-integrating process where tau0=infinity and zeta=0: Gives Kc' = 0^2 and KI'=o^2 (both go to zero in second power). -------------------------------------------------------------- SIMC-corrections for integrating overdamped process (zeta >1) -------------------------------------------------------------- Consider process (1x) g(s) = k e-theta*s / (tau1*s+1) (tau2*s+1) Comparing terms with (1) we see that tau1*tau2 = tau0^2 tau1 + tau2 = 2*tau0*zeta Translation formulas to get tau0 and zeta: tau0 = sqrt(tau1*tau2) zeta = (tau1+tau2)/ 2*sqrt(tau1*tau2) (mean avg. divieded by geom.avg.) Translation formulas to get tau1 and tau2: tau1 = tau0*(zeta+sqrt(zeta^2-1)) tau2 = tau0/(zeta+sqrt(zeta^2-1)) Corrected SIMC-settings from paper for integrating process (cascade form): Kc = (1/k)*tau1/(tauc+theta) tauI = 4*(tauc+theta) tauD = tau2 Translated to ideal form using (36) (note that c = 1+tauD/tauI = 1 + tau2/(4*(tauc+theta)): Kc' =Kc*c tauI' = tauI*c tauD' = tauD/c For the controller form in (*) Kc' = Kc*c KI' = Kc'/tauI' = Kc/tauI KD' = Kc'*tauD = Kc*tauD so we get Kc' = (1/k)*tau1/(tauc+theta) * [1 + tau2/(4*(tauc+theta))] KI' = (1/4k)*tau1/(tauc+theta)^2 KD' = (1/k)*tau1*tau2/(tauc+theta) or Kc' = (1/4k)*(1/(tauc+theta)^2) * tau1* [tau2 + 4*(tauc+theta)] Introducing tau0 and zeta: Kc' = (1/4k)*(1/(tauc+theta)^2) * tau0* [tau0 + 4*(tauc+theta)*(zeta+sqrt(zeta^2-1))] KI' = (1/4k)*(1/(tauc+theta)^2 * tau0* (zeta+sqrt(zeta^2-1)) KD' = (1/k)*tau0^2/(tauc+theta) or in terms of k'' (B) Kc' = (1/4k'') * (1/(tauc+theta)^2) [1 + 4*(tauc+theta)*(zeta+sqrt(zeta^2-1))/tau0] KI' = (1/4k'') * (1/(tauc+theta)^2) * (1/tau0)*(zeta+sqrt(zeta^2-1)) KD' = (1/k'') * (1/(tauc+theta)) Comparing (B) with (A) we note that KD' is unchanged. --------------------------------------------- Correction for oscillating process (?) --------------------------------------------- Can we extend (B) to zeta < 1 ? Not directly because this would give complex Kc' and KI'. To get some idea let us consider the double-integrating process which corresponds to tau0=infinity and zeta=0. For this process I have in (26)/(27)derived some corrections already which seems reasonable. The tunings in (26)/(27) have tauD/tauI=1. Thus c=1+tauD/tauI = 2, and (26)/(27) correspond to the following SIMC ideal-form tunings for double-integrating process: Kc' = Kc*2 = (1/2k'')*(1/(tauc+theta)^2) tauI' = tauI*2 = 8 (tauc+theta) tauD' = tauD/2 = 2( tauc+theta) or (C) Kc' = (1/2k'')*(1/(tauc+theta)^2) = (1/2k)*tau0^2/(tauc+theta)^2) KI' = Kc'/tauI' = (1/16 k'') / (tauc+theta)^3 = (1/16 k)* tau0^2/(tauc+theta)^3 KD' = Kc''*tauD' = (1/k'') / (tauc+theta) Want to find a correction that fits both (B) and (C), and which resembles (A) as much as possible. Let us recall the expressions: A = IMC setpoint settings (A) B= SIMC-correction for integrating process with zeta>1 (B) C= SIMC-correction for double-integrating process with zeta=0 (C) Proportional gain: A: Kc' = (1/k'') * (1/(tauc+theta)) * 2*zeta/tau0 = (1/k) * (1/(tauc+theta)) * 2*zeta*tau0 = (1/k) * (1/(tauc+theta)) * (tau1+tau2) Corrections: B: Kc' = (1/4k'') * (1/(tauc+theta)^2) * [1 + 4*(tauc+theta)*(zeta+sqrt(zeta^2-1))/tau0] = (1/4k'') * (1/(tauc+theta)^2) * [1 + 4*(tauc+theta)/tau2] = (1/4k) * (1/(tauc+theta)^2) * tau0 * [tau0 + 4*(tauc+theta)*(zeta+sqrt(zeta^2-1))] = (1/4k) * (1/(tauc+theta)^2) * tau0^2 * [1 + 4*(tauc+theta)/tau2] = (1/4k) * (1/(tauc+theta)^2) * tau1 * [tau2 + 4*(tauc+theta)] C: Kc' = (1/2k'') * (1/(tauc+theta)^2) = (1/2k) * (1/(tauc+theta)^2) * tau0^2 Integral gain A: KI' = (1/k'') * (1/(tauc+theta)) * (1/tau0^2) = (1/k) * (1/(tauc+theta)) Corrections: B: KI' = (1/4k'') * (1/(tauc+theta)^2) * (1/tau0) * (zeta+sqrt(zeta^2-1)) = (1/4k'') * (1/(tauc+theta)^2) * (1/tau2) = (1/4k) * (1/(tauc+theta)^2) * tau1 C: KI' = (1/16 k'') * (1/(tauc+theta)^3) = (1/16 k) * (1/(tauc+theta)^3) * tau0^2 Derivative gain A: KD' = (1/k'') * (1/(tauc+theta)) Corrections: B: KD' = (1/k'') * (1/(tauc+theta)) C: KD' = (1/k'') * (1/(tauc+theta)) Note: k'' = k/tau0^2 = k/(tau1*tau2) From this we have: (1) KD' is easy because it is unchanged. (2) Kc': Try absolute value |zeta^2-1| for B. Gives factor 2 lower Kc' for C, but this should be OK. But seems B is close to C so maybe it is even better just to take the max. or even better: Simplify and always use expression C for Kc' (which is at most a factor 2 largen than B) For example, for k=1, zeta=1, tau0 = 8*theta, tauc=theta A: Kc' = (1/k) * (1/(tauc+theta)) * 2*zeta*tau0 = 1 * (1/2) * 2*1*8 = 8 B: Kc' = (1/4k) * (1/(tauc+theta)^2) * tau0 * [tau0 + 4*(tauc+theta)*(zeta+sqrt(zeta^2-1))] = 1/4* 1/4 * 8 * (8 + 8) = 8 C: Kc' = (1/2k) * (1/(tauc+theta)^2) * tau0^2 = (1/2) * (1/4) * 8 * 8 = 8 For example, for k=1, zeta=1, tau0 = 20*theta, tauc=theta A: Kc' = (1/k) * (1/(tauc+theta)) * 2*zeta*tau0 = 1 * (1/2) * 2*1*20 = 20 B: Kc' = (1/4k) * (1/(tauc+theta)^2) * tau0 * [tau0 + 4*(tauc+theta)*(zeta+sqrt(zeta^2-1))] = 1/4* 1/4 * 20 * (20 + 8) = 35 C: Kc' = (1/2k) * (1/(tauc+theta)^2) * tau0^2 = (1/2) * (1/4) * 20 * 20 = 50 C>B in some cases, but at most a factor 2. (3) KI': Cannot use B directly because of division by tau0. Better to take max (B generally largest except when tau0 is small). For example, for k=1, zeta=1, tau0 = 8*theta, tauc=theta A: KI' = (1/k) * (1/(tauc+theta)) = 1 * (1/2) = 0.5 B: KI' = (1/4k) * (1/(tauc+theta)^2) * tau1 = (1/4) * (1/4) * 8 = 0.5 C: KI' = (1/16 k) * (1/(tauc+theta)^3) * tau0^2 = (1/16) * (1/8) * 8^2 = 0.5 For example, for k=1, zeta=1, tau0 = 20*theta, tauc=theta A: KI' = (1/k) * (1/(tauc+theta)) = 1 * (1/2) = 0.5 B: KI' = (1/4k) * (1/(tauc+theta)^2) * tau1 = (1/4) * (1/4) * 20 = 1.25 C: KI' = (1/16 k) * (1/(tauc+theta)^3) * tau0^2 = (1/16) * (1/8) * 20^2 = 3.125 Did not quite work out because C>B in some cases, and difference arbitrary large for tau0 large.. Since I really would like to retain SIMC-rules for zeta>1, it seems easier to just interpolate. -------------- CONCLUSION -------------- Thus, I propose (CONCLUSION): 1. Kc' = max (A, X) where X = B for zeta>1 and X = zeta*B' + (1-zeta)*C for zeta<1 2. KI' = max (A, X) where X = B for zeta>1 and X = zeta*B' + (1-zeta)*C for zeta<1 3. KD' as given above 4. B' is obtained from B by setting sqrt(zeta^2-1)=0 for zeta<1. This gives smooth transition and also makes the limiting cases unchanged. Further work: Need to check this.