Synthesis of decentralized PI controllers
We consider the design of a decentralized PI controller for the glass tube manufacturing plant described in "Tuning decentralized PID controllers for performance and robust stability", E. Kozakova, ICIC Express Letters, 2(2), 2008.
Contents
Plant data
load dataManufacturingPlant;
number of states
order(G),
ans =
8
I/O sizes
iosize(G),
ans =
2 2
Define decentralized 2x2 PI controller
C1 = ltiblock.pid('C1','pi'); C2 = ltiblock.pid('C2','pi'); C = blkdiag(C1,C2); % compound local PI controllers
Now construct synthesis plant with appropriate weighting functions. Performance weight translates a minimum bandwidth of 1.4 rad/s and steady-state accuracy.
% performance weight lfG=1e3; % desired low frequency gain hfG=0.5; % desired high frequency gain w0= 1.4 ; % desired crossover wS=(hfG*s+w0)/(s+w0/lfG);
Robustness weight accounts for uncertainty/noise in the high-frequency range
lfG=0.001; % desired low frequency gain hfG= 40; % desired high frequency gain w0= 40; % desired crossover wT=(s+w0*lfG)/(s/hfG+w0); bodemag(wS,'b-',wT,'r--'); grid; % Derive augmented plant P = augw(G,wS*eye(2) ,[] , wT*eye(2) );
Form closed-loop interconnection
CL0 = lft(P,C);
Solve
problem with hinfstruct
op = hinfstructOptions('RandomStart',3);
[CL, gam] = hinfstruct(CL0,op);
Final: Peak gain = 1.38, Iterations = 59 Final: Peak gain = 1.38, Iterations = 49 Final: Peak gain = 1.38, Iterations = 46 Final: Peak gain = 1.38, Iterations = 43
Note since gam > 1 the specified control structure fails to achieve performance requirements as expressed by the weighting functions.
Show local PI controllers and retrieve decentralized controller C
C1 = pid(CL.Blocks.C1), C2 = pid(CL.Blocks.C2), C = getNominal(C,CL);
Continuous-time PI controller in parallel form:
1
Kp + Ki * ---
s
With Kp = 0.0528, Ki = 0.0674
Continuous-time PI controller in parallel form:
1
Kp + Ki * ---
s
With Kp = 5.51, Ki = 3.5
Simulations and frequency-domain analysis
Perform simulations with set-point driven with 1/(s/8 + 1)
Tsim = (1/(s/8+1)*eye(2))*feedback(G*C,eye(2)) ; step(Tsim); grid;
Show robustness constraints
sigma(feedback(G*C,eye(2)) , 1/wT); grid; legend('complementary T', '1/wT');