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.
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.
In MATLAB functions in Simulink, global declarations are not mapped to the MATLAB global workspace. Instead, you register global data with theMATLAB Function将数据映射到数据块存储记忆。这个维ifference 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.
To use global data in yourMATLAB Functionblock, or in any code that this block calls, you must:
Declare a global variable in yourMATLAB Function块,或任何代码调用MATLAB Functionblock.
Register aData Store Memoryblock orSimulink.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.
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 |
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 variableA
. 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. SeeDefine MATLAB Function Block Data.
In theMATLAB Function Block Editor, selectPorts & Data Managerto open the Ports and Data Manager dialog box.
In the Ports and Data Manager, select the dataAin the left pane. This data uses the same name as the global variable.
TheScopeof the data is set toData Store Memory
.
Double-click theData Store MemoryblockA
. 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 beauto
.
Set theSignal typeand specify anInitial value.
Simulate the model.
TheMATLAB Functionblock reads the initial value of global data stored inA
and updates the value ofA
each time it executes.
Simulink.Signal
ObjectsThis model demonstrates how aMATLAB Functionblock uses the global data stored in aSimulink.Signal
objectA
.
Open thesimulink_signal_localmodel.
The model uses aSimulink.Signal
object in the model workspace.
Note
To use the global data with multiple models, create aSimulink.Signal
object in the base workspace .
Make sure that theSimulink.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 thesimulink_signal_local
model.
TheContentspane displays the data in the model workspace.
Click theSimulink.Signal
objectA
.
In the right pane, make sure that the Model Explorer displays these attributes forA
.
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 dataA
each time it executes.
function y = fcn %#codegen global A; A = A+1; y = A;
Make sure theSimulink.Signal
object is registered to theMATLAB Functionblock.
In theMATLAB Function Block Editor, selectPorts & Data Managerto open the Ports and Data Manager dialog box.
In the Ports and Data Manager, select the dataAin the left pane. This data uses the same name as the global variable.
Set theScopeof the data toData Store Memory
.
Simulate the model.
TheMATLAB Functionblock reads the initial value of global data stored inA
and updates the value ofA
each time it executes.
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.
There is noData Store Memoryblock support for:
MATLAB value classes
Variable-sized data