Если установка нелинейна, контроллер, предназначенный для работы в конкретной целевой области, может работать плохо в других областях. Общим способом компенсации является создание множества контроллеров, каждый из которых предназначен для конкретной комбинации рабочих условий. Затем можно переключаться между контроллерами в режиме реального времени по мере изменения условий. Дополнительные сведения см. в разделе MPC с планированием усиления.
В следующем примере показано, как координировать несколько прогнозирующих контроллеров модели для этой цели.
Растение содержит две массы, M1 и M2, соединенный с двумя пружинами. Пружина с постоянной пружиной k1 тянет массу M1 справа, и пружина с постоянной пружиной k2 тянет массу M2 налево. Управляемая переменная является силой, вытягивающей массу M1 слева, показанная красной стрелкой на следующем рисунке.

Обе массы свободно перемещаются, пока не столкнутся. Столкновение неэластично, и массы держатся вместе до тех пор, пока их не разделит изменение приложенной силы. Поэтому для системы существует два режима работы с различной динамикой.
Цель управления состоит в том, чтобы сделать положение M1 отслеживать опорный сигнал, показанный синим треугольником на предыдущем изображении. Только положение M1 и контактный датчик доступны для обратной связи.
Определите параметры модели.
M1 = 1; % masses M2 = 5; k1 = 1; % spring constants k2 = 0.1; b1 = 0.3; % friction coefficients b2 = 0.8; yeq1 = 10; % wall mount positions yeq2 = -10;
Создание модели пространства состояния для, когда массы не соприкасаются; это когда масса M1 свободно передвигается.
A1 = [0 1; -k1/M1 -b1/M1]; B1 = [0 0; -1/M1 k1*yeq1/M1]; C1 = [1 0]; D1 = [0 0]; sys1 = ss(A1,B1,C1,D1); sys1 = setmpcsignals(sys1,'MV',1,'MD',2);
Создайте модель пространства состояния для соединения формообразующих элементов.
A2 = [0 1; -(k1+k2)/(M1+M2) -(b1+b2)/(M1+M2)]; B2 = [0 0; -1/(M1+M2) (k1*yeq1+k2*yeq2)/(M1+M2)]; C2 = [1 0]; D2 = [0 0]; sys2 = ss(A2,B2,C2,D2); sys2 = setmpcsignals(sys2,'MV',1,'MD',2);
Для обеих моделей:
Состояния - это положение и скорость M1.
Входами являются приложенная сила, которая является управляемой переменной (MV), и сигнал калибровки постоянной пружины, который является измеренным возмущением (MD).
Output - позиция M1.
Проектирование одного контроллера MPC для каждой модели установки. Оба контроллера идентичны, за исключением их внутренних моделей прогнозирования.
Определите одно и то же время выборки, Ts, горизонт прогнозирования, pи горизонт управления, m, для обоих контроллеров.
Ts = 0.2; p = 20; m = 1;
Создайте контроллеры MPC по умолчанию для каждой модели установки.
MPC1 = mpc(sys1,Ts,p,m); MPC2 = mpc(sys2,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. -->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.
Определите ограничения для управляемой переменной. Поскольку приложенная сила не может изменить направление, установите нижнюю границу равной нулю. Кроме того, задайте максимальную скорость изменения для входного усилия. Эти ограничения одинаковы для обоих контроллеров.
MPC1.MV = struct('Min',0,'Max',30,'RateMin',-10,'RateMax',10); MPC2.MV = MPC1.MV;
Моделирование производительности контроллеров с помощью блока контроллера MPC.
Откройте модель Simulink.
mdl = 'mpc_switching';
open_system(mdl)

В модели подсистема M1 массы моделирует движение массы M1, как при свободном перемещении, так и при подключении к M2. Подсистема массовых M2 моделирует движение массовых M2 при их свободном перемещении. Подсистемы выбора режима и сброса скорости координируют столкновение и разделение масс.
Модель содержит логику переключения, которая определяет, когда позиции M1 и M2 одинаковые. Результирующий сигнал переключения подключается к switch inport блока Multiple MPC Controllers и управляет активным контроллером MPC.
Укажите начальное положение для каждого формообразующего элемента.
y1initial = 0; y2initial = 10;
Чтобы указать запланированные контроллеры усиления, дважды щелкните блок Multiple MPC Controllers. В диалоговом окне «Параметры блока» укажите контроллеры как массив ячеек имен контроллеров. Установите начальные состояния для каждого контроллера в их соответствующее номинальное значение, указав состояния как {'[],'[]'}.

Нажмите кнопку ОК.
Запустите моделирование.
sim(mdl)
-->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. -->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. -->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.

Для просмотра результатов моделирования откройте область сигналов.
open_system([mdl '/signals'])

Изначально, MPC1 перемещает массу M1 к контрольной уставке. Примерно через 13 секунд, M2 сталкивается с M1. Переключающий сигнал изменяется с 1 на 2, который переключает управление на MPC2.
Столкновение движется M1 от своей уставки и MPC2 быстро возвращает объединенные массы в опорную точку.
Во время последующих переходов опорного сигнала, когда массы разделяются и сталкиваются с блоковыми переключателями нескольких контроллеров MPC между MPC1 и MPC2 соответственно. В результате объединенные массы быстро оседают к опорным точкам.
Чтобы продемонстрировать преимущества использования двух контроллеров MPC для данного приложения, смоделируйте систему, используя только MPC2.
Изменение MPC1 соответствовать MPC2.
MPC1save = MPC1; MPC1 = MPC2;
Запустите моделирование.
sim(mdl)


Когда массы не соединены, MPC2 прикладывает чрезмерную силу, так как ожидает большую массу. Это агрессивное управляющее действие вызывает колебательное поведение. Как только массы соединяются, эффективность управления улучшается, так как контроллер предназначен для этого состояния.
В качестве альтернативы, изменение MPC2 соответствовать MPC1 приводит к вялым управляющим действиям и длительному времени оседания при соединении масс.
Набор MPC1 вернуться к исходной конфигурации.
MPC1 = MPC1save;
Чтобы уменьшить вычислительные усилия в оперативном режиме, можно создать явный контроллер MPC для каждого рабочего условия и реализовать явное управление MPC по расписанию усиления с помощью блока «Несколько явных контроллеров MPC». Дополнительные сведения о явных контроллерах MPC см. в разделе Явные MPC.
Чтобы создать явный MPC-контроллер, сначала определите рабочие диапазоны для состояний контроллера, входных сигналов и опорных сигналов.
Создайте явный объект диапазона MPC с помощью соответствующего традиционного контроллера, MPC1.
range = generateExplicitRange(MPC1);
Укажите диапазоны для состояний контроллера. Оба MPC1 и MPC2 содержат состояния для:
Положение и скорость масс M1.
Интегратор из модели выходного возмущения по умолчанию.
По возможности используйте свои знания о заводе для определения диапазонов состояний. Например, первое состояние соответствует положению M1, который имеет диапазон от -10 до 10.
Установка диапазона переменной состояния может быть затруднена, когда состояние не соответствует физическому параметру, например, для состояния модели выходного возмущения. В этом случае собирать информацию о дальности с помощью моделирования с использованием типичных опорных сигналов и сигналов возмущения. Для этой системы можно активировать дополнительный est.state outport блока Multiple MPC Controllers и просмотр оценочных состояний с использованием области. При моделировании ответов контроллера используйте опорный сигнал, охватывающий ожидаемый рабочий диапазон.

Определите диапазоны состояний для явных контроллеров MPC на основе диапазонов расчетных состояний.
range.State.Min(:) = [-10;-8;-3]; range.State.Max(:) = [10;8;3];
Определите диапазон для опорного сигнала. Выберите опорный диапазон, который меньше M1 диапазон положения.
range.Reference.Min = -8; range.Reference.Max = 8;
Задайте диапазон манипулируемых переменных, используя определенные ограничения СН.
range.ManipulatedVariable.Min = 0; range.ManipulatedVariable.Max = 30;
Определите диапазон для измеренного сигнала возмущения. Так как измеренное возмущение является постоянным, укажите небольшой диапазон вокруг постоянного значения, 1.
range.MeasuredDisturbance.Min = 0.9; range.MeasuredDisturbance.Max = 1.1;
Создать явный контроллер MPC, соответствующий MPC1 с использованием указанного объекта диапазона.
expMPC1 = generateExplicitMPC(MPC1,range);
Regions found / unexplored: 4/ 0
Создать явный контроллер MPC, соответствующий MPC2. С тех пор MPC1 и MPC2 работать в одном и том же состоянии и входных диапазонах и иметь одинаковые ограничения, можно использовать один и тот же объект диапазона.
expMPC2 = generateExplicitMPC(MPC2,range);
Regions found / unexplored: 5/ 0
В общем, явные диапазоны MPC различных контроллеров могут не совпадать. Например, контроллеры могут иметь различные ограничения или диапазоны состояний. В таких случаях создайте отдельный явный объект диапазона MPC для каждого контроллера.
Рекомендуется проверять производительность каждого явного контроллера MPC перед реализацией явного MPC с запланированным усилением. Например, для сравнения производительности MPC1 и expMPC1, смоделировать отклик по замкнутому контуру каждого контроллера, используя sim.
r = [zeros(30,1); 5*ones(160,1); -5*ones(160,1)]; [Yimp,Timp,Uimp] = sim(MPC1,350,r,1); [Yexp,Texp,Uexp] = sim(expMPC1,350,r,1);
-->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.
Сравните выходные данные установки и управляемые последовательности переменных для двух контроллеров.
figure subplot(2,1,1) plot(Timp,Yimp,'b-',Texp,Yexp,'r--') grid on xlabel('Time (s)') ylabel('Output') title('Explicit MPC Validation') legend('Implicit MPC','Explicit MPC') subplot(2,1,2) plot(Timp,Uimp,'b-',Texp,Uexp,'r--') grid on ylabel('MV') xlabel('Time (s)')

Отклики замкнутого цикла и управляемые последовательности переменных неявных и явных контроллеров совпадают. Аналогичным образом можно проверить производительность expMPC2 против MPC2.
Если ответы неявных и явных контроллеров не совпадают, настройте явные диапазоны MPC и создайте новый явный контроллер MPC.
Чтобы реализовать явное управление MPC по расписанию усиления, замените блок Multiple MPC Controllers блоком Multiple Explicit MPC Controllers.
expModel = 'mpc_switching_explicit';
open_system(expModel)

Чтобы указать явные контроллеры MPC, дважды щелкните блок Несколько явных контроллеров MPC. В диалоговом окне «Параметры блока» укажите контроллеры как массив ячеек имен контроллеров. Установите начальные состояния для каждого контроллера в их соответствующее номинальное значение, указав состояния как {'[],'[]'}.

Нажмите кнопку ОК.
Если вы предварительно проверили явные контроллеры MPC, то замена и настройка блока Multiple Explicit MPC Controllers должны дать те же результаты, что и блок Multiple MPC Controllers.
Запустите моделирование.
sim(expModel)

Для просмотра результатов моделирования откройте область сигналов.
open_system([expModel '/signals'])

Явные MPC-контроллеры с планированием усиления обеспечивают ту же производительность, что и неявные MPC-контроллеры с планированием усиления.
bdclose('all')
Несколько явных контроллеров MPC | Несколько контроллеров MPC