主要内容

Assignment

R2026b

为指定的信号元素赋值

  • Assignment block

库:
Simulink / Math Operations
HDL Coder / Math Operations

描述

Assignment 模块为指定的信号元素赋值。您可以通过在模块对话框中输入索引,或者通过将一个或多个外部索引源连接到模块,来指定要赋值的元素的索引。模块数据端口 U 处的信号指定要赋给 Y 的值。该模块将 Y 的指定元素替换为数据信号的元素。

基于您为输出维度的数量参数输入的值,将显示一个索引选项表。表中的每一行对应于输出维度的数量中的一个输出维度。对于每个维度,您可以定义要使用的信号元素。可将向量信号指定为一维信号,将矩阵信号指定为二维信号。要启用外部索引端口,请在表的对应行中将索引选项设置为索引向量(端口) 或起始索引(端口)。

例如,假设一个 5 维信号具有从 1 开始的索引模式。Assignment 模块对话框中的表将发生变化,使每个维度都有一个对应的行。如果您使用以下选项定义每个维度:

行索引选项索引
1全部赋值 
2索引向量(对话框)[1 3 5]
3起始索引(对话框)4
4起始索引(端口) 
5索引向量(端口) 

所赋的值为 Y(1:end,[1 3 5],4:3+size(U,3),Idx4:Idx4+size(U,4)-1,Idx5)=U,其中 Idx4 和 Idx5 是维度 4 和 5 的输入端口。

在普通模式下使用 Assignment 模块时,Simulink® 将模块输出初始化为零,即使模型没有显式初始化它们也是如此。在加速模式下,Simulink 将模型转换成 S-Function。这涉及到代码生成。生成的代码可能不会隐式初始化模块输出。在这种情况下,您必须显式初始化模型输出。

您可以使用模块为向量、矩阵或多维信号赋值。

可使用总线数组作为 Assignment 模块的输入信号。

条件子系统中的 Assignment 模块

如果在条件子系统模块中放置一个 Assignment 模块,在许多情况下会插入一个隐藏的信号缓冲区(相当于 Signal Conversion 模块),并且将来自 Assignment 模块的信号与部分写入合并会导致错误。

但是,如果选择条件子系统 Outport 模块的确保输出端口为虚拟端口参数,将对此类情况提供支持,并且可以使用 Assignment 模块部分写入数组。请参阅Ensure Output Port Is Virtual。

Model of Assignment block with three input signals

示例

全部展开

此示例说明如何在 Simulink® 中将在 for 循环中计算的值赋给信号中的指定元素。您可以将 Assignment 和 For Iterator Subsystem 模块组合起来用于此类赋值。您可以使用向量、矩阵或多维信号,并在单一时间步内完成赋值。

在 ex_assignment_block_with_for_iterator 模型中,For Iterator 子系统内部的 Assignment 模块将来自 for 循环的信号值赋给输出向量信号。

模型行为

For Iterator 模块创建一个索引 $i$,该索引乘以因子 3。Assignment 模块使用此放大后的索引值作为由 U 指示的输入。Assignment 模块使用索引值 $i$ 将值赋给输出向量 Y。Assignment 和 For Iterator 模块都使用从 1 开始的索引。在第一次迭代中,Assignment 模块将第一个输入 Y0 复制到输出 Y,并将第二个输入 U 赋给输出 Y(E1)。在后续迭代中,Assignment 模块将 U 的当前值赋给 Y(Ei),即不先将 Y0 复制到 Y。这些操作发生在单个时间步内。

模型仿真

对模型进行仿真。Display 模块显示值 3、6 和 9,它们分别是第一次、第二次和第三次迭代中索引值 1、2 和 3 的三倍。

扩展示例

限制

  • 索引参数在仿真期间不可调。如果维度的索引选项设置为索引向量(对话框) 或起始索引(对话框),并且您在模块对话框中为对应的索引指定了符号值,包括 Simulink.Parameter 对象,则仿真开始时的瞬时值将在整个仿真中使用,并且该参数将在生成代码中作为内联值出现。请参阅使用模块参数值进行调优和试验。您可以使用索引端口动态调整赋值索引。

端口

输入

全部展开

输出信号的初始值。如果未对在输入数据端口 (U) 上指定的信号分配与初始值不同的值,则端口 Y 上的输出信号值与初始值匹配。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point | Boolean | enumerated | bus

赋给输出元素的值(当指定了该值时)。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point | Boolean | enumerated | bus

外部端口,用于指定对应输出元素的赋值的索引。

您可以指定自定义宽度的整数(例如,15 位整数或 23 位整数)作为索引信号值。配置整数的宽度时,必须将模式指定为定点,其中字长小于或等于 65,535,斜率等于 1,偏置等于 0。有关指定定点数据类型的详细信息,请参阅使用数据类型助手指定数据类型。

依赖关系

要启用外部索引端口,请在索引选项表的对应行中将索引选项设置为索引向量(端口) 或起始索引(端口)。

数据类型: single | double | int8 | int16 | int32 | uint8 | uint16 | uint32

输出

全部展开

对指定元素赋值后的输出信号。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | fixed point | enumerated | bus

参数

全部展开

键入输出信号的维数。

编程用法

参数:NumberOfDimensions
类型:字符向量
值:整数
默认值:'1'

选择索引模式。如果选择从 1 开始,则索引 1 指定输入向量的第一个元素。如果选择从 0 开始,则索引 0 指定输入向量的第一个元素。

编程用法

参数:IndexMode
类型:字符向量
值:'Zero-based' | 'One-based'
默认值:'One-based'

按维度定义信号元素的索引方式。从列表中,选择:

菜单项操作
全部赋值

所有元素都被分配。

索引向量(对话框)

启用索引列。输入元素的索引。

索引向量(端口)

索引端口定义元素的索引。

起始索引(对话框)

启用索引列。输入要赋值的元素范围的起始索引。

起始索引(端口)

索引端口定义要赋值的元素范围的起始索引。

如果您为表中的任何维度选择索引向量(端口) 或起始索引(端口),则可以为初始化输出(Y) 参数指定下列值之一:

  • 使用输入端口 <Y0> 初始化

  • 指定表中每个维度的大小

否则,Y0 始终初始化输出端口 Y。

索引和输出大小列显示为具有相关性。

编程用法

参数:IndexOptionArray
类型:字符向量元胞数组
值: {'Assign all'} | {'Index vector (dialog)'} | {'Index vector (port)'} | {'Starting index (dialog)'} | {'Starting index (port)'}
默认值:{'Index vector (dialog)'}

对于字符向量而不是字符向量元胞数组,请使用 IndexOptions。

如果索引选项设置为索引向量(对话框),则输入所需的每个元素的索引。

如果索引选项设置为起始索引(对话框),则输入要选择的元素范围的起始索引。从起点开始的元素数量由此维度在 U 处的大小决定。

编程用法

参数:IndexParamArray
类型:字符向量元胞数组
值:整数
默认值:{'1'}

对于字符向量而不是字符向量元胞数组,请使用 Indices。

输入模块输出信号的宽度。

依赖关系

要启用此列,请将初始化输出(Y) 设置为指定表中每个维度的大小。

编程用法

参数:OutputSizeArray
类型:字符向量元胞数组
值:整数
默认值:{'1'}

对于字符向量而不是字符向量元胞数组,请使用 OutputSizes。

指定如何初始化输出信号。

  • 使用输入端口 <Y0> 初始化 - 位于输入端口 Y0 的信号初始化输出。

  • 指定表中每个维度的大小 - 要求您在输出大小参数中指定模块输出信号的宽度。如果输出具有未分配的元素,则这些元素的值未定义。

依赖关系

要启用此参数,请为一个或多个维度将索引选项设置为索引向量(端口) 或起始索引(端口)。

编程用法

参数:OutputInitialize
类型:字符向量
值:'Initialize using input port <Y0>' | 'Specify size for each dimension in table'
默认值:'Initialize using input port <Y0>'

指定当您还有未分配的输出元素时是否生成警告或错误。选项包括:

  • 警告 - Simulink 显示警告并继续进行仿真。

  • 错误 - Simulink 终止仿真并显示错误。

  • 无 - Simulink 不执行任何操作。

依赖关系

要启用此参数,请为一个或多个维度将索引选项设置为索引向量(端口) 或起始索引(端口)。然后,将初始化输出(Y) 设置为指定表中每个维度的大小。

编程用法

参数:DiagnosticForDimensions
类型:字符向量
值:'Error' | 'Warning' | 'None'
默认值:'Warning'

指定采样时间间隔。要继承采样时间,请将此参数设置为 -1。有关详细信息,请参阅指定采样时间。

依赖关系

仅当您将此参数设置为 -1 以外的值时才可见。要了解详细信息,请参阅不推荐设置采样时间的模块。

编程用法

要以编程方式设置模块参数值,请使用 set_param 函数。

参数: SampleTime
值: "-1" (默认) | scalar or vector in quotes

选中此复选框可让 Simulink 在加速或快速加速模式下进行仿真时检查是否有任何索引值超出输入信号的相关维度的有效索引范围。如果索引超出范围,Simulink 将停止仿真并显示错误消息。

注意

如果不选中此复选框,超出范围的索引值可能导致在加速或快速加速模式下仿真期间出现未定义的行为。

无论是否选中此复选框,在普通模式仿真期间 Simulink 都会执行此检查。

依赖关系

此参数默认隐藏。默认情况下,Assignment 模块在加速和快速加速仿真模式下会检查索引值是否超出范围。仅当您以编程方式将 RuntimeRangeChecks 属性设置为 'off' 时,此参数才会启用并可见。

编程用法

参数:RuntimeRangeChecks
类型:字符向量
值:'Off' | 'On'
默认值:'Off'

模块特性

数据类型

Boolean | double | enumerated | fixed point | integer | single

直接馈通

是

多维信号

是

可变大小信号

是

过零检测

否

扩展功能

全部展开

C/C++ 代码生成
使用 Simulink® Coder™ 生成 C 代码和 C++ 代码。

PLC 代码生成
使用 Simulink® PLC Coder™ 生成结构化文本代码。

定点转换
使用 Fixed-Point Designer™ 设计和仿真定点系统。

版本历史记录

在 R2006a 之前推出

全部展开