exponenta event banner

Моделирование и создание кода с помощью Simulink Coder

В этом примере показано, как моделировать и генерировать код в реальном времени для блока контроллера 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);

Определение модели установки и контроллера MPC

Определите завод 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)

Связанные темы