本文研究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模块的使用方法比较简单,也可以和循环子系统配合使用。

>>返回个人博客总目录

Simulink代码生成: Assignment模块及其代码相关推荐

  1. Simulink代码生成: 延时模块及其代码

    Simulink代码生成: 延时模块及其代码_u013288925的博客-CSDN博客_simulink延时模块

  2. Simulink代码生成:CAN Pack模块及其代码

    本文研究CAN Pack模块的用法和该模块生成的代码.涉及到一些dbc文件查看和编辑的内容,需要从Vector官网下载一个CANdb++ Editor软件. 文章目录 1 Simulink中的CAN ...

  3. Simulink代码生成: MinMax模块及其代码

    本文研究MinMax模块的用法和该模块生成的代码,同时指出该模块使用时的一个注意点. 文章目录 1 Simulink中的MinMax模块 2 MinMax模块建模 3 MinMax模块的代码 4 Mi ...

  4. Simulink代码生成: Relay模块及其代码

    本文研究Relay模块的用法和该模块生成的代码. 文章目录 1 Simulink中的Relay模块 2 Relay模块建模 3 Relay模块的代码 4 总结 1 Simulink中的Relay模块 ...

  5. Simulink代码生成(二十二)——TSP开发之创建外部设备模块

    Simulink代码生成(二十二)--TSP开发之创建外部设备模块 文章目录 Simulink代码生成(二十二)--TSP开发之创建外部设备模块 一.C Mex Sfunction文件解读 一.C M ...

  6. Simulink代码生成:生成C++类

    博主最近在工作中用Simulink生成C++类的代码,因此将一些感悟记录下来.本文通过一个简单的例子研究Simulink生成C++类的代码以及一些相关配置. 文章目录 1 创建模型 2 C++类生成配 ...

  7. simulink代码生成

    基于模型的设计概念 基于模型的设计(Design Based on Model),可简称为MBD,以MATLAB等软件为平台,让工程师在可视化开发环境中,一边进行需求分析.算法研究.模型与需求分析的双 ...

  8. Simulink代码生成:生成ASAP2文件

    本文研究通过Simulink生成A2L文件的方法,以及其中的一些注意点. 文章目录 1 ASAP2文件 2 生成标定量.观测量的A2L文件 2.1 建模过程 2.2 配置界面 2.3 生成A2L文件 ...

  9. Simulink代码生成:Step函数接口配置

    本文研究Simulink生成代码时的step函数的名称和参数. 文章目录 1 问题引入 2 配置过程 3 代码生成 4 总结 1 问题引入 在之前的一篇博客<Simulink代码生成:Simul ...

最新文章

  1. OC 消息转发实现多继承
  2. AGG第三十五课 gsv_text 渲染ASCII字符
  3. pandas.to_csv()中文编码问题
  4. Unity3D研究院之Inspector面板枚举的别名与排序
  5. org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
  6. SAP SD里CDS view对status的设计
  7. 全国计算机等级考试题库二级C操作题100套(第84套)
  8. 《视图更新与关系数据库理论》——2.1 关系和关系变量
  9. 小学计算机三年级课程目录,小学生信息技术课本目录.doc
  10. HAProxy负载均衡原理及企业级实例部署haproxy集群
  11. python生成二维坐标点_Python numpy:根据坐标创建二维数组
  12. D3、EChart、HighChart绘图demol
  13. HDU3784 继续xxx定律【角谷猜想】
  14. 开课吧Java课堂:如何使用isAlive()和join()
  15. ARM指令集--相关指令的功能
  16. 在线vip全网音乐搜索下载源码
  17. PowerDesigner16.5下载
  18. UE4 坐标系坐标轴旋转轴
  19. The MVGC Multivariate Granger Causality Matlab初上手记录
  20. Android Studio 模拟器重启(解决模拟器卡死问题)

热门文章

  1. Eclipse的安装及环境配置
  2. win10 查看本机的激活秘钥
  3. 【2021新教程】win10安装汇编环境(Dosbox+masm)
  4. 华为鸿蒙王成录采访晚点视频,华为鸿蒙掌舵人王成录:今年搭载鸿蒙的设备至少3亿台...
  5. ie浏览器使用pdf时需要先安装软件Adobe Reader 9
  6. css设置背景图片模糊,文字清晰展示
  7. 深入理解Arduino下的ESP8266_Non-OS_SDK API④ SPI Flash接口
  8. Java实现经典八锁问题
  9. 思科华为交换机-生成树配置脚本
  10. GBase 8a集群v953版本自增列介绍