Main Content

本页的翻译已过时。点击此处可查看最新英文版本。

Memory

输出上一个时间步的输入

  • 库:
  • Simulink / Discrete

    HDL Coder / Discrete

  • Memory block

说明

Memory 模块将其输入保持并延迟一个主积分时间步。当放置于迭代子系统中时,该模块将其输入保持并延迟一个迭代。此模块接受连续和离散信号。此模块接受一个输入并生成一个输出。每个信号可以是标量、向量、矩阵或 N 维数组。如果输入为非标量,该模块会将输入的所有元素保持并延迟相同的时间步。

使用 Initial condition 参数指定第一个时间步的模块输出。仔细选择此参数可以最大程度地减少不需要的输出行为。但是,您不能指定采样时间。此模块的采样时间取决于所用求解器的类型,您也可以指定继承采样时间。Inherit sample time 参数确定采样时间是继承的还是基于求解器。

提示

当以下两个条件均为真时,避免使用 Memory 模块:

  • 模型使用可变步长求解器 ode15sode113

  • 模块的输入在仿真期间发生变化。

当 Memory 模块继承离散采样时间时,该模块类似于 Unit Delay 模块。但是,Memory 模块不支持状态记录。如果需要记录最终状态,请改用 Unit Delay 模块。

与类似模块的比较

MemoryUnit DelayZero-Order Hold 模块提供相似的功能,但各自具有不同的能力。此外,每个模块的用途也各不相同。

下表显示每个模块的推荐用途。

模块模块的用途引用示例
Unit Delay使用您指定的离散采样时间实现延迟。该模块接受并输出具有离散采样时间的信号。
Memory将信号延迟一个主积分时间步。在理想情况下,该模块接受连续(或在子时间步中固定)的信号并输出在子时间步中固定的信号。
Zero-Order Hold将具有连续采样时间的输入信号转换为具有离散采样时间的输出信号。

每个模块有以下功能。

功能MemoryUnit DelayZero-Order Hold
指定初始条件否,因为在时间 t = 0 的模块输出必须与输入值相匹配。
指定采样时间否,因为该模块只能从驱动模块或用于整个模型的求解器继承采样时间。
支持基于帧的信号
支持状态记录

总线支持

Memory 模块支持总线。输入可以是满足下列限制条件的虚拟或非虚拟总线信号:

  • Initial condition 必须为零、非零标量或有限数值结构体。

  • 如果 Initial condition 为零或结构体,而您指定了 State name,则输入不能是虚拟总线。

  • 如果 Initial condition 为非零标量,则不能指定 State name

有关指定初始条件结构体的信息,请参阅指定总线元素的初始条件

Memory 模块的非虚拟总线输入中的所有信号都必须具有相同的采样时间,即使关联总线对象的元素指定继承采样时间也是如此。您可以使用 Rate Transition 模块更改总线中单个信号或所有信号的采样时间。有关详细信息,请参阅Modify Sample Times for Nonvirtual Buses支持总线的模块

可使用总线数组作为 Memory 模块的输入信号。可为 Initial condition 参数指定:

  • 0。在这种情况下,总线数组中的所有单个信号都使用初始值 0

  • 结构体数组,为总线数组中的每个信号指定初始条件。

  • 单个标量结构体,为总线类型定义的每个元素指定初始条件。使用此方法可为数组中的每条总线指定相同的初始条件。

有关定义和使用总线数组的详细信息,请参阅使用总线数组组合非虚拟总线

端口

输入

全部展开

输入信号,指定为标量、向量、矩阵或 N 维数组。输入可以是连续的或离散的,包含 Simulink® 支持的任何数据类型的实数或复数值。

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

输出

全部展开

输出是来自上一时间步的输入。

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

参数

全部展开

Main

指定初始积分步长的输出。当不使用内置输入数据类型时,此值必须为 0。

编程用法

模块参数:InitialCondition
类型:字符向量
值:标量 | 向量
默认值:'0'

选中此选项可从驱动模块继承采样时间:

  • 如果驱动模块具有离散采样时间,模块将继承该采样时间。

  • 如果驱动模块具有连续采样时间,则选中此复选框没有任何作用。采样时间取决于用于模型仿真的求解器的类型。

如果清除此复选框,模块采样时间将取决于用于模型仿真的求解器的类型:

  • 如果求解器为可变步长求解器,则模块采样时间是连续的,但在子时间步中是固定的:[0, 1]

  • 如果求解器是固定步长求解器,则 [0, 1] 采样时间将转换为采样时间传播后的求解器步长。

编程用法

模块参数:InheritSampleTime
类型:字符向量
值:'off' | 'on'
默认值:'off'

选中此选项可在线性化和配平期间直接将输入作为输出。此选择可将模块模式设置为直接馈通。

当使用函数 linmoddlinmodtrim 时,选中此复选框可能会使模型中状态的排序发生变化。要提取这一新的状态排序方式,请使用阶以下命令。

首先使用以下命令编译模型,其中 model 是 Simulink 模型的名称。

    [sizes, x0, x_str] = model([],[],[],'lincompile'); 

接下来,使用以下命令终止编译。

  model([],[],[],'term'); 

输出参数 x_str 是 Simulink 模型中状态的元胞数组,其中包含新的状态排序方式。将状态向量作为输入传递到 linmoddlinmodtrim 函数时,状态向量必须使用这一新的状态排序方式。

编程用法

模块参数:LinearizeMemory
类型:字符向量
值:'off' | 'on'
默认值:'off'

Memory 模块由具有离散采样时间的信号驱动时,选择此选项可将 Memory 模块线性化为单位延迟。

编程用法

模块参数:LinearizeAsDelay
类型:字符向量
值:'off' | 'on'
默认值:'off'

State Attributes

使用此参数为模块状态指定唯一名称。默认值为 ' '。如果此字段为空,则表示未指定任何名称。使用此参数时,请记住以下注意事项:

  • 有效的标识符以字母或下划线字符开始,后跟字母数字或下划线字符。

  • 状态名称仅适用于所选模块。

当您点击 Apply 时,此参数将启用 State name must resolve to Simulink signal object

有关详细信息,请参阅模型接口元素的 C 代码生成配置 (Simulink Coder)

编程用法

模块参数:StateName
类型:字符向量
值:唯一名称
默认值:''

选中此复选框会要求将状态名称解析为 Simulink 信号对象。

依存关系

要启用此参数,请为 State name 指定值。仅当将模型配置参数 Signal resolution 设置为除 “None” 以外的值时,才会显示此参数。

选中此复选框将禁用 Code generation storage class

编程用法

模块参数:StateMustResolveToSignalObject
类型:字符向量
值:'off' | 'on'
默认值:'off'

通过选择目标包定义的信号对象类,来选择自定义存储类包。例如,要应用来自内置包 mpt 的自定义存储类,请选择 “mpt.Signal”。除非您将基于 ERT 的代码生成目标与 Embedded Coder® 一起使用,否则自定义存储类不会影响生成的代码。

要使用除 Simulink 包之外的存储类包,您必须将该包加载到模型的 Embedded Coder 字典中。请参阅Load Storage Class Packages into Embedded Coder Dictionary (Embedded Coder)

有关使用存储类配置模型数据的信息,请参阅模型接口元素的 C 代码生成配置 (Embedded Coder)。有关自定义存储类的信息,请参阅Organize Data into Structures in Generated Code (Embedded Coder)

编程用法

模块参数:StateSignalObject
类型:字符向量
值:'Simulink.Signal' | '<StorageClass.PackageName>'
默认值:'Simulink.Signal'

选择用于代码生成的状态存储类。

使用 Signal object classSimulink 以外的包中选择自定义存储类。

依存关系

要启用此参数,请为 State name 指定值。

编程用法

模块参数:StateStorageClass
类型:字符向量
值:'Auto' | 'Model default' | 'ExportedGlobal' | 'ImportedExtern' | 'ImportedExternPointer' | 'Custom' | ...
默认值:'Auto'

指定存储类型限定符,如 constvolatile

注意

在以后的版本中将删除 TypeQualifier。要将存储类型限定符应用于数据,请使用自定义存储类和内存段。除非您将基于 ERT 的代码生成目标与 Embedded Coder 一起使用,否则自定义存储类和内存段不会影响生成的代码。

在仿真期间,模块将使用以下值:

  • 状态名称解析成的信号对象的初始值

  • 信号对象的最小值和最大值

有关详细信息,请参阅数据对象

依存关系

要启用此参数,请将 Code generation storage class 设置为 “ExportedGlobal”、“ImportedExtern”、“ImportedExternPointer” 或 “Model default”。除非您以前为此参数设置了值,否则它将不会显示。

编程用法

模块参数:RTWStateStorageTypeQualifier
类型:字符向量
值:'' | 'const' | 'volatile' | ...
默认值:''

模块特性

数据类型

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

直接馈通

多维信号

可变大小信号

过零检测

扩展功能

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

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

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

在 R2006a 之前推出