The file Demo_010.m is found in IQClab’s folder demos. Here we reproduce the example from [10] with the plant model
and the controller
.
For this control system, one obtains an anti-windup compensator by means of the following code.
- Length of the basis function: 3
- Solution check: ‘on’
- Enforce strictness of the LMIs:
% Define random symmetric matrix of dimension n s = tf('s'); G = ss(10/(100*s+1)*[4,-5;-3,4]); K = ss(zeros(2),eye(2),[2,2.5;1.5,2]/100,[2,2.5;1.5,2]); Ke = ss(K.a,[K.b,eye(2),zeros(2)],K.c,[K.d,zeros(2),eye(2)]); % Define generalized plant systemnames = 'G Ke'; inputvar = '[p{2};r{2};u{4}]'; outputvar = '[Ke;r-G;p]'; input_to_G = '[Ke-p]'; input_to_Ke = '[r-G;u]'; cleanupsysic = 'yes'; Paw = sysic; % Synthesize anti-windup compensator AWopt.FeasbRad = 1e4; AWopt.constants = [1e-6,1e-6,1e-6]; AWopt.subopt = 1.03; [Kaw,ga] = fAWsyn(Paw,[2,2,2],[2,2,4],AWopt);
The system responses have been simulated for a step command at for the nominal system without saturation, with saturation and with saturation and anti-windup compensator in the following two figures respectively. As can be seen, the control performance hugely degrades in case the saturation nonlinearity is included. Moreover, when the anti-windup compensator is added to the control loop, performance can almost be recovered. Further details are found in [10].