Управление мультивхода объект Одно Вывода

Этот пример показывает как модели проекта прогнозирующий контроллер с одним измеренным выводом, одной переменной, которой управляют, одним измеренным воздействием и одним неизмеренным воздействием в типичном рабочем процессе.

Задайте модель объекта управления

Дискретное время линейная динамическая модель разомкнутого цикла задано ниже с шагом расчета Ts.

sys = ss(tf({1,1,1},{[1 .5 1],[1 1],[.7 .5 1]}));
Ts = 0.2;
model = c2d(sys,Ts);

Разработайте контроллер MPC

Задайте тип входных сигналов: первый сигнал является переменной, которой управляют, второй сигнал является измеренным воздействием, третий является неизмеренным воздействием.

model = setmpcsignals(model,'MV',1,'MD',2,'UD',3);

Создайте объект контроллера с выборкой периода, прогноза и управляйте горизонтами.

mpcobj = mpc(model,Ts,10,3);
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

Задайте ограничения на переменную, которой управляют.

mpcobj.MV = struct('Min',0,'Max',1,'RateMin',-10,'RateMax',10);

Для неизмеренных входных воздействий его модель является интегратором, управляемым белым шумом с отклонением = 1000.

mpcobj.Model.Disturbance = tf(sqrt(1000),[1 0]);

Моделируйте ответ с обратной связью Используя команду sim

Задайте параметры симуляции.

Tstop = 30;                               % simulation time
Tf = round(Tstop/Ts);                     % number of simulation steps
r = ones(Tf,1);                           % reference signal
v = [zeros(Tf/3,1);ones(2*Tf/3,1)];       % measured disturbance signal

Запустите симуляцию с обратной связью и постройте результаты.

sim(mpcobj,Tf,r,v)
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Задайте воздействие и шумовые сигналы в объекте опции симуляции.

SimOptions = mpcsimopt(mpcobj);
d = [zeros(2*Tf/3,1);-0.5*ones(Tf/3,1)];
SimOptions.Unmeas = d;                          % unmeasured input disturbance signal
SimOptions.OutputNoise=.001*(rand(Tf,1)-.5);    % output measurement noise
SimOptions.InputNoise=.05*(rand(Tf,1)-.5);      % noise on manipulated variables

Запустите симуляцию с обратной связью и сохраните результаты в рабочую область.

[y,t,u,xp] = sim(mpcobj,Tf,r,v,SimOptions);

Постройте результаты.

figure
subplot(2,1,1)
plot(0:Tf-1,y,0:Tf-1,r)
title('Output')
grid
subplot(2,1,2)
plot(0:Tf-1,u)
title('Input')
grid

Моделируйте ответ с обратной связью с образцовым несоответствием

Протестируйте робастность контроллера MPC против образцового несоответствия. Задайте истинный объект simModel с номинальным выходным значением 0.1.

simModel = ss(tf({1,1,1},{[1 .8 1],[1 2],[.6 .6 1]}));
simModel = setmpcsignals(simModel,'MV',1,'MD',2,'UD',3);
simModel = struct('Plant',simModel);
simModel.Nominal.Y = 0.1;
simModel.Nominal.X = -.1*[1 1 1 1 1];

Создайте объект опции.

SimOptions.Model = simModel;
SimOptions.plantinit = [0.1 0 -0.1 0 .05];  % Initial state of the true plant
SimOptions.OutputNoise = [];                % remove output measurement noise
SimOptions.InputNoise = [];                 % remove noise on manipulated variables

% Run the closed-loop simulation and plot results.
sim(mpcobj,Tf,r,v,SimOptions)
-->Converting model to discrete time.

Смягчите ограничения

Ослабьте ограничения на переменные, которыми управляют, от трудно до мягкого.

mpcobj.MV.MinECR = 1;
mpcobj.MV.MaxECR = 1;

Задайте выходное ограничение.

mpcobj.OV.Max = 1.1;

Запустите новую симуляцию с обратной связью.

sim(mpcobj,Tf,r,v)
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Ограничение мВ было немного нарушено, в то время как ограничение MO было нарушено больше. Оштрафуйте более выходное ограничение и повторно выполните симуляцию.

mpcobj.OV.MaxECR = 0.001;  % The closer to zero, the harder the constraint
sim(mpcobj,Tf,r,v)
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Теперь ограничение MO было немного нарушено, в то время как ограничение мВ было нарушено больше как ожидалось.

Измените усиления Кальмана, используемые во встроенном средстве оценки состояния

Программное обеспечение Model Predictive Control Toolbox™ обеспечивает Фильтр Калмана по умолчанию, чтобы оценить состояние объекта, воздействия и шумовых моделей. Можно изменить усиления Кальмана.

Во-первых, получите значение по умолчанию усиления Кальмана и матрицы пространства состояний.

[L,M,A1,Cm1] = getEstimator(mpcobj);

Полюса наблюдателя по умолчанию:

e = eig(A1-A1*M*Cm1)
e =

   0.5708 + 0.4144i
   0.5708 - 0.4144i
   0.4967 + 0.0000i
   0.9334 + 0.1831i
   0.9334 - 0.1831i
   0.8189 + 0.0000i

Разработайте новое средство оценки состояния размещением полюса.

poles = [.8 .75 .7 .85 .6 .81];
L = place(A1',Cm1',poles)';
M = A1\L;
setEstimator(mpcobj,L,M);

Моделируйте ответ разомкнутого цикла

Протестируйте поведение объекта в разомкнутом цикле с помощью команды sim. Установите флаг OpenLoop на on и обеспечьте последовательность переменных, которыми управляют, которые волнуют систему.

SimOptions.OpenLoop = 'on';
SimOptions.MVSignal = sin((0:Tf-1)'/10);

Когда ссылочный сигнал будет проигнорирован, мы можем постараться не задавать его.

sim(mpcobj,Tf,[],v,SimOptions)
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
-->Converting model to discrete time.

Исследуйте установившееся смещение

Чтобы исследовать, сможет ли контроллер MPC отклонить постоянные выходные воздействия и отследить постоянное заданное значение с нулевыми смещениями в установившемся, вычислите усиление DC от выходных воздействий до управляемых выходных параметров с помощью команды cloffset.

DC = cloffset(mpcobj);
fprintf('DC gain from output disturbance to output = %5.8f (=%g) \n',DC,DC);
DC gain from output disturbance to output = 0.00000000 (=3.10862e-15) 

Нулевое усиление означает, что вывод отследит желаемое заданное значение.

Моделируйте MPC с mpcmove

Во-первых, получите матрицы пространства состояний дискретного времени объекта.

[A,B,C,D] = ssdata(model);
Tstop = 5;                  % Simulation time
x = [0 0 0 0 0]';           % Initial state of the plant
xmpc = mpcstate(mpcobj);    % Initial state of the MPC controller
r = 1;                      % Output reference signal

Сохраните траектории MPC с обратной связью в массивах YY, UU и XX.

YY=[];
UU=[];
XX=[];

Запустите цикл симуляции

for t=0:round(Tstop/Ts)-1
    % Store states
    XX = [XX,x]; %#ok<*AGROW>
    % Define measured disturbance signal
    v = 0;
    if t*Ts>=10
        v = 1;
    end
    % Define unmeasured disturbance signal
    d = 0;
    if t*Ts>=20
       d = -0.5;
    end
    % Plant equations: output update (no feedthrough from MV to Y)
    y = C*x + D(:,2)*v + D(:,3)*d;
    YY = [YY,y];
    % Compute MPC action
    u = mpcmove(mpcobj,xmpc,y,r,v);
    % Plant equations: state update
    x = A*x + B(:,1)*u + B(:,2)*v + B(:,3)*d;
    UU = [UU,u];
end

Постройте график результатов.

figure
subplot(2,1,1)
plot(0:Ts:Tstop-Ts,YY)
grid
title('Output')
subplot(2,1,2)
plot(0:Ts:Tstop-Ts,UU)
grid
title('Input')

Если когда-либо во время симуляции вы хотите проверять оптимальные предсказанные траектории, она может быть возвращена mpcmove также. Примите, что вы хотите начать с текущего состояния и иметь изменение заданного значения в 0,5 и принять, что измеренного воздействия не стало.

r = 0.5;
v = 0;
[~,Info] = mpcmove(mpcobj,xmpc,y,r,v);

Мы теперь извлекаем оптимальные предсказанные траектории.

topt = Info.Topt;
yopt = Info.Yopt;
uopt = Info.Uopt;
figure
subplot(2,1,1)
stairs(topt,yopt)
title('Optimal sequence of predicted outputs')
grid
subplot(2,1,2)
stairs(topt,uopt)
title('Optimal sequence of manipulated variables')
grid

Линейное представление контроллера MPC

Когда ограничения не активны, контроллер MPC ведет себя как линейный контроллер. Можно получить форму пространства состояний контроллера MPC.

LTI = ss(mpcobj,'rv');

Получите матрицы пространства состояний линеаризовавшего контроллера.

[AL,BL,CL,DL] = ssdata(LTI);

Моделируйте линейный MPC система с обратной связью и сравните линеаризовавший контроллер MPC с исходным контроллером MPC с выключенными ограничениями.

mpcobj.MV = [];           % No input constraints
mpcobj.OV = [];           % No output constraints
Tstop = 5;                %Simulation time
xL = zeros(size(BL,1),1); % Initial state of linearized MPC controller
x = [0 0 0 0 0]';         % Initial state of plant
y = 0;                    % Initial measured output
r = 1;                    % Output reference set-point
u = 0;                    % Previous input command
YY = [];
XX = [];
xmpc = mpcstate(mpcobj);
for t = 0:round(Tstop/Ts)-1
    YY = [YY,y];
    XX = [XX,x];
    v = 0;
    if t*Ts>=10
        v = 1;
    end
    d = 0;
    if t*Ts>=20
        d = -0.5;
    end
    uold = u;
    % Compute the linear MPC control action
    u = CL*xL+DL*[y;r;v];
    % Compare the input move with the one provided by MPCMOVE
    uMPC = mpcmove(mpcobj,xmpc,y,r,v);
    dispStr(t+1) = {sprintf('t=%5.2f, u=%7.4f (provided by LTI), u=%7.4f (provided by MPCOBJ)',t*Ts,u,uMPC)}; %#ok<*SAGROW>
    % Update plant equations
    x = A*x + B(:,1)*u + B(:,2)*v + B(:,3)*d;
    % Update controller equations
    xL = AL*xL + BL*[y;r;v];
    % Update output equations
    y = C*x + D(:,1)*u + D(:,2)*v + D(:,3)*d;
end
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Отобразите результаты.

for t=0:round(Tstop/Ts)-1
    disp(dispStr{t+1});
end
t= 0.00, u= 5.2478 (provided by LTI), u= 5.2478 (provided by MPCOBJ)
t= 0.20, u= 3.0134 (provided by LTI), u= 3.0134 (provided by MPCOBJ)
t= 0.40, u= 0.2281 (provided by LTI), u= 0.2281 (provided by MPCOBJ)
t= 0.60, u=-0.9952 (provided by LTI), u=-0.9952 (provided by MPCOBJ)
t= 0.80, u=-0.8749 (provided by LTI), u=-0.8749 (provided by MPCOBJ)
t= 1.00, u=-0.2022 (provided by LTI), u=-0.2022 (provided by MPCOBJ)
t= 1.20, u= 0.4459 (provided by LTI), u= 0.4459 (provided by MPCOBJ)
t= 1.40, u= 0.8489 (provided by LTI), u= 0.8489 (provided by MPCOBJ)
t= 1.60, u= 1.0192 (provided by LTI), u= 1.0192 (provided by MPCOBJ)
t= 1.80, u= 1.0511 (provided by LTI), u= 1.0511 (provided by MPCOBJ)
t= 2.00, u= 1.0304 (provided by LTI), u= 1.0304 (provided by MPCOBJ)
t= 2.20, u= 1.0053 (provided by LTI), u= 1.0053 (provided by MPCOBJ)
t= 2.40, u= 0.9920 (provided by LTI), u= 0.9920 (provided by MPCOBJ)
t= 2.60, u= 0.9896 (provided by LTI), u= 0.9896 (provided by MPCOBJ)
t= 2.80, u= 0.9925 (provided by LTI), u= 0.9925 (provided by MPCOBJ)
t= 3.00, u= 0.9964 (provided by LTI), u= 0.9964 (provided by MPCOBJ)
t= 3.20, u= 0.9990 (provided by LTI), u= 0.9990 (provided by MPCOBJ)
t= 3.40, u= 1.0002 (provided by LTI), u= 1.0002 (provided by MPCOBJ)
t= 3.60, u= 1.0004 (provided by LTI), u= 1.0004 (provided by MPCOBJ)
t= 3.80, u= 1.0003 (provided by LTI), u= 1.0003 (provided by MPCOBJ)
t= 4.00, u= 1.0001 (provided by LTI), u= 1.0001 (provided by MPCOBJ)
t= 4.20, u= 1.0000 (provided by LTI), u= 1.0000 (provided by MPCOBJ)
t= 4.40, u= 0.9999 (provided by LTI), u= 0.9999 (provided by MPCOBJ)
t= 4.60, u= 1.0000 (provided by LTI), u= 1.0000 (provided by MPCOBJ)
t= 4.80, u= 1.0000 (provided by LTI), u= 1.0000 (provided by MPCOBJ)

Постройте график результатов.

figure
plot(0:Ts:Tstop-Ts,YY)
grid

Выполнение с обратной связью, где все ограничения выключены, является легким использованием sim. Мы только задаем опцию в структуре SimOptions:

SimOptions = mpcsimopt(mpcobj);
SimOptions.Constr = 'off';    % Remove all MPC constraints
SimOptions.Unmeas = d;        % unmeasured input disturbance
sim(mpcobj,Tf,r,v,SimOptions);

Моделируйте Используя Simulink®

Чтобы запустить этот пример, Simulink® требуется.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this part of the example.')
    return
end

Воссоздайте контроллер MPC.

mpcobj = mpc(model,Ts,10,3);
mpcobj.MV = struct('Min',0,'Max',1,'RateMin',-10,'RateMax',10);
mpcobj.Model.Disturbance = tf(sqrt(1000),[1 0]);
-->The "Weights.ManipulatedVariables" property of "mpc" object is empty. Assuming default 0.00000.
-->The "Weights.ManipulatedVariablesRate" property of "mpc" object is empty. Assuming default 0.10000.
-->The "Weights.OutputVariables" property of "mpc" object is empty. Assuming default 1.00000.

Непрерывно-разовый объект, которым будут управлять, имеет следующую реализацию пространства состояний:

[A,B,C,D] = ssdata(sys);

Моделируйте MPC с обратной связью в Simulink.

mdl1 = 'mpc_miso';
open_system(mdl1)
sim(mdl1)
   Assuming no disturbance added to measured output channel #1.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Затем, запустите симуляцию с синусоидальным выходным шумом. Примите, что выходные измерения затронуты синусоидальным шумом измерения частоты 0,1 Гц. Вы хотите сообщить объекту MPC об этом так, чтобы оценки состояния могли быть улучшены.

omega = 2*pi/10;
mpcobj.Model.Noise = 0.5*tf(omega^2,[1 0 omega^2]);

Пересмотрите проект MPC и задайте белое Гауссово шумовое неизмеренное воздействие с нулевым средним значением и отклонением 0.1.

mpcobj.Model.Disturbance = tf(0.1);
mpcobj.weights = struct('MV',0,'MVRate',0.1,'OV',0.005);
mpcobj.predictionhorizon = 40;
mpcobj.controlhorizon = 3;

Запустите симуляцию.

Tstop = 150;
mdl2 = 'mpc_misonoise';
open_system(mdl2)
sim(mdl2,Tstop)
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->A feedthrough channel in NoiseModel was inserted to prevent problems with estimator design.

bdclose(mdl1)
bdclose(mdl2)

Смотрите также

| |

Похожие темы