与 Simulink 和 MATLAB 工作区共享数据
Stateflow® 图通过以下方式与 Simulink® 模型中的其他模块进行交互:
通过输入和输出连接共享数据。
从 MATLAB® 基础工作区导入初始数据值。
将最终数据值保存到 MATLAB 基础工作区。
图还可以访问 Simulink 参数和数据存储。有关详细信息,请参阅Share Parameters with Simulink and the MATLAB Workspace和Access Data Store Memory from a Chart。
与 Simulink 共享输入和输出数据
数据通过输入端口从 Simulink 流入 Stateflow 图。数据通过输出端口从 Stateflow 图流入 Simulink。
要在图中定义输入或输出数据,请执行下列操作:
向图添加数据对象,如添加 Stateflow 数据所述。
设置数据对象的作用域属性。
要定义输入数据,请将作用域设置为“
输入数据
”。输入端口显示在图模块的左侧。要定义输出数据,请将作用域设置为“
输出数据
”。输出端口显示在图模块的右侧。
默认情况下,端口值按添加数据对象的顺序显示。您可以通过修改数据的端口属性来更改以上分配。更改输入或输出数据对象的端口属性时,其余输入或输出数据对象的端口值将自动重新编号。
设置数据对象的数据类型,如指定 Stateflow 数据的类型中所述。
设置数据对象的大小,如指定 Stateflow 数据的大小中所述。
注意
不能将 Stateflow 输入数据的类型或大小设置为接受来自 Simulink 的基于帧的数据。
从 MATLAB 基础工作区初始化数据
您可以通过在 MATLAB 基础工作区和 Stateflow 层次结构中定义数据符号的初始值来导入数据符号的初始值。
在 MATLAB 基础工作区中定义和初始化变量。
在 Stateflow 层次结构中,定义一个数据对象并使其名称与 MATLAB 变量的名称相同。
选择数据对象的允许初始值解析为参数属性。
仿真开始时,会发生数据解析。在此过程中,Stateflow 数据对象会从关联的 MATLAB 变量获取其初始值。
一维 Stateflow 数组与相同大小的 MATLAB 行和列向量兼容。例如,大小为 5
的 Stateflow 向量与大小为 [1,5]
的 MATLAB 行向量或大小为 [5,1]
的列向量兼容。Stateflow 数组的每个元素都初始化为与 MATLAB 基础工作区中数组的对应元素相同的值。
初始化的时间取决于 Stateflow 数据对象的数据父级和作用域。
数据父级 | 作用域 | 初始化时间 |
---|---|---|
Stateflow 图 | 输入 | 不适用 |
输出、局部 | 开始仿真时,或 Stateflow 图重新初始化为 Simulink 使能子系统的一部分时 | |
包含历史结点的状态 | 局部 | 开始仿真时,或 Stateflow 图重新初始化为 Simulink 使能子系统的一部分时 |
不包含历史结点的状态 | 局部 | 状态的 entry 动作 |
函数(图形函数、真值表函数和 MATLAB 函数) | 输入、输出 | 调用函数调用子系统时 |
局部 | 开始仿真时,或 Stateflow 图重新初始化为 Simulink 使能子系统的一部分时 |
将数据保存到 MATLAB 基础工作区
在仿真结束时,使用 C 作为动作语言的 Stateflow 图可以将数据对象的最终值保存到 MATLAB 基础工作区。
打开模型资源管理器。在建模选项卡中,选择模型资源管理器。
双击内容窗格中的数据对象。
在“数据”属性对话框的描述窗格中,选择将最终值保存到基础工作区。
此选项可用于除“常量
”和“参数
”之外的所有作用域的数据符号。