[simulink] --- simulink中stateflow的使用

简介: [simulink] --- simulink中stateflow的使用

1 simulink基本语法

1.1 状态层次结构

要管理多级状态复杂性,可以在 Stateflow 图中使用层次结构。借助层次结构,可以表示系统中多个层级的子组件。

状态层次结构示例

在下例中,图中显示了三个层级。在一个状态的边界内绘制另一个状态表示内部状态是外部状态(或父状态)的子状态(或子级)。外部状态是内部状态的父级。

在本例中,图是状态 Car_done 的父级。状态 Car_done 是 Car_made 和 Car_shipped 状态的父状态。状态 Car_made 也是 Parts_assembled 和 Painted 状态的父状态。

也可以说状态 Parts_assembled 和 Painted 是 Car_made 状态的子级。

要以文本形式表示 Stateflow 层次结构,可以使用斜杠字符 (/) 表示图,使用句点 (.) 分隔状态层次结构中的每一级。下表提供了上例中对象层次结构的文本表示形式:

/Car_done
/Car_done.Car_made
/Car_done.Car_shipped
/Car_done.Car_made.Parts_assembled
/Car_done.Car_made.Painted

1.2 状态分解

每个状态(或图)都有分解,表示该状态(或图)可以包含哪些类型的子状态。父状态的所有子状态必须与父状态分解是同一类型。状态分解可以是互斥 (OR) 形式或并行 (AND) 形式。

互斥 (OR) 状态分解

带有实线边框的子状态表示互斥 (OR) 状态分解。此分解可用于描述互斥工作模式。当状态拥有互斥 (OR) 分解时,一次只能有一个子状态激活。

在下例中,状态 A 或状态 B 中的一个可以是已激活。如果状态 A 已激活,则状态 A1 或状态 A2 可以在给定时间激活。

并行 (AND) 状态分解

带有虚线边框的子状态表示并行 (AND) 状态分解。使用此分解可以描述并行工作模式。当状态拥有并行 (AND) 分解时,所有子状态同时激活。

在下例中,当状态 A 激活时,A1 和 A2 两者可以同时激活。

1.3 状态标签

状态标签显示在状态的长方形框的左上角,一般为以下格式:

name/
entry:entry actions
during:during actions
exit:exit actions
on event_name:on event_name actions
on message_name:on message_name actions
bind:events

下例显示了状态标签的构成。

1.4 状态名称

状态标签开头为状态名称,其后可接 / 字符。在前面的示例中,状态名称是 On 和 Off。有效的状态名称由字母数字字符组成,可以包含下划线字符 (_)。有关详细信息,请参阅Rules for Naming Stateflow Objects。

下例展示了状态的唯一命名机制。

以下每个状态因其在图中的位置而拥有一个唯一名称。状态在 FAN1 和 FAN2 中的完整名称为:

PowerOn.FAN1.On
PowerOn.FAN1.Off
PowerOn.FAN2.On
PowerOn.FAN2.Off

1.5 转移

转移是一条将多个图形对象连接在一起的带箭头的直线。在大多数情况下,转移表示系统在不同模式(状态)间转移的通道。转移通常连接来源和目标对象。源对象是转移开始的位置,目标对象是转移结束的位置。

1.5.1 转移层次结构

转移不能像状态那样包含其他对象。但是转移包含在状态中。转移的层次结构通过其父级、源状态和目标状态几个方面来描述。父级是最低层级,包含转移的源对象和目标对象。考虑下例中转移的父级:

下表分析了上例中每个转移的父级关系。/ 字符表示图。状态层次结构的每一级使用句点字符 (.) 分隔。

转移标签 转移父级 转移源 转移目标
switch_off / /Power_on.Low.Heat /Power_off
switch_high /Power_on /Power_on.Low.Heat /Power_on.High
switch_cold /Power_on.Low /Power_on.Low.Heat /Power_on.Low.Cold

1.5.2 转移标签表示法

转移标签可以包含事件或消息、条件、条件动作和转移动作。标签的每部分均为可选。? 字符是默认的转移标签。转移标签的完整格式如下:

event_or_message[condition]{condition_action}/transition_action

注意:

组成转移标签的四个部分不一定完整地出现,但是不论出现哪几个部分,标签的内容必须按照上面指定的顺序书写。

触发事件或消息

指定在条件为 true 时导致转移发生的事件或消息。使用 OR 逻辑运算符 (|) 可指定多个事件。指定事件或消息是可选项。未指定事件或消息表示在发生任意事件时都会产生该转移。有关详细信息,请参阅通过广播事件同步模型组件和通过发送消息与 Stateflow 图通信。

在前面的示例中,只要条件 [off_count0] 为 true,事件 E 的广播就会触发从 On 到 Off 的转移。
条件
指定一个布尔表达式,当其计算结果为 true 时,会对指定的触发事件或消息所关联转移的有效性进行验证。条件需括在方括号 ([]) 内。如果未指定任何条件,则隐含的条件会计算为 true。有关详细信息,请参阅条件。
在前面的示例中,发生事件 E 时,条件 [off_count
0] 的计算结果必须为 true,从 On 到 Off 的转移才能生效。

条件动作

发生在转移条件的计算结果为 true 之后,到目标的转移被确定为有效之前。将条件动作括在花括号 ({}) 中并放在条件后。有关详细信息,请参阅条件动作行为。

在前面的示例中,如果事件 E 发生且条件 [off_count==0] 为 true,则立即执行条件动作 {off_count = off_count + 1}。

转移动作

在到目标的转移被确定为有效之后执行。如果转移包含多个段,则在到达最终目标的整个转移路径被确定为有效时,才会执行转移动作。转移动作发生在源状态的 exit 动作之后、目标状态的 entry 动作之前。转移动作前面要接 /。有关详细信息,请参阅条件和转移动作行为。

1.5.3 转移连接

互斥 (OR) 状态的出向/入向转移

此示例说明互斥 (OR) 状态的简单出向/入向转移。

以下转移… 在以下情况下有效…
从 B 到 A 状态 B 处于激活状态,且事件 E1 发生。
从 A1 到 A2 状态 A1 处于激活状态,且事件 E2 发生

2 stateflow的使用

2.1 在Simulink中添加Stateflow模块

在Simulink Library Browser中,可将Stateflow中常用的Chart模块拖拽到Simulink中

2.2 Chart模块的编辑

双击Chart模块,可进入Chart模块编辑界面。

在Chart模块编辑界面左栏中,可拖入表示状态的框。

指向状态的箭头表示进入Chart后第一个进入的状态,框中“?”部分可输入表示状态的标识名称,输入名称按Enter换行即可输入状态中执行的动作。需要注意的是,进入Chart的箭头并不一定指向某个状态,也可指向某个分支点,用于处理不同情况的输入。

在表示动作的行中,首先键入上述三种类型的关键字entry、during和exit及“:”,然后在“:”后输入动作内容。也可在表示动作的行中直接输入动作内容,Simulink会自动默认补全关键字entry。

而在两个不同状态之间添加连线,表示状态的转移。

在编辑Chart内部状态的过程中,部分状态涉及到Chart作为一个整体在Simulink中的输入与输出,因此,在编辑Chart内部模型时,可通过Chart → Add Inputs & Outputs菜单添加Chart的输入与输出。

在Name一栏中输入由Simulink输入Chart的变量名称即可。可在Scope一栏选择Output从而设置由Chart输出Simulink的变量名称。而在Port一栏中可以设置输入或输出在Chart块上显示的位置。

在Model Explorer中,可以通过左侧的树状结构查看Simulink模型中的各部分内容,当然也可以对Chart模块进行编辑,如删除某Chart输入或输出等。

相关文章
|
算法
专题九Simulink仿真基础-1
专题九Simulink仿真基础
149 1
[simulink] --- 数据字典(下)
[simulink] --- 数据字典(下)
437 0
|
安全 算法 C++
专题九Simulink仿真基础-2
专题九Simulink仿真基础
154 1
[simulink] --- simulink辅助技巧
[simulink] --- simulink辅助技巧
160 1
[simulink] --- simulink信号
[simulink] --- simulink信号
176 0
|
7月前
|
存储 缓存
[simulink] --- simulink模块(一)
[simulink] --- simulink模块
757 0
|
7月前
|
存储
[simulink] --- simulink模块(二)
[simulink] --- simulink模块
375 0
|
7月前
|
C语言
[simulink] --- simulink模块(三)
[simulink] --- simulink模块
453 0
|
7月前
[simulink] --- 数据字典
[simulink] --- 数据字典
169 0
|
7月前
|
异构计算
【Simulink】锁相环模块
【Simulink】锁相环模块

热门文章

最新文章