浮名此生分享 http://blog.sciencenet.cn/u/hailangww 工学博士

博文

[转载]Simulink代码生成: Data Type Conversion模块及其代码

已有 895 次阅读 2024-7-31 20:07 |系统分类:科研笔记|文章来源:转载

本文研究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生成代码;

在这里插入图片描述

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



https://blog.sciencenet.cn/blog-54347-1444602.html

上一篇:基于基波数学模型的三相永磁同步电机无感控制
下一篇:[转载]Simulink模型编译加密共享
收藏 IP: 123.146.0.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-25 02:13

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部