2837xd 代码生成——StateFlow(2)

3 Matlab-Function

  StateFlow模块也可以调用Matlab-Function的功能,点击左侧栏的Matlab-Function图标,构建以下的函数模型:

在这里插入图片描述

  双击Matlab-Function,可以直接进行相关的函数定义。函数定义方式参照,m语言的函数定义。

在这里插入图片描述

  之后可以在上方的State中调用相关的函数,这里需要注意的是形参和实参不能重名。就是调用的时候不能使用x、y进行相关操作,会报错。x、y已经被函数使用。但是两个Matlab-Function函数模块可以使用相同的参数。

在这里插入图片描述

4 Graphical Function

  在chart中加入Graphical Function模块:

在这里插入图片描述

  对Graphical Function模块进行编辑:

在这里插入图片描述

  右击模块,可以为模块加入Flow chart:

在这里插入图片描述

  添加一个绝对值函数的实现,然后建立一个State进行调用。这里要注意调用时,其自变量和因变量也不能与函数中的参数一致。结果如下:

在这里插入图片描述

  构建外围元件:

在这里插入图片描述

  这里插播一个小现象,输入正弦波(50Hz):

1)采样频率:100Hz

在这里插入图片描述

2)采样频率:200Hz

在这里插入图片描述

3)采样频率:1000Hz

在这里插入图片描述

4)采样频率:2000Hz

在这里插入图片描述

5)采样频率:4000Hz

在这里插入图片描述

  但是使用系统自带的abs模块进行转换,可以发现,在1000Hz时,系统波形就较好:

在这里插入图片描述

这一点可以看出,chart在执行效率上面有一定的差别。

5 Simulink Function

  在chart模块页面中,加入Simulink Function,命名与上面所述的函数一致:

在这里插入图片描述

在这里插入图片描述

 在State中可以进行函数调用,在上面输入了函数结构:**y=func(x)**之后,会自动根据表达式产生输入和输出的端口(x.y)。在Simulink Function中搭建相应的模型结构:

在这里插入图片描述

  然后构建外围系统,如下图所示:

在这里插入图片描述

采样频率为4000Hz时:

在这里插入图片描述

  可以看到,引入Simulink Function之后,系统因为进入Simulink Function中仍然是按照步长进行,所以执行效率会受到影响。

6 内部转移(历史节点)

  如图构建如下的chart结构,放入read事件读取历史节点。这样当系统处于State2时,在read触发后,State状态下的历史节点记录的数值,read事件触发的这种转移被称为内部转移。

在这里插入图片描述

7 Box模块

1)在chart中建立一个box模块,box模块在并行模块下,可以让所包含内容有更高的优先级。执行box模块内部的函数时,需要给出作用域:

在这里插入图片描述

在这里插入图片描述

2)另外一种是可以使用原子Box对模型进行封装:

  首先建立一个Library,构建如下的Chart模型:

在这里插入图片描述

Simulink Function里面构建一个Digtal clock输出实时仿真时间。

在这里插入图片描述

  进行保存,修改命名,后新建一个Model类型的模型,将Library中的Chart复制到Model中的Chart模块中:

在这里插入图片描述

可以看到模型呈现一个Box的形状。此时的调用也需要符合Box中函数的调用规则:

在这里插入图片描述

然后给Model加入out管脚:

在这里插入图片描述

再新建一个Model模块,找到元件Model,将上述的Model导入后进行封装:

在这里插入图片描述

在这里插入图片描述

这样封装的好处是,可以方便的形成模块,快速调用。

8 自循环

在这里插入图片描述

外部自循环如图中所示,在du中写入自加语句:

在这里插入图片描述

可以发现du语句并没有执行。

在en写入自加语句:

在这里插入图片描述

在ex中写入自加语句:

在这里插入图片描述

这样便能够推测出来模块的执行顺序,存在外部循环时,模块会最优先执行外部循环。这是必然触发en与ex语句。只有当外部循环条件不满足时,才会执行du语句。

对于内部循环来说:

在这里插入图片描述

en语句自加结果:

在这里插入图片描述

du语句自加结果:

在这里插入图片描述

ex语句自加结果:

在这里插入图片描述

en语句时,会在程序开始时,进入执行一次所以为2。因为模型一直处于内部循环所以不会执行ex语句。因为一直在函数内部,所以du函数每个步长都执行。

9 枚举类型

在这里插入图片描述

StateFlow中可以根据枚举类型,显示更深层次的内容。注意:生成的枚举类型m文件需要放在模型文件一致的目录下。

在这里插入图片描述

10 矩阵

定义如下的模型。然后在Model Explorer中进行对数据的size进行定义即可:

在这里插入图片描述

在这里插入图片描述

同时State Flow中可以对矩阵数据进行访问,访问语法与设置的语言有关,选择c语言利用多维数组操作即可。选择Matlab语言利用m语言操作即可。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Quikk

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

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

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

打赏作者

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

抵扣说明:

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

余额充值