В этом примере показано, как моделировать и генерировать код в реальном времени для блока контроллера MPC с помощью Simulink ® Coder™. Код может генерироваться как в одной, так и в двух точностях.
Для выполнения этого примера необходимы Simulink и Simulink Coder.
if ~mpcchecktoolboxinstalled('simulink') disp('Simulink is required to run this example.') return end if ~mpcchecktoolboxinstalled('simulinkcoder') disp('Simulink Coder is required to run this example.'); return end
Для создания соответствующих файлов и исполняемого файла необходимо иметь разрешение на запись. Поэтому перед началом моделирования и создания кода измените текущий каталог на временный.
cwd = pwd; tmpdir = tempname; mkdir(tmpdir); cd(tmpdir);
Определите завод SISO.
plant = ss(tf([3 1],[1 0.6 1]));
Определите контроллер MPC для завода.
Ts = 0.1; %Sample time p = 10; %Prediction horizon m = 2; %Control horizon Weights = struct('MV',0,'MVRate',0.01,'OV',1); % Weights MV = struct('Min',-Inf,'Max',Inf,'RateMin',-100,'RateMax',100); % Input constraints OV = struct('Min',-2,'Max',2); % Output constraints mpcobj = mpc(plant,Ts,p,m,Weights,MV,OV);
По умолчанию блоки контроллера MPC используют данные двойной точности для моделирования и генерации кода.
Моделирование модели в Simulink.
mdl1 = 'mpc_rtwdemo';
open_system(mdl1)
sim(mdl1)
-->Converting model to discrete time. -->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.

Усилия контроллера и выходные данные завода сохраняются в базовом рабочем пространстве в виде переменных. u и yсоответственно.
Создайте модель с помощью slbuild команда.
disp('Generating C code... Please wait until it finishes.') set_param(mdl1,'RTWVerbose','off') slbuild(mdl1);
Generating C code... Please wait until it finishes. ### Starting build procedure for: mpc_rtwdemo ### Successful completion of build procedure for: mpc_rtwdemo Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================================ mpc_rtwdemo Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 19.345s
В системе Windows ® исполняемый файл с именемmpc_rtwdemo.exe появляется во временном каталоге после завершения процесса построения.
Запустите исполняемый файл.
if ispc disp('Running executable...') status = system(mdl1); else disp('The example only runs the executable on Windows system.') end
The example only runs the executable on Windows system.
После успешного выполнения исполняемого файла (состояние = 0) создается файл данных с именемmpc_rtwdemo.mat появляется во временном каталоге.
Сравните ответы из созданного кода (rt_u и rt_y) с ответами из предыдущего моделирования в Simulink (u и y).


Ответы численно равны.
Также можно настроить блок MPC для использования данных с одной точностью при моделировании и создании кода.
mdl2 = 'mpc_rtwdemo_single';
open_system(mdl2)

Для этого установите для свойства Output data type блока MPC Controller значение single.
Моделирование модели в Simulink.
sim(mdl2)
Усилия контроллера и выходные данные завода сохраняются в базовом рабочем пространстве в виде переменных. u1 и y1соответственно.
Создайте модель с помощью slbuild команда.
disp('Generating C code... Please wait until it finishes.') set_param(mdl2,'RTWVerbose','off') slbuild(mdl2);
Generating C code... Please wait until it finishes. ### Starting build procedure for: mpc_rtwdemo_single ### Successful completion of build procedure for: mpc_rtwdemo_single Build Summary Top model targets built: Model Action Rebuild Reason =================================================================================================== mpc_rtwdemo_single Code generated and compiled Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 14.566s
В системе Windows исполняемый файл с именем mpc_rtwdemo_single.exe появляется во временном каталоге после завершения процесса построения
Запустите исполняемый файл.
if ispc disp('Running executable...') status = system(mdl2); else disp('The example only runs the executable on Windows system.') end
The example only runs the executable on Windows system.
После успешного выполнения исполняемого файла (состояние = 0) создается файл данных с именемmpc_rtwdemo_single.mat появляется во временном каталоге.
Сравните ответы из созданного кода (rt_u1 и rt_y1) с ответами из предыдущего моделирования в Simulink (u1 и y1).


Ответы численно равны.
Закройте модели Simulink и вернитесь в исходную папку.
bdclose(mdl1) bdclose(mdl2) cd(cwd)