Simulink建模基础: Assignment模块及其代码

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

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

>>返回个人博客总目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chhttty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值