头文件定义全局变量_MBD之代码生成——自定义数据类型别名

e7ccbfb5063e02d4a8f5087e569242f0.png

写在最前面。

很惭愧已经有两个月没有更新了,前段时间推出了MATLAB自动化系列文章,都是基于实际工作中可能遇到的问题并参考各路大神的思路写的一些脚本,脚本只是提供一个思路,并没有做过多的代码方面的优化,后续会再视情况推出该系列的文章,各位读者如果有这方面的问题或需求都可以联系小编,大家互相学习、探讨交流。

从今天开始,准备做一些MBD方面的东西,写一些自己的心得体会、总结以及学习笔记,包括MBD中涉及的代码生成、建模、验证测试等内容,并尽可能以一两个实际项目案例来讲解一些在基于模型设计中工具的使用和一些设计思路。

公众号和知乎会同步推送,欢迎各位关注、留言!!

知乎专栏:汽车电控杂谈

微信公众号:AutoGeeker


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

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

ef50d6c7a7b1abe4bb81ed9341e4da17.png

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

b3016502602558db08fb1bd0a1b31fbb.png

3a09c7c60c4e6dcd85b2aa143ac2d778.png

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

cc0388549198346cc6a252ddc44c257c.png

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

21967bb4d7d4a8edf9603592ecb077f8.png

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

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

实现步骤

1.Model Explorer中添加Simulink AliasType

f318fb341ca263d476b6a0370de58a3e.png

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

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

5b031d6d44eceeb88e9abc1a55505819.png

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

a9648bce3d55eaa12d18ff6693ab0dff.png

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

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

bc09c869438dd11a3cc3374b79a19c9e.png

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

e7ed79d40834c8db6b611c234db52d69.png

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

1457706ac218342673694a029b98fbb2.png

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

10188973fcc1f94f02b4e9c3487521d4.png

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

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

结果演示

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

fed54826ae051e467261a8181aa7ddc5.png

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

7af714e62ec02ac1d1a146e807c6ad60.png

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


如有问题欢迎各位指正、交流

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值