通过合并激活状态输出来简化 Stateflow 图
此示例说明激活状态数据如何简化某些 Stateflow® 图的设计,因为您不必维护与图层次结构高度相关的数据。当您启用激活状态数据时,Stateflow 通过输出端口向 Simulink® 报告状态活动,或将其作为图中的局部数据来报告。此示例说明如何通过添加激活状态输出数据来简化 Stateflow 图的设计。有关详细信息,请参阅Monitor State Activity Through Active State Data。
在旧模型 old_sf_car 中,Stateflow 图 shift_logic 通过更新输出数据 gear 的值来跟踪 gear_state 中的子状态活动。

通过合并激活状态数据,模型 sf_car 可避免反映图活动的手动数据更新。相反,图通过激活状态输出挡位自动输出子状态活动。

修改模型
为了简化 old_sf_car 模型的设计,请消除与图层次结构高度相关的数据,并启用对 gear_state 中子状态活动的自动监控。
步骤 1:消除状态活动的手动跟踪
在模型
old_sf_car中,打开图shift_logic。要打开符号窗格,请在建模选项卡中,选择符号窗格。
在
gear_state的每个子状态中,删除为输出数据变量gear赋值的 entry 动作。在符号窗格中,右键点击输出变量
gear并选择Delete。
步骤 2:启用激活状态输出
打开属性检查器。在建模选项卡中,选择属性检查器。
在 Stateflow 编辑器中,选择状态
gear_state。在属性检查器中,选中创建监控输出复选框并选择
Child activity。在数据名称字段中,输入激活状态数据的名称
gear。在枚举名称字段中,输入激活状态数据的枚举数据类型的名称
gearType。

步骤 3:将信号连接到 Simulink 模块
在 Simulink 模型中,添加 Cast To Double 模块。此模块将 Stateflow 图的枚举输出转换为
double类型的信号。有关详细信息,请参阅Data Type Conversion (Simulink)。将来自
shift_logic图的输出信号gear连接到 Cast To Double 模块。将来自 Cast To Double 模块的输出信号连接到 Transmission 子系统。
添加一个 Memory (Simulink) 模块。此模块可防止 Stateflow 图和 Threshold Calculation 子系统之间出现代数环。
再次从 Cast To Double 模块的输出信号连接到 Memory 模块。
将 Memory 模块的输出连接到 Threshold Calculation 子系统。

查看仿真结果
输出信号 gear 是由 Stateflow 管理的枚举类型。您可以通过将图连接到 Scope 模块来在仿真期间查看激活状态输出信号挡位。枚举值的名称与 gear_state 中的子状态名称匹配。额外的枚举值 None 表示没有子级被激活的时间步。

另请参阅
Data Type Conversion (Simulink) | Memory (Simulink)