Симуляция и структурированная генерация текста с использованием Simulink PLC Coder

В этом примере показано, как моделировать и генерировать структурированный текст для блока MPC Controller с помощью программного обеспечения Simulink ® PLC Coder™. Сгенерированный код использует одинарную точность.

Требуемые продукты

Чтобы запустить этот пример, необходимы Simulink и Simulink PLC Coder.

if ~mpcchecktoolboxinstalled('simulink')
    disp('Simulink is required to run this example.')
    return
end
if ~mpcchecktoolboxinstalled('plccoder')
    disp('Simulink PLC Coder is required to run this example.');
    return
end

Setup Окружения

Вы должны иметь разрешение на запись, чтобы сгенерировать соответствующие файлы и исполняемый файл. Поэтому перед началом симуляции и генерацией кода смените текущую директорию на временную директорию.

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);

Моделирование и генерация структурированного текста

Откройте модель Simulink.

mdl = 'mpc_plcdemo';
open_system(mdl)

Чтобы сгенерировать структурированный текст для блока MPC Controller, выполните следующие два шага:

  • Сконфигурируйте блок MPC, чтобы использовать данные с одной точностью. Установите свойство Output data type блока MPC Controller в single.

open_system([mdl '/Control System/MPC Controller'])

  • Поместите блок MPC в блок подсистемы и обработайте блок подсистемы как атомарный модуль. Выберите свойство Treat as atomic unit блока подсистемы.

Симулируйте модель в Simulink.

close_system([mdl '/Control System/MPC Controller'])
open_system([mdl '/Outputs//References'])
open_system([mdl '/Inputs'])
sim(mdl)
-->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.

Чтобы сгенерировать код с помощью PLC Coder, используйте plcgeneratecode команда.

disp('Generating PLC structure text... Please wait until it finishes.')
plcgeneratecode([mdl '/Control System']);
Generating PLC structure text... Please wait until it finishes.
### Generating PLC code for 'mpc_plcdemo/Control System'.
### Using <a href="matlab:configset.showParameterGroup('mpc_plcdemo', { 'PLC Code Generation' } )">model settings</a> from 'mpc_plcdemo' for PLC code generation parameters.
### Begin code generation for IDE <a href="matlab:configset.showParameterGroup('mpc_plcdemo', { 'PLC Code Generation' } )">codesys23</a>.
### Emit PLC code to file.
### Creating PLC code generation report <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples5/tpdaa0081f_716b_42a5_a8bd_c431180fbf1d/plcsrc/html/mpc_plcdemo/mpc_plcdemo_codegen_rpt.html')">mpc_plcdemo_codegen_rpt.html</a>.
### PLC code generation successful for 'mpc_plcdemo/Control System'.
### Generated files:
<a href="matlab: edit('plcsrc/mpc_plcdemo.exp')">plcsrc/mpc_plcdemo.exp</a>

Диалоговое окно Средство Просмотра показывает, что генерация кода ПЛК прошла успешно.

Закройте модель Simulink и вернитесь в исходную директорию.

bdclose(mdl)
cd(cwd)

Похожие темы