Create Structures in MATLAB Function Blocks
You can create and use structures for input, output, local, persistent, or parameter variables in MATLAB Function blocks. Structures in MATLAB Function blocks can contain fields of any type and size, including mux signals, buses, and arrays of structures.
Before you create a structure, you must decide the scope of the MATLAB Function variable. See Create and Define MATLAB Function Block Variables.
Input Variables
When you create structure for input variables, the MATLAB Function block determines the type, size, and complexity of the structure from the input signal. To define a structure for an input variable:
Create a
Simulink.Bus
object in the base workspace that defines the structure.Identify or add an input variable to the MATLAB Function block. Input variables have the Scope property set to
Input
.Set the variable Type property to
Inherit: Same as Simulink
orBus: <object name>
. For<object name>
, enter the name of theSimulink.Bus
object that defines the structure properties.
Buses in a Simulink® model appear inside MATLAB Function blocks as structures.
Output Variables
When you create structures for outputs variables, you create a
Simulink.Bus
object and then define the type, size, and complexity of the
variable in the MATLAB® function code. The properties in the code and the object must match. To define
structures for outputs variables:
Create a
Simulink.Bus
object in the base workspace to define the structure.Identify or add output variables to the MATLAB Function block. Output variables have the Scope property set to
Output
.Set the Type property to
Bus: <object name>
. For<object name>
, enter the name of theSimulink.Bus
object that defines the structure.Initialize the output structure as a variable in the MATLAB function, as described in Structure Definition for Code Generation. Match the structure configuration of the output variable to the
Simulink.Bus
object, including the number, type, and sizes of each element.
Structure outputs from the MATLAB Function block appear as buses in Simulink models. MATLAB Function blocks support nonvirtual bus outputs but do not support virtual bus outputs.
Local Variables
To define local variables that are structures, define the structure in the MATLAB function, as described in Structure Definition for Code Generation. You do not define local variables in the Symbols pane, and you cannot modify the properties in the Property Inspector. By default, MATLAB Function blocks clear local variable values after each time step.
Persistent Variables
To define persistent variables that are structures, declare the variable as persistent
in the function code. See persistent
and Initialize Persistent Variables in MATLAB Functions. For example, to
declare the persistent variable, myVar
, enter:
persistent myVar
Then define the variable structure in the MATLAB function. You do not define persistent variables in the Symbols pane, and they do not have properties that you can modify in the Property Inspector.
Parameter Variables
To define parameter variables that are structures:
Create a structure variable in the base workspace, model workspace, or a masked subsystem that contains the MATLAB Function block.
Identify or add parameter variables to the MATLAB Function block. See Use Data in Multiple MATLAB Function Blocks by Defining Parameter Variables. Parameter variables have the Scope property set to
Parameter
. Match the names of the variables.
fimath
Properties of Nontunable Structure Parameters
The initial values of the structure determine the fimath
properties
for nontunable structure parameters that contain fixed-point values. The
fimath
properties of the MATLAB Function block that
you define in the Property Inspector do not specify these values.
Global Variables
You can define global variables in MATLAB Function blocks to access
simulation data from Simulink.Signal
objects or Data Store
Memory blocks. See Access Data Store Data in MATLAB Function Blocks. To define global variables that are structures:
Create a
Simulink.Bus
object in the base workspace to define the structure.Identify or add global variables to the MATLAB Function block. Global variables have the Scope property set to
Data Store Memory
. Variables with this scope inherit their properties from the associated data in the Data Store Memory block orSimulink.Signal
object.Declare the global variable in the function code. For example, to declare the global variable
myVar
, enter:global myVar
For an example, see Write Buses from Data Store Memory to a MATLAB Function Block.
Assign Values to Structures and Fields
After you define the structure, you can assign values to the structure, substructure, or field of the structure variable. Follow these guidelines:
Operation | Conditions |
---|---|
Assign one structure to another structure | You must define each structure with the same number, type, and size of
fields, either as Simulink.Bus objects in the base workspace or
locally as implicit structure declarations. |
Assign one structure to a substructure of a different structure | You must define the structure with the same number, type, and size of fields
as the substructure, either as Simulink.Bus objects in the base
workspace or locally as a structure declaration. |
Assign an element of one structure to an element of another structure | The elements must have the same type and size. |
For example, this table describes valid and invalid structure assignments based on the specifications for the model described in Read and Write Buses with a MATLAB Function Block:
Assignment | Valid or Invalid? | Rationale |
---|---|---|
outbus = mystruct; | Valid | The Simulink.Bus object MainBus defines
the structure outbus and the local definition of
mystruct matches the field properties of
MainBus . |
outbus = inbus; | Valid | The Simulink.Bus object, MainBus , defines
both outbus and inbus . |
outbus1 = inbus.ele3; | Valid | Because the Simulink.Bus object SubBus
defines both outbus1 and inbus.ele3 , they
have the same type and size. |
outbus1 = inbus; | Invalid | A different Simulink.Bus object defines structure
outbus1 and inbus . |
Limitations for Structures in MATLAB Function Blocks
You cannot use structures that contain cell arrays or classes for Simulink signals, parameters, or data store memory.
You cannot use variable-size data with arrays of buses. See Group Nonvirtual Buses in Arrays of Buses.