概述
三. Stateflow 原理与建模
-
概述
-
状态
状态有2种行为,激活(active)和非激活(inactive),一旦状态被激活,则这个状态一直处于激活状态,直到退出为止。
-
互斥状态
Or 两种状态不能同时激活,不能同时执行,用实线框表示,状态A 和状态B 是互斥的。
-
并行状态
And 状态并行,不是同时激活,按照一定的顺序激活执行,优先级较高的状态具有较高的次序编号,可以右键根据priority 的定义执行的次序编号
-
状态命名
定义状态名称和相应的状态动作
-
状态切换
选择Decomposition - Exclusive(OR)/ Parallel (AND)
-
状态动作
初始为非活动状态,entry 事件激活,关键字entry 或en
初始为活动状态,exit 事件进入非活动,关键字exit 或ex
初始活动状态,事件没有改变活动状态- during 动作,关键字during 或du 或on
处于活动状态,有驱动事件- on event 动作,关键字on event
处于活动状态或其子状态处于活动状态,bind 动作,关键字 bind
-
-
迁移
迁移+ 默认迁移
迁移标签的优先级: 事件迁移优先条件迁移
-
事件
当simulnk 的信号不止一个多输入事件时,而每个stateflow 只允许一个事件输入端口,必须要通过mux 模块组合成一个信号向量
-
数据对象
model explorer 中添加,
**local 定义的数据只能在stateflow 图表中使用;**constant 定义的数据只读常数量,在stateflow 图表的父级和子级都可以使用
-
条件与动作
条件: 指定布尔表达式,使用 []
条件动作: {}, 只要条件为真,无论条件是否有效,条件动作都会执行
-
连接节点
-
同一源状态到多个目标状态迁移
-
多个源状态到单一目标状态迁移
-
基于同一事件目标状态迁移
-
if else
-
for 循环
-
自循环迁移
-
-
-
流程图
-
手动流程图
-
快速流程图(判断逻辑, 循环逻辑, 多条件逻辑)
选择Patterns → Add,可以选择不同的逻辑流程图,参考车速控制例程
-
-
状态图层次
stateflow 图表是具有层次的,允许有子状态,同样的就有超状态,,允许在不同层次状态之间存在迁移,如果迁移穿越了父状态的边界直接达到了低层次的子状态→ 超迁移
machine: 状态机对象,是当前模型中所有状态框图的集合,状态机对象包含stateflow的simulink 模型
chart :状态图对象,状态图对象是状态机的子对象
state/function/box: 3个对象可以互相包含,互相嵌套,并且也可以包含事件、数据对象、注释、迁移、连接节点。
历史节点: 记录退出状态父状态时正处于激活的子状态,再次进入父状态时默认激活上一次的所记录的子状态。
迁移的层次性:
-
并行机制
-
事件广播状态动作
-
事件广播迁移动作
-
事件广播条件动作
-
直接事件广播
-
隐含事件
内置事件,不是由用户显式定义触发的,而是当状态图执行时就会自动发生的
-
时间逻辑事件
时间逻辑操作符(at,every,after 和before)分别完成相应的Boolean 运算,处理stateflow 事件的发生次数
1. at(n, event): 当事件第n次触发 2. every(n, event):当事件每触发n次后 3. after (n,event): 当事件触发n 次后 4. before(n, event):当事件第n 次触发
-
-
其他图形对象
-
真值表
-
图形盒
图形盒是组织图表中的状态、函数等其他对象的图形对象,图形盒不能定义every、during、和exit 动作,也不能定义来自或迁移至图形盒的迁移,可以在图形盒内部定义状态的迁移
创建在图形盒内部的本地数据对象只能被图形盒内部包含的对象使用,可以在模型浏览器中添加相应的输入/输出数据对象
-
图形函数
图形函数是用包含stateflow 动作的流程图定义的函数,
-
-
Embedded Matlab函数
-
Embedded MATLAB M-file 的限制
Embedded MATLAB 规范检查
编辑指令: 在M -code 文件开头或第一行末尾加上“%# eml”,相当于一个开关,用于检查代码是否满足Embedded MATLAB 编程规范
-
常用命令
emlmex:从M-code 文件产生MEX函数文件
emlc: 从M-code 文件直接生成C代码
eml.ceval: 集成已存在的用户C 代码到EMbedded MATLAB 模块中
eml.extrinsic; 定义那些EMbedded MATLAB 子集不支持的Matlb 函数为外部函数,它只能被执行,不能产生嵌入式C 代码
-
-
Simulink 函数
Simulink 函数调用类似Simulink 模型中的函数调用子系统模块,但是Simulink 函数在执行中不需要函数调用输出事件,也不需要信号线,而且不支持基于帧的输入/输出信号。
如果Simulink 函数定义在状态内,则只有该状态及其子状态内调用该simulink 函数; 如果Simulink 函数定义在Stateflow 图表中, 则图表中的任何状态及其迁移动作、条件动作都能调用该simulink 函数
-
Stateflow 建模实例
输出事件,也不需要信号线,而且不支持基于帧的输入/输出信号。
如果Simulink 函数定义在状态内,则只有该状态及其子状态内调用该simulink 函数; 如果Simulink 函数定义在Stateflow 图表中, 则图表中的任何状态及其迁移动作、条件动作都能调用该simulink 函数
-
Stateflow 建模实例
最后
以上就是会撒娇爆米花为你收集整理的Stateflow 原理与建模2020.5.28的全部内容,希望文章能够帮你解决Stateflow 原理与建模2020.5.28所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复