В этом примере показано, как создать и протестировать прогнозирующий контроллер модели из командной строки.
Этот пример использует модель объекта управления, описанную в Контроллере Проекта Используя MPC Designer. Создайте модель в пространстве состояний объекта и установите некоторые дополнительные свойства модели.
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 26-Jul-2019 15:56:26): --------------------------------------------- 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: 26-Jul-2020 15:56:26
Отображенный 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);