通过广播事件同步模型组件
一个事件是一个Stateflow®对象,该对象可以触发这些对象中的一个的操作:
状态流图中的并行状态
另一个Stateflow图表
一个仿真软件®触发或函数调用子系统
出于模拟目的,状态流图中的事件数量没有限制。然而,对于代码生成,底层C编译器强制将理论上的限制限制为2311事件。
类型的事件
一个隐式的事件是在图表执行期间广播的内置事件。这些事件是隐式的,因为您没有显式地定义或触发它们。有关更多信息,请参见使用隐式事件的控制图行为.
一个明确的事件是您显式定义的事件。显式事件可以具有这些类型之一。
类型 | 描述 |
---|---|
输入事件 | 从图表外部广播到状态流图表的事件。有关更多信息,请参见通过发送输入事件激活状态流图而且利用状态流图设计人机界面逻辑. |
当地的活动 | 可以在状态流图中的任何位置发生但仅在父对象及其子对象中可见的事件。在MATLAB中的独立状态流图中不支持局部事件®.有关更多信息,请参见广播本地事件以同步并行状态. |
输出事件 | 在状态流图中发生但广播到Simulink块的事件。在MATLAB中的独立状态流图中不支持输出事件。有关更多信息,请参见通过发送输出事件激活Simulink块. |
您可以在Stateflow层次结构的这些级别上定义本地事件。
水平的层次结构 | 可见性 |
---|---|
图表 | 局部事件对图表及其所有状态和次状态可见。 |
子图表 | 局部事件对子图及其所有状态和子状态可见。 |
状态 | 本地事件对状态及其所有子状态可见。 |
在图表中定义事件
控件可以向状态流图添加事件符号窗格、状态流编辑器菜单或模型资源管理器。
通过符号窗格添加事件
在建模选项卡,在设计数据中,选择符号面板.
单击创建事件图标.
在新活动的那排,在下面类型,点击图标,选择:
输入事件
当地的活动
输出事件
编辑事件的名称。
对于输入和输出事件,单击港口字段并选择端口号。
要指定事件的属性,请打开属性检查器.在符号窗格中,右键单击事件的行并选择探索.有关更多信息,请参见设置事件的属性.
方法添加事件Stateflow编辑菜单
在Simulink模型中的状态流图中,选择与要添加的事件类型对应的菜单选项。
类型 菜单选项 输入事件 在建模选项卡,在设计数据,点击事件输入. 输出事件 在建模选项卡,在设计数据,点击事件输出. 当地的活动 在建模选项卡,在设计数据,点击当地的活动. 在“事件”对话框中指定数据属性。有关更多信息,请参见设置事件的属性.
通过Model Explorer添加事件
在建模选项卡,在设计数据中,选择模型浏览器.
在模型层次结构窗格中,选择要在其中显示新事件的Stateflow层次结构中的对象。所选择的对象将成为新事件的父对象。
在Model Explorer菜单中,选择添加>事件.具有默认定义的新事件出现在内容“模型资源管理器”的窗格。
在事件窗格中,指定事件的属性。有关更多信息,请参见设置事件的属性.
访问事件信息Stateflow图表
您可以显示输入或本地事件的属性,或者直接从状态流图打开输出事件的目的地。右键单击包含感兴趣事件的状态或转换并选择探索.上下文菜单列出状态或转换中所有解析符号的名称和范围。从上下文菜单中选择输入或本地事件将在Model Explorer中显示其属性。从上下文菜单中选择一个输出事件,打开与该事件关联的Simulink子系统或状态流图。
中使用事件的最佳实践Stateflow图表
使用发送
命令在动作中广播显式事件
要在状态或转换操作中广播本地或输出事件,请使用发送
操作符。例如,要在转换有效时广播输出事件,请避免使用事件的名称作为条件操作。
{output_event;}
相反,调用发送
操作符。
{发送(output_event);}
虽然两个操作都是有效的,但是使用发送
运算符增强了图表的可读性,并确保显式事件不会被误认为数据。
避免使用显式事件触发条件操作
当你想在转换上使用条件而不是事件时:
表示条件语句,例如,
(x < 1)
或(x = = 0)
.表示数据值的更改,例如,
(改变了(x))
.
避免使用隐式事件输入
检查状态活动
方法检查状态活动在
操作符代替隐式事件输入
.有关更多信息,请参见使用in操作符检查状态活动.
不要在图表中混合边缘触发和函数调用输入事件
混合使用边缘触发器和函数调用的输入事件会导致编译时错误。