Integrate User-Defined Function Blocks, Data Types, and Global Variables into Generated Structured Text
This example shows how to integrate user-defined function blocks, data types, and global variables into generated structured text. You can integrate user-defined function blocks, data types, and global variables into your structured text code by creating blocks, data types, and variables in Simulink® and excluding them from the code generation. You can then add your user-generated code into the empty definitions. You can use this technique to customize your model to meet specific requirements.
Open the model.
The model consists of a top-level subsystem that accepts an input bus signal,
InBus, from a bus creator block. The Subsystem block contains a MATLAB Function Block named
ExternallyDefinedBlock and a Gain block with the Gain parameter set to the global tunable parameter
Prepare Model for External Integration
To integrate identifiers such as externally defined function blocks, data types, and global tunable paremeters, you should prepare the model by marking these identifiers to be excluded from the generated code. To exclude these elements from the generated code:
In the top-level model, select the Subsystem block.
In the Apps tab, click PLC Coder.
In the PLC Code tab, click Settings > PLC Code Generation Settings. In the left pane, click Identifiers.
In the Identifier Names section, enter
ExternallyDefinedBlock InBus K1to omit the MATLAB Function block named
InBusbus signal, and
K1global tunable parameter. Click OK.
The identifiers you enter here are excluded from the generated structured text code. You can then replace these elements with your custom definitions.
Generate and Inspect Code
To generate structured text code:
In the PLC Code tab, click Settings > PLC Code Generation Settings. Change Target IDE to
3S CoDeSys 2.3. Click OK.
Select the Subsystem block and in the PLC Code tab, click Generate PLC Code.
Alternatively, use the
plcgeneratecode function, to generate structured text code.
generatedFiles = plcgeneratecode('plcdemo_external_symbols/Subsystem');
Inspect Generated Code
The generated code contains calls to the function block
ExternallyDefinedBlock, but the definition of the function block has been omitted. Similarly, the definition of bus type
InBus1 and global variable
K1 have also been omitted. You can then enter your own custom content into the generated definitions.