最近遇到了一个stateflow中的功能点,下面来介绍一下。
在介绍on event用法之前,先介绍一个名词:超时间步语义(Super Step Semantics)。
简单概括一下这个功能的作用:启用超时间步语义后,在单个时间步内,也就是单次步长运行时间内会运行指定的次数n,等价于在单次时间内运行了“n+1”步长。
语言描述可以认识概念,实例讲解才会理解概念。老规矩,一图胜千言,看下面的图:
Matlab版本:2022b
求解器类型及步长:定步长、离散、0.1s
序 号 | 设 置 | 仿真输出结果 |
1 | 未勾选 | |
2 | 勾选且设置0次 | |
3 | 勾选且设置1次 | |
4 | 勾选且设置2次及以上 |
结论:
1.当不使能“启用超时间步定义”时,stateflow按照单次运行步长时长逐步运行;
2.当启用时间步设置次数为0时,会在单次运行步长时长内运行多次直至状态稳定;
3.当启用时间步设置次数为1(a)时,stateflow会在单次运行步长时长内运行“a+1=2”次;
4.当启用时间步设置次数为2(a)时,stateflow会在单次运行步长时长内运行“a+1=3”次;
依次类推......,注意,设置为0时比较特殊,似乎不符合开头描述的功能作用“n+1”,后续继续搜集资料跟踪次数0的特殊性。
%----------------------------------------------------------------------------------------------------------------------------%
接下来介绍事件on event的用法:
序 号 | 设 置 | 仿真输出结果 |
1 | 未勾选 | |
2 | 勾选且设置0次 | |
3 | 勾选且设置1次 | |
4 | 勾选且设置2次 | |
5 | 勾选且设置3次及以上 |
结论:
1.当不使能“启用超时间步定义”时,stateflow按照单次运行步长时长逐步运行;
2.当启用时间步设置次数为0时,会在单次运行步长时长内运行多次直至状态稳定;
3.当启用时间步设置次数为1(a)时,当event1发生时stateflow会在单次运行步长时长内运行“a+1=2”次,此时进入状态“Sts1”;
4.当启用时间步设置次数为2(a)时,当event1发生时stateflow会在单次运行步长时长内运行“a+1=3”次,此时进入状态“Sts2”,此时on event1起到的是启动作用,其中的结果“out = 3”并未执行;
5.当启用时间步设置次数为3(a)时,当event1发生时stateflow会在单次运行步长时长内运行“a+1=4”次,此时进入状态“Sts2”,此时on event1起到的是“启动+触发执行”作用,其中的结果“out = 3”会执行;
依次类推......