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