图执行的类型
Stateflow 图的生命周期
Stateflow® 图会经历几个执行阶段:
阶段 | 描述 |
---|---|
非激活 | 图不具有激活状态 |
激活 | 图具有激活状态 |
休眠 | 图具有激活状态,但没有要处理的事件 |
当 Simulink® 模型首次触发 Stateflow 图时,图未激活且不具有激活状态。在图执行并完全处理来自 Simulink 模型的初始触发事件后,它将控制权转移回模型并进入休眠模式。在发生下一个 Simulink 触发事件时,图从休眠状态被激活。
未激活图的执行
当图未激活并且首次被来自 Simulink 模型的事件触发时,它会首先执行其默认流程图集(请参阅Order of Execution for a Set of Flow Charts)。如果此动作不会导致进入某状态并且图具有并行分解,则每个并行状态都将被激活(请参阅进入图或状态)。
如果执行默认流路径不会导致进入某状态,则会发生状态不一致错误。
激活图的执行
在图首次被 Simulink 模型触发后,它成为激活图。当图接收到来自模型的另一个事件时,它将再次作为激活图执行。如果图不具有状态,则每次执行都等同于初始化图。否则,将执行激活子状态。并行状态按照其激活顺序执行。
初始化时的图执行
您可以将 Stateflow 图设置为仅在收到输入事件时执行。默认情况下,这些图在收到其第一个输入事件之前保持非激活状态。
如果希望图在仿真开始时立即激活,您可以启用初始化时执行(进入)图图属性。当您打开此选项时,图的状态配置将在时间 0 处初始化,而不是在首次发生输入事件时。图的默认转移路径在模型初始化阶段的时间 0 处执行,对应于 S-Function 的 mdlInitializeConditions() (Simulink) 阶段。有关详细信息,请参阅初始化时执行(进入)图。
注意
如果此图的输出连接到 SimEvents® 模块,请不要选中此复选框。要了解有关在模型中同时使用 Stateflow 图和 SimEvents 模块的详细信息,请参阅 SimEvents 文档。
由于初始化阶段的瞬态性质,请不要在图的默认转移路径中执行以下这些会在初始化阶段执行的动作及其相关联的状态 entry 动作。请遵循以下指导原则:
不要访问图输入数据,因为连接到图输入端口的模块可能尚未初始化其输出。
不要从其他图中调用导出的图形函数,因为这些图可能尚未初始化。
不要广播函数调用输出事件,因为触发子系统可能尚未初始化。
要控制对图输入数据的无效访问的诊断操作级别,请打开“配置参数”对话框,在诊断 > Stateflow 窗格中,将图初始化中无效的输入数据访问参数设置为无、警告或错误。默认设置为警告。有关详细信息,请参阅Invalid input data access in chart initialization (Simulink)。
不包含状态的图会忽略初始化时执行(进入)图图属性。
初始化时的执行示例
在此示例中,Pulse 模块每两秒触发一次图。每次 Pulse 模块触发图时,图都执行一个单步。图在两次触发之间不执行步骤。
图包含符号 output
,其初始值为 0
。当 entry
动作执行时,它会将 output
的值更改为 1。当 during
动作执行时,它会将 output
的值更改为 2
。
当禁用初始化时执行(进入)图图属性时,图在仿真开始时处于非激活状态。
在 2 秒处,Pulse 模块触发图。图进入 Set_Output
状态。entry
动作执行,将 output
设置为 1。
在 4 秒处,Pulse 模块再次触发图。图会保持 Set_Output
状态。during
动作执行,将 output
设置为 2
。
当启用初始化时执行(进入)图图属性时,图会在仿真开始后立即执行一步。图进入 Set_Output
状态。entry
动作执行,将 output
设置为 1。
在 2 秒处,Pulse 模块触发图。图会保持 Set_Output
状态。during
动作执行,将 output
设置为 2
。