Управление баком скачка Используя дискретный набор управления MPC

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

Обзор

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

  • Накачайте 1, переменная скорость и может поставить скорость потока жидкости между 0 и 100 L/min. Скорость изменения скорости потока жидкости ограничивается 50 L/min в минуту.

  • Накачайте 2, является релейным и поставляет 100 L/min, когда это включено.

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

mdl = 'ReservoirMPC';
open_system(mdl)

Цель управления состоит в том, чтобы использовать два насоса (переменные, которыми управляют), чтобы обеспечить объем бака в его заданном значении, когда выпускной клапан вводит воздействие баку скачка (измеренное воздействие).

Когда нисходящий спрос является постоянным, Насос 1 средства управления уровень бака скачка, идеально сохраняя его около 50%. Когда воздействие происходит, оба насоса могут начать бой, чтобы обеспечить объем бака между 25% и 75% в течение переходного времени. Когда нисходящий спрос высок, однако, Насос 2 должен включить.

Таким образом, контроллер MPC управляет двумя насосами, таким образом что:

  • Уровень бака остается около 50%, когда спрос является постоянным.

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

Получите линейный объект из нелинейной модели бака скачка

В модели Simulink модель бака скачка находится в подсистеме Резервуара. Это реализует следующие уравнения.

  • dV/dt = Qin - Qout, где V объем бака между 0 и 100 (процент)

  • Qin = Q1 + Q2, сумма двух скоростей потока жидкости насоса (L/min)

  • Qout = 0.2*sqrt(2)*X*sqrt(V), уровень выброса (L/min)

  • X выпускной клапан, открывающийся между 0 и 100 (процент)

Объект запускается в его номинальной установившейся рабочей точке: накачайте 1, достигает 70 L/min, накачайте 2, выключено, выпускной клапан в 35%, и объем бака в 50%. Создайте линейную модель бака в этой рабочей точке. Эта модель имеет три входных параметров: Q1 и Q2 переменные, которыми управляют, и X измеренное воздействие.

plant = ss(-0.7,[1 1 -2],1,[0 0 0]);
plant = setmpcsignals(plant,'MV',[1 2],'MD',3);

Спроектируйте контроллер MPC с непрерывными и дискретными действиями управления

Создайте линейный контроллер MPC с шагом расчета одного второго и предсказания по умолчанию и управляйте горизонтами.

Ts = 1;
MPCobj = mpc(plant,Ts);
-->The "PredictionHorizon" property of "mpc" object is empty. Trying PredictionHorizon = 10.
-->The "ControlHorizon" property of the "mpc" object is empty. Assuming 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.Model.Nominal.U = [70; 0; 35];
MPCobj.Model.Nominal.Y = 50;
MPCobj.Model.Nominal.X = 50;
MPCobj.Model.Nominal.DX = 0;

Выберите MVRate взвешивает таким образом, что контроллер настраивает насос 1 в предпочтении к насосу 2. В другом wirds диспетчер штрафует насос 1 перемещение меньше, чем насос 2 перемещения.

MPCobj.Weights.MVrate = [0.1 0.2];

Задайте границы безопасности на непрерывном вводе и выводе и выходных сигналах.

MPCobj.OV.Min = 0;
MPCobj.OV.Max = 100;
MPCobj.MV(1).Min = 0;
MPCobj.MV(1).Max = 100;
MPCobj.MV(1).RateMin = -50;
MPCobj.MV(1).RateMax = 50;

Поскольку насос 2 имеет две дискретных настройки (0 и 100 L/min), задайте дискретный набор в Type свойство контроллера. В зависимости от вашего приложения, Type свойство может также быть "двоичным файлом" или "целым числом".

MPCobj.MV(2).Type = [0 100];

Симулируйте ответ с обратной связью с воздействием выброса

Симуляция начинается при номинальном условии. В t = 5, подъемы уровня выброса, пока насос 1 не на его полную мощность и насос 2, должны включить. Накачайте 2, включает в t = 12. Накачайте 1, должен затем уменьшиться максимально быстро, чтобы сохранить уровень в границах, затем установить новую установившуюся рабочую точку. В t = 60, выброс начинает сползать вниз к номинальному состоянию. Контроллер MPC сохраняет объем в идеальной области значений, и насос 2 не показывает быстрое циклическое повторение.

sim(mdl)
open_system([mdl '/Volume'])
-->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.

ans = 

  Simulink.SimulationOutput:
                   tout: [106x1 double] 

     SimulationMetadata: [1x1 Simulink.SimulationMetadata] 
           ErrorMessage: [0x0 char] 

Следующий рисунок показывает скорости потока жидкости от двух насосов.

open_system([mdl '/Pumps'])

Накачайте 2, включается и выключается контроллером MPC как ожидалось.

bdclose(mdl) % close simulink model.

Смотрите также

Похожие темы