| |||||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 | |||
---|---|---|---|---|---|---|---|---|---|
31 | 1 | 2 | 3 | 4 | 5 | 6 | |||
7 | 8 | 9 | 10 | 11 | 12 | 13 | |||
14 | 15 | 16 | 17 | 18 | 19 | 20 | |||
21 | 22 | 23 | 24 | 25 | 26 | 27 | |||
28 | 29 | 30 | 31 | 1 | 2 | 3 | |||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
统计
- 随笔 - 116
- 文章 - 38
- 评论 - 254
- 引用 - 0
公告
随笔分类(266)
- C(31)
- C++(3)
- DB(1)
- Git(1)
- Java(7)
- Linux/Unix(31)
- Linux内核(7)
- nginx(4)
- Python(3)
- Simulink(6)
- 笔试面试题(11)
- 编程之美(5)
- 操作系统(10)
- 机器学习/神经网络(3)
- 面向对象(1)
- 嵌入式(2)
- 软件开发(10)
- 算法(23)
- 网络编程(19)
- 学习笔记(56)
- 珠玑之椟(7)
- 资料收集(25)
随笔档案(116)
- 2017年6月 (1)
- 2015年11月 (1)
- 2015年5月 (1)
- 2015年4月 (1)
- 2015年3月 (2)
- 2015年2月 (2)
- 2015年1月 (1)
- 2014年7月 (1)
- 2014年4月 (1)
- 2014年2月 (3)
- 2013年12月 (2)
- 2013年11月 (8)
- 2013年10月 (3)
- 2013年9月 (2)
- 2013年8月 (12)
- 2013年7月 (9)
- 2013年6月 (9)
- 2013年5月 (4)
- 2013年4月 (3)
- 2013年3月 (5)
- 2013年2月 (1)
- 2013年1月 (1)
- 2012年12月 (3)
- 2012年11月 (1)
- 2012年10月 (1)
- 2012年9月 (2)
- 2012年8月 (2)
- 2012年7月 (3)
- 2012年6月 (3)
- 2012年5月 (3)
- 2012年4月 (1)
- 2012年1月 (3)
- 2011年12月 (1)
- 2011年11月 (3)
- 2011年9月 (3)
- 2011年8月 (3)
- 2011年7月 (11)
相册(31)
常用资料
- Linux Cross Reference
- Linux在线手册
- Markdown语法
- Markdown在线编辑器
- MATLAB中文论坛
- 在线C定义解释
- 可以解释各类型的定义,简单的如整型、浮点型,复杂的如数组、函数指针等。
- 在线LaTex转换
- 在线Shell (1)
- 在线Shell (2)
- 在线进制转换
友链
第五日:Stateflow的并行状态和复杂逻辑判断
外出游玩了几天,早上6点多回到了成都,在租的房子里稍微整理洗漱了下继续去教研室自学。
上午一直在看并行状态的创建。由于MATLAB2008的Stateflow工具箱创建并行进程后并不是根据拖动即时调整状态的序号,而是需要取消并行再次选择使用并行,额外耗费了点时间。这个序号可以在仿真的时候直观地看到它的作用:两个并行状态,确认先进入哪一个。
p.s.所用的资料(基于MATLAB7.x+SIMULINK_STATEFLOW系统仿真、分析及设计)有点小问题,12.8例子里面双风扇打开后,当temp调节至28以下时,Fan2的关闭会导致speed=0,算是个bug了。如果要解决,Fan2的操作改成speed=speed-1就行了。
这样便开始学习资料里最后一小节:利用Stateflow的完成复杂的状态逻辑判断,在此梳理一下相关知识以便备忘(大部分摘自《基于MATLAB7.x+SIMULINK_STATEFLOW系统仿真、分析及设计》)。
1.Stateflow的动作
⑴条件动作和迁移动作
一般形式
触发事件[迁移条件关系式]{条件动作}/迁移动作
⑵状态动作
一般格式如下,第一行规定状态名称,其余各行规定状态的动作,每个状态的动作必须单独另起一行。
name/ entry:entry actions during:during actions exit:exit actions bind:data and events on event_name: on event_name actions
|
关键词 |
输入内容 |
描述 |
无 |
name |
在name处输入状态名,随后紧跟“/” |
entry或en |
entry actions |
状态进入动作,表示发生状态迁移,激活了该状态时需要执行的动作。 |
during或du |
during actions |
状态仍然激活动作,表示原处于激活的状态受到一个事件的触发,不存在从这个状态发出的状态迁移时,此状态仍处于激活状态需要执行的动作。 |
exit or ex |
exit actions |
状态退出动作。表示存在由此状态发出的有效状态迁移时,该状态退出时执行的动作。 |
bind |
data and events |
数据事件绑定动作。将数据data和事件events绑定在此状态上。绑定的数据只能在此状态或其子状态内被改写,其他状态只能读取此数据。绑定的事件由此状态或其子状态广播。 |
on |
event_name; on event_name atcions |
特定事件发生动作。 event_name规定一个特定的事件;on event_name actions表示当该状态是激活状态且event_name规定的事件发生时需要执行的动作。 |
2.Stateflow的隐含事件
当Stateflow图被唤醒时或进入到某个状态或从某个状态退出或某个内部数据(非输入数据)赋值时,Stateflow会定义并触发某种事件。这些事件是Stateflow自动定义触发的,非用户定义、添加的,故称为隐含事件。
隐含事件 |
含义 |
change(data_name) chg(data_name) |
当变量data_name的数值发生变化时,定义或产生一个局部事件 |
enter(state_name) en(state_name) |
进入状态state_name时,定义或产生一个局部事件 |
exit(state_name) ex(state_name) |
退出状态state_name时,定义或产生一个局部事件 |
wakeup |
动作图刚刚唤醒时,定义或产生一个局部事件 |
tick |
同wakeup |
隐含事件是瞬时逻辑操作的内容之一。
3.动作中的瞬时逻辑操作
⑴after瞬时逻辑操作
一般格式 after(n,E)
其中n是正整数或结果为正整数的表达式,E是基事件(可以是隐含事件),E发生n次后逻辑操作为真,反之为假。对于没有输入的stateflow图,表示当该图被唤醒n次后,瞬时逻辑操作为真。
需要指出的是after瞬时逻辑操作的项链状态每次激活时,基事件E的计数器都被复位为0。
⑵before瞬时逻辑操作
一般格式 before(n,E)
类似于after,当E发生小于n次时,逻辑操作为真,反之为假。同样在相连事件每次激活时,基事件E的计数器被复位为0。
⑶at瞬时逻辑操作
一般格式 at(n,E)
类似于after,当E事件第n次发生时,逻辑操作为真,反之为假。对于没有输入的stateflow图,表示当该图第n次被唤醒时,瞬时逻辑操作为真。同样在相连事件每次激活时,基事件E的计数器被复位为0。
⑷every瞬时逻辑操作
一般格式 every(n,E)
类似于after,当E事件每发生n次时,逻辑操作为真,反之为假。对于没有输入的stateflow图,表示当该图被唤醒次数小于n时,瞬时逻辑操作为真。同样在相连事件每次激活时,基事件E的计数器被复位为0。
4.事件广播
广播是一个非常有效的同步并行状态的方法。
⑴通过迁移动作进行直接事件广播。
直接广播的格式
send(事件名,状态名)
利用有效事件名直接进行事件广播的格式
状态名.事件名
⑵通过条件动作进行事件广播。
⑶通过状态动作进行事件广播。
至此,对Stateflow的简单学习就结束了,以后需要在实例的接触和具体应用中提高自己的实战能力。
本文转自五岳博客园博客,原文链接:www.cnblogs.com/wuyuegb2312/archive/2011/07/12/2104010.html,如需转载请自行联系原作者