MBD之代码生成——自定义数据类型别名

目录

应用背景

实现步骤

1、Model Explore中添加Simulink AliasType

2、Configuration Parameters设置数据类型别名替换

结果演示


 

应用背景

在Simulink模型及生成的代码中,都有其默认的数据类型,默认的一些基本数据类型如下图所示:

默认设置的情况下,代码生成后基本的数据类型会如下所示,如:uint8_T、int16T、uint16_T...

例如,我们的模型算法如下所示:

Simulink模型中信号线、端口的数据类型在默认情况下只能设置成base type中的数据类型,即以下红框中的数据类型

而实际应用中,希望生成的变量、函数参数或返回值类型使用UInt8、UInt16、Bool等这种自定义的数据类型的别名。

要实现这种替换成自定义的数据类型别名,需要添加Simulink AliasType并在Configuration Parameters中的Data Type Replacement选项卡下进行替换设置。

 

实现步骤

 

1、Model Explore中添加Simulink AliasType

 

 

数据类型的别名,以UInt8为例,添加的Alias重新命名为UInt8,并在左侧Base type选择uint8,自定义的UInt8别名与Simulink中默认的uint8进行联系。

同样的步骤,可对Bool、Float、UInt16、Int16等数据类型别名进行设置

 

AliasType设置好后,如果Simulink.Parameter或者Simulink.Signal,可以选择默认的Base type,也可以选择你新建的数据类型别名,如将Diff_Gain设置为Float类型(如下拉菜单中没有显示你上面新建的AliasType的数据类型,可以Refresh data types更新一下)

2、Configuration Parameters设置数据类型别名替换

Data type Replacement选项中勾选Replace data type names in the generated code,填入需要替换的数据类型别名(Replacement Name要和上面增加的Simulink AliasType保持一致,不然会出错)

以上就完成了别名的替换,更新一下模型,我们可以看到数据类型别名已经变成你自定义的了,当然部分模块的输出数据类型还是会保持Simulink默认的数据类型别名,例如下图的AND模块,数据类型仍旧为默认的boolean,但不影响最终的代码生成。

如果你希望模型中所有的模块输入输出类型都变成你自定义的数据类型别名,那就需要对各个模块指定好数据类型,例如上面的AND模块,双击打开参数设置窗口:

Data Type选项卡下,也可以选择Bool作为输出类型,最终可以让整个模型可以都采用自定义的数据类型别名

 

因为我们在上面对Data type Replacement进行了设置,实际不管你在模型中的数据类型别名选择的是默认的还是你自定义的,最终生成的代码中都会进行替换。所以,没有必要的情况下,不需要对每个模块的输出数据类型重新选择为自定义的数据类型别名。

另外,其实上面对Simulink.Parameter或者Simulink.Signal的定义中,也不一定采用自定义的数据类型别名,选择Simulink默认的数据类型,最终生成的代码中也都会进行替换,只是在模型层面显示的数据类型不是自定义数据类型别名而已。

 

结果演示

最终我们生成代码如下:全局变量和临时变量都会采用自定义的数据类型别名进行定义

我们可以在生成的rtwtypes.h头文件中看一下,会比原先多了以下代码

通过重新typedef的方式,对原先默认的Simulink数据类型别名进行了替换。


如果你觉得本文能够帮助到你,请长按识别下方二维码关注公众号,另有知乎同名专栏同步更新,欢迎分享转载

文章中的示例模型或代码均可联系小编免费获取,若对文章有任何意见或建议,欢迎在文章下方留言,也可进入公众号选择‘联系方式’,加小编微信进行交流

                                                             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值