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

编程知识 更新时间:2023-05-02 21:15:20

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

文章目录

  • 1 Simulink中的Data Type Conversion模块
  • 2 Data Type Conversion模块建模
  • 3 取整方式配置
  • 4 整型转换溢出处理
  • 5 总结

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中是一个常用的模块,但是也很容易出错。最好在建模的过程中细致地考虑,并进行充分的测试。

>>返回个人博客总目录

更多推荐

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

本文发布于:2023-04-28 17:10:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/ab2c8d7889807b97ad0a810e28b54b37.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:代码   模块   Simulink   Data   Conversion

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 109252文章数
  • 27725阅读数
  • 0评论数