В этом примере показано, как создать и протестировать прогнозирующий контроллер модели из командной строки.
Этот пример использует модель объекта управления, описанную в Контроллере Проекта Используя MPC Designer. Создайте модель в пространстве состояний объекта и установите некоторые дополнительные свойства модели, такие как имена и модули входа, состояния и выходных переменных.
% continuous-time state-space matrices, with temperature as first output A = [ -5 -0.3427; 47.68 2.785]; B = [ 0 1 0.3 0]; C = [0 1; 1 0]; D = zeros(2,2); % create state space plant model CSTR = ss(A,B,C,D); % set names CSTR.InputName = {'T_c', 'C_A_f'}; % set names of input variables CSTR.OutputName = {'T', 'C_A'}; % set names of output variables CSTR.StateName = {'C_A', 'T'}; % set names of state variables % set units CSTR.InputUnit = {'deg K', 'kmol/m^3'}; % set units of input variables CSTR.OutputUnit = {'deg K', 'kmol/m^3'}; % set units of output variables CSTR.StateUnit = {'kmol/m^3', 'deg K'}; % set units of state variables
Обратите внимание на то, что эта модель выведена из линеаризации нелинейной модели вокруг рабочей точки. Поэтому значения линейных сигналов входа и выхода модели представляют отклонения относительно своих значений рабочей точки в нелинейной модели. Для получения дополнительной информации смотрите, что Линеаризация Использует код MATLAB.
Температура хладагента является переменной, которой управляют, (MV), концентрация реагента притока неизмеренный входной (UD) воздействия, реакторная температура является измеренным выходом (MO), и концентрация реагента является неизмеренным выходом (UO).
CSTR=setmpcsignals(CSTR,'MV',1,'UD',2,'MO',1,'UO',2);
Используйте damp
отобразить коэффициент затухания, собственную частоту и постоянную времени полюсов линейной модели объекта управления.
damp(CSTR)
Pole Damping Frequency Time Constant (rad/seconds) (seconds) -1.11e+00 + 1.09e+00i 7.13e-01 1.55e+00 9.03e-01 -1.11e+00 - 1.09e+00i 7.13e-01 1.55e+00 9.03e-01
Постройте переходной процесс разомкнутого контура.
step(CSTR)
Учитывая устойчивость номинала объекта, постоянная времени приблизительно 1 секунды предлагает шаг расчета, не больше, чем 0,5 секунд. Со временем выборки 0,5 секунд горизонт предсказания 10 шагов может покрыть целое время урегулирования объекта разомкнутого контура, таким образом, можно использовать оба параметра исходное предположение. Более короткий шаг расчета подразумевает менее доступное время для расчета управления. Более длинный горизонт (больше шагов) подразумевает большее число переменных оптимизации, и поэтому более в вычислительном отношении требовательную проблему, которая будет решена в доступном временном шаге.
Чтобы улучшить ясность примера, подавите сообщения Командного окна от диспетчера MPC.
old_status = mpcverbosity('off');
Создайте прогнозирующий контроллер модели с контрольным интервалом или шаг расчета, 0.5
секунды, и со всеми другими свойствами в их значениях по умолчанию, включая горизонт предсказания 10
шаги и горизонт управления 2
шаги.
mpcobj = mpc(CSTR,0.5)
MPC object (created on 22-Jul-2021 21:12:21): --------------------------------------------- Sampling time: 0.5 (seconds) Prediction Horizon: 10 Control Horizon: 2 Plant Model: -------------- 1 manipulated variable(s) -->| 2 states | | |--> 1 measured output(s) 0 measured disturbance(s) -->| 2 inputs | | |--> 1 unmeasured output(s) 1 unmeasured disturbance(s) -->| 2 outputs | -------------- Indices: (input vector) Manipulated variables: [1 ] Unmeasured disturbances: [2 ] (output vector) Measured outputs: [1 ] Unmeasured outputs: [2 ] Disturbance and Noise Models: Output disturbance model: default (type "getoutdist(mpcobj)" for details) Input disturbance model: default (type "getindist(mpcobj)" for details) Measurement noise model: default (unity gain after scaling) Weights: ManipulatedVariables: 0 ManipulatedVariablesRate: 0.1000 OutputVariables: [1 0] ECR: 100000 State Estimation: Default Kalman Filter (type "getEstimator(mpcobj)" for details) Unconstrained
Отобразите список свойств контроллера и их текущих значений.
get(mpcobj)
Ts: 0.5 PredictionHorizon (P): 10 ControlHorizon (C): 2 Model: [1x1 struct] ManipulatedVariables (MV): [1x1 struct] OutputVariables (OV): [1x2 struct] DisturbanceVariables (DV): [1x1 struct] Weights (W): [1x1 struct] Optimizer: [1x1 struct] Notes: {} UserData: [] History: 22-Jul-2020 21:12:21
Отображенный History
значение будет отличаться для вашего контроллера, поскольку оно зависит от того, когда контроллер был создан. Для описания доступных для редактирования свойств контроллера MPC введите mpcprops
в командной строке.
Используйте запись через точку, чтобы изменить эти свойства. Например, измените горизонт предсказания в 15
.
mpcobj.PredictionHorizon = 15;
Некоторые имена свойства имеют псевдонимы. Например, можно использовать псевдоним MV
вместо ManipulatedVariables
. Кроме того, многие свойства контроллера являются структурами, содержащими дополнительные поля. Используйте запись через точку, чтобы просмотреть и изменить эти значения полей. Например, с тех пор по умолчанию, у контроллера нет ограничений на переменные, которыми управляют, и выходные переменные, можно просмотреть и изменить эти ограничения с помощью записи через точку.
Установите ограничения для переменной контроллера, которой управляют.
mpcobj.MV.Min = -10; % K mpcobj.MV.Max = 10; % K mpcobj.MV.RateMin = -1; % K/step mpcobj.MV.RateMax = 1; % K/step
Можно сократить имена свойства при условии, что сокращение однозначно. Можно также просмотреть и изменить контроллер, настраивающий веса. Например, измените веса для плавающего курса, которым управляют, и выходных переменных.
mpcobj.W.ManipulatedVariablesRate = 0.3; mpcobj.W.OutputVariables = [1 0];
Можно также задать изменяющиеся во времени ограничения и веса по горизонту предсказания, который переключает на каждом временном шаге. Например, чтобы обеспечить переменную, которой управляют, чтобы изменяться более медленно к концу горизонта предсказания, введите:
MPCobj.MV.RateMin = [-2; -1.5; -1; -1; -1; -0.5];
MPCobj.MV.RateMax = [2; 1.5; 1; 1; 1; 0.5];
-0.5
и 0.5
значения используются для четвертого шага и вне.
Точно так же можно задать различные веса выходной переменной для каждого шага горизонта предсказания. Например, введите:
MPCobj.W.OutputVariables = [0.1 0; 0.2 0; 0.5 0; 1 0];
Можно также изменить характеристики подавления помех контроллера. Смотрите setEstimator
, setindist
, и setoutdist
для получения дополнительной информации.
Сгенерируйте отчет относительно потенциальной устойчивости во время выполнения и проблем эффективности.
review(mpcobj)
В этом примере, review
команда нашла две потенциальных проблемы с проектом. Первое предупреждение вызывается тем, что вес на C_A
ошибка на выходе является нулем. Второе предупреждение вызывается тем, что существуют трудные ограничения на оба MV
и MVRate
.
Можно прокрутить вниз, чтобы видеть больше информации о каждом отдельном результате испытаний.
Используйте sim
функционируйте, чтобы запустить линейную симуляцию системы. Например, симулируйте ответ с обратной связью MPCobj
для 26
контрольные интервалы. При запуске со второго шага задайте заданные значения 2
и 0
для реакторной температуры (сначала выход) и концентрация реагента (второй выход) соответственно. Обратите внимание на то, что заданное значение для концентрации проигнорировано, потому что настраивающийся вес для второго выхода является нулем.
T = 26; r = [0 0; 2 0]; sim(mpcobj,T,r)
Можно изменить опции симуляции с помощью mpcsimopt
. Например, запустите симуляцию с переменными, выключенными ограничениями, которыми управляют.
mpcopts = mpcsimopt;
mpcopts.Constraints = 'off';
sim(mpcobj,T,r,mpcopts)
Первый шаг переменной, которой управляют, теперь превышает заданный 1
- модульное ограничение уровня.
Можно также выполнить симуляцию с несоответствием объекта/модели. Например, задайте объект с 50% большими усилениями, чем те в модели, используемой контроллером и задержкой 0,1 секунд.
mpcopts.Model = tf(1.5,1,'InputDelay',0.1)*CSTR;
sim(mpcobj,T,r,mpcopts)
Несоответствие объекта/модели ухудшает эффективность контроллера, как можно сказать от колебательного поведения ответов замкнутого цикла. Ухудшение может быть серьезным и должно быть протестировано в зависимости от конкретного случая.
Другие опции симуляции включают сложение заданной шумовой последовательности к переменным, которыми управляют, или измерили выходные параметры, симуляции разомкнутого контура и предварительную опцию для лучшего отслеживания заданного значения или измерили подавление помех.
Симулируйте систему, хранящую результаты симуляции в рабочем пространстве MATLAB.
[y,t,u] = sim(mpcobj,T,r);
Этот синтаксис подавляет автоматический графический вывод и возвращает результаты симуляции в y
T
и u
переменные. Можно использовать результаты для других целей, включая пользовательский графический вывод. Например, постройте переменную, которой управляют, и обе выходных переменные на том же рисунке.
figure subplot(2,1,1) plot(t,u) title('Inputs') legend('T_c') subplot(2,1,2) plot(t,y) title('Outputs') legend('T','C_A') xlabel('Time')
Восстановите mpcverbosity
установка.
mpcverbosity(old_status);