exponenta event banner

Прогнозное управление моделью нелинейной установки с множеством входов и множеством выходов

В этом примере показано, как спроектировать прогнозирующий контроллер модели для многозаходной многоотходной нелинейной установки и смоделировать замкнутый контур в Simulink. Установка имеет 3 регулируемые переменные и 2 измеряемых выхода.

Линеаризация нелинейного растения

Для выполнения этого примера необходимы Design™ Simulink ® и Simulink Control.

% Check that both Simulink and Simulink Control Design are installed,
% otherwise display a message and return
if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink(R) is required to run this example.')
    return
end
if ~mpcchecktoolboxinstalled('slcontrol')
    disp('Simulink Control Design(R) is required to run this example.')
    return
end

Нелинейная установка реализована в модели Simulink mpc_nonlinmodel. Обратите внимание на нелинейность 0.2*u(1)^3 от первого входа к первому выходу.

open('mpc_nonlinmodel')

Линеаризация установки в рабочих условиях по умолчанию (начальные состояния блоков передаточных функций равны нулю) с помощью linearize на панели инструментов управления Simulink Control Design.

plant = linearize('mpc_nonlinmodel');

Присвойте имена переменным ввода-вывода.

plant.InputName = {'Mass Flow';'Heat Flow';'Pressure'};
plant.OutputName = {'Temperature';'Level'};
plant.InputUnit = {'kg/s' 'J/s' 'Pa'};
plant.OutputUnit = {'K' 'm'};

Обратите внимание, что, поскольку вы не определили никаких измеренных или неизмеренных возмущений или неизмеренных выходных данных, при создании контроллера MPC на основе plant, по умолчанию все входы установки считаются управляемыми переменными, а все выходы установки - измеряемыми выходами.

Проектирование контроллера MPC

Создать объект контроллера с периодом дискретизации, горизонтами прогнозирования и управления 0,2 с, 5 шагов и 2 хода соответственно;

mpcobj = mpc(plant,0.2,5,2);
-->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',{-3;-2;-2},'Max',{3;2;2},'RateMin',{-1000;-1000;-1000});

Определение весов для обрабатываемых переменных и выходных сигналов.

mpcobj.Weights = struct('MV',[0 0 0],'MVRate',[.1 .1 .1],'OV',[1 1]);

Отображение объекта mpc для просмотра его свойств.

mpcobj
 
MPC object (created on 27-Jan-2021 07:35:32):
---------------------------------------------
Sampling time:      0.2 (seconds)
Prediction Horizon: 5
Control Horizon:    2

Plant Model:        
                                      --------------
      3  manipulated variable(s)   -->|  5 states  |
                                      |            |-->  2 measured output(s)
      0  measured disturbance(s)   -->|  3 inputs  |
                                      |            |-->  0 unmeasured output(s)
      0  unmeasured disturbance(s) -->|  2 outputs |
                                      --------------
Disturbance and Noise Models:
        Output disturbance model: default (type "getoutdist(mpcobj)" for details)
         Measurement noise model: default (unity gain after scaling)

Weights:
        ManipulatedVariables: [0 0 0]
    ManipulatedVariablesRate: [0.1000 0.1000 0.1000]
             OutputVariables: [1 1]
                         ECR: 100000

State Estimation:  Default Kalman Filter (type "getEstimator(mpcobj)" for details)

Constraints:
 -3 <= Mass Flow (kg/s) <= 3, -1000 <= Mass Flow/rate (kg/s) <= Inf, Temperature (K) is unconstrained
  -2 <= Heat Flow (J/s) <= 2,  -1000 <= Heat Flow/rate (J/s) <= Inf,       Level (m) is unconstrained
    -2 <= Pressure (Pa) <= 2,    -1000 <= Pressure/rate (Pa) <= Inf                                  

Моделирование замкнутого контура с помощью Simulink

Откройте уже существующую модель Simulink для моделирования с замкнутым контуром. Модель завода идентична модели, используемой для линеаризации, в то время как контроллер MPC реализован с блоком контроллера MPC, который имеет объект mpc рабочего пространства mpcobj в качестве параметра. Опорным сигналом для первого выходного сигнала является сигнал шага, увеличивающийся с нуля до единицы для t = 0, как только начинается моделирование. Ссылка для второго вывода

mdl1 = 'mpc_nonlinear';
open_system(mdl1)

Выполните моделирование с замкнутым контуром.

sim(mdl1)
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Несмотря на наличие нелинейности, оба выхода хорошо отслеживают свои привязки через несколько секунд, в то время как, как и ожидалось, управляемые переменные остаются в пределах заданных жестких ограничений.

Изменение конструкции MPC для отслеживания сигналов клина

Для того чтобы оба отслеживали наклон при компенсации нелинейности, определите модель возмущений на обоих выходах как тройной интегратор (без нелинейности достаточно двойного интегратора).

outdistmodel = tf({1 0;0 1},{[1 0 0 0],1;1,[1 0 0 0]});
setoutdist(mpcobj,'model',outdistmodel);

Откройте уже существующую модель Simulink для моделирования с замкнутым контуром. Он идентичен предыдущей модели с замкнутым контуром, за исключением того факта, что опорное значение для первого выхода установки составляет npo больше шага, но является сигналом с нарастанием с наклоном 0,2 через 3 секунды.

mdl2 = 'mpc_nonlinear_setoutdist';
open_system(mdl2)

Выполните моделирование с замкнутым контуром в течение 12 секунд.

sim(mdl2,12)
-->Converting model to discrete time.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Моделирование без ограничений

Когда ограничения не активны, контроллер MPC ведет себя как линейный контроллер. Смоделировать две версии неограниченного контроллера MPC в замкнутом контуре, чтобы проиллюстрировать этот факт.

Сначала удалите зависимости из mcpobj.

mpcobj.MV = [];

Затем сбросьте модель выходного возмущения на значение по умолчанию (это делается только для того, чтобы получить более простую версию линейного контроллера MPC на следующем шаге).

setoutdist(mpcobj,'integrators');

Преобразовать неограниченный контроллер MPC в линейную инвариантную по времени (LTI) пространственную динамическую систему, имеющую в качестве входа вектор [ym; r], где ym - вектор измеренных выходных сигналов (на данном шаге), а r - вектор выходных опорных сигналов (на том же данном шаге).

LTI = ss(mpcobj,'r');         % use reference as additional input signal
-->Converting model to discrete time.
-->Assuming output disturbance added to measured output channel #1 is integrated white noise.
-->Assuming output disturbance added to measured output channel #2 is integrated white noise.
-->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.

Откройте уже существующую модель Simulink для моделирования с замкнутым контуром. Блок «опорных сигналов» содержит два ступенчатых сигнала (действующих через 4 и 0 секунд соответственно), которые используются в качестве опорных сигналов. Блок «Контур управления ПДК» эквивалентен первому замкнутому контуру, за исключением того, что на него в качестве входа подаются опорные сигналы. Блок «Линейный контур управления» эквивалентен блоку «Контур управления MPC», за исключением того, что контроллер является блоком LTI, имеющим объект ss рабочего пространства. LTI в качестве параметра.

refs = [1;1];                  % set values for step signal references
mdl3 = 'mpc_nonlinear_ss';
open_system(mdl3)

Выполните моделирование с замкнутым контуром в течение 12 секунд.

sim(mdl3)

Входные и выходные сигналы выглядят идентично для обоих контуров. Также следует отметить, что управляемая переменная больше не ограничена предыдущими константами.

Сравнение результатов моделирования

fprintf('Compare output trajectories: ||ympc-ylin|| = %g\n',norm(ympc-ylin));
disp('The MPC controller and the linear controller produce the same closed-loop trajectories.');
Compare output trajectories: ||ympc-ylin|| = 9.5904e-15
The MPC controller and the linear controller produce the same closed-loop trajectories.

Как и ожидалось, существует лишь незначительная разница из-за числовых ошибок.

Закройте все открытые модели Simulink без сохранения изменений.

bdclose all

См. также

| |

Связанные темы