虽然说基于模型的设计(Model Based Design,MBD)就是未来嵌入式控制开发的主流方法,但是很多工程师都是C代码的高手,对Simulink并不是很熟悉,尤其是自动代码生成。在进行Simulink模型代码自动生成的时候,也会习惯性的去想生成的代码如何匹配脑子里所想的C代码。
那么,Let's Go!
Typedef
要得到:typedef double float_64;
怎么做:用Simulink.AliasType数据对象。
实例一
因为是第一个例子,过程会稍微介绍得详细一些。
1. 建一个简单的Simulink模型

2. 代码生成基本配置
求解器:定步长—离散求解器
系统目标文件:ert.tlc
这时候Ctrl+B,可以生成代码了。只不过此时u1,y1以及k都不是我们想要的定义方式。
3. 新建数据对象
打开Model Explorer,点击菜单的Add,在base workspace里定义如图三个数据对象。
新建Simulink.AliasType,名字为float_64,并把Base type设置为double。这样,在生成代码的时候,就会出现这一句:typedef double float_64。
新建Simulink.Signal,名字为u1;新建Simulink.Parameter命名为k。注意它们Data Type与Storage class的定义。

4. 将Simulink信号线与workspace的数据对象关联
在信号线u1上右键,设置它的属性,勾选Signal name must resolve to Simulink signal object,信号线上会出现如后图的蓝色小叉子。这样这个信号u1就会使用它所关联的数据对象u1所定义的方式来生成代码。
除了这种关联的方式之外,还可以直接设置信号的属性。比如右键单击信号y1,设置它的属性如图。

参数k不需要手动关联。
显示模块端口的数据类型,得到如下图的显示。( 点击模型的菜单Display -> Signal&Ports -> Ports Data Type)

5. 生成代码查看结果
Ctrl+B生成代码。
代码生成报告打开,在模型名_types.h文件里,看得到了这句typedef。这是之前定义Simulink.AliasType得到的结果。

里面的real_T是E-Coder默认的对double的typedef:

同时,可以看到模型中的u1,y1以及k的定义,这是之前将信号和参数绑定到数据对象而得到的结果。

总结
要得到:typedef double float_64;
怎么做:用Simulink.AliasType数据对象
-
数据
+关注
关注
8文章
7364浏览量
95162 -
信号
+关注
关注
12文章
2950浏览量
80512
发布评论请先 登录
多种储能技术在MATLAB和Simulink中的建模与仿真
FRED 应用:光束足迹分析
集成Simulink 与 NXP S32 Design Studio (S32DS)使用基于模型的设计工具箱,关于版本兼容性的疑问求解
淘宝数据API:竞争对手分析,战略调整!
matlab的算法部署在simulink中
关于使用Simulink.AliasType数据对象的分析和应用介绍
评论