simulink stateflow 状态机

该文详细介绍了Stateflow的使用,包括调试设置、数据类型、状态动作、执行流程、流程图/交汇点、内置函数以及层次结构。文章通过实例探讨了如何构建和控制状态机,如在状态转换中应用条件和动作,以及如何在状态机中组织复杂逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录


前言


一、基操

  1. 在tooltrip中选择DEBUG,通过Animation Speed可更改动画的播放速度。
    示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

  2. 添加状态机的快捷操作
    在这里插入图片描述

  3. transition上的数字代表执行顺序,选中transition后在toolstrip -> Execution Order可更改执行顺序
    在transition上可进行 EventName [Condition] {Action} 的操作
    在这里插入图片描述

  4. 下图的状态机中junction不属于状态,只负责条件的跳转,可用于实现类似if-else的结构
    after(N, sec)为EventName
    – Milliseconds : msec
    – Microseconds: usec
    – Simulation time steps: tick
    在这里插入图片描述

  5. Default transition不能有任何的Event [Conditon]
    在这里插入图片描述

二、stateflow 数据

  1. 打开位置
    请添加图片描述

  2. 数据类型
    在这里插入图片描述逻辑数据:仅在状态机内部使用
    在这里插入图片描述输入:状态机的输入信号
    在这里插入图片描述输出:状态机输出信号
    在这里插入图片描述参数:从MATLAB工作空间中读取的常量or simulink mask parameter

  3. 在Symbols Pane中rename信号后按下shift+enter应用于所有的同名信号,然后按下ctrl+shift+A自动重新调整模型排布
    在这里插入图片描述

  4. 同时在PORT栏下可更改端口顺序

三、chart动作

这里介绍两类动作:

  • 状态动作,当某一状态激活时执行的动作
    请添加图片描述

    • 常用的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

重点介绍两类函数:

  1. 图形函数
  2. MATLAB函数

其他函数可搜索 Reusable Functions in Charts
函数可在state actioncondition action中调用,如果函数的返回结果是布尔值,也可当成transition condition

图形函数

  1. 创建
    请添加图片描述
    请添加图片描述
  2. 使用
    请添加图片描述

MATLAB函数

  1. 创建请添加图片描述
    请添加图片描述
    请添加图片描述
  2. 使用
    请添加图片描述

七、chart层次结构

在这里插入图片描述

八、案例——吸尘器机器人的驱动模式

背景
使用层次模型将状态分组。在次例中,你将对吸尘器机器人的驱动逻辑进行层次化建模。机器人有两种驱动模式:docking 或 vacuuming:

  • SeekDock - 移动至充电底座人后停止
  • Vacuum - 驱动至房间的角落然后使用 zig-zag模式

因此,机器人需要两种驱动行为:移动到某处然后使用zig-zag模式。这可以通过层次结构的顶层状态实现。每个的子状态是每种特定行为的专用状态。例如,当移动到指定位置后,机器然的移动可以分为旋转、移动和停止
请添加图片描述
项目
在此项目中,你将要装配dock 和 RandomDrive模式。并且他们为父状态。然后还有个TaskComple状态,意指没有进一步的命令发送。
请添加图片描述
假设机器人的动力学模型已经内建。
请添加图片描述
bumpCount
在这里插入图片描述


### Stateflow 状态机使用教程 #### 一、创建基本状态机模型 为了构建一个有效的状态机,在Stateflow环境中,需先定义好各个状态及其之间的转移条件。通过图形化界面可以直观地绘制出所需的状态图结构[^1]。 ```matlab % 创建一个新的Stateflow图表实例 sfChart = sfnew; ``` #### 二、设定初始状态 确保至少有一个被标记为起始位置的状态节点存在;如果缺少这一配置,则可能导致整个状态流转过程无法启动。对于初次使用者来说,这是一个容易忽视但却至关重要的细节。 #### 三、定义事件与动作 利用`entry`, `during`, 和 `exit`伪状态来指定当进入某特定状态下所执行的动作序列,以及离开该状态前应完成的操作。此外还可以自定义各类内部/外部输入作为触发器用于驱动状态间的迁移活动[^3]。 ```matlab % 定义入口行为 state.entry = 'initializeVariables()'; ``` #### 四、调试与验证 借助内置仿真工具测试设计好的逻辑流程是否符合预期目标,并及时调整任何发现的问题直至满意为止。此阶段可能涉及到多次迭代优化才能最终定稿发布版本。 --- ### 常见问题解决方案 #### 初始状态未正确设置 若遇到此类情况,请确认已明确指定了唯一的初态,并且其属性面板内的相应选项已被勾选激活。这一步骤是保障后续操作顺利开展的前提基础之一。 #### 处理异步事件 针对可能出现的延迟加载或其他非即时反馈场景,建议采用回调函数机制配合定时轮询策略共同作用于待处理项上,从而有效应对不确定性因素带来的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值