Simulink代码生成: Data Type Conversion模块及其代码

本文研究Data Type Conversion模块的用法和该模块生成的代码。

1 Simulink中的Data Type Conversion模块

Data Type Conversion模块可以转换Simulink信号线的数据类型。在建模的过程中,这是一个简单而常用的模块。
在这里插入图片描述
在使用该模块的时候,也有一些地方需要注意。

2 Data Type Conversion模块建模

通过建模可以直观地感受到Data Type Conversion模块的用法。

1)新建一个Simulink模型,拖入一个constant模块,一个Data Type Conversion模块,一个Disp模块;
在这里插入图片描述
2)将constant模块配置为uint16类型,将Data Type Conversion模块的Output配置为uint8类型;
在这里插入图片描述
在这里插入图片描述
3)运行仿真后,可以看到disp模块中的结果,但是类型转换不够直观;可以通过Display -->Signals & Ports --> Port Data Types来显示信号线上的类型;
在这里插入图片描述
这样就完成了信号线的类型转换。

4)将输入输出接口换成Inport和Outport,配置Embedded Coder生成代码;
在这里插入图片描述
从step函数中可以看出,Data Type Conversion对应代码中的(uint8_T)强制类型转换,也是很好理解的。

3 取整方式配置

当Data Type Conversion模块输入的是浮点数,输出的是整数时,就涉及到了转换的过程中采用哪一种取整方式。双击模块后,其中的Integer rounding mode就是用来配置取整方式。

选择不同的取整方式,生成的代码是不同的,有的会非常复杂。通常保持默认的floor即可,也就是向负无穷大舍入。
在这里插入图片描述

4 整型转换溢出处理

1)uint8的范围是0~255,如果将一个260的浮点数转换成uint8会怎么样。可以在Simulink中试着仿真一下。
在这里插入图片描述
如图中所示,会将超出的部分重新从零开始往上计算。生成代码的强制类型转换的效果,会随着使用的编译器不同,而做出不同的溢出处理方式,也就是说不一定和仿真的一样。这一点很重要,要进行充分的验证。

2)另外,可以通过勾选Saturate on integer overflow配置,对溢出的情况做一个饱和处理;
在这里插入图片描述
这样的话,输出的信号就会被限值在uint8类型的边界之处,也就是最大值255;
在这里插入图片描述
代码中也会有不同的实现方式:
在这里插入图片描述

5 总结

Data Type Conversion在Simulink中是一个常用的模块,但是也很容易出错。最好在建模的过程中细致地考虑,并进行充分的测试。

>>返回个人博客总目录

猜你喜欢

转载自blog.csdn.net/u013288925/article/details/118557416
今日推荐