Contenido principal

Memory

Generar como salida una entrada de paso de tiempo anterior

  • Memory block

Bibliotecas:
Simulink / Discrete
HDL Coder / Discrete

Descripción

El bloque Memory retiene y retrasa su entrada por una unidad de tiempo de integración principal. Cuando se coloca en un subsistema iterable, retiene y retrasa su entrada por una iteración. Este bloque acepta señales continuas y discretas. El bloque acepta una entrada y genera una salida. Cada señal puede ser un escalar, un vector, una matriz o un arreglo N-D. Si la entrada no es un escalar, el bloque retiene y retrasa todos los elementos de la entrada durante el mismo paso de tiempo.

Puede especificar la salida del bloque para el primer paso de tiempo con el parámetro Initial condition. Si selecciona este parámetro con precaución, puede evitar un comportamiento de salida no deseado. Aún así, no se puede especificar el tiempo de muestreo. El tiempo de muestreo del bloque se hereda o depende del solver. El parámetro Inherit sample time determina si el tiempo de muestreo se hereda o depende del solver.

Sugerencia

Evite utilizar el bloque Memory cuando estas dos condiciones sean verdaderas:

  • El modelo utiliza el solver de paso variable ode15s u ode113.

  • La entrada al bloque cambia durante la simulación.

Cuando el bloque Memory hereda un tiempo de muestreo discreto, el bloque es análogo al bloque Unit Delay. No obstante, el bloque Memory no admite el registro de estado. Si es necesario registrar el estado final, use un bloque Unit Delay en su lugar.

Comparación con bloques similares

Los bloques Memory, Unit Delay y Zero-Order Hold proporcionan una funcionalidad similar, pero tienen distintas prestaciones. Además, la finalidad de cada bloque es diferente.

Esta tabla muestra el uso recomendado para cada bloque.

BloqueFinalidad del bloqueEjemplos de referencia
Unit DelayImplemente un retraso utilizando un tiempo de muestreo discreto que especifique. El bloque acepta y produce como salida señales con un tiempo de muestreo discreto.
MemoryImplemente un retraso de una unidad de tiempo de integración principal. En condiciones ideales, el bloque acepta señales continuas (o fijas con paso de tiempo secundario) y produce como salida una señal fija con paso de tiempo secundario.
Zero-Order HoldConvierta una señal de entrada con un tiempo de muestreo continuo a una señal de salida con un tiempo de muestreo discreto.

Cada bloque tiene las siguientes características.

CaracterísticaMemoryUnit DelayZero-Order Hold
Especificación de condición inicialNo, porque la salida del bloque en la unidad de tiempo t = 0 debe coincidir con el valor de entrada.
Especificación de tiempo de muestreoNo, porque el bloque solo puede heredar tiempo de muestreo del bloque controlador o del solver usados para todo el modelo.
Soporte para señales basadas en tramasNo
Soporte para registro de estadoNoNo

Soporte para bus

El bloque Memory es un bloque apto para bus. La entrada puede ser una señal de bus virtual o no virtual sujeta a las siguientes restricciones:

  • Initial condition debe ser cero, un escalar distinto de cero o una estructura numérica finita.

  • Si Initial condition es cero o una estructura y especifica State name, la entrada no puede ser un bus virtual.

  • Si Initial condition es un escalar distinto de cero, no puede especificar State name.

Para obtener información sobre cómo especificar una estructura de condición inicial, consulte Specify Initial Conditions for Bus Elements.

Todas las señales en una entrada de bus no virtual para un bloque Memory deben tener el mismo tiempo de muestreo, incluso si los elementos del objeto bus asociado especifican tiempos de muestreo heredados. Puede usar un bloque Rate Transition para cambiar el tiempo de muestreo de una señal individual o de todas las señales de un bus. Consulte Modify Sample Times for Nonvirtual Buses y Bloques aptos para bus para obtener más información.

Puede usar un arreglo de buses como señal de entrada para un bloque Memory. Puede especificar el parámetro Initial condition con:

  • El valor 0. En este caso, todas las señales individuales del arreglo de buses utilizan el valor inicial 0.

  • Un arreglo de estructuras que especifica una condición inicial para cada una de las señales individuales del arreglo de buses.

  • Una estructura escalar que especifica una condición inicial para cada uno de los elementos definidos por el tipo de bus. Utilice esta técnica para especificar las mismas condiciones iniciales para cada uno de los buses del arreglo.

Para obtener detalles sobre cómo definir y usar un arreglo de buses, consulte Group Nonvirtual Buses in Arrays of Buses.

Ejemplos

expandir todo

Este ejemplo muestra cómo usar los bloques Memory y Clock para calcular y mostrar el tamaño del paso en una simulación. El bloque Sum resta el tiempo en la unidad de tiempo anterior, que genera el bloque Memory, de la unidad de tiempo actual, que genera el bloque Clock.

Como no se ha seleccionado Inherit sample time en el bloque Memory, el tiempo de muestreo del bloque depende del tipo de solver para la simulación del modelo. En ese caso, el modelo usa un solver de paso fijo. Por consiguiente, el tiempo de muestreo del bloque Memory es el tamaño de paso del solver o 1.

Si se sustituye el bloque Memory por un bloque Unit Delay, se obtienen los mismos resultados. El bloque Unit Delay hereda un tiempo de muestreo discreto de 1.

Ejemplos ampliados

Puertos

Entrada

expandir todo

Señal de entrada, especificada como un escalar, un vector, una matriz o un arreglo N-D. La entrada puede ser continua o discreta y contener valores reales o complejos de cualquier tipo de datos admitido por Simulink®.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

Salida

expandir todo

La salida es la entrada del paso de tiempo anterior.

Tipos de datos: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

Parámetros

expandir todo

Principal

Especifique la salida en el paso de integración inicial. Este valor debe ser 0 cuando no se utiliza un tipo de datos de entrada integrado.

Uso programático

Parámetro de bloque: InitialCondition
Tipo: vector de caracteres
Valores: escalar | vector
Predeterminado: '0'

Seleccione heredar el tiempo de muestreo del bloque controlador:

  • Si el bloque controlador tiene un tiempo de muestreo discreto, el bloque hereda el tiempo de muestreo.

  • Si el bloque controlador tiene un tiempo de muestreo continuo, seleccionar esta casilla no tiene efecto. El tiempo de muestreo depende del tipo de solver utilizado para la simulación del modelo.

Cuando se desactiva esta casilla, el tiempo de muestreo del bloque depende del tipo de solver utilizado para la simulación del modelo:

  • Si el solver es un solver de paso variable, el tiempo de muestreo del bloque es continuo pero fijo con paso de tiempo secundario: [0, 1].

  • Si el solver es un solver de paso fijo, el tiempo de muestreo [0, 1] convierte al tamaño de paso del solver después de la propagación del tiempo de muestreo.

Uso programático

Parámetro de bloque: InheritSampleTime
Tipo: vector de caracteres
Valores: 'off' | 'on'
Predeterminado: 'off'

Seleccione esta opción para producir como salida la entrada durante la linealización y el ajuste. Esta selección establece el modo del bloque en alimentación directa.

Seleccionar esta casilla puede modificar el orden de los estados en el modelo cuando se utilizan las funciones linmod, dlinmod o trim. Para extraer este nuevo orden de los estados, utilice los siguientes comandos.

Primero, compile el modelo utilizando el siguiente comando, donde model es el nombre del modelo de Simulink.

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

Después, termine la compilación con este comando.

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

El argumento de salida, x_str, que es un arreglo de celdas de los estados en el modelo de Simulink, contiene el nuevo orden de los estados. Cuando se pasa un vector de estados como entrada a las funciones linmod, dlinmod o trim, el vector de estado debe usar este nuevo orden de los estados.

Uso programático

Parámetro de bloque: LinearizeMemory
Tipo: vector de caracteres
Valores: 'off' | 'on'
Predeterminado: 'off'

Seleccione esta opción para linealizar el bloque Memory a un retardo unitario cuando el bloque Memory está impulsado por una señal con un tiempo de muestreo discreto.

Uso programático

Parámetro de bloque: LinearizeAsDelay
Tipo: vector de caracteres
Valores: 'off' | 'on'
Predeterminado: 'off'

Atributos de estado

Utilice este parámetro para asignar un nombre único al estado del bloque. El valor predeterminado es ' '. Cuando este campo está vacío, no hay ningún nombre asignado. Cuando utilice este parámetro, recuerde estas consideraciones:

  • Un identificador válido empieza con un carácter alfabético o un guion bajo, seguido se caracteres alfanuméricos o guiones bajos.

  • El nombre de estado se aplica solo al bloque seleccionado.

Este parámetro activa State name must resolve to Simulink signal object cuando hace clic en Apply.

Para obtener más información, consulte C Data Code Interface Configuration for Model Interface Elements (Simulink Coder).

Uso programático

Parámetro de bloque: StateName
Tipo: vector de caracteres
Valores: nombre único
Predeterminado: ''

Seleccione esta casilla para requerir que los nombres de estado se resuelvan en un objeto señal de Simulink.

Dependencias

Para activar este parámetro, especifique un valor para State name. Este parámetro solo aparece si se establece el parámetro de configuración del modelo Signal resolution en un valor distinto de None.

Uso programático

Parámetro de bloque: StateMustResolveToSignalObject
Tipo: vector de caracteres
Valores: 'off' | 'on'
Predeterminado: 'off'

Características del bloque

Tipos de datos

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

Paso directo

noa

Señales multidimensionales

Señales de tamaño variable

no

Detección de cruce por cero

no

a Las características de alimentación directa para este bloque dependen de los valores de parámetro de bloques.

Capacidades ampliadas

expandir todo

Generación de código C/C++
Genere código C y C++ mediante Simulink® Coder™.

Generación de código PLC
Genere código de texto estructurado mediante Simulink® PLC Coder™.

Conversión de punto fijo
Diseñe y simule sistemas en punto fijo mediante Fixed-Point Designer™.

Historial de versiones

Introducido antes de R2006a