C代码中经常会写到数据类型强制转换的语句,那么,
在Simulink模型里如何表达?
又如何配置,才能生成强制数据类型转换代码?
点击末尾的 “阅读原文” 下载本文的案例模型
数据类型转换
要得到:
y1 = (double)u1;
怎么做:
Simulink模型里有三种建模元素:Simulink框图、Stateflow流程图以及MATLAB Function模块里的m脚本。
在Simulink框图模型里使用Data Type Conversion模块来实现强制数据类型转换;在后两种则使用强制类型转换语句:out1 = double(in1)。
实例三
1. 建一个简单的Simulink模型

双击上图中Data Type Conversion模块设置输出数据类型为double。MATLAB Function以及Chart里的内容如下图:

2. 代码生成基本配置
求解器:定步长—离散求解器
系统目标文件:ert.tlc
3. 新建数据对象
打开Model Explorer,点击菜单的Add,在Base Workspace里定义输入输出信号的数据对象,如图设置输入为single类型,输出为dobule类型:

4. 信号关联
在信号线上右键,将信号与Base Workspace的数据对象关联在一起。鼠标操作的方式,可以参考之前的帖子里的菜单截图。因为这里的信号略多,所以可以使用命令的方式来实现:

此时,第一张模型截图中信号名前方的蓝色小叉子就会出现。
5. 生成代码
Ctrl+B,生成代码。
如前面所设置的,输入为real32,输出为real类型:

但此时从上图可以看到,由于是single转double,隐式转换,并没有想要的显示转换的代码。
在代码配置页面里,配置代码风格,Casting modes为Standards,符合MISRA的风格:Generate code that casts data types to conform to MISRAstandards

再次生成代码,得到如图:

总结
所以说,在Simulink框图模型里使用Data Type Conversion模块来实现强制数据类型转换;在后两种则使用强制类型转换语句:out1 = double(in1)。
Tips:可以使用Model Advisor ,来检查模型的配置,以便生成的代码符合MISRA C的风格。
其它:保持y1信号名不变,数据类型设置为整形,并相应的设置Data Type Convers输出为整形。生成代码,会看到比较有意思的错误提示。
-
代码
+关注
关注
30文章
4942浏览量
73163 -
数据类型
+关注
关注
0文章
237浏览量
14108
发布评论请先 登录
枚举类型的讲解
电能质量在线监测装置的监测数据如何存储和分析?
电能质量在线监测装置支持的数据推送频率是多少?
汇编程序段的定义介绍
SQL 通用数据类型
IEC101协议可以传输什么类型的数据
VirtualLab Fusion应用:不规则孔径光阑的仿真
labview数据类型与PLC 数据类型之间的转换(来自于写入浮点数到汇川 PLC中的数据转换关键的修改)
数据采集模块类型与应用
VirtualLab Fusion应用:不规则孔径光阑的仿真
传感器数据采集网关支持接入哪些数据类型

关于数据类型强制转换的分析和应用
评论