Contenu principal

Memory

Générer l’entrée à partir du pas de temps précédent

  • Memory block

Bibliothèques :
Simulink / Discrete
HDL Coder / Discrete

Description

Le bloc Memory bloque son entrée et la retarde d’un pas de temps d’intégration majeur. Lorsqu’il est placé dans un sous-système itérateur, il bloque son entrée et la retarde d’une itération. Ce bloc accepte les signaux continus et discrets. Le bloc accepte une seule entrée et génère une seule sortie. Chaque signal peut être un scalaire, un vecteur, une matrice ou un tableau nD. Si l’entrée n’est pas un scalaire, le bloc bloque tous les éléments de l’entrée et les retarde du même pas de temps.

Spécifiez la sortie du bloc pour le premier pas de temps avec le paramètre Initial condition. Sélectionnez ce paramètre avec soin pour réduire le risque de comportement indésirable en sortie. Cependant, vous ne pouvez pas spécifier le pas d’échantillonnage. Le pas d’échantillonnage de ce bloc dépend du type de solveur utilisé, mais vous pouvez également choisir de l’hériter. Le paramètre Inherit sample time détermine si le pas d’échantillonnage est hérité ou s’il est basé sur le solveur.

Conseil

Évitez d’utiliser le bloc Memory lorsque les deux conditions suivantes sont remplies :

  • Votre modèle utilise le solveur à pas variable ode15s ou ode113.

  • L’entrée vers le bloc change pendant la simulation.

Lorsque le bloc Memory hérite d’un pas d’échantillonnage discret, le bloc est analogue au bloc Unit Delay. Cependant, le bloc Memory ne supporte pas l’enregistrement des états. Si l’enregistrement de l’état final est nécessaire, utilisez un bloc Unit Delay à la place.

Comparaison avec des blocs similaires

Les blocs Memory, Unit Delay et Zero-Order Hold ont un fonctionnement similaire mais offrent des possibilités différentes. De plus, l’objectif de chaque bloc est différent.

Le tableau suivant indique l’utilisation recommandée pour chaque bloc.

BlocObjectif du blocExemples de référence
Unit DelayImplémenter un délai avec un pas d’échantillonnage discret spécifié. Le bloc accepte et génère des signaux ayant un pas d’échantillonnage discret.
MemoryImplémenter un délai d’un pas de temps d’intégration majeur. Dans l’idéal, le bloc accepte des signaux continus (ou fixes dans un pas de temps mineur) et génère un signal de sortie fixe dans un pas de temps mineur.
Zero-Order HoldConvertir un signal d’entrée avec un pas d’échantillonnage continu en un signal de sortie avec un pas d’échantillonnage discret.

Chaque bloc offre les fonctionnalités suivantes.

FonctionnalitéMemoryUnit DelayZero-Order Hold
Spécification de la condition initialeOuiOuiNon car la sortie du bloc au temps t = 0 doit être identique à la valeur en entrée.
Spécification du pas d’échantillonnageNon car le bloc peut uniquement hériter du pas d’échantillonnage du bloc d’origine ou du solveur utilisé pour le modèle entier.OuiOui
Support des signaux basés sur des tramesNon OuiOui
Support de l’enregistrement des étatsNonOuiNon

Support des bus

Le bloc Memory est compatible avec les bus. L’entrée peut être un signal de bus virtuel ou non virtuel soumis aux restrictions suivantes :

  • Initial condition doit être nulle, un scalaire non nul ou une structure numérique finie.

  • L’entrée ne peut pas être un bus virtuel si Initial condition est nulle ou une structure et que vous spécifiez un State name.

  • Vous ne pouvez pas spécifier de State name si Initial condition est un scalaire non nul.

Pour plus d’informations sur la spécification d’une structure de condition initiale, consultez Specify Initial Conditions for Bus Elements.

Tous les signaux d’un bus non virtuel utilisé comme entrée d’un bloc Memory doivent avoir le même pas d’échantillonnage, même si les éléments de l’objet de bus associé spécifient des pas d’échantillonnage hérités. Vous pouvez utiliser un bloc Rate Transition pour modifier le pas d’échantillonnage d’un seul signal ou de tous les signaux d’un bus. Pour plus d’informations, consultez Modify Sample Times for Nonvirtual Buses et Blocs compatibles avec les bus.

Vous pouvez utiliser un tableau de bus comme signal d’entrée d’un bloc Memory. Vous pouvez spécifier le paramètre Initial condition avec :

  • La valeur 0. Dans ce cas, tous les signaux individuels dans le tableau de bus utilisent la valeur initiale 0.

  • Un tableau de structures qui spécifie une condition initiale pour chacun des signaux individuels dans le tableau de bus.

  • Une structure scalaire qui spécifie une condition initiale pour chacun des éléments définis par le type de bus. Utilisez cette technique pour spécifier les mêmes conditions initiales pour chaque bus dans le tableau.

Pour en savoir plus sur la définition et l’utilisation d’un tableau de bus, consultez Group Nonvirtual Buses in Arrays of Buses.

Exemples

développer tout

Cet exemple montre comment utiliser les blocs Memory et Clock pour calculer et afficher la taille de pas dans une simulation. Le bloc Sum soustrait le temps au pas de temps précédent, généré par le bloc Memory, du temps actuel, généré par le bloc Clock.

Puisque Inherit sample time (Pas d’échantillonnage hérité) n’est pas sélectionné pour le bloc Memory, le pas d’échantillonnage du bloc dépend du type de solveur qui simule le modèle. Dans ce cas, le modèle utilise un solveur à pas fixe. Par conséquent, le pas d’échantillonnage du bloc Memory est la taille de pas du solveur, soit 1.

Si vous remplacez le bloc Memory par un bloc Unit Delay, vous obtiendrez les mêmes résultats. Le bloc Unit Delay hérite d’un pas d’échantillonnage discret de 1.

Exemples étendus

Ports

Entrée(s)

développer tout

Signal d’entrée, spécifié en tant que scalaire, vecteur, matrice ou tableau nD. L’entrée peut être continue ou discrète et contenir des valeurs réelles ou complexes de tout type de données supporté par Simulink®.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

Sortie(s)

développer tout

La sortie est l’entrée du pas de temps précédent.

Types de données : single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | Boolean | fixed point | enumerated | bus

Paramètres

développer tout

Paramètres principaux

Spécifiez la sortie au pas d’intégration initial. Cette valeur doit être 0 lorsque vous n’utilisez pas de type de données d’entrée prédéfini.

Utilisation programmatique

Paramètre de bloc : InitialCondition
Type : vecteur de caractères
Valeurs : scalaire | vecteur
Par défaut : '0'

Sélectionnez cette option pour hériter du pas d’échantillonnage du bloc d’origine :

  • Si le bloc d’origine a un pas d’échantillonnage discret, le bloc hérite du pas d’échantillonnage.

  • Cocher cette case n’a aucun effet si le bloc d’origine a un pas d’échantillonnage continu. Le pas d’échantillonnage dépend du type de solveur utilisé pour simuler le modèle.

Lorsque cette case est décochée, le pas d’échantillonnage du bloc dépend du type de solveur utilisé pour simuler le modèle :

  • Si le solveur est un solveur à pas variable, le pas d’échantillonnage du bloc est continu mais fixe dans un pas de temps mineur : [0, 1].

  • Si le solveur est un solveur à pas fixe, le pas d’échantillonage [0, 1] se convertit en taille de pas du solveur après la propagation du pas d’échantillonnage.

Utilisation programmatique

Paramètre de bloc : InheritSampleTime
Type : vecteur de caractères
Valeurs : 'off' | 'on'
Par défaut : 'off'

Sélectionnez cette option pour générer l’entrée pendant la linéarisation et l’ajustement. Cette sélection règle le mode du bloc sur la traversée directe (direct feedthrough).

Cochez cette case pour modifier l’ordre des états dans le modèle lorsque vous utilisez les fonctions linmod, dlinmod, ou trim. Pour extraire ce nouvel ordre des états, utilisez les commandes ci-après.

Commencez par compiler le modèle à l’aide de la commande suivante, où model est le nom du modèle Simulink.

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

Ensuite, terminez la compilation à l’aide de la commande ci-dessous.

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

L’argument de sortie (x_str), qui est un cell array des états dans le modèle Simulink, contient le nouvel ordre des états. Lorsque vous transmettez un vecteur des états en tant qu’entrée aux fonctions linmod, dlinmod ou trim, le vecteur d’état doit utiliser ce nouvel ordre des états.

Utilisation programmatique

Paramètre de bloc : LinearizeMemory
Type : vecteur de caractères
Valeurs : 'off' | 'on'
Par défaut : 'off'

Sélectionnez pour linéariser le bloc Memory sur un Unit Delay lorsque le bloc Memory est piloté par un signal avec un pas d’échantillonnage discret.

Utilisation programmatique

Paramètre de bloc : LinearizeAsDelay
Type : vecteur de caractères
Valeurs : 'off' | 'on'
Par défaut : 'off'

Attributs d’état

Utilisez ce paramètre pour attribuer un nom unique à l’état du bloc. La valeur par défaut est ' '. Lorsque ce champ est vide, aucun nom n’est attribué. N’oubliez pas de tenir compte des points suivants lorsque vous utilisez ce paramètre :

  • Un identifiant valide commence par un caractère alphabétique ou underscore suivi de caractères alphanumériques ou underscore.

  • Le nom de l’état s’applique uniquement au bloc sélectionné.

Ce paramètre active l’option State name must resolve to Simulink signal object lorsque vous cliquez sur Apply.

Pour plus d’informations, consultez C Data Code Interface Configuration for Model Interface Elements (Simulink Coder).

Utilisation programmatique

Paramètre de bloc : StateName
Type : vecteur de caractères
Valeurs : nom unique
Par défaut : ''

Cochez cette case pour exiger que le nom d’état soit résolu par rapport à un objet de signal Simulink.

Dépendances

Pour activer ce paramètre, spécifiez une valeur pour State name. Ce paramètre n’apparaît que si vous définissez le paramètre de configuration de modèle Signal resolution sur une valeur autre que None.

Utilisation programmatique

Paramètre de bloc : StateMustResolveToSignalObject
Type : vecteur de caractères
Valeurs : 'off' | 'on'
Par défaut : 'off'

Caractéristiques des blocs

Types de données

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

Traversée directe

nona

Signaux multidimensionnels

oui

Signaux de taille variable

non

Détection des passages à zéro

non

a Les caractéristiques de traversée (feedthrough) directe de ce bloc dépendent des valeurs des paramètres du bloc.

Capacités étendues

développer tout

Génération de code C/C++
Générez du code C et C++ avec Simulink® Coder™.

Génération de code PLC
Générez du texte structuré avec Simulink® PLC Coder™.

Conversion en virgule fixe
Concevez et simulez des systèmes en virgule fixe avec Fixed-Point Designer™.

Historique des versions

Introduit avant R2006a