系列文章目录
文章目录
前言
一、基操
-
在tooltrip中选择DEBUG,通过Animation Speed可更改动画的播放速度。
-
添加状态机的快捷操作
-
transition上的数字代表执行顺序,选中transition后在toolstrip -> Execution Order可更改执行顺序
在transition上可进行EventName [Condition] {Action}
的操作
-
下图的状态机中junction不属于状态,只负责条件的跳转,可用于实现类似if-else的结构
after(N, sec)为EventName
– Milliseconds : msec
– Microseconds: usec
– Simulation time steps: tick
-
Default transition不能有任何的
Event [Conditon]
二、stateflow 数据
-
打开位置
-
数据类型
逻辑数据:仅在状态机内部使用
输入:状态机的输入信号
输出:状态机输出信号
参数:从MATLAB工作空间中读取的常量or simulink mask parameter
-
在Symbols Pane中rename信号后按下
shift+enter
应用于所有的同名信号,然后按下ctrl+shift+A
自动重新调整模型排布
-
同时在PORT栏下可更改端口顺序
三、chart动作
这里介绍两类动作:
-
状态动作,当某一状态激活时执行的动作
- 常用的state actions: entry, during, exit
- 常用的state actions: entry, during, exit
-
条件动作,当transition条件为true时执行的动作
-
action language
除了支持MATLAB外还支持C,可以搜索文档查看:
Modify the Action Language for a Chart
在default transition处添加condition action
体会during: 的作用
四、chart的执行
searchchar execution
在document中
状态流每个时间步执行一次。执行结果为以下二选一:
- transition有效,变更为一个新的状态
- transition无效,维持当前状态
案例一中,存在有效的transition,当离开StateA时,x首先设为1;然后,当进入StateB后,x再设为2;
案例二中,因为没有有效的transition所以在此次时间步中,依然停留在StateA中,此时触发during state action, x = x + 1.
五、flow chart / junction
模拟if-else结构:
default transition必须有一条不带任何condition的通路
利用junction可创建数种模式
六、状态机中的函数 Stateflow Functions
重点介绍两类函数:
- 图形函数
- MATLAB函数
其他函数可搜索 Reusable Functions in Charts
函数可在state action
和condition action
中调用,如果函数的返回结果是布尔值,也可当成transition condition
。
图形函数
- 创建
- 使用
MATLAB函数
- 创建
- 使用
七、chart层次结构
八、案例——吸尘器机器人的驱动模式
背景
使用层次模型将状态分组。在次例中,你将对吸尘器机器人的驱动逻辑进行层次化建模。机器人有两种驱动模式:docking 或 vacuuming:
- SeekDock - 移动至充电底座人后停止
- Vacuum - 驱动至房间的角落然后使用 zig-zag模式
因此,机器人需要两种驱动行为:移动到某处然后使用zig-zag模式。这可以通过层次结构的顶层状态实现。每个的子状态是每种特定行为的专用状态。例如,当移动到指定位置后,机器然的移动可以分为旋转、移动和停止
项目
在此项目中,你将要装配dock 和 RandomDrive模式。并且他们为父状态。然后还有个TaskComple状态,意指没有进一步的命令发送。
假设机器人的动力学模型已经内建。