Этот пример показывает, как получить передачу bumpless при переключении образцового прогнозирующего контроллера от руководства до автоматической операции или наоборот.
В частности, это показывает, как входной сигнал EXT.MV к блоку MPC может использоваться, чтобы усовершенствовать внутреннее состояние MPC, когда оператор или другой контроллер сознают ситуацию.
Линейный разомкнутый цикл динамическая модель объекта управления следующие:
num = [1 1]; den = [1 3 2 0.5]; sys = tf(num,den);
Создайте контроллер MPC с моделью объекта управления, шагом расчета и горизонтами.
Ts = 0.5; % Sampling time p = 15; % Prediction horizon m = 2; % Control horizon mpcobj = mpc(sys,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.MV=struct('Min',-1,'Max',1);
Измените выходной вес.
mpcobj.Weights.Output=0.01;
Чтобы достигнуть передачи bumpless, начальные состояния вашего объекта и контроллера должны быть тем же самым, которое имеет место для объекта и контроллера в этом примере. Однако, если начальные условия для вашей системы не соответствуют, можно установить начальные состояния контроллера к начальным состояниям объекта. Для этого извлеките объект mpcstate
от своего диспетчера и установите начальное состояние объекта.
stateobj = mpcstate(MPC1); stateobj.Plant = x0;
где x0
является вектором начальных состояний объекта. Затем в диалоговом окне блока MPC Controller, устанавливает Начальное состояние Контроллера на stateobj
.
Чтобы запустить этот пример, Simulink® требуется.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink(R) is required to run this example.') return end
Моделируйте управление с обратной связью линейной модели объекта управления в Simulink. В этой модели, в диалоговом окне блока MPC Controller, свойство MPC Controller задано как mpcobj
.
mdl = 'mpc_bumpless';
open_system(mdl)
sim(mdl)
-->Converting the "Model.Plant" property of "mpc" object to state-space. -->Converting model to discrete time. -->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.
Не используя внешний сигнал мВ, контроллер MPC больше не может обеспечить передачу bumpless, потому что состояния внутреннего контроллера не оцениваются правильно.
delete_line(mdl,'Switch/1','Unit Delay/1'); delete_line(mdl,'Unit Delay/1','MPC Controller/3'); delete_block([mdl '/Unit Delay']); delete_line(mdl,'Switching/1','MPC Controller/4'); set_param([mdl '/MPC Controller'],'mv_inport','off'); set_param([mdl '/MPC Controller'],'switch_inport','off'); set_param([mdl '/Yplots'],'Ymin','-1~-0.1') set_param([mdl '/Yplots'],'Ymax','3~1.1') set_param([mdl '/MVplots'],'Ymin','-1.1~-5') set_param([mdl '/MVplots'],'Ymax','1.1~10') sim(mdl)
Теперь переход от руководства до автоматического управления намного менее сглажен. Отметьте большой "удар" между временем = 180 и 200.
bdclose(mdl)