В этом примере показано, как создать и протестировать прогнозирующий контроллер модели из командной строки.
В этом примере используется модель завода, описанная в разделе Design Controller Using MPC Designer. Создайте модель «state-space» для завода и задайте некоторые дополнительные свойства модели.
A = [-0.0285 -0.0014; -0.0371 -0.1476];
B = [-0.0850 0.0238; 0.0802 0.4462];
C = [0 1; 1 0];
D = zeros(2,2);
CSTR = ss(A,B,C,D);
CSTR.InputName = {'T_c','C_A_i'};
CSTR.OutputName = {'T','C_A'};
CSTR.StateName = {'C_A','T'};
CSTR.InputGroup.MV = 1;
CSTR.InputGroup.UD = 2;
CSTR.OutputGroup.MO = 1;
CSTR.OutputGroup.UO = 2;
Чтобы улучшить ясность примера, подавьте сообщения командного окна от контроллера MPC.
old_status = mpcverbosity('off');
Создание прогнозирующего контроллера модели с контрольным интервалом или временем выборки 1 и со всеми другими свойствами по умолчанию.
Ts = 1; MPCobj = mpc(CSTR,Ts)
MPC object (created on 27-Jan-2021 07:27:44):
---------------------------------------------
Sampling time: 1 (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: 1
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: 27-Jan-2020 07:27:44
Показанный History значение будет отличаться для контроллера, так как зависит от того, когда был создан контроллер. Для получения описания редактируемых свойств контроллера MPC введите mpcprops в командной строке.
Для изменения этих свойств используйте точечную нотацию. Например, измените горизонт прогнозирования на 15.
MPCobj.PredictionHorizon = 15;
Можно сокращать имена свойств при условии, что аббревиатура однозначна.
Многие свойства контроллера являются структурами, содержащими дополнительные поля. Используйте точечную нотацию для просмотра и изменения этих значений полей. Например, можно задать единицы измерения для выходных переменных контроллера. OutputUnit свойство предназначено только для отображения и является необязательным.
MPCobj.Model.Plant.OutputUnit = {'Deg C','kmol/m^3'};
По умолчанию контроллер не имеет ограничений на управляемые переменные и выходные переменные. Эти ограничения можно просматривать и изменять с помощью точечных обозначений. Например, установите ограничения для управляемой переменной контроллера.
MPCobj.MV.Min = -10; MPCobj.MV.Max = 10; MPCobj.MV.RateMin = -3; MPCobj.MV.RateMax = 3;
Также можно просматривать и изменять веса настройки контроллера. Например, измените веса для регулируемой переменной скорости и выходных переменных.
MPCobj.W.ManipulatedVariablesRate = 0.3; MPCobj.W.OutputVariables = [1 0];
Можно также определить изменяющиеся во времени ограничения и веса на горизонте прогнозирования, которые сдвигаются на каждом временном шаге. Изменяющиеся во времени ограничения имеют нелинейный эффект, когда они активны. Например, чтобы заставить управляемую переменную изменяться медленнее к концу горизонта прогнозирования, введите:
MPCobj.MV.RateMin = [-4; -3.5; -3; -2.5];
MPCobj.MV.RateMax = [4; 3.5; 3; 2.5];
-2.5 и 2.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)


Первое перемещение управляемой переменной теперь превышает указанное 3- ограничение скорости единицы измерения.
Можно также выполнить моделирование с несоответствием завода/модели. Например, определите завод с более высоким коэффициентом усиления на 50%, чем в модели, используемой контроллером.
Plant = 1.5*CSTR; MPCopts.Model = Plant; sim(MPCobj,T,r,MPCopts)


Несоответствие между заводом и моделью незначительно снижает производительность контроллера. Деградация может быть серьезной и должна проверяться в каждом конкретном случае.
Другие варианты включают в себя добавление определенной шумовой последовательности к управляемым переменным или измеряемым выходам, моделирование с разомкнутым контуром и опцию предварительного просмотра для лучшего отслеживания уставок или отклонения измеряемых возмущений.
Сохраните результаты моделирования в рабочей области MATLAB.
[y,t,u] = sim(MPCobj,T,r);
Синтаксис подавляет автоматическую печать и возвращает результаты моделирования. Результаты можно использовать для других задач, включая пользовательскую печать. Например, постройте график управляемой переменной и обеих выходных переменных на одном рисунке.
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);