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