В этом примере показано, как изменять пределы насыщения ввода и вывода в режиме реального времени. Для моделирования в командной строке и 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.
mpcobj.MV.Min = 1; mpcobj.MV.Max = 1; mpcobj.OV.Max = 1;
Открыть модель Simulink.
mdl = 'mpc_varbounds';
open_system(mdl)

В этой модели входной минимальный и максимальный порты ограничения (umin и umaxи выходной порт максимального ограничения (ymax) блока контроллера MPC включены. Поскольку минимальная выходная граница не ограничена, 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)