Simulink代码生成: Assignment模块及其代码 您所在的位置:网站首页 matlab中selector怎么用 Simulink代码生成: Assignment模块及其代码

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

2024-06-30 15:27| 来源: 网络整理| 查看: 265

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

>>返回个人博客总目录



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有