Изменение входных и выходных границ во время выполнения

Этот пример показывает, как изменить входные и выходные пределы насыщения в управлении в реальном времени. Для симуляций как в командной строке, так и в 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)

См. также

Похожие темы