关于使用Simulink.AliasType数据对象的分析和应用介绍

描述

虽然说基于模型的设计(Model Based Design,MBD)就是未来嵌入式控制开发的主流方法,但是很多工程师都是C代码的高手,对Simulink并不是很熟悉,尤其是自动代码生成。在进行Simulink模型代码自动生成的时候,也会习惯性的去想生成的代码如何匹配脑子里所想的C代码。

那么,Let's Go!
 Typedef

要得到:typedef double float_64;

怎么做:用Simulink.AliasType数据对象。

实例一

因为是第一个例子,过程会稍微介绍得详细一些。

1. 建一个简单的Simulink模型

给信号分别命名为u1和y1,Gain模块的参数设置为k。

数据

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数据对象

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分