概述
文章目录
- 7. Stateflow - 并行机制
- 7.1 并行机制
- 7.1.1 并行机制设置方法
- 7.1.2 并行状态的执行次序
- 7.1.3 图形盒的应用
- 7.2 本地事件广播
- 7.2.1 本地事件广播含义
- 7.2.2 直接事件广播
- 7.2.3 本地事件广播执行顺序
- 7.3 简化并行状态图的设计方法
- 7.3.1 隐含事件
- 7.3.2 时间逻辑
专题目录
7. Stateflow - 并行机制
7.1 并行机制
7.1.1 并行机制设置方法
- 在有限状态系统中,状态的行为可以按照其解析方式分为两大类:
互斥状态
(exclusive或者OR)和并行状态
(parallel 或者AND) - 方法1 :选中设置对象(比如B1,B2设置并行,其实是设置父类,选择B),鼠标右键,
Decomposition
下选择;
- 方法2 :菜单栏下
Decomposition
下选择
7.1.2 并行状态的执行次序
- 状态处于并行时,并行的状态并
不是同时被激活
,它们的执行和激活也有一定的次序 - 并行机制的右上角有一个序号,先将前面的状态激活执行完(包括子状态),再激活后面的状态
7.1.3 图形盒的应用
- 图形盒并
不是Stateflow中能够运行的图形对象
,即不能从图形盒上引出转移或者将转移的终点放置在图形盒的边缘上 - 作用 :
构成层次化的模型
,可将图形盒以及图形盒内部包含的图形对象组合起来;也可以将图形盒构成子图,隐藏内部的细节;组合和创建子图的方法与创建子状态图的方法一致 - 可以影响并行状态的执行次序, 如下例所示 :
7.2 本地事件广播
7.2.1 本地事件广播含义
- 事件类型定义为
Local
则为本地事件,通过广播本地事件来影响状态图的运行
该实例为收音机工作原理:insert 和 OUT 为输入事件,表示影碟的插入和取出,stop 和play 为本地事件
(1)当插入影碟,进入hasdisk状态,广播本地事件play,从何使player状态机从stop到play状态
(2)同理,当取出影碟,进入 nodisk 状态,广播本地事件stop,从何使 player 状态机从play 到 stop 状态
7.2.2 直接事件广播
- 直接事件广播 :
将特定的事件发送给指定的状态
- 通过send函数实现 :
send(event_name, state_name)
从状态A1到A2,广播的本地事件Local只会发送给B状态,而C状态不会接受到该事件;同理,从状态A2到A1,广播的本地事件Local只会发送给C状态
7.2.3 本地事件广播执行顺序
-
以如下实例为例进行探索(比较复杂)
-
一般事件广播的执行顺序 :如下运行动画表示当处于A1a和A2a状态时,事件E1触发的执行顺序
-
转移动作事件广播 :如下运行动画表示当处于A1a和A2a状态时,事件E1触发的执行顺序
-
直接事件广播的执行 : 如下运行动画表示当处于A1a和A2a状态时,事件E1触发的执行顺序
7.3 简化并行状态图的设计方法
7.3.1 隐含事件
隐含事件
(Implicit Events) :在Stateflow模型运行过程中,状态图或者状态发生了某些变化时,系统将其作为某些类型事件来处理的事件
隐含事件关键字 | 用法 | 含义 |
---|---|---|
change(chg) | chg(object_value) | 数据对象发生变化时发生相应的事件 |
enter(en) | en(state_name) | 进入某个状态时发生相应的事件 |
exit(ex) | ex(state_name) | 退出某个状态时发生相应的事件 |
tick/wakeup | wakeup(state_name) | 当状态图被唤醒时发生相应的事件(没有定义任何输入事件时才能够使用) |
隐含条件 in | [in(state_name)] | in函数内定义的state_name状态当前处于激活的状态,则该条件为真,否则为假 |
7.3.2 时间逻辑
时间逻辑函数 | 含义 |
---|---|
after(n,E) | 自关联状态激活以来 E 事件至少已发生 n 次,返回 true,否则返回 false |
after(n,tick) | 自关联状态激活以来至少唤醒了 n 次,则返回 true,否则返回 false |
after(n,time_unit) | 自关联状态激活以来至少已经过 n 个时间单位返回 true,time_unit 指定为秒 (sec)、毫秒 (msec) 或微秒 (usec) |
at(n,E), at(n,tick), at(n,time_unit) | 自关联状态激活以来, 到达n次返回 true |
before(n,E), before(n,tick), before(n,time_unit) | 自关联状态激活以来, 在n次范围内返回 true |
duration(C,time_unit) | 返回C发生后到现在经历的时间 |
count( C ) | 返回C发生后到现在唤醒的次数 |
官方文档链接
感谢阅读 若有错误 敬请见谅!!!
最后
以上就是无辜蜡烛为你收集整理的7. Stateflow - 并行机制7. Stateflow - 并行机制的全部内容,希望文章能够帮你解决7. Stateflow - 并行机制7. Stateflow - 并行机制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复