Réserver une Démo
Pré. Proc.

Macro d'événement : EVENT_PARAMETER

EVENT_PARAMETER est une macro de fonction utilisée pour accéder aux attributs d'une instance de signal, dans le comportement de State , la protection et l'effet de la transition. Cette macro sera étendue au code exécutable selon le langage de simulation.

Accès à la définition de macro par défaut

Ruban | Développer | Code source | Options | Modifier le code Gabarits | Langue | Paramètre d'événement Stm

Format d'utilisation

%EVENT_PARAMETER(Type de signal, Nom d'attribut du signal)%

Par exemple : un signal « MySignal » possède deux attributs, « foo : int » et « bar : int » ; ces cas d'utilisation sont valides :

  • Effet de la transition : %EVENT_PARAMETER(MySignal, foo)%
  • Comportement de State : %EVENT_PARAMETER(MySignal, bar)%
  • Garde de transition : %EVENT_PARAMETER(MySignal, bar)% > 10
  • Comportement de State : %EVENT_PARAMETER(MySignal, bar)%++
  • Tracez la valeur dans la fenêtre Simulation : %TRACE(EVENT_PARAMETER(MySignal, foo))%

Exemple d'extension macro

Pour le Signal "MySignal" avec attribut " valeur ", Exemples d'expansion de macro pour Transition avec déclencheur du signal :%EVENT_PARAMETER(MySignal, valeur )%

C

((MonSignal*)signal)-> valeur

C++

static_cast<MonSignal*>(signal)-> valeur

C#

((MonSignal)signal). valeur

Java

((EventProxy.MySignal)signal). valeur

JavaScript

signal. valeur

Exemple

Cet exemple montre comment utiliser EVENT_MACRO dans l'effet de Transition, la garde et le comportement de State .

Pendant l'exécution de la simulation,

(1) déclencheur REQUEST et préciser le numéro 1 pour l'attribut valeur .

Étant donné que la condition de garde est fausse, l’état actif restera State1.

(2) déclencheur REQUEST et spécifiez le numéro 11 pour l'attribut valeur .

Étant donné que la condition de garde est vraie, l’état actif passera de l’État 1 à l’État 2 ;

L'effet de transition est exécuté. Ici, nous avons tracé la valeur d'exécution de l'attribut du signal jusqu'à la fenêtre de simulation.

Le comportement de State2 est exécuté. Ici, nous avons incrémenté la valeur d'exécution de l'attribut du signal et l'avons tracée jusqu'à la fenêtre de simulation.

[32608107] [Partie 1 : TransactionServer] Effet de transition : Initial_4019__TO__State1_4420

[32608118] [Partie 1 : TransactionServer] Comportement de l'entrée : StateMachine_State1

[32608124] [Partie 1 : TransactionServer] Comportement : StateMachine_State1

[32608877] [Partie 1 : TransactionServer] Achèvement : TransactionServer_StateMachine_State1

[32608907] En attente du Déclencheur

[32613165] Commande : diffusion REQUEST.RequestSignal(1)

[32613214] [Part1:TransactionServer] Événement mis en file d'attente : REQUEST.RequestSignal( valeur :1)

[32613242] [Part1:TransactionServer] Événement envoyé : REQUEST.RequestSignal( valeur : 1)

[32613279] En attente du Déclencheur

[32619541] Commande : diffusion REQUEST.RequestSignal(11)

[32619546] [Part1:TransactionServer] Événement mis en file d'attente : REQUEST.RequestSignal( valeur :11)

[32619551] [Part1:TransactionServer] Événement envoyé : REQUEST.RequestSignal( valeur :11)

[32619557] [Partie 1 : TransactionServer] Comportement de sortie : StateMachine_State1

[32619562] [Partie 1 : TransactionServer] Effet de transition : State1__TO__State2_4421

[32619567] instance de RequestSignal . valeur

[32619571] 11

[32619576] [Partie 1 : TransactionServer] Comportement de l'entrée : StateMachine_State2

[32619584] Comportement de l'entrée State : incrémenter l'instance de RequestSignal. valeur de 1 :

[32619590] 12

[32619594] [Partie 1 : TransactionServer] Comportement : StateMachine_State2

[32620168] [Partie 1 : TransactionServer] Achèvement : TransactionServer_StateMachine_State2

[32620211] En attente du Déclencheur

[32622266] Commande : diffusion END

[32622272] [Partie 1 : TransactionServer] Événement mis en file d'attente : FIN

[32622310] [Partie 1 : TransactionServer] Événement envoyé : END

[32622349] [Partie 1 : TransactionServer] Comportement de sortie : StateMachine_State2

[32622359] [Partie 1 : TransactionServer] Effet de transition : State2__TO__Final_4023_4423

[32622896] [Partie 1 : TransactionServer] Achèvement : TransactionServer_VIRTUAL_SUBMACHINESTATE

Limitations et solutions de contournement

Étant donné que l'extension de macro implique un transtypage, il est de la responsabilité de l'utilisateur de s'assurer que le transtypage est valide.

Et voici des solutions de contournement pour certains cas courants dans lesquels le casting de type rencontrera des problèmes dans le modèle.

  • Une transition a plusieurs déclencheurs de différents types de signaux
Par exemple, une transition a triggerA(SignalA spécifié) et triggerB(SignalB spécifié) ; une macro %EVENT_PARAMETER(SignalA, attributeOfA)% ne fonctionnera pas lorsque cette transition est déclenchée par triggerB.

Nous suggérons de créer deux transitions, une avec déclencheurA (SignalA spécifié) et l'autre avec déclencheurB (SignalB).

  • Un State est la cible de multiples transitions de différents déclencheurs de signaux
Par exemple, TransitionA et TransitionB ciblent toutes deux MyState, TransitionA est déclenchée par SignalA et TransitionB est déclenchée par SignalB.

Si EVENT_PARAMETER est utilisé dans le code de comportement de l'état, une macro ne pourra pas fonctionner pour les deux cas.

Nous suggérons de déplacer la logique traitant de l'attribut du signal du comportement de State vers l'effet de la transition.

  • Personnaliser gabarit et le code généré
L'utilisateur peut également modifier le gabarit par défaut pour ajouter l'identification Type d' Exécuter (RTTI) avant la conversion de type. L'utilisateur peut également modifier le code généré après la génération, ce qui peut également satisfaire à l'objectif de simulation après la compilation.