当前位置:网站首页>2837xd 代码生成——StateFlow(2)
2837xd 代码生成——StateFlow(2)
2022-07-02 06:35:00 【Quikk】
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语言操作即可。

边栏推荐
猜你喜欢

JDBC review

Matplotlib swordsman - a stylist who can draw without tools and code

告别996,IDEA中必装插件有哪些?

攻防世界-Web进阶区-unserialize3

How to install PHP in CentOS

In depth analysis of how the JVM executes Hello World

Matplotlib swordsman line - first acquaintance with Matplotlib

Chrome用户脚本管理器-Tampermonkey 油猴

自定義Redis連接池

Redis installation and deployment (windows/linux)
随机推荐
How to choose between efficiency and correctness of these three implementation methods of distributed locks?
大学生四六级作文模板(自创版,成功跨过六级)
在SQL注入中,为什么union联合查询,id必须等于0
逆变器simulink模型——处理器在环测试(PIL)
2837xd code generation - stateflow (4)
三相逆变器离网控制——PR控制
Cmake command - Official Document
Insight into cloud native | microservices and microservice architecture
In depth analysis of how the JVM executes Hello World
2837xd 代码生成——补充(1)
Long summary (code with comments) number structure (C language) -- Chapter 4, string (Part 1)
C语言之数据插入
TD联合Modelsim进行功能仿真
三相并网逆变器PI控制——离网模式
Chrome浏览器插件-Fatkun安装和介绍
Redis installation and deployment (windows/linux)
2837xd 代码生成——总结篇
Who is better for Beijing software development? How to find someone to develop system software
YOLO物体识别,生成数据用到的工具
Chrome video download Plug-in – video downloader for Chrome