首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Simulink代码生成: Assignment模块及其代码

  • 23-09-22 01:02
  • 2825
  • 11071
blog.csdn.net

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

文章目录

  • 1 Simulink中的Assignment模块
  • 2 Assignment模块的模型和参数
  • 3 Assignment模块的代码
  • 4 Assignment模块的其他配置
    • 4.1 Index mode配置
    • 4.2 Initialize output (Y)配置
  • 5 总结

1 Simulink中的Assignment模块

最近在建模地时候遇到一种需求,在控制器运行的过程中需要更新某个Vector信号中的某个元素。从C语言的角度去理解,就是将一个变量赋值给数组中的某个元素。

博主研究后认为可以通过Assignment模块实现这个需求。Assignment有分配、指派的含义,在建模中这么理解也是很贴切的。相对应的,从一个Vector信号中提取某个元素可以用Selector模块,博主以前的博客也写过。

2 Assignment模块的模型和参数

本章会用Assignment模块建一个简单的模型,来体会一下这个模块的用法。
1)在Simulink中拖出一个Assignment模块,并将其参数配置如下。注意不同的参数配置后,模块的外观和端口会有所变化。
在这里插入图片描述
其中比较重要的参数及其含义如下:

  • Number of output dimensions设置为1,指的是需要修改的元素个数,而不是输出信号的元素个数。该参数设为几,下面的窗口就有几个序号需要分别配置;
  • Index mode设置为Zero-based,也就是索引从0开始;
  • Index Option设置为Index vector(port),表示索引号从外部端口输入,对应的是模块中的Idx1_0;
  • Initialize output (Y)设为Specify size for each dimension in table,这样上面会激活Output Size
  • Output Size设为3,表示输出信号有三个元素;

2)给模块加上输入输出如下:
在这里插入图片描述

  • 输入端U指的是需要分配的数值,这里写4;
  • 输入端Idx1_0指的是输出信号的那个元素赋值,这里的1代表第二个元素,因为上文配置了Zero-based;

3)仿真一下模型可以看到输出的数组是[0,4,0],也就是将第二个元素分配了4这个数值。
在这里插入图片描述

3 Assignment模块的代码

通过生成代码,可以更好的理解Assignment模块的机制,并且不同的参数对应的代码会是完全不同的含义。

1)将第2章的输入输出都替换成Inport或者Outport,然后Ctrl + D仿真以下,输出port会自动继承dimensions为3.
在这里插入图片描述
2)Ctrl + B生成代码如下
在这里插入图片描述
从step函数可以看出,In2是作为Out1的索引,In1赋值给Out1[In2]这个元素了,和模型的逻辑相符合。然后再去头文件中可以看到Out1的类型定义,是三个元素的数组。
在这里插入图片描述

4 Assignment模块的其他配置

4.1 Index mode配置

把Assignment模块的Index mode设置为One-based如下:
在这里插入图片描述
重新生成代码后,代码中的索引会多出一个减1的运算。
在这里插入图片描述
博主还是比较喜欢选择Zero-based,因为和C语言的语法习惯比较符合。

4.2 Initialize output (Y)配置

这个配置会影响输出数组的初始化,博主认为会有很大差别。将Initialize output (Y)配置成默认的Initialize using input port 后,模块就会多出一个Y0的输入端口。
在这里插入图片描述
将Y0初始值设为[0,0,0]表示数组的Dimesion是3,以及初始值。
在这里插入图片描述
重新Ctrl + B生成代码如下:
在这里插入图片描述
可以看出,在step函数中会对Out1做一个0初始化操作。这样的话,每个周期运行一次step函数就会清空数组再给数组赋值了,没法保持以前的赋值。

所以在大多数情况下,应该是不会采用这种配置的。

5 总结

Assignment模块的使用方法比较简单,也可以和循环子系统配合使用。

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/108983473"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top