Index of /publications/2003/tuningPID

[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory  -  
[TXT]README.html2024-11-28 14:28 55K 
[TXT]README.html.folkmigration2015-11-12 17:18 49K 
[   ]correction.pdf2010-07-15 10:59 205K 
[   ]finalpaper.pdf2022-11-29 18:02 331K 
[DIR]mathworks/2010-07-15 10:59 -  
[DIR]mfiles/2010-07-15 10:59 -  
[DIR]mic-version/2010-07-15 10:59 -  
[DIR]more/2022-01-04 15:00 -  
[DIR]presentation/2010-07-15 10:59 -  
[DIR]smooth_tunings/2010-07-15 10:59 -  


Sigurd Skogestad, ''Simple analytic rules for model reduction and PID controller tuning'' ,
Published in: J. Process Control, vol. 13 (2003), 291-309.

Abstract. The aim of this paper is to present analytic tuning rules which are as simple as possible and still result in a good closed-loop behavior. The starting point has been the IMC PID tuning rules of Rivera, Morari and Skogestad (1986) which have achieved widespread industrial acceptance. The integral term has been modified to improve disturbance rejection for integrating processes. Furthermore, rather than deriving separate rules for each transfer function model, there is just a single rule for a first-order or second-order time delay model. Simple analytic rules for model reduction are presented to obtain a model in this form, including the "half rule" for obtaining the effective time delay.


The "MIC-version" of the paper (2004) is identical to the JPC-version (2003), except that misprints have been corrected and some comments have been added.
A somewhat updated version of the paper is the following:
Sigurd Skogestad and Chriss Grimholt. ''The SIMC Method for Smooth PID Controller Tuning'' (2012)
Chapter 5 in: R. Vilanova, A. Visioli (eds.), PID Control in the Third Millennium, Advances in Industrial Control, DOI 10.1007/978-1-4471-2425-2_5, © Springer-Verlag London Limited 2012
Compared to the original JPC paper (2003), a method for closed-loop identification of the process (k, tau and theta) is presented ("Sham's method"). The choice of the tuning parameter tauc is discussed in more detail, and lower and upper limits are presented for tight and smooth tuning, respectively. Finally, the optimality of the SIMC PI rules is studied by comparing the performance (IAE) versus robustness (Ms) trade-off with the Pareto-optimal curve. The difference is small which leads to the conclusion that the SIMC rules are close to optimal for PI-control.
Below you find a list of misprints, additional information, extensions and comments to the rules given in the original JPC-paper from 2003. (for misprints see also Erratum in JPC, vol.14 (2004), 465.)

------------
MISPRINTS 
-------------

Please see the "yellow stickers" in the file finalpaper.pdf for misprints.

These misprints include: 

p. 293, eq. (6): sign error in the denominator of the dead time expression, i.e. should be 1/e^{theta*s}. 
p. 293, equation following eq. (8): e^-theta*s (before approx-symbol) should be replaced by e^-theta0*s
p. 293, eq. (9): Add Laplace variable s before + in the numerator.
p. 294, eq.(12): Rule T3, denominator. Should be: (tilde{tau0} - T0)s+1 (i.e., T0 instead of tau0). 
   (Comment added 21Nov2004: more generally, replace theta by tauc where tauc is the desired closed-loop response time)
p. 294, eq.(15): Lower fraction line extends too far. Should read [1/(y/ys)desired]-1
p. 299, Table 4: Case E5 (PI). 0.0008 should be 0.008
p. 299, Table 4: Case E6 (PI). theta=1.19 (and not 1.69) (this changes also the settings and the values for Ms and performance)
p. 299, Table 4: Case E8 (PID).  Should be Kc=1 (and not 1.5). This makes the design more robust (reduces Ms etc.)
p. 302, Table 6: heading of column 2.  Should be: Kc*k                  (and NOT: Kc*k')
p. 302, Table 6: heading of column 3.  Should be: KI*k*theta            (and NOT: KI*tauI/theta)
p. 208, Eq (42): Should be (0.17s+1)^2
p. 208, theta= 1/2 + 0.66 + 0.028 = 1.19 (and NOT 1.69)

COMMENT: The journal is to blame for the rather large number of typo's in this paper. The typesetting (or
translation of the latex file) was very poor, and afterwards they did not even fix many of the errors that
were pointed out by the author. The Erratum in Vol.14 (2004) is intended to take care of the more serious and "non-obvious" errors.

-----------------
CORRECTIONS
-----------------

Numerator time constant rules in eq. (12): Replace theta by tauc in all places 
(so there is no change for the "tight" rule with tauc=theta, but the result may change in other cases).

Comment: This makes the model reduction a bit more genereral, and also removes some of the iterative 
nature of the rule (as theta is unknown at this point in time, whereas tauc is an engineering choice).
However, the fact that you have to choose tauc in order to do the approximation is somewhat of an disadvantage
because it couples the model reduction with the tuning. 
Thus, some iteration may be required in practice if you follow the "tight rule" tauc=theta. 
Actually, this is not too surprising, because for good performance you want to have a good approximation 
close to the closed-loop time constant tauc.

-----------------------
ADDITIONAL INFORMATION
-----------------------

Directory mathworks contains:
   Matlab files for  SIMC model reduction (simc_reduce.m) and PID tuning (simc_pidtune.m) (by Bora Erylmaz, Mathworks)

Directory more contains:

  1. The "old-final" version of the paper as it was submitted to the journal 
     (contains fewer typos... check this first if you suspect a possible typo).
 
  2. A version of the paper presented at the 2001 AIChE Annual Meeting (Reno, Nevada, USA, 
     Nov. 2001) with the title "Probably the best simple PID tuning rules in the world".
     (this is a humorous spin-off from the Carlsberg brewery commercial from about 1997
	with the slogan "Probably the best beer in the world".

  3. Link to the project by S. Hellem (2001) which concludes, based on trying to
	 recreate the original Ziegler/Nichols simulations, that the ZN-tunings are for the ideal PID.

  4. + some additional stuff, including an early version of the rules from 1998 (in Norwegian) and
	student projects with evaluations of the rules (Holm-Butler 1998; Hareldseid-Johansen 1999). 

Directory mfiles contains:
    Matlab files used to generate results, including IAE-optimal PID settings.

Directory presentation contains:
    Powerpoint presentation from AIChE Annual meeting (Nov. 2001)


--------------------------------------
ADDITIONAL COMMENTS FROM THE AUTHOR
--------------------------------------

The first 8 comments are from August 2003/ March 2004/ May 2004 
(they are included as comments in the version reprinted in the Norwegian bulletin
"Modeling, Identification and Control" in 2004):

----------------------------------
0. Total variation
----------------------------------

The total variation (TV) of the input (u) is used as measure of input quality.
We want TV(u) small. Note that the Total variation of a signal u is TV(u) = \int |du/dt| dt.  
Thus, TV is large for a signal u with large values of |uy/dt|.
Thus, if we want "smooth control" then TV should be small.

...................................
1. Model reduction. 
...................................

The main contribution in terms of model reduction is the simple HALF RULE for the effective delay. 
It started in 1997 as a simple empirical rule that I used for teaching in my process control class; 
see the following handout from 1998 (in Norwegian):
http://www.nt.ntnu.no/users/skoge/publications/2003/tuningPID/more/1998
Before 1997, when teaching the students about the "effective delay", 
I had added the inverse time constant and ALL of the smaller (neglected) denominator time constants.  
However, this gives a conservative (too large) estimate of the delay when it is applied to common 
PID-rules, and gives rather sluggish tunings.  
The reason is that a time constant is not  quite "as bad" as a delay.
I experimented a bit and found that adding only half of the largest neglected time constant 
(and adding the rest to the smallest retained time constant) gave better tunings.
The validity of the half rule was later confirmed by testing it on a large number of processes;  
see the paper and three student projects from 1998, 1999 and 2001 (see directory more).
In summary, the main justification of the half rule in the context of PID-tuning is that it when combined
with the SIMC PID-tuning rules consistently results in good tunings with Ms about 1.7 (with tauc=theta). 
The half rule is reasonable but clearly not optimal in terms of open-loop model fitting (e.g. in the
time or frequency domains). On the other hand, open-loop model fitting is not the objective, 
but rather that the resulting PID-tunings should work well.
We have tried other values than a half (in the range from 0 to 1), 
e.g. see some of the student projects, but this did not improve the results.  

Let me give some justification for the half rule in terms of tuning. Recall the tuning rules
     Kc k = tau1 / (tauc+theta);  tauI = min(4(tauc+theta), tau1); Typical choice: tauc=theta
and consider an original second-order model on the form
     g0(S) = k e-theta0 s / (1+tau10 s) (1+tau20 s) 
which we want to approcimate with a first-order model,
     g(S) = k e-theta s / (1+tau1 s)  
The "first part" of the half rule is the effective delay. According to the half rule 
     theta = theta0 + tau20/s
Compared with the conservative alternative of adding all of tau20 to the delay (i.e. theta=theta0+tau20), 
the half rule gives a shorter delay (up to a factor 2), which as expected results in a larger controller gain Kc 
(with the choice tauc=theta the increase in Kc is up to a factor of 2 for a small original delay theta0).
The integral time tauI may also be reduced by up to a factor of 2.
Thus, the "first part" of the half rule makes both the high-frequency (Kc) 
and low-frequency (Kc/tauI) controller gain larger,
and the effect is largest when the original delay theta0 is small compared to tau20.

Let us next consider the "second part" of the half rule, which is the increase in tau1
(from tau10 to tau10+tau20/2). This increases the controller gain Kc by up to a factor 1.5 
(the largest increase is when tau10=tau20). However, exactly for cases where
we get an increase in Kc (which is when tau20 is large), we also get an
increase in the integral time because tauI=tau1.
Thus, the value of Kc/tauI (which is the low-frequency controller gain) is unchanged. 
Thus, the "second part" of the half rule makes the high-frequency controller gain Kc larger,
and the effect is largest when tau20 is close to tau10.

In summary, we see that "both parts" the half rule result in less conservative settings, 
especially for cases where tau20 (the largest neglected time constant) is large.

...................................
2. Tuning rules. 
...................................

The main contribution of the paper in terms of tuning is the modification on the 
integral time for integrating processes. This significantly improves the load rejection (input disturbance) 
capabilities when compared to the IMC tuning rules of Rivera et al. (1986). When deriving this modification 
it was required that the system is just at the limit to oscillations (zeta=1 in eq. 20), which results in 
the factor 4 in the expression tauI = 4 (tauc+theta). 

More generally, the factor (or zeta) could be left as a degree of freedom (thanks to Finn Haugen for pointing this out)
which would result in the following intergral time for an "integrating" process:

	tauI = c (tauc+theta) 

where c = 4*zeta^2. For example, c=2 (corresponding to zeta=0.7. i.e. some low-frequency oscillations allowed) 
gives tauI=2(tauc+theta).  This gives a faster approach to steady state than the original value c=4 (corresponding to zeta=1), 
but on the other hand robustness is not as good. 

Added July 2009: This is shown in the following table which applies to an
integrating process and choosing tauc=theta (extends the right column in Table 2):

	c		4 (orig)	2		1.5
	tauc/theta      1               1               1
        Kc*k'*theta     0.5		0.5		0.5
	tauI/theta	8		4		3
	GM		2.96		2.74		2.57
	PM	 	46.9		34.1		26.9
	Ms		1.70		1.96		2.32
	Mt		1.30		1.74		2.17
	w180*theta	1.49		1.39		1.32
	wc*theta	0.51		0.55		0.58
	dtheta		1.59		1.08		0.81 (allowed relative time delay error to remain stable)

Note in particular that the phase margin and thus the allowed time delay error is significantly reduced 
when c (and the integral time) is reduced.  Thus, one should only reduce c for cases where performance is  
important so that one is willing to sacrifice robustness. 

Added July 2012: 
The following Tables (prepared by Chriss Grimholt) for an integrating process has tauc adjusted so that the Ms-value is the
same for all choices for c (two Ms-values are considered: 1) Ms=1.59 and 2) Ms=1.70). This gives a fairer comparison.
Note: J below refers to the IAE-performance with 50/50 weight on setpoints/input disturbances (as defined in PID papers from 2012),
      that is, J = 0.5 J_ys + 0.5 J_d.
Result: We see that for both Ms=1.59 and Ms=1.70, the best performance (minimum J) is obtained with c=2.6. More generally, 
   c=2.6 gives PI-tunings very close to the Pareto-optimal curve for J vs. Ms (thanks to David di Ruscio for pointing this out).
   The reason for the improved J is better disturbance response (Ms=1.7: Jd decreases from 1.07 with c=4 to 0.82 with c=2.6),  
   whereas the setpoint response is only a little worse (Jys increases from 1.81 to 1.86).   
   However, lowering c (relative to the SIMC value c=4), decreases the delay margin dtheta (from about 1.59 to 1.51), 
   and also requires choosing tauc larger (although not too much; tauc/theta increases from 1.0 to 1.18).

   1. Ms = 1.59
	c           	4.00 	3.00	 2.60	 2.00
	tauc/theta 	1.24 	1.35	 1.43	 1.66
	Kc*k'*theta 	0.45 	0.43	 0.41	 0.38
	tauI/theta 	8.97 	7.06	 6.32	 5.32
	GM          	3.35 	3.45	 3.54	 3.80
	PM         	50.05 	46.82	 45.07	 41.84
	Ms         	1.59 	1.59	 1.59	 1.59
	Mt       	1.26 	1.35	 1.41	 1.52
	w180*theta 	1.50 	1.48	 1.46	 1.44
	wc*theta 	0.46 	0.45	 0.44	 0.41
	dtheta         	1.90 	1.83	 1.80	 1.77
	J         	1.63 	1.53	 1.50	 1.59
	J_ys         	1.93 	1.96	 1.98	 2.15
	J_d        	1.33 	1.10	 1.02	 1.02

   2. Ms = 1.70
	c           	4.00 	3.00	 2.60	 2.00
	tauc/theta 	1.0  	1.11	 1.18	 1.39
	Kc*k'*theta 	0.50 	0.47	 0.46	 0.42
	tauI/theta 	8.0  	6.33	 5.68	 4.78
	GM          	2.96 	3.07	 3.14	 3.37
	PM         	46.9 	43.89	 42.23	 39.20
	Ms         	1.70 	1.70	 1.70	 1.70
	Mt       	1.30 	1.40	 1.46	 1.58
	w180*theta 	1.49 	1.46	 1.45	 1.42
	wc*theta 	0.51 	0.50	 0.49	 0.46
	dtheta         	1.59 	1.54	 1.51	 1.49
	J         	1.44 	1.36	 1.34	 1.43
	J_ys         	1.81 	1.83	 1.86	 2.02
	J_d        	1.07 	0.89	 0.82	 0.83

Note: With the SIMC-rule we always have c=Kc*tauI*k'


...................................
3. Tuning parameter 
...................................

The simple choice tauc=theta for the tuning parameter was also originally chosen for its simplicity,
and it is further justified because the resulting value of Ms in the range 1.6 to 1.7 usually gives a good trade-off
between speed of response and robutness.

Note: For more on the choice of tauc, especially for processes with a small delay, see comment 23
      and for a little on lambda tuning, see comment 24.

...................................
4. Derivative action.
...................................

Derivative action is recommended only for dominant second order processes (with tau2 larger then 
theta, approximately).  In the simulations I selected the filter time constant tauF = 0.01 tauD 
(see page 292), but this is NOT the recommended value. Rather, as mentioned on page 303,
tauF should be adjusted online in order to reduce the input usage and sensitivity to measurement noise. 
A typical value is tauF = 0.1 - 0.2*tauD (see also page 292), but as mentioned on page 304, one may 
increase tauF up to about 0.5*tauD if measurement noise is a serious problem.

Added July 2009: Also note that derivative action on the setpoint is not included in this paper to reduce the input usage.
This makes the setpoint response slower than expected from the selected closed-loop response time tauc. This is clear from 
the simulations in Figure 4 for cases 3 (int+lag) and 4 (double int.).  

...................................
5. Smooth control.
...................................

The tunings in this work are chosen to give "fast but still robust control". However, there are
cases where this gives unneccessary fast control. This is further discussed in the following paper:
"Tuning for smooth control: Lower limit on the controller gain for acceptable disturbance rejection", 
which was presented at the IFAC DYCOPS conference (Hong Kong 2003/2004), and was
finally published in Ind.Eng.Chem.Res. in 2006. 
See: http://www.nt.ntnu.no/users/skoge/publications/2006/skogestad_iecr_smooth-pid/ 

...................................
6. Second-order oscillatory process. 
...................................

As mentioned in Remark 3 on page 304, the ideal PID controller should be used to derive settings for 
an oscillatory process, as shown in the following.
We start with a second-order with delay process in standard form
	g(s) = k e-theta*s / (tau0^2 s^2 + 2*tau0*zeta*s + 1)
where tau0 is the time constant (tau0=1/omega0 where omega0 is the natural frequency of oscillations for the plant)
and zeta is the damping factor for the plant. |zeta|<1 gives and underdamped system with oscillations. 
We here assume a stable process with zeta non-negative.
We use the IDEAL-FORM (PARALLEL) PID controller
	c(s) = Kc' (1 + 1/tauI'*s + tauD'*s) = (Kc'/tauI'*s) (tauI'*tauD'*s^2 + tauI'*s + 1)
Direct synthesis For setpoint tracking based on g(s) yields a controller
	c(s) = (1/k)*(1/(tauc+theta)*s) (tauO^2 s^2 + 2*tau0*zeta*s + 1)
and matching terms yields the following settings for the ideal form (parallel) PID controller:
(x)	Kc' = (1/k) * 2*tau0*zeta / (tauc+theta)
(y)	tauI' = 2*tau0*zeta
(z)	tauD' = 0.5*tau0/zeta
With the choice tauc=theta the controller gain becomes
	Kc' = (1/k) * tau0*zeta/theta
Comments:
A. The stability margins with this choice are given by the first column in Table 2 (GM=3.14, PM=61.4 degrees, Ms=1.59). 

B. For zeta>1 (overdamped process) we get a second-order process, g(s) = k e-theta*s ( (tau1*s+1)(tau2*s+1)) and
the above rules reduce to the ones for "second-order" process given in Table 1 
(However, note that the settings in Table 1 are for the cascade form,
so they need to be translated using (36) to get the "ideal-form" settings in (x)-(z)).	

C. The settings (x)-(z) will give poor load rejection for "integrating" processes with tau0/theta large.
The integral action will then need to be modified (see subdirectory more/extensions for some ideas)

D. (Aug. 2008) More generally, for systems with complex poles, I have not derived any good rules. One reason is that I do not thing it is very important
because it is well known that complex poles are relatively rare in chemical engineering processes, except for cases where
the lower control loops are tuned too agressively (but this should not happen if you use robst settings as recommended in this paper!)   

..................................
7. Unstable process. 
...................................

Rules are yet to be derived for this case. Some preliminary attempts are found in the early Norwegian 1998-version.

...................................
8. Ziegler Nichols tunings.
...................................

The PID tuning rules in the original 1942-paper of Ziegler and Nichols state that the integral time is four times the derivative time. 
I have assumed in this paper that this is for the ideal (parallel form), so that for the cascade form we have that
the integral time is equal to the derivative time; taui=taud (ZN), see section 5.3.
Actually, I originally assumed that the ZN-tunings were for the cascade form controller, and this can be found the original
version of the paper presented at 2001 AIChE Meeting in Reno. This was based on the argument of Shinskey and others, 
that the pneumatic PID-controllers at that time gave a cascade form. However, after studying it in more detail (see diploma
thesis by Hellem from 2001) and discussing it with Dale Seborg and Karl Johan Åstrøm, I became convinced that
the ZN-settings are for the ideal (parallel) form. First, they work best for the ideal form. Second,
I think Nichols did numerical computations on an electronic computer where the ideal form was implemented.
Ziegler and Nichols were possibly not aware of the difference between the two forms or did not think it was important.
We tried to search back into old reports, but unfortunately it seems that we were too late to find out conclusively.

...................................
9. (Oct. 2004): On approximating integrating processes.
...................................

The half rule should be used also for integrating processes, but note here that tau1 is already
infinite so it is does not change. For example, to get a PI-controller for the process 
      g0(s) = k / [s * (tau0*s+1)]
we use the approximation
      g(s) = k e-theta*s / s with theta=tau0/2
This agrees with the entry for process E8(PI) in Table 4. 
However, there is a MISPRINT for E6(PI) in Table 4 where we should have 
      theta=1/2 + 1 + 0.028 - 2*0.17 = 1.19 (and not 1.69).

...................................
10. (Oct. 2004). Total variation (TV)
...................................

Why consider the total variation (TV) of the input (Tables 3,4,5,6,7)?
One justification is that it is the same as using a penalty term for input moves (changes), which is
common when using model predictice control (MPC). That is, with MPC we usually try to minimize the cost 
J = IAE + k*TV where k is a tuning factor.

...................................
11 (Oct. 2004, Aug. 2007) Bandwidth)
...................................

This is an addition to Table 2. Define  
   wB: Frequency where |S|=0.707.
   ws: Frequency where |S|=1.
Then for tauc=theta:
                         tauI=tau                   Integrating process w/ tauI=8 theta
                         L = 0.5 e-thetas/thetas    L = (0.5/8) (8thetas+1)e-thetas / (thetas)^2
ws*theta                 0.511                      0.404
wB*theta                 0.355                      0.297


For other values of tauc/theta (for the case tauI=tau):

tauc/theta		0	1	2	3 	4	5	
ws*theta (|S|=1)	0.74	0.51	0.42	0.36	0.32	0.29
wpeakS*theta		1.39	1.13	1.00	0.90	0.84	0.79
Ms (peak |S|)		3.13	1.59	1.35	1.25	1.19	1.16	

..............................................................
12.  (Dec. 2007)  Correction of rules for approximating zeros
..............................................................

In rules T1 to T3, theta (the time delay) should be replaced by tauc (the closed-loop time constant).

This is clear from the derivation in the Appendix where it is stated that "it is most critical
to have a good approximation at the bandwidth frequency", which is generally at frequency 1/tauc.

Comment: This is not a very serious correction, because the rules given in the paper are OK for 
the case with "tight" tuning (tauc=theta), which is when we really need a good approximation.


...................................
13. (Oct. 2004). Prefilter for setpoints.
...................................

In a standard "one degree-of-freedom" feedback scheme, the input to the controller c(s) is the setpoint error, i.e.
(X)        u = c(s) (ys-y) 
In a "two degrees-of-freedom" scheme, the signals ys and y are treated differently by the controller.
One option is to prefilter the setpoint, 
(Y)        ys' = f(s) y 
where f(s) is the prefilter, and send this to the controller. We then have
(Z)        u = c(s) (ys' - y)  
Note that with a prefilter f(s), we can in theory make the setpoint response look as we want
(subject to the constraint that f(s) should be realizable, e.g. no prediction, and stable).

Let us now look at two alternative prefilter designs.

I. A somewhat indirect method of prefiltering ys is to not send ys through the D-term (see eq.2)
or only send a fraction b through the I-term (see eq.3). In the latter case (Astrom)
(3)        u = Kc (b*ys-y) + Kc/tauIs (ys-y)
Let us assume we have PI-control and let us consider the latter. With 
           c(s) = Kc(1+1/tauIs), 
(Z) can be rewritten
           u = Kc (1+1/tauIs) f(s) ys - c(s) y
Similarly, (3) can be rewritten
           u = Kc (b+1/tauIs) ys - c(s) y
By comparison, we then have (CONCLUSION)
           f(s) = (b*tauI*s + 1) / (tauI*s+1)
Thus, f(s)=1 (no filter) for b=1  and f(s)=1/(tauI*s+1) for b=0. 
It is also possible to let b>1 if we want to "speed up" the setpoint response.
Note that in the paper, we have chosen b=1.

II. Let us now look at a more direct design of f(s).
Recall from Figure 3, that the setpoint response has an undesirable overshoot if we use the SIMC-settings for an
near-to-integrating process. The reason is that we instead of the original IMC-setting tauI=tau use a smaller
value for tauI in order to improve the load disturbance response.
However, note that we have the option at "fixing up" the setpoint response by prefiltering the setpoint.

Let us assume that we want to get the same setpoint response as with the original IMC-settings.
With the original IMC-settings we design the controller to get (appoximately)
(X1)	y/ys = e-theta*s / (tauc*s+1)
where theta is the (unavoidable) time delay, and tauc is the desired closed-loop response time.
For a first-order with delay process
        g(s) = k e-theta*s / (tau*s+1) 
we must then select tauI=tau, see derivation of eq. (19), where we make use of the approximation e-theta*s=1-theta*s.
Let us now assume that we use a different value for tauI. We evaluate gc and making use of the same approximation 
e-theta*s=1-theta*s, we find that closed-loop response without a prefilter is
(Y1)    y/ys'=gc/(1+gc) = (tauI*s + 1) e-theta*s / x(s)
where
	x(s) = tauI*tauc*s^2 + [(tauI/tau)*(theta+tauc) + tauI - theta]*s + 1
and tauc is the closed-loop time constant.With a prefilter f(s) the setpoint response is
	y/ys = f(s) * gc/(1+gc)
Comparing (X1) and (Y1) then gives (CONCLUSION)
	f(s) = x(s) / (tauc*s+1)*(tauI*s+1)
where tauc is the desired response time for the setpoint response. 
For example, for the almost-integrating process in Figure 3 (tau=30, theta=1),
we get for the SIMC-tunings (tauI=8, tauc=theta=1) the following setpoint prefilter:
        x(s) = 8s^2 + 7.53 s + 1 = (6.25s+1)(1.28s+1)
        f(s) = (6.25s+1)(1.28s+1)/(8s+1)(s+1) = (8s^2+7.53s+1)/(8s^2+9s+1)
This prefilter makes the setpoint response for tauI=8 almost identical to the one shown with tauI=30 (Fig.3).
(I checked with Matlab and it works like a charm!)
Note that we for the case tauI=tau get x(s)=(tauc*s+1)(tauI*s+1) and f(s)=1 (as excpected). 

...................................
14.  (29 July 2005). Further improved integral (or derivative) time 
...................................

This comments is based on the paper: M.W. Foley, N.R. Ramharack, B.R. Copeland: 
"Comparison of PI controller tuning methods", I&EC Res. (2005)
From the analysis in this paper it seems clear that a simple modification of the SIMC rule may be proposed: 
  --- In the expressions for Kc and tauI,  replace tau1 by tau1+theta/2 where theta is the delay. ---
According to the results of Foley et al. (2005) this will improve the perfomance for delay-dominant processes, 
but it will hardly have any effect for processes with a relatively small delay (where the SIMC rules work best).
Comment: When I proposed my simple IMC (SIMC) rules I put relatively little emphasis on delay-dominant processes
because they are relatively rare in practice, but this simple modification may nevertheless be worthwhile.

Comment added 2014: In the "improved" SIMC-PI rule from 2012, we use the modification of Foley et al. (2005), 
but with theta/3 rather than theta/2.
Alternatively, we may use the related "improved" SIMC-PID rule from 2013 (Grimholt and Skogestad, 
presented at the Nordic Process Control workshop in Aug. 2013), where we add theta/3 to taud 
(taud is the derivative time for the cascade form PID).

...................................
15.  (31 Jan 2006). Tuning for IPZ-process  
...................................

This comment is based on: O. Slatteke, Ph.D. Thesis, Lund Univ., 2006 and K. Forsman, "Reglerteknik for processindustrien", Studentlitteratur, 2005.
An IPZ-process is an integrating process with an additional pole (with time constant tau) and zero (with time constant T>tau):
    g0(s) = k'*e-theta*s/s * (Ts+1)/(tau s+1) 
This process may, for example, respresent the response from steam flow to pressure.
To get a PI controller we need to get rid of the zero (T) and we use "rule T2" to cancel it against the integrator
(we could have cancelled it against the pole (tau), but since T is large it is better to cancel it against the integrator):
     (Ts+1)/s \approx T
to get
   g(s) = k'*T*e-theta*s / (tau s+1)
Using the SIMC rules the resulting PI-tunings are (with tauc as the tuning parameter)
   Kc = (1/k')*(tau/T) / (tauc+theta); tauI = min[tau, 4*(tauc+theta)]
These tunings turn out to be almost identical to the tunings given on page 104-106 in the thesis of Slatteke.

......................................................
16.  (12 Mar 2007).  Comment on rule for integral time 
......................................................

On page 224 in the book "Advanced PID controller" by Åström and Hägglund (ISA, 2006) it is stated:
"Skogestad's internal model controller avoids the cancellation (between tauI and tau1 for slow processes)
by an ad hoc modification of the integral time".

I think this is a bit unfair and inaccurate, as the modification is actually derived analytically.

The starting point is setpoint tracking where direct synthesis gives tauI = tau1.
However, this (and the resulting cancellation) is not a good setting for disturbance rejection for "slow" processes with tau1 is large.
We therefore want to reduce tauI, but this may give robustness problems and introduce slow oscillations.
If we require that we should not introduce slow oscillations then Kc*tauI*k' >= 4 (derived neglecting the delay theta),
or with with the aleady derived value for the controller gain Kc: tauI >= 4(tauc+theta).

In summary, we have: 
(1) For performance we want tauI <= tau1 (i.e., we want tauI small and always smaller than tau1).
(2) For robustness (no oscillations) for the case when tauI <= tau1, we want tauI >=  4(tauc+theta).

The rule tauI = min (tau1, 4(tauc+theta)) then follows.

..........................................................................................
17.  (06 Aug 2007).  Tuning for plants with large parameter changes (large changes in b)
..........................................................................................

We here consider robustness with respect to changes in the parameters k, tau and theta in the plant g.

Define b=k*theta/tau = k'*theta for the most common case where tau>theta, and b=k*theta for the case where the time delay is large (theta>tau).
(actually b is a measure of the loop gain at high frequencies; see below)
For the "tight" tuning rules (with tauc=theta), the conclusion is that if the parameter b is larger than 2, then for stability reasons, 
tuning should be based on the operationg point with the largest value of b.
 
To show this, consider the loop gain |L(jw180)| at frequency w180, which must remain be less than 1 for stability.
We have |L(jw180)|=1/GM where GM (>1) is the gain margin.
The controller is fixed (c0), so we have |L(jw180)| = |c0*g| = L0*b where L0 is a constant and b is a function of k, tau and theta.

The "tight" tuning rules derived in this paper (with tauc = theta) give GM=3 nominally and thus work OK for plants 
where the variation (increase) in b is about 2 or less.  If b may increase by more than a factor of 2, 
the tuning of the controller must for robustness reasons be based on the operating point with the largest value of b. 

We distinguish between two cases.

Case 1. "Normal" case with tau>theta: In this case b=k*theta/tau = k'*theta

Proof: At frequency w180, we assume that the term (tau*s+1) is approx tau*s in both c and g.
Then, at frequency w180, the controller behaves as c0=Kc0 (constant) and the plant as |g|=k*e-theta*s/tau*s = k'*e-theta*s/s (integrator). 
We get w180=(pi/2)*(1/theta), which gives |L(jwu)|=Kc0*k/tau*w180 and we find b=k*theta/tau.
(see also p.205 in the book "Multivariable Feedback control" by Skogestad and Postlethwaite (2005); p.196 in the first edition (1996)).

Case 2. "Large delay" case with tau theta1/3.


----------------------------------------------------------------------------------
19. (21Sep 2007) Should level control have integral action?  
----------------------------------------------------------------------------------

See handwritten notes in subdirectory more/notes.

----------------------------------------------------------------------------------
20. (21Sep 2007) Selection of closed-loop time constant tauc
----------------------------------------------------------------------------------

New results on relationship with input usage, and new interpretation on "speedup" tau/tauc required for performance.
See handwritten notes in subdirectory more/notes; see also "smooth-tuning" paper (2006) and the summary paper from 2012 
(IFAC PID-conference in Brescia).
 
----------------------------------------------------------------------------------
21. (02Jan 2009) Further justification for "tight control" recommendation tauc=theta 
----------------------------------------------------------------------------------

Cvejn (2009) shows that selecting tauc=theta is optimal if the optimal modulus (OM) criterion is used as a performance specification.
OM corresponds to a having a "flattest" possible T(s) (i.e. having |T| close to 1) at low frequencies.

-----------------------------------------------------
22. (15 May 2014)  Improved approximation of zeros
-----------------------------------------------------

Lee, Cho and Edgar (2013) has revisted the SIMC model reduction and PID tuning and have some very interesting results.
The most useful is probably the following approximation which replaces model reduction rules T1, T1a, T1b and T2 for approximating zeros.
Their recommendation is to replace the term (T0s+1)/(tau0s+1) by the value evaluated at the frequency s=j/tauc.

For example, for (5s+1)/(2s+1) and tauc=1.5, their approximation becomes to replace it by the constant
sqrt( (5/1.5)^2+1)/ sqrt( (2/1.5)^2+1) = 2.1 (whereas the original rule would give To/tau0=2.5).

They also have a modification for rule T3 (see their paper).

Reference: J Lee, W Cho and TF Edgar, "Simple Analytic PID Controller Rules Revisited", I&EC Research, Vol. 53, 5038-5047 (2013).

-----------------------------------------------------------------------------
23. (11 and 27 Nov 2014) More on the choice of tauc 
-----------------------------------------------------------------------------

The "default" value for the SIMC tuning parameter is tauc=theta, although one may of course use tauc=2*theta or larger to get a
more robust system with less input usage, or even choose tauc=theta/2 to get better performance (but less robustness).

However, I often get asked the following question:
What about processes with no delay or a very short delay, where the choice tauc=theta gives too aggressive control,
what value should we select for tauc?

Here are three approaches:

1. The simplest is to select tauc (the closed-loop time constant) based on physical insight: 
   How fast do you wan the system to respond?

2. "Smooth tuning". A  more systematic approach is to select tauc to (just) achieve disturbance rejection, that is: 
   What is the (largest) tauc that gives acceptable disturbance rejection?

  (a) Rule A: Select tauc=1/wd. 
      
      Proof: The model is y = G*u + Gd*d. 
      The closed-loop disturbance response is y = Gd*d/(1+L) (where L=loop transger function) 
      and to achieve |y| |Gd'| (for frequencies wwd  or tauc<1/wd which is just satisfied with tauc=1/wd (qed)  

  (b) Rule B: Select Kc = ud/ymax (and then back-calculate tauc from the SIMC-rules).
              where ud = input magnitude required to reject largest disturbance (dmax).
      Rule B can be conservative (meaning that the value of Kc is too high), but it gives the same result as rule A in many cases.
      Rule B has the advantage that one does not have to think about the disturbance, and ud may be obtained from historical data.
  
      Proof of Rule B (see also "smooth tunings" paper from 2006):
      Again consider the closed-loop disturbance response, y = Gd*d/(1+L) where L=GC. 
      Assume 1+L \approx L and introduce ud=-Gd*d/G (input required for perfect disturbance rejection): to get: y = -ud/C.
      To achieve |y| ud/ymax, which
      is just satisfied with Kc=ud/ymax (qed). 
      Note:  This value for Kc may be conservative (too high) because ud (input to reject disturbance) may occur at a frequency 
      where |C| is larger than Kc. To reduce this conservativeness, we should consider disturbances at "intermediate" 
      frequencies (where |C| has its minimum value Kc).

      Example: Here is a case where the two rules give the same result. 
	       Let G=k/tau*s+1, Gd = kd/taud*s+1. 
               Introduce the scaled disturbance gain kd'=kd*dmax/ymax  and assume kd'>1.
               Rule A: |Gd'|=1 at frequency wd=kd' so from Rule A: 
                     (**)     tauc = 1/wd = taud/kd'. 
               Rule B: We need to find |ud|=|Gd|*dmax/|G|. We consider intermediate frequencies, where |Gd|/|G|=|(kd/taud)/(k/tau)| 
		       and we get from Rule B: Kc = ud/ymax = |(kd/taud)/(k/tau)|*dmax/ymax.
		       To find the corresponding tauc, we use the SIMC rule (with theta=0), Kc = 1/[(k/tau)*tauc], and we get
		       tauc = 1/Kc*(k/tau) = taud*ymax/kd*dmax = taud/kd' (which is the same as found from Rule A!) 

   Comment: Both rules (A and B) give the minimum input usage that gives acceptable disturbance rejection. Thus, if we find, for example,
   that the resulting controller gain (Kc) is too large and gives input saturation, then the process is simply not (input-output) controllable.

3. In some cases, tauc must be selected to avoid input constraints. In particular, this is the case if the choice  tauc=theta
results in a large value of Kc. Typically, this is the case for a process with a large time constant, but where k remains fixed
(so this is not really an integrating process). This is discussed in more detail here:

Sigurd Skogestad and Chriss Grimholt, ''The SIMC Method for Smooth PID Controller Tuning'', 	
	Chapter 5 in:  R. Vilanova, A. Visioli (eds.), PID Control in the Third Millennium, Advances in Industrial Control, DOI 10.1007/978-1-4471-2425-2_5, © Springer-Verlag London Limited 2012 

For input disturbances, saturation is not a problem with tauc=theta, but it may give satiration for output disturbances or
measurement noise (the latter is not mentioned in the above paper and I should study it further).

---------------------------------------------------------
24. (2014, 2022, 2024) Lambda tuning for choosing tauc  
---------------------------------------------------------

Another approach for selecting tauc is the socalled "lambda"-tuning.

               tauc=lambda 

First: Where does the symbol lambda come from? 
1. Most likely (I'm almost 100% sure) it comes the book by Morari and Zafiriou (1989) who use the symbol lambda for tauc. 
   Note: The original IMC PID-paper (Rivera, Morari, Skogestad, 1986) uses the symbol epsilon for tauc, 
         but it was changed to lambda in the IMC-book by Morari and Zafiriou (1989), because "epsilon" gave the impression that tauc should always be small.
2. The symbol lambda is used in the similar digital tuning method by E.B. Dahlin (1968), but here lambda is actually the inverse (of tauc). 

Lambda-tuning found widespread industrial usage in the 1990s, especially in the Pulp and paper industry. An early reference (1995) is two book chapters in the following book:

Nancy J. Sell, "Process control fundamentals for the pulp and paper industry", TAPPI Press, 1995. 
    Chapter 6 (p. 215-271): "Controller Tuning methods" by Frederick Y. Thomasson 
        (this chapter referes to Chien and Fruehaud, Consider IMC tuning to improve controller performance", Chemical engineering progress, p. 334-41, Oct. 1990)  
    Chapter 7 (p. 275-325): "Control objectives for uniformity in the pulp and paper manufacturing", W.L. Bialkowski 
        (this paper does not have any tuning references, but in the following Ch.8 on IMC, he refers to the book by Morari ad Zafiriou (1989).

The references can be found here:
Other literature see here

In the "lambda literature", is often recommended to relate lambda (tauc) to the open-loop time constant tau.  We define
	      
        tauc=lambda= kappa*tau 

where kappa is known as the "lambda-factor". With the SIMC/IMC/Lambda-rules, the PI tunings are (assuming the process has no delay, so theta=0):

        Kc = 1/(k*kappa), taui=tau

With kappa<1, we get a "speed-up" by closing the loop (i.e. tauc1 the response is slowed down.
A common tuning rule, especially in the pulp and paper industry, is to select kappa in the range 1-3.
(This is confirmed by a search on the internet; for example, the first hit I got was "Fundamentals of lambda tuning" by Vance van Doren
in Control Engineering (2013) who writes that "lambda is generally assigned a value between tau and 3*tau").
   
I have often wondered why the "lambda literature" makes a coupling between tauc and tau. It seems strange:
     Strange-1. An integrating process has tau=infinity, so "lambda-tuning" would give lambda=tauc=infinity and control is turned off 
               (wheras the SIMC-rule gives tauc > theta which can be small).
     Strange-2. On the other hand, for a pure time delay process (tau=0), "lambda-tuning" gives lambda=tauc=0, 
               which means control is infinitely fast and the closed-loop system will be unstable.
     Strange-3 For more "normal" processes, the rule that lambda is between tau and 3 tau will give a rather slow tuning.

So what is the justification for relating lambda (=tauc) to the time constat tau (whereas I recommend relating it to the delay theta)?

Reason 0 (added Jan. 2024): Thomasson (1995, chapter 6) (see reference above) gives the rule 

             lambda > tau + theta 

   and gives the following justification: "For this value, there will no overshoot in the setpoint response" (p. 262). 
   From his simulations it is clear that he talks about overshoot of the output y (not in the input u as I discuss in Reason 1 below).
   My comment is: But why care so much about setpoints, because one can always add a prefilter on the setpoints (see item 13 above). 
        I think that the disturbance response should determine the tuning!
   
   In the following chapter 7, Bialkowski writes that in Rule 5 that "a simple rule of thumb is that as long as 
 
             lambda > 3 tau

   there is little danger of model mismatch causing serious problems. The faster values of lambda increasingly endanger the robustness of the loop" (p. 324). 
   However, this rule of thumb is not suppoerted by the results in my paper (20003). 
  (By the way, just three lines below, Bialkowski writes in Rule 6: 
          "Outer cascade loops must be slower than inner cascade loops. 
           A rule of thumb is to plan for the outer cascade loop to be five to ten times slower than the inner loop".
    Yes, this I agree on!)
     
    
But, of course, there could be other reasons for relating lambda (tauc) to tau as discussed in the following.

Reason 1 (Added Sep. 2022): Maybe the reason for recommending kappa>1 (with lambda-tuning) is to avoid overshoot in the input for setpoint changes. 
   Assume g=k/(tau*s+1) and the desired closed-loop setpoint response is T=1/(tauc*s+1). 
   The response from ys to u is then: u/ys = c/(1+gc) = (1/g) gc/(1+gc) = (1/g) T = (1/k) * (tau*s+1)/(tauc*s+1). 
   To avoid overshoot in u (i.e. u exceeding 1/k) we must avoid "speeding up" the response, that is, we must have tauc>tau or kappa=tauc/tau > 1.  QED

Reason 2 (Oct. 2022 (Reason 2): Another reason for selecting tauc=tau is to get Kc=1/k, is that the initial ("feedforward") response from ys to y is perfect!   
   This follows sinve without feedback (for example, initially before the feedback becomes effective), we have y = Kc*k * ys = 1*ys with Kc=1/k.
   So this is good in terms of the inital response to setpoints. This is important especially for a slave loop in cascade control where setpoint changes are very common. 
   An alternative to selecting tauc=tau, if Reason 2 is correct, is to introduce a factor on how much Kc is used on the setpoint (as suggested by Astrom in PID-book) 

Reason 3 (2014): Here is another possible reason related to input (load) disturbance rejection: **
   Start Special case: 
    Note the similarity between equations (***) with the smooth tuning formula (**). 
    This leads to the following special case where the "lambda literature"-tuning approach is reasonable: 
    Consider a first-order process with no delay and assume we have a disturbance at the input 
    which should be rejected with as little control effort as possible.  
              Then taud=tau and from (**) (Rule A) we get that for acceptable disturbance rejection ("smooth tuning") we must require:
	      tauc = 1/wd = tau/kd'
       where kd' is the scaled disturbance gain (gain from d to y with no control). This implies that we have the following tuning rule in terms of kappa,
	      kappa = 1/kd'.
       Here kd' = kd*dmax/ymax, so we have that
	      kappa = 1/kd' = ymax/(kd*dmax) = ratio between max. allowed output change (ymax) 
					       and output change without control (kd*umax) (steady-state)
       Alterntively, in terms of lambda=tauc:
             lambda=tauc = tau*kappa =  tau*ymax/(kd*dmax)
       For k'd>1, we need to "speed up" the response by a factor k'd to get acceptable disturbance rejection.

       Note: the above analysis used the approximation |1+L|\approx |L|. Here is a bit more accurate analysis. 
       The disturbance response is 
                 y = Gd*d/(1+L). 
       Here Gd = kd/(tau*s+1) and with the SIMC tunings we get, L = GC = 1/(tauc*s) so S=1/(1+L) = tauc*s/(tauc*s+1).
       For tauc < tau, the peak value of the transfer function |SG_d| is approximately (asymptotic value)
		kd*tauc/tau = kd*kappa
       which holds well for kappa<1. 
       However, for kappa=1 the asymptotic analysis does not quite hold, and the peak is only half (0.5*kd). 
                       This follows from 1/sqrt(2)*sqrt(2)=1/2=0.5
       Note that we have here considered sinusoidal disturbances. For comparison, Forsman ("Reglerteknik", p. 49, 2005, in Swedish) 
       finds a factor 0.368 (rather than 0.5) for a step disturbance.
              
       Thus, selecting kappa=1 reduces the disturbance sensitivity by a factor about 2, and this explains why kappa=1 may be a 
       reasonable starting point for the tuning. As mentioned, a common tuning rule is to select kappa even larger, say kappa=3, which must
       mean that, strictly speaking, we do not need control for disturbance rejection, but rather we use control to stabilize and avoid drift.
       
       Conclusion: From my derivation with sinusoidal input disturbances, the recommended value for kappa (the "lambda-factor") is:  
               kappa = Ratio between allowed output variation and output variation without control (steady-state)

   BUT: There is also the issue of input saturation due to noise if Kc is too large, and this may a reason for not speeding up the response too much, see approach 3.

    End Special Case.

-----------------------------------------------------------------------------------------------------
25. (11 Nov. 2014. 21 Mar 2018) Use of derivative action for processes with time delay ("improved SIMC PID rules")
-----------------------------------------------------------------------------------------------------

See: Chriss Grimholt and Sigurd Skogestad, ''Optimal PID-Control on First Order Plus Time Delay Systems & Verification of the SIMC Rules'', 	
	Published at NPC workshop (Aug. 2013) and DYCOPS Symposium (Dec. 2013). 

For first-order with delay processes, the optimality of the SIMC PI rules has been studied by  Skogestad and Grimholt 
(PID-conference, 2012) by comparing the performance (J=IAE) versus robustness (Ms) trade-off with the Pareto-optimal curve. 
The difference is small which leads to the conclusion that the SIMC PI-rules are close to optimal. The only exception is for 
pure time delay processes, so the "improved" SIMC rule is introduced  to improve the performance for this case. 

1. For PI-control, the improvement is to add theta/3 to tau1, and then use the original rule. This resulting PI-controller is 
close to the optimal one (Skogestad and Grimholt (2012)). 

2. The original SIMC-rule gives a PI-controller for a first-order plus delay process, but in theory the performance can be improved significantkly, especially for
processes with large rime constants, like integrating processes,
To get a PID-controller, the very simple change is to add theta/3 to taud (cascade PID form). We show in the Dycops paper (2013) that this is 
close to the optimal PID-controller, but to take advantage of the derivative action one should choose tauc=theta/2, rather than the 
standard value tauc=theta. 

3. The reason for putting "improved" in quotes, is because it can be argued that the improved performance by the D-action may
not be worth the increased complexity of the controller and the increased sensitivity to noise. 

4.  For a pure time delay process, the two "improved" PID controller is in fact an ID-controller which can be rewritten as the "improved" PI-controller.  
This "improved" SIMC PI-controller has integral time taui=theta/3 and gain Kc = 1/(3*k) *  theta/(tauc+theta)) 
We get Kc=0.17/k is for tauc=theta and Kc=0.22/k for tauc=theta/2.

-----------------------------------------------------------------------------------------------------
26. (02 Dec. 2023) SIMC PID rules with measurement dynamics gm(s).
-----------------------------------------------------------------------------------------------------
In the paper, we assume gm=1. More generally, you simply include any measurement dynamics gm(s) in the process model g(s) and apply the SIMC-rules unchanged.
This applies both to the model approximation (half rule) to get a 1st or 2nd model and to the PI- or PID-tuning, including the choice of tauc.
For example, see a handwritten note (pdf-file) in directory more/notes for a "proof" that the total delay should include the delay in the measurement gm. 

-----------------------------------------------------------------------------------------------------
27. (28 Nov. 2024) New rule for approximation of LHP-zeros (Rule T4)
-----------------------------------------------------------------------------------------------------

The following rule makes both the initial response and stedy-state unchanged (but it will remove overshoot)

(T0*s+1)/(tau10*s+)*(tau20*s+1) is approximated as 1/(tau*s+1) with tau=(tau10*tau20)/T0

Example:  (533*s+1)/(335*s+1)*(212*s+1) is approximated as 1/(133*s+1).   This is because (335*212)/533= 133