Share Data Globally
When Do You Need to Use Global Data?
You might need to use global data with aMATLAB Functionblock if:
You have multiple MATLAB®functions that use global variables and you want to call these functions fromMATLAB Functionblocks.
You have an existing model that uses a large amount of global data and you are adding aMATLAB Functionblock to this model, and you want to avoid cluttering your model with additional inputs and outputs.
You want to scope the visibility of data to parts of the model.
Using Global Data with the MATLAB Function Block
In Simulink®, you store global data using data store memory. You implement data store memory using eitherData Store Memoryblocks orSimulink.Signal
objects. How you store global data depends on the number and scope of your global variables. For more information, seeLocal and Global Data StoresandChoosing How to Store Global Data.
HowMATLABGlobals Relate to Data Store Memory
In MATLAB functions in Simulink, global declarations are not mapped to the MATLAB global workspace. Instead, you register global data with theMATLAB Function块映射the data to data store memory. This difference allows global data in MATLAB functions to inter-operate with the Simulink solver and to provide diagnostics if they are misused.
A global variable resolves hierarchically to the closest data store memory with the same name in the model. The same global variable occurring in two differentMATLAB Functionblocks might resolve to different data store memory depending on the hierarchy of your model. You can use this ability to scope the visibility of data to a subsystem.
How to Use Globals with the MATLAB Function Block
To use global data in yourMATLAB Functionblock, or in any code that this block calls, you must:
Declare a global variable in yourMATLAB Functionblock, or in any code that is called by theMATLAB Functionblock.
Register aData Store Memoryblock or
Simulink.Signal
object that has the same name as the global variable with theMATLAB Functionblock.
For more information, seeStoring Data Using Data Store Memory BlocksandStoring Data Using Simulink.Signal Objects.
Choosing How to Store Global Data
The following table summarizes whether to useData Store Memoryblocks orSimulink.Signal
objects.
If you want to: | Use: | For more information: |
---|---|---|
Use a small number of global variables in a single model that does not use model reference. | Data Store Memoryblocks. Note UsingData Store Memoryblocks scopes the data to the model. |
Storing Data Using Data Store Memory Blocks |
Use a large number of global variables in a single model that does not use model reference. |
|
Storing Data Using Simulink.Signal Objects |
Share data between multiple models (including referenced models). |
Note If you useData Store Memoryblocks as well as |
Storing Data Using Simulink.Signal Objects |
Storing Data Using Data Store Memory Blocks
This model demonstrates how aMATLAB Functionblock uses the global data stored in aData Store MemoryblockA
.
Open thedsm_demo.mdlmodel.
Double-click theMATLAB Functionblock to open theMATLAB Function Block Editor.
TheMATLAB Functionblock code declares a global variable
A
. The block modifies the value ofA
during each execution.functiony = fcn%#codegenglobalA; A = A+1; y = A;
Make sure the global variable is registered to theMATLAB Functionblock. SeeCreate and Define MATLAB Function Block Variables.
In theModelingtab, in theDesignsection, clickSymbols Pane.
In theSymbolspane, select the dataA. This data uses the same name as the global variable. Right click and select
Inspect...
to open the Property Inspector.In the Property Inspector, theScopeof the data is set to
Data Store Memory
.
Double-click theData Store Memoryblock
A
. In the Block Parameters dialog box, you see that theData store nameA
matches the global variable name. The block has an initial value of25
.When you add aData Store Memoryto your model:
Set theData store nameto match the name of the global variable in yourMATLAB Functionblock code.
SetData typeto an explicit data type. The data type cannot be
auto
.Set theSignal typeand specify anInitial value.
Simulate the model.
TheMATLAB Functionblock reads the initial value of global data stored in
A
and updates the value ofA
each time it executes.
Storing Data UsingSimulink.Signal
Objects
This model demonstrates how aMATLAB Functionblock uses the global data stored in aSimulink.Signal
objectA
.
Open thesimulink_signal_localmodel.
The model uses a
Simulink.Signal
object in the model workspace.Note
To use the global data with multiple models, create a
Simulink.Signal
object in the base workspace .Make sure that the
Simulink.Signal
object is added to the Model Explorer.In theModelingtab, clickModel Explorer.
In the left pane of the Model Explorer, select the model workspace for the
simulink_signal_local
model.TheContentspane displays the data in the model workspace.
Click the
Simulink.Signal
objectA
.In the right pane, make sure that the Model Explorer displays these attributes for
A
.Attribute Value Data type double
Complexity real
Dimensions 1
Initial value 5
See alsoModel Explorer.
Double-click theMATLAB Functionblock to open its editor.
TheMATLAB Functionblock modifies the value of global data
A
each time it executes.function y = fcn %#codegen global A; A = A+1; y = A;
Make sure the
Simulink.Signal
object is registered to theMATLAB Functionblock.In theModelingtab, in theDesignsection, clickSymbols Pane.
In theSymbolspane, select the dataA. This data uses the same name as the global variable. Right click and select
Inspect...
to open the Property Inspector.在属性检查器,设置Scopeof the data to
Data Store Memory
.
Simulate the model.
TheMATLAB Functionblock reads the initial value of global data stored in
A
and updates the value ofA
each time it executes.
Using Data Store Diagnostics to Detect Memory Access Issues
You can configure your model to provide run-time and compile-time diagnostics for avoiding problems with data stores. Diagnostics are available in the Configuration Parameters dialog box and the parameters dialog box for theData Store Memoryblock. These diagnostics are available forData Store Memoryblocks only, not forSimulink.Signal
objects. For more information on using data store diagnostics, seeData Store Diagnostics.
Note
If you pass data store memory arrays to functions, optimizations such asA=foo(A)
might result in the code generation software marking the entire contents of the array as read or written even though only some elements were accessed.
Limitations of Using Shared Data in MATLAB Function Blocks
There is noData Store Memoryblock support for:
MATLAB value classes
Variable-sized data