定义概念
Stateflow 是一个用于建模和仿真状态机和流程图的强大工具,它提供了一系列的关键字和语法结构来定义状态机的行为。
在simulink建模时,可以直接搜索“char”即可出来。
基本的语法结构
1. 状态和转移关键字
-
state
: 定义一个状态。 -
transition
: 定义状态之间的转移。 -
event
: 定义一个事件,用于触发状态转移。 -
on
: 用于定义特定事件发生时的动作。
2. 状态动作关键字
-
entry
: 定义进入状态时执行的动作。 -
during
: 定义状态活动期间执行的动作。 -
exit
: 定义退出状态时执行的动作。
3. 流程控制关键字
-
if
: 条件语句,用于流程控制。 -
else
: 配合if
使用,定义条件不成立时的执行路径。 -
elseif
: 条件语句的扩展,用于多个条件判断。 -
switch
: 多条件分支选择。 -
case
: 配合switch
使用,定义特定的情况。 -
for
: 循环结构,用于重复执行一段代码。 -
while
: 循环结构,当条件满足时重复执行代码。 -
break
: 跳出最内层的循环。 -
continue
: 跳过当前循环的剩余部分,直接进入下一次循环条件判断。
4. 数据和变量关键字
-
var
: 定义局部变量。 -
const
: 定义常量。 -
param
: 定义参数,可以与外部数据交互。 -
input
: 定义输入数据。 -
output
: 定义输出数据。
5. 图形函数关键字
-
chart
: 定义一个流程图。 -
function
: 定义一个函数,可以被多次调用。
6. 真值表和决策关键字
-
decision
: 定义一个真值表或决策表。 -
truth_table
: 定义真值表的数据。
7. 其他关键字
-
default
: 定义默认转移。 -
junction
: 定义一个决策点,用于流程图中的分支和合并。 -
fork
: 定义并行路径的开始。 -
join
: 定义并行路径的结束。
8. 动作和表达式关键字
-
{}
: 包围条件动作。 -
()
: 用于执行顺序的分组。
常用的缩写格式形式
状态动作缩写
-
en:
或entry:
- 进入状态时执行的动作。 -
du:
或during:
- 状态活动期间执行的动作。 -
ex:
或exit:
- 退出状态时执行的动作。
转移标签缩写
-
tr:
或transition:
- 定义状态之间的转移。 -
ev:
或event:
- 定义一个事件,用于触发状态转移。 -
cond:
或condition:
- 定义转移条件。 -
act:
或action:
- 定义在转移发生时执行的动作。
流程控制缩写
-
if:
- 条件语句的缩写。 -
else:
-else
语句的缩写。 -
elseif:
或else if:
-elseif
语句的缩写。 -
sw:
或switch:
- 开始一个switch
语句。 -
cs:
或case:
- 定义switch
语句中的一个情况。 -
for:
- 开始一个for
循环。 -
while:
- 开始一个while
循环。
其他缩写
-
chart:
- 定义一个流程图。 -
func:
或function:
- 定义一个函数。
使用实例:
目的:创建Stateflow框图使一个LED灯500ms闪烁;
注意:下述的图形照着搭,请注意配置数据字典或者定义里面用到的变量;
解释:
LED_ON 状态:
当进入 LED_ON 状态时(en:),执行的动作是将 LED_Output 设置为 LOW。
LED_OFF 状态:
当进入 LED_OFF 状态时(en:),执行的动作是将 LED_Output 设置为 HIGH。
转移条件
从 LED_ON 状态到 LED_OFF 状态的转移条件是 after(500, msec),这意味着在 LED_ON 状态持续500毫秒后,状态机会自动转移到 LED_OFF 状态。
同样,从 LED_OFF 状态到 LED_ON 状态的转移条件也是 after(500, msec),表示在 LED_OFF 状态持续500毫秒后,状态机会自动转移到 LED_ON 状态。
模型行为
这个状态机模型模拟了一个LED灯的简单闪烁行为,LED灯在 LED_ON 和 LED_OFF 状态之间交替,每个状态持续500毫秒。
欢迎关注本人WXG众H:那个混子
记录自己学习的过程,分享乐趣、技术、想法、感悟、情感!