Main Content

图执行的类型

Stateflow 图的生命周期

Stateflow® 图会经历几个执行阶段:

阶段描述
非激活图不具有激活状态
激活图具有激活状态
休眠图具有激活状态,但没有要处理的事件

当 Simulink® 模型首次触发 Stateflow 图时,图未激活且不具有激活状态。在图执行并完全处理来自 Simulink 模型的初始触发事件后,它将控制权转移回模型并进入休眠模式。在发生下一个 Simulink 触发事件时,图从休眠状态被激活。

请参阅Use Events to Execute Charts

未激活图的执行

当图未激活并且首次被来自 Simulink 模型的事件触发时,它会首先执行其默认流程图集(请参阅Order of Execution for a Set of Flow Charts)。如果此动作不会导致进入某状态并且图具有并行分解,则每个并行状态都将被激活(请参阅进入图或状态)。

如果执行默认流路径不会导致进入某状态,则会发生状态不一致错误。

激活图的执行

在图首次被 Simulink 模型触发后,它成为激活图。当图接收到来自模型的另一个事件时,它将再次作为激活图执行。如果图不具有状态,则每次执行都等同于初始化图。否则,将执行激活子状态。并行状态按照其激活顺序执行。

初始化时的图执行

默认情况下,图在首次唤醒时,它会执行默认转移路径。此时,图可以访问输入、写入输出和广播事件。

如果希望图从已知配置开始执行,可以启用初始化时执行(进入)图图属性。当您打开此选项时,图的状态配置将在时间 0 处初始化,而不是在首次发生输入事件时。图的默认转移路径在模型初始化阶段的时间 0 处执行,对应于 S-Function 的 mdlInitializeConditions() (Simulink) 阶段。有关详细信息,请参阅初始化时执行(进入)图

注意

如果此图的输出连接到 SimEvents® 模块,请不要选中此复选框。要了解有关在模型中同时使用 Stateflow 图和 SimEvents 模块的详细信息,请参阅 SimEvents 文档。

由于初始化阶段的瞬态性质,请不要在图的默认转移路径中执行以下这些会在初始化阶段执行的动作及其相关联的状态 entry 动作。请遵循以下指导原则:

  • 不要访问图输入数据,因为连接到图输入端口的模块可能尚未初始化其输出。

  • 不要从其他图中调用导出的图形函数,因为这些图可能尚未初始化。

  • 不要广播函数调用输出事件,因为触发子系统可能尚未初始化。

要控制对图输入数据的无效访问的诊断操作级别,请打开“配置参数”对话框,在诊断 > Stateflow 窗格中,将图初始化中无效的输入数据访问参数设置为警告错误。默认设置为警告。有关详细信息,请参阅Invalid input data access in chart initialization (Simulink)

在不包含状态的 Stateflow 图中忽略在初始化时执行。

初始化时的执行示例

在此示例中,Step Function 模块的值在 5 秒后从 0 上升到 1,从而触发图。

Simulink model that triggers a chart after 5 seconds.

The chart sets the value of output to 1.

Triggered chart. The default transition connects to the Set_Output state. On entry, the Set_Output state sets the value of the output symbol to 1.

当您禁用初始化时执行(进入)图图属性时,Scope 模块最初将 output 的值显示为 0,这是未初始化符号的默认值。5 秒后,Step Function 模块触发图,这会将 output 的值设置为 1

Scope block after disabling the Execute (enter) Chart Initialization chart property. From 0 to 5 seconds, output displays a value of 0. From 5 to 10 seconds, output displays a value of 1.

当您启用初始化时执行(进入)图图属性时,该图会在仿真开始后立即执行。在 0 秒时,Scope 模块将 output 的值显示为 1

Scope block after enabling the Execute (enter) Chart Initialization chart property. Starting at 0 seconds, output displays a value of 1.

相关主题