Simulation and Structured Text Generation Using Simulink PLC Coder
This example shows how to simulate and generate Structured Text for an MPC Controller block using Simulink® PLC Coder™ software. The generated code uses single-precision.
Set Up Environment
You must have write-permission to generate the relevant files and the executable. Therefore, before starting simulation and code generation, change the current directory to a temporary directory.
cwd = pwd;
tmpdir = tempname;
mkdir(tmpdir);
cd(tmpdir);
[SUCCESS,MESSAGE,MESSAGEID] = copyfile(fullfile(cwd,'mpc_plc_codegen.slx'));
Define Plant Model and MPC Controller
Define a SISO plant.
plant = ss(tf([3 1],[1 0.6 1]));
Define the MPC controller for the plant.
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);
Simulate and Generate Structured Text
Open the Simulink model.
mdl = 'mpc_plc_codegen';
open_system(mdl)
To generate structured text for the MPC Controller block, complete the following two steps:
Configure the MPC block to use single-precision data. Set the Output data type property of the MPC Controller block to
single
.
open_system([mdl '/Control System/MPC Controller'])
Put the MPC block inside a subsystem block and treat the subsystem block as an atomic unit. Select the Treat as atomic unit property of the subsystem block.
Simulate the model in 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 #1 is integrated white noise. -->"Model.Noise" is empty. Assuming white noise on each measured output.
To generate code with the PLC Coder, use the plcgeneratecode
command.
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_plc_codegen/Control System'. ### Using <a href="matlab:configset.showParameterGroup('mpc_plc_codegen', { 'PLC Code Generation' } )">model settings</a> from 'mpc_plc_codegen' for PLC code generation parameters. ### Begin code generation for IDE <a href="matlab:configset.showParameterGroup('mpc_plc_codegen', { 'PLC Code Generation' } )">codesys23</a>. ### Emit PLC code to file. ### Creating PLC code generation report <a href="matlab:web('/tmp/Bdoc24b_2725827_1599930/tpcd777b3e_b7f1_41c8_b46b_99d07a2a105d/plcsrc/html/mpc_plc_codegen/mpc_plc_codegen_codegen_rpt.html')">mpc_plc_codegen_codegen_rpt.html</a>. ### PLC code generation successful for 'mpc_plc_codegen/Control System'. ### Generated files: <a href="matlab: edit('plcsrc/mpc_plc_codegen.exp')">plcsrc/mpc_plc_codegen.exp</a>
The Message Viewer dialog box shows that PLC code generation was successful.
See Also
Objects
Blocks
Related Examples
- Generate Code to Compute Optimal MPC Moves in MATLAB
- Simulation and Code Generation Using Simulink Coder