Отличайтесь границы ввода и вывода во время выполнения

Этот пример показывает, как отличаться, пределы насыщения ввода и вывода в режиме реального времени управляют. И для командной строки и для симуляций Simulink®, вы задаете обновленные ограничения ввода и вывода в каждом интервале управления. Контроллер MPC затем сохраняет сигналы ввода и вывода в их заданных границах.

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

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

Задайте объект дискретного времени SISO с шагом расчета Ts.

Ts = 0.1;
plant = c2d(tf(1,[1 .8 3]),Ts);
[A,B,C,D] = ssdata(plant);

Создайте контроллер MPC с заданным горизонтом прогноза, p, управляйте горизонтом, c, и шагом расчета, Ts. Используйте plant в качестве внутренней модели прогноза.

p = 10;
m = 4;
mpcobj = mpc(plant,Ts,p,m);
-->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.Weights.MV = 0;
mpcobj.Weights.MVrate = 0.5;
mpcobj.Weights.OV = 1;

В данном примере верхние и нижние границы на переменной, которой управляют и верхняя граница на выходной переменной отличаются во время выполнения. Для этого необходимо сначала задать начальные фиктивные конечные значения для этих ограничений в контроллере MPC объект. Задайте значения для MV.Min, MV.Max и OV.Max.

Во время выполнения эти ограничения изменяются с помощью объекта mpcmoveopt в командной строке или соответствующих входных сигналах к блоку MPC Controller.

mpcobj.MV.Min = 1;
mpcobj.MV.Max = 1;
mpcobj.OV.Max = 1;

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

Откройте модель Simulink.

mdl = 'mpc_varbounds';
open_system(mdl)

В этой модели включены входной минимум и максимальные ограничительные порты (umin и umax) и выходной ограничительный порт максимума (ymax) блока MPC Controller. Поскольку минимальный связанный вывод неограничен, входной порт ymin отключен.

Сконфигурируйте выходное заданное значение, ref, и длительность симуляции, Tsim.

ref = 1;
Tsim = 20;

Запустите симуляцию и просмотрите ответы ввода и вывода в осциллографе ввода-вывода.

sim(mdl)
open_system([mdl '/I//O'])
-->Converting the "Model.Plant" property of "mpc" object to state-space.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Моделируйте модель в командной строке

Задайте начальное состояние объекта и контроллера.

x = zeros(size(B,1),1);
xmpc = mpcstate(mpcobj);

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

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

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

options = mpcmoveopt;

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

for t = 0:round(Tsim/Ts)
    % Store the plant state.
    XX = [XX; x];

    % Compute and store the plant output. There is no direct feedthrough
    % from the input to the output.
    y = C*x;
    YY = [YY; y'];

    % Get the reference signal value from the data output by the Simulink
    % simulation.
    ref = yout.Data(t+1,2);

    % Update the input and output bounds. For consistency, use the
    % constraint values output by the Simulink simulation.
    options.MVMin = uout.Data(t+1,2);
    options.MVMax = uout.Data(t+1,3);
    options.OutputMax = yout.Data(t+1,3);

    % Compute the MPC control action.
    u = mpcmove(mpcobj,xmpc,y,ref,[],options);

    % Update the plant state and store the input signal value.
    x = A*x + B*u;
    UU = [UU; u'];
end

Сравните результаты симуляции

Постройте сигналы ввода и вывода и от Simulink и от симуляций командной строки наряду с изменяющимися границами ввода и вывода.

figure
subplot(1,2,1)
plot(0:Ts:Tsim,[UU uout.Data(:,1) uout.Data(:,2) uout.Data(:,3)])
grid
title('Input')
legend('Command-line input','Simulink input','Lower bound',...
    'Upper bound','Location','Southeast')
subplot(1,2,2)
plot(0:Ts:Tsim,[YY yout.Data(:,1) yout.Data(:,3)])
grid
title('Output')
legend('Command-line output','Simulink output','Upper bound',...
    'Location','Southeast')

Результатами командной строки и симуляций Simulink является то же самое. Контроллер MPC сохраняет сигналы ввода и вывода в заданных границах, когда ограничения изменяются в течение симуляции.

bdclose(mdl)

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

Похожие темы