Main Content

Memory

Generare l'input dal passo temporale precedente

  • Memory block

Librerie:
Simulink / Discrete
HDL Coder / Discrete

Descrizione

Il blocco Memory trattiene e ritarda il proprio input di un passo temporale di integrazione principale. Quando è inserito in un sottosistema iteratore, trattiene e ritarda il proprio input di un'iterazione. Questo blocco accetta segnali continui e discreti. Il blocco accetta un input e genera un output. Ciascun segnale può essere uno scalare, un vettore, una matrice o un array N-D. Se l'input non è scalare, il blocco trattiene e ritarda tutti gli elementi dell'input dello stesso passo temporale.

L'output del blocco per il primo passo temporale si specifica utilizzando il parametro Initial condition. Un'attenta selezione di questo parametro può minimizzare il comportamento indesiderato dell'output. Tuttavia, non è possibile specificare il tempo di campionamento. Il tempo di campionamento di questo blocco dipende dal tipo di risolutore utilizzato; in alternativa è possibile specificare di ereditarlo. Il parametro Inherit sample time determina se il tempo di campionamento è ereditato o basato sul risolutore.

Suggerimento

Evitare di usare il blocco Memory quando entrambe queste condizioni sono vere:

  • Il modello utilizza il risolutore a passo variabile ode15s o ode113.

  • L'input del blocco cambia durante la simulazione.

Quando il blocco Memory eredita un tempo di campionamento discreto, il blocco è analogo al blocco Unit Delay. Tuttavia, il blocco Memory non supporta la registrazione dello stato. Se è necessario registrare lo stato finale, utilizzare invece un blocco Unit Delay.

Confronto con blocchi simili

I blocchi Memory, Unit Delay e Zero-Order Hold presentano funzionalità simili, ma con capacità diverse. Inoltre, anche lo scopo di ciascun blocco è diverso.

La tabella mostra l'utilizzo consigliato per ciascun blocco.

BloccoScopo del bloccoEsempi di riferimento
Unit DelayImplementare un ritardo utilizzando un tempo di campionamento discreto specificato dall'utente. Il blocco accetta e genera segnali con un tempo di campionamento discreto.
MemoryImplementare un ritardo di un passo temporale di integrazione principale. Idealmente, il blocco accetta segnali continui (o fissi con passo temporale minore) e genera un segnale fisso con passo temporale minore.
Zero-Order HoldConvertire un segnale di input con tempo di campionamento continuo in un segnale di output con tempo di campionamento discreto.

Ciascun blocco ha le seguenti funzionalità.

CapacitàMemoriaRitardo di unitàMantenimento di ordine zero
Specifica della condizione inizialeNo, perché l'output del blocco al tempo t = 0 deve corrispondere al valore di input.
Specifica del tempo di campionamentoNo, perché il blocco può ereditare il tempo di campionamento solo dal blocco di comando o dal risolutore utilizzato per l'intero modello.
Supporto per segnali basati su frameNo
Supporto per la registrazione dello statoNoNo

Supporto per il bus

Il blocco Memory è un blocco compatibile con il bus. L'input può essere un segnale bus virtuale o non virtuale, con le seguenti limitazioni:

  • Initial condition deve essere pari a zero, uno scalare diverso da zero o una struttura numerica finita.

  • Se Initial condition è pari a zero o è una struttura e si specifica State name, l'input non può essere un bus virtuale.

  • Se Initial condition è uno scalare diverso da zero, non è possibile specificare State name.

Per informazioni sulla specificazione di una struttura delle condizioni iniziali, vedere Specify Initial Conditions for Bus Elements.

Tutti i segnali in un bus non virtuale di input a un blocco Memory devono avere lo stesso tempo di campionamento, anche se gli elementi dell'oggetto bus associato specificano tempi di campionamento ereditati. È possibile utilizzare un blocco Rate Transition per modificare il tempo di campionamento di un singolo segnale o di tutti i segnali di un bus. Per ulteriori informazioni, vedere Modify Sample Times for Nonvirtual Buses e Bus-Capable Blocks (Blocchi compatibili con il bus).

È possibile utilizzare un array di bus come segnale di input per un blocco Memory. È possibile specificare il parametro Initial condition con:

  • Il valore 0. In questo caso, tutti i singoli segnali dell'array di bus utilizzano il valore iniziale 0.

  • Un array di strutture che specifica una condizione iniziale per ciascuno dei singoli segnali dell'array di bus.

  • Una struttura scalare che specifica una condizione iniziale per ciascuno degli elementi che il tipo di bus definisce. Utilizzare questa tecnica per specificare le stesse condizioni iniziali per ciascuno dei bus dell'array.

Per ulteriori dettagli sulla definizione e l'utilizzo di un array di bus, vedere Group Nonvirtual Buses in Arrays of Buses.

Esempi

espandi tutto

Questo esempio mostra come utilizzare i blocchi Memory e Clock per calcolare e visualizzare la grandezza dei passi in una simulazione. Il blocco Sum sottrae il tempo del passo temporale precedente, generato dal blocco Memory, dal tempo attuale generato dal blocco Clock.

Poiché l'opzione Inherit sample time (Eredita tempo di campionamento) non è selezionata per il blocco Memory, il tempo di campionamento del blocco dipende dal tipo di risolutore per la simulazione del modello. In questo caso, il modello utilizza un risolutore a passo fisso. Pertanto, il tempo di campionamento del blocco Memory corrisponde alla grandezza del passo del risolutore, ossia 1.

Se si sostituisce il blocco Memory con un blocco Unit Delay, si ottengono gli stessi risultati. Il blocco Unit Delay eredita un tempo di campionamento discreto pari a 1.

Porte

Input

espandi tutto

Segnale di input, specificato come scalare, vettore, matrice o array N-D. L'input può essere continuo o discreto, contenente valori reali o complessi di qualsiasi tipo di dati supportati da Simulink®.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

Output

espandi tutto

L'output è l'input del passo temporale precedente.

Tipi di dati: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

Parametri

espandi tutto

Principale

Specificare l'output al passo di integrazione iniziale. Quando non si utilizza un tipo di dati di input integrato, questo valore deve essere pari a 0.

Utilizzo programmatico

Parametro dei blocchi: InitialCondition
Tipo: vettore di caratteri
Valori: scalare | vettore
Impostazione predefinita: '0'

Selezionare per ereditare il tempo di campionamento dal blocco di comando:

  • Se il blocco di comando ha un tempo di campionamento discreto, il blocco eredita il tempo di campionamento.

  • Se il blocco di comando ha un tempo di campionamento continuo, la selezione di questa casella di spunta non produce alcun effetto. Il tempo di campionamento dipende dal tipo di risolutore utilizzato per la simulazione del modello.

Quando questa casella di spunta è deselezionata, il tempo di campionamento del blocco dipende dal tipo di risolutore utilizzato per la simulazione del modello:

  • Se il risolutore è a passo variabile, il tempo di campionamento del blocco è continuo ma fissato in un passo temporale minore: [0, 1].

  • Se il risolutore è a passo fisso, il tempo di campionamento [0, 1] si converte nella dimensione del passo del risolutore dopo la propagazione del tempo di campionamento.

Utilizzo programmatico

Parametro dei blocchi: InheritSampleTime
Tipo: vettore di caratteri
Valori: 'off' | 'on'
Impostazione predefinita: 'off'

Selezionare per generare l'input durante la linearizzazione e la regolazione. Questa selezione imposta la modalità del blocco sul passaggio diretto.

La selezione di questa casella di spunta può comportare una modifica nell'ordine degli stati nel modello quando si utilizzano le funzioni linmod, dlinmod o trim. Per estrarre questo nuovo ordinamento degli stati, utilizzare i seguenti comandi.

Per prima cosa compilare il modello utilizzando il seguente comando, dove model è il nome del modello Simulink.

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

Quindi, terminare la compilazione con questo comando.

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

L'argomento di output x_str, che è un array di celle degli stati nel modello di Simulink, contiene il nuovo ordinamento degli stati. Quando si passa un vettore di stati come input alle funzioni linmod, dlinmod o trim, il vettore di stati deve utilizzare questo nuovo ordinamento.

Utilizzo programmatico

Parametro dei blocchi: LinearizeMemory
Tipo: vettore di caratteri
Valori: 'off' | 'on'
Impostazione predefinita: 'off'

Selezionare per linearizzare il blocco Memory a un ritardo unitario quando il blocco Memory è guidato da un segnale con un tempo di campionamento discreto.

Utilizzo programmatico

Parametro dei blocchi: LinearizeAsDelay
Tipo: vettore di caratteri
Valori: 'off' | 'on'
Impostazione predefinita: 'off'

Attributi dello stato

Utilizzare questo parametro per assegnare un nome univoco allo stato del blocco. L'impostazione predefinita è ' '. Quando questo campo è vuoto, non è assegnato alcun nome. Quando si utilizza questo parametro, tenere presente le seguenti considerazioni:

  • Un identificatore valido inizia con un carattere alfabetico o di sottolineatura, seguito da caratteri alfanumerici o di sottolineatura.

  • Il nome dello stato si applica solo al blocco selezionato.

Questo parametro abilita State name must resolve to Simulink signal object quando si fa clic su Apply.

Per ulteriori informazioni, vedere C Data Code Interface Configuration for Model Interface Elements (Simulink Coder).

Utilizzo programmatico

Parametro dei blocchi: StateName
Tipo: vettore di caratteri
Valore: nome univoco
Impostazione predefinita: ''

Selezionare questa casella di spunta per richiedere che il nome dello stato venga associato a un oggetto segnale di Simulink.

Dipendenze

Per abilitare questo parametro, specificare un valore per State name. Questo parametro appare solo se il parametro di configurazione del modello Signal resolution viene impostato su un valore diverso da None.

Utilizzo programmatico

Parametro dei blocchi: StateMustResolveToSignalObject
Tipo: vettore di caratteri
Valori: 'off' | 'on'
Impostazione predefinita: 'off'

Caratteristiche del blocco

Tipi di dati:

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

Passaggio diretto

noa

Segnali multidimensionali

Segnali di dimensioni variabili

no

Rilevamento zero-crossing

no

a Le porte di questo blocco hanno diverse caratteristiche di passaggio diretto.

Funzionalità estese

Generazione di codice C/C++
Genera codice C e C++ con Simulink® Coder™.

Generazione di codice PLC
Genera codice di testo strutturato con Simulink® PLC Coder™.

Conversione a virgola fissa
Progetta e simula sistemi a virgola fissa con Fixed-Point Designer™.

Cronologia versioni

Introduzione prima di R2006a