В этом примере показано, как решить, с помощью Simulink, проблемы MPC, в которой некоторые переменные, которыми управляют, принадлежат дискретному набору.
Для повторяемости результатов зафиксируйте начальное значение генератора случайных чисел.
rng(0);
Создайте дискретное время строго соответствующий объект с 4 состояниями, двумя входными параметрами и одним выходом.
plant = drss(4,1,2); plant.D = 0;
Увеличьте полномочия управления первого входа, чтобы лучше проиллюстрировать его вклад управления.
plant.B(:,1)=plant.B(:,1)*2;
Создайте контроллер MPC с одним вторым временем выборки, 20
горизонт предсказания шагов и 5
шаги управляют горизонтом.
mpcobj = mpc(plant,0.1,20,5);
-->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.MV(1).Type = 'integer';
в этом случае первая переменная, которой управляют, будет ограничена быть целым числом.
mpcobj.MV(1).Type = [-1 -0.7 -0.3 0 0.2 0.5 1];
Используйте ограничения скорости, чтобы осуществить максимальные инкрементные и декрементные значения для первой переменной, которой управляют.
mpcobj.MV(1).RateMin = -0.5; mpcobj.MV(1).RateMax = 0.5;
Установите пределы для второй переменной, которой управляют, чей (непрерывный) тип по умолчанию не был изменен.
mpcobj.MV(2).Min = -2; mpcobj.MV(2).Max = 2;
Создайте выходной опорный сигнал, равный нулю из шагов 20
к 35
и равняйтесь 0.6
до и после.
r = ones(1,50)*0.6; r(20:35) = 0;
Создайте симуляцию замкнутого цикла Simulink с помощью блока MPC Controller с mpcobj
объект передал в качестве параметра, чтобы управлять объектом с двойным интегратором. В данном примере откройте существующую ранее модель Simulink dcsdemo.slxc
.
open('dcsdemo.slx')
Можно теперь запустить модель путем нажатия на Run или при помощи команды MATLAB sim
.
sim('dcsdemo.slx')
-->No sample time provided for plant model. Assuming sample time = controller's sample time = 0.1. -->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: [51x1 double] SimulationMetadata: [1x1 Simulink.SimulationMetadata] ErrorMessage: [0x0 char]
После симуляции графики двух осциллографов показывают, что переменная, которой управляют, не превышает предел и объект, выход отслеживает опорный сигнал приблизительно после половины секунды.
Дискретный набор управления MPC