simulink中Chart模块使用方法

一、chart模块简介

Chart模块位于Stateflow组件库中,常用于实现带有时序的控制逻辑和状态转移。Chart 模块是基于状态转移图的有限状态机的图形表示形式。在 Stateflow图中,状态和转移构成了时序逻辑系统的基本构建块。状态对应于工作模式,转移表示状态之间的路径。

有限状态机表示一种事件驱动的反应式系统,当定义变化的条件成立时,该反应式系统会从一种工作模式转移到另一种工作模式。以汽车挡位变换为例,停车P、倒车R、行驶D、空挡N是汽车挡位的4种状态,当驾驶员移动换挡杆时即进行了各个状态之间的转移,使系统从一种工作模式转移到另一种工作模式。

二、Chart模块使用方法

1. 用Chart搭建流程图

流程图由一系列路径和节点构成。
● 节点—执行路径发散和收敛的节点。
● 路径—连接节点,控制路径流程。
if else 流程逻辑
上图为一段if-elif-else流程控制,进入chart图需要一个默认跳转点(Default transition),用于指定chart图程序起点。Default transition会在创建第一个节点或状态时自动创建。

条件控制语句和执行语句的创建:
双击路径,条件控制语句放在 [] 中,执行语句放在 {} 中,分号结尾。
eg

在一个闭合路径中,路径的执行顺序由用户指定,可通过选中路径在右键打开的列表execution order选项中设置(默认先创建的路径优先级更高)。
上图中将首先执行路径一判断power_source==1,为真则output=1,否则执行路径2,output=0.

在创建流程图的过程中,需要注意可能由路径执行顺序引起的逻辑错误。

2. 用Chart搭建状态机

1) 创建一个chart模块,添加输入输出接口。
在这里插入图片描述
也可在模型资源管理器(Model Explorer)中修改各模块的输入输出属性或添加数据。

在这里插入图片描述

2) 在chart内部添加状态(右侧边栏中的state组件)和状态跳转条件。

在这里插入图片描述
状态由状态名称和动作类型组成。
A B为状态名;
动作类型包括:
en(entry):进入状态的瞬间发生的动作;

du(during):处于状态中时发生的动作;

ex(exit):退出状态的瞬间发生的动作;

bind:将指定的数据或事件绑定到该状态;绑定的数据只能由此状态或其子状态更改,但可以由其他状态读取。绑定的事件只能由此状态或其子状态广播。

on:指定的事件或消息 和 状态 激活时需要执行的动作。

注: 若不指定动作类型,默认为en动作类型。bind和on使用方法可参考matlab帮助文档。

状态机执行顺序为:
stp1:进入Default transition指定的状态,执行en中代码;
stp2:执行状态跳转条件语句,为真进行状态跳转,否则执行du中代码;
stp3:执行ex中代码。

3) 在Chart模块外部添加一个方波Pulse Generator输入,一个示波器Scope输出。

chart模块
在模型设置中设置求解器类型为定步长,离散,步长设置为0.01,仿真运行。

示波器结果
进入chart后,首先进入默认状态A,执行en,然后判断P?=0,进入状态B,执行en中t=t+1,再次执行条件判断P?=1,进入状态A,t赋值0,此时P!=0,执行du,t赋值2,当p重新跳回高电平时,进入状态B,t在2的基础上加一。

若无bind类型绑定限制,Chart状态中的数据变量默认为全局变量,可以由其他状态读取及更改。当A中定义了t后,可以直接在B的en/du/ex中使用t。

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘蓝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值