2023-12-02 03:40:41
Stateflow中事件的定义及使用
在Stateflow中,事件(Events)是非图形对象中最常用且最重要的元素之一。它们用于在状态机或流程图中触发状态转移或动作。以下是关于Stateflow中事件的定义及使用的详细解释:
一、事件的定义
添加事件:
向Stateflow框图中增加事件,可以通过Symbols Pane中的Event选项进行添加。
或者在菜单中选择MODELING,再选择Model Explorer,通过对话框添加事件。
事件属性:
Name:事件的名称,命名原则与C语言变量一致,字母开头,可由字母、数字和下划线组成,对大小写敏感。
Type:事件的作用类型,分为Input Event(输入事件)、Local Event(本地事件)和Output Event(输出事件)。
Input Event:从Simulink框图输入到Stateflow中的事件,即外部触发事件。
Local Event:在状态图内部发挥作用的事件,主要用于并行运行的状态图中。
Output Event:从Stateflow框图输出到Simulink中的事件,用于驱动或触发其他Stateflow框图或子系统动作。
Port:仅在事件作用范围设置为Input from Simulink或Output to Simulink时有效。用于指定输入或输出事件的索引或序号。
Trigger:触发属性,有四个可能值:Either(双边沿触发)、Rising(上升沿触发)、Falling(下降沿触发)和Function call(函数调用)。
Description:为事件增加必要的文本说明,代码生成时,该说明可显示在代码相应位置。
Document Link:可添加必要的超文本链接。
二、事件的使用
设置事件:
以事件E为例,设置其Name为E,Scope属性为Input from Simulink,Trigger属性为Rising(上升沿),Port/Index属性为1(假设只有一个事件)。
在Stateflow图形编辑器中增加状态,并创建相应的转移和默认转移,设置转移标签为E。
事件驱动状态转移:
在Simulink模型中增加事件源,如常数模块和Manual Switch模块,搭建起信号源。
设置Simulink模型的仿真时间,运行仿真。通过单击Manual Switch模块向Stateflow框图发出事件E。
在Stateflow框图运行时,被蓝色高亮显示的状态为当前被激活的状态,转移如果被蓝色高亮显示,则表示该转移正在被检测或执行。
Stateflow框图运行时依赖于事件驱动,事件E的驱动使状态图在On和Off状态之间切换。
使用多个输入事件:
同一个Stateflow图块可以使用多个输入事件,但每个图块只能有一个事件输入端口。
需要将不同的事件通过Mux块组合输入为事件向量,然后将组合后的输入事件向量连接到Stateflow图块上。
使用Mux块组合输入事件向量时,决定了事件与信号之间的对应关系。Mux块垂直摆放时,最上面的输入信号端口为向量的第一个元素,对应Stateflow输入事件的第一个事件;水平摆放时,顺序为从左至右。
如果多个输入事件同时发生,Stateflow将按照定义时间的索引顺序依次处理。
默认转移的注意事项:
默认转移上不应增加事件的限制,否则可能导致状态机无法正确激活或默认转移无法执行。
如果必须根据具体发生事件来触发整个系统的执行,可考虑将Stateflow框图包含于使能子系统中,并设置触发信号类型为Reset。
三、示例
以下是一个简单的Stateflow事件使用示例:

在Stateflow框图运行时,被蓝色高亮显示的状态为当前激活状态,转移被高亮显示则表示正在被检测或执行。通过事件E的触发,状态图在On和Off状态之间切换,直到仿真结束。
综上所述,Stateflow中的事件是触发状态转移或动作的关键元素。通过合理定义和使用事件,可以实现复杂的逻辑控制和状态管理。