Matlab之State Flow

打开方式

方式一:在命令窗口输入State Flow或者简写sf就能打开,并且会自动打开State Flow 的Library。从左到右分别是图表、真值表、状态转换表、例子、顺序查看,可以加入到Simulink当中。

Matlab之State Flow_第1张图片

方式二:从Simulink Library里面添加State Flow 的元件。

Matlab之State Flow_第2张图片

Chart元件使用方法

使用基础

最基础的用法就是用来控制Function-Call Subsystem元件的执行,可以右击在Block Parameter里面设置采样时间,由于Chart元件不是simulink自己的,编译的时候要比较长的时间。

Matlab之State Flow_第3张图片

点击进去最开始是空的,点击Model Explorer,可以设置数据、信号或者事件,一个chart里面有一个Model Explorer。

Matlab之State Flow_第4张图片

周期触发

新建一个事件,起个名字,选择为output to simulink

Matlab之State Flow_第5张图片

添加一个default transition出来,按照下面用将刚才的名字写上去。

Matlab之State Flow_第6张图片

这样就实现了周期触发Function-Call Subsystem元件的执行,因为这个Chart元件继承了解算器的采样时间,内部并没有什么条件判断,就可以周期触发。

Matlab之State Flow_第7张图片

条件触发

先创造一个data,起名字,设置为input。

Matlab之State Flow_第8张图片

新建几个节点,按照逻辑链接起来,让input满足条件的时候才会执行事件。

[]里面的是条件

{}里面的是执行语句

可以两个同时存在或者单独存在

Matlab之State Flow_第9张图片

Subchart

有时候在chart里面还要弄多几层,那就拖动个state元件过来,右击按下图设置将state元件变成Subchart.

Matlab之State Flow_第10张图片

并行状态

并行状态就是两个状态一起执行,在chart里面用两个state元件。举个例子会比较直观很多,有个人,每天赚100元,花80元,剩下多少钱,先用几个基础元件连起来。

Matlab之State Flow_第11张图片

在Model Explorer里面把刚才的默认名字改一改,定个方向,输出值定个初始值。

Matlab之State Flow_第12张图片

在chart里面拖两个state元件出来,写上内容,把系统赠送的default transition删掉。

Matlab之State Flow_第13张图片

在空白的地方右击decomposition-->parallel将里面的state都设置成并行。

Matlab之State Flow_第14张图片

虽然说是并行执行,但在启动的时候还是会有个先后的,这里可以调整个顺序。

Matlab之State Flow_第15张图片

运行,仿真出财务自由的康庄大道。

Matlab之State Flow_第16张图片

Junction使用方法

是一个节点,让整个图的架构更加整齐,做到横平竖直,不用太多交错或者曲线。需要注意的是如果有多条支路的话就会有标号,由于优先走小标号的支路,所以小标号的支路一定要写上条件,不然就永远走那条小标号的支路了。

Matlab之State Flow_第17张图片

状态自转移

从生成的代码里面会比较容易看得出来,用元件in和out才能对生成代码比较友好。里面设置两个输入变量inflow和outflow,一个输出变量flow.

Matlab之State Flow_第18张图片

箭头从内而外的是内部自转移,箭头从外而内的是外部自转移。从生成的代码里面可以看到,激活state之后,先执行外部自转移,再执行外部自转移。

Matlab之State Flow_第19张图片

en du ex

这三个一般写在state里面,en代表enter,du代表during,ex代表exit。

这个例子有两个输入变量inflow和outflow,两个输出变量flow1和flow2.

Matlab之State Flow_第20张图片

在这里我们可以看到,en是在进入state的时候执行的,包括初始化state的时候和从外部自转移重新进入状态的时候。du是内部自转移之前执行的。

看不到ex什么时候执行了,先去掉en和du,再加个状态看看。

Matlab之State Flow_第21张图片

这里我们可以看出ex执行时刻有两种,外部自转移执行后,en之前执行,所以在上一个例子当中被en的动作覆盖了。还有就是跳转到其他state的时候。

综上所述,整理下这三个的执行时刻。

en代表enter,在进入state的时候执行:

1、state初始化的时候

2、从外部自转移重新进入状态的时候

du代表during,在state内部自己转移的时候执行:

1、内部自转移之前

ex代表exit,在退出state的时候执行:

1、外部自转移之后,在en之前。

2、跳转到其他state的时候

你可能感兴趣的:(MATLAB,matlab)