exponenta event banner

Моделирование контроллера с нелинейным заводом

Вы можете использовать sim для моделирования замкнутой системы, состоящей из линейной модели установки и контроллера MPC.

Если установка является нелинейной моделью Simulink ®, необходимо провести линеаризацию установки (см. раздел Линеаризация с использованием линеаризатора модели в модуле Simulink Control Design) и разработать контроллер для линейной модели (см. Проектирование контроллера MPC в модуле Simulink). Для моделирования системы укажите контроллер в поле MPC block parameter MPC Controller и запустите модель Simulink с замкнутым контуром.

Кроме того, нелинейная модель может быть MEX-файлом или может потребоваться включить функции, недоступные в блоке MPC, такие как пользовательский модуль оценки состояния. mpcmove функция - вычислительный механизм Toolbox™ модельного предиктивного управления, который можно использовать в таких случаях. Недостатком является то, что вы должны дублировать инфраструктуру, которая sim функция и блок MPC обеспечивают автоматически.

Нелинейное приложение CSTR

CSTR модель, описанная в Linearize Simulink Models, является сильно нелинейной системой. Как показано в документе Design MPC Controller in Simulink, контроллер может регулировать эту установку, но ухудшается (и даже может стать нестабильным), если рабочая точка значительно изменяется.

Цель этого примера состоит в том, чтобы переопределить прогнозирующий контроллер в начале каждого интервала управления таким образом, чтобы его прогнозирующая модель, хотя и линейная, как можно точнее представляла последние условия растения. Это будет сделано путем многократной линеаризации нелинейной модели, что позволит контроллеру адаптироваться по мере изменения условий установки. Для получения дополнительной информации об этом подходе см. [1] и [2].

Пример кода для последовательной линеаризации

В следующем коде моделирование начинается в номинальной рабочей точке CSTR модель (концентрация = 8,57) и перемещается в более низкую точку (концентрация = 2), где скорость реакции намного выше. Требуемый код выглядит следующим образом:

[sys, xp] = CSTR_INOUT([],[],[],'sizes');
up = [10 298.15 298.15];
u = up(3);
tsave = [];
usave = [];
ysave = [];
rsave = [];
Ts = 1;
t = 0;
while t < 40
    yp = xp;
    % Linearize the plant model at the current conditions
    [a,b,c,d] = linmod('CSTR_INOUT',xp,up);   
    Plant = ss(a,b,c,d);
    Plant.InputGroup.ManipulatedVariables = 3;
    Plant.InputGroup.UnmeasuredDisturbances = [1 2];
    Model.Plant = Plant;
    
    % Set nominal conditions to the latest values
    Model.Nominal.U = [0 0 u];
    Model.Nominal.X = xp;
    Model.Nominal.Y = yp;
    
    dt = 0.001;
    
    simOptions.StartTime = num2str(t);
    simOptions.StopTime = num2str(t+dt);
    simOptions.LoadInitialState = 'on';
    simOptions.InitialState = 'xp';
    simOptions.SaveTime = 'on';
    simOptions.SaveState = 'on';
    simOptions.LoadExternalInput = 'on';
    simOptions.ExternalInput = '[t up; t+dt up]';
    
    simOut = sim('CSTR_INOUT',simOptions);
    
    T = simOut.get('tout');
    XP = simOut.get('xout');
    YP = simOut.get('yout');

    Model.Nominal.DX = (1/dt)*(XP(end,:)' - xp(:));
    
    % Define MPC controller for the latest model
    MPCobj = mpc(Model, Ts);
    MPCobj.W.Output = [0 1];
    
    % Ramp the setpoint
    r = max([8.57 - 0.25*t, 2]);
    
    % Compute the control action
    if t <= 0
        xd = [0; 0];
        x = mpcstate(MPCobj,xp,xd,[],u);
    end
    
    u = mpcmove(MPCobj,x,yp,[0 r],[]);
    
    % Simulate the plant for one control interval
    up(3) = u;
    
    simOptions.StartTime = num2str(t);
    simOptions.StopTime = num2str(t+Ts);
    simOptions.InitialState = 'xp';
    simOptions.ExternalInput = '[t up; t+Ts up]';
    
    simOut = sim('CSTR_INOUT',simOptions);
    
    T = simOut.get('tout');
    XP = simOut.get('xout');
    YP = simOut.get('yout');
    
    % Save results for plotting
    tsave = [tsave; T];
    ysave = [ysave; YP];
    usave = [usave; up(ones(length(T),1),:)];
    rsave = [rsave; r(ones(length(T),1),:)];
    
    xp = XP(end,:)';
    
    t = t + Ts;
end

figure(1)
plot(tsave,[ysave(:,2) rsave])
title('Residual Concentration')
figure(2)
plot(tsave,usave(:,3))
title('Coolant Temperature')

Результаты и обсуждение CSTR

Результаты печати отображаются ниже. Обратите внимание на следующие моменты:

  • Уставка увеличивается от начальной концентрации до желаемого конечного значения (см. пошаговые изменения на графике концентрации в реакторе ниже). Концентрация в реакторе плавно отслеживает этот клин с некоторой задержкой (см. гладкую кривую) и оседает в конечном состоянии с незначительным перепадом. Контроллер работает одинаково хорошо (и достигает конечной концентрации быстрее) для пошагового изменения уставки, но делает нереально быстрые изменения температуры хладагента (не показаны).

  • Для конечного установившегося состояния требуется температура хладагента 305,20 К (см. график температуры хладагента ниже). Интересной особенностью этой нелинейной установки является то, что, если она начинается в исходном установившемся состоянии (температура хладагента = 298,15 К), ступенчатая температура хладагента до 305,20 и выдержка не достигнет желаемой конечной концентрации 2. Фактически, в соответствии с этой простой стратегией концентрация в реакторе стабилизируется при конечном значении 7,88, далеком от желаемого значения. Успешный контроллер должен увеличивать температуру реактора до тех пор, пока реакция не «взлетит», после чего он должен снижать температуру теплоносителя, чтобы справиться с повышенной тепловой нагрузкой. Подход релинеаризации обеспечивает такой контроллер (см. следующие графики).

  • Функция linearize релинеаризует растение по мере развития его состояния. Эта функция обсуждалась ранее в разделе Линеаризация с использованием кода MATLAB.

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

  • Функция mpc определяет новый контроллер на основе релинеаризованной модели установки. Настройка выходного веса игнорирует измерение температуры, фокусируясь только на концентрации.

  • При t = 0 mpcstate функция инициализирует расширенный вектор состояния контроллера, x. После этого mpcmove функция автоматически обновляет его с помощью оценщика состояния контроллера по умолчанию. Также можно использовать расширенный фильтр Калмана (EKF), как описано в [1] и [2], в этом случае EKF сбросит mpcstate входные переменные на каждом шаге.

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

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

Помните, что обычный контроллер обратной связи или фиксированный контроллер панели управления Model Predictive Control Toolbox, настроенный для работы в исходном состоянии, станет нестабильным по мере перехода установки в конечное состояние. Периодическое обновление модели устраняет эту проблему автоматически и обеспечивает отличный контроль при любых условиях.

Ссылки

[1] Ли, Дж. Х. и Н. Л. Рикер, «Расширенный нелинейный прогнозирующий контроль на основе фильтра Калмана», Ind. Eng. Chem. Res., Vol. 33, No. 6, pp. 1530-1541 (1994).

[2] Рикер, Н. Л. и Дж. Х. Ли «Нелинейный модельный предиктивный контроль процесса вызова Теннесси Истмана», Computers & Chemical Engineering, том 19, № 9, стр. 961-981 (1995).