В этом примере показано, как сгенерировать код CUDA и использовать графический процессор, чтобы вычислить оптимальные перемещения MPC в Simulink™.
Используйте двойной интегратор в качестве объекта.
plant = tf(1,[1 0 0]);
Создайте объект MPC для объекта со временем выборки 0,1 секунд и предсказание и управляйте горизонтом 10 и 3 шагов, соответственно.
mpcobj = mpc(plant, 0.1, 10, 3);
-->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.
Ограничьте переменную, которой управляют, между –1 и 1.
mpcobj.MV = struct('Min',-1,'Max',1);
Создайте симуляцию замкнутого цикла Simulink с помощью блока MPC Controller с mpcobj
объект передал как параметр, чтобы управлять объектом с двойным интегратором. В данном примере откройте существующий ранее gpudemo
Модель Simulink.
open_system('gpudemo')
Откройте диалоговое окно Configuration Parameters путем нажатия на Model Settings. Затем в разделе Code Generation выберите код Generate GPU.
Можно теперь запустить модель путем нажатия на Run или при помощи команды MATLAB sim
. Прежде, чем запустить симуляцию модель сгенерирует код CUDA из модели Simulink и скомпилирует его, чтобы получить исполняемый файл MEX. Когда модель симулирована, этот файл называется, и симуляция выполняется на графическом процессоре.
sim('gpudemo')
-->Converting the "Model.Plant" property of "mpc" object to state-space. -->Converting model to discrete time. Assuming no disturbance added to measured output channel #1. -->The "Model.Noise" property of the "mpc" object is empty. Assuming white noise on each measured output channel.
После симуляции графики двух осциллографов показывают, что переменная, которой управляют, не превышает предел и объект, выход отслеживает опорный сигнал приблизительно после 3 секунд.
Здесь, целая модель Simulink выполняется на графическом процессоре. Чтобы развернуть только блок MPC на графическом процессоре, можно создать модель, имеющую только блок MPC внутри. Обычно во встроенных управляющих модулях, развернутая модель содержит блок контроллера плюс несколько интерфейсных блоков для сигналов ввода/вывода.