一、chart模块简介
Chart模块位于Stateflow组件库中,常用于实现带有时序的控制逻辑和状态转移。Chart 模块是基于状态转移图的有限状态机的图形表示形式。在 Stateflow图中,状态和转移构成了时序逻辑系统的基本构建块。状态对应于工作模式,转移表示状态之间的路径。
有限状态机表示一种事件驱动的反应式系统,当定义变化的条件成立时,该反应式系统会从一种工作模式转移到另一种工作模式。以汽车挡位变换为例,停车P、倒车R、行驶D、空挡N是汽车挡位的4种状态,当驾驶员移动换挡杆时即进行了各个状态之间的转移,使系统从一种工作模式转移到另一种工作模式。
二、Chart模块使用方法
1. 用Chart搭建流程图
流程图由一系列路径和节点构成。
● 节点—执行路径发散和收敛的节点。
● 路径—连接节点,控制路径流程。
上图为一段if-elif-else流程控制,进入chart图需要一个默认跳转点(Default transition),用于指定chart图程序起点。Default transition会在创建第一个节点或状态时自动创建。
条件控制语句和执行语句的创建:
双击路径,条件控制语句放在 [] 中,执行语句放在 {} 中,分号结尾。
在一个闭合路径中,路径的执行顺序由用户指定,可通过选中路径在右键打开的列表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输出。
在模型设置中设置求解器类型为定步长,离散,步长设置为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。