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 à l'attribut d'une instance de signal, dans le comportement de l' State , la garde et l'effet de la transition. Cette macro sera étendue au code exécutable selon le langage de simulation.

Accéder à 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(SignalType, SignalAttributeName)%

Par exemple : Un signal 'MySignal' a deux attributs, 'foo: int ' et 'bar: int '; ces cas d'utilisation sont valides :

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

Exemple d'extension de macro

Pour le signal "MonSignal" avec l'attribut " valeur ", Exemples d'extension de macro pour Transition avec déclenchement de signal : %EVENT_PARAMETER(MonSignal, valeur )%

C

((MonSignal*)signal)-> valeur

C++

static_cast<MonSignal*>(signal)-> valeur

C#

((MonSignal)signal). valeur

Java

(signal (EventProxy.MySignal)). valeur

JavaScript

signal. valeur

Exemple

Cet exemple a montré comment utiliser EVENT_MACRO dans le comportement de Transition effect, guard et State .

Lors de l'exécution de la simulation,

(1) déclenchez REQUEST et spécifiez le numéro 1 dans l'attribut valeur .

Puisque la condition pour la garde est fausse, l'état actif restera comme State1.

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

Étant donné que la condition de la garde est vraie, l'état actif passera de State1 à State2 ;

L'effet de la 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é jusqu'à la fenêtre de simulation.

[32608107] [Part1 :TransactionServer] Effet de transition : Initial_4019__TO__State1_4420

[32608118] [Part1:TransactionServer] Comportement d'entrée : StateMachine_State1

[32608124] [Part1 : TransactionServer] Faire le comportement : StateMachine_State1

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

[32608907] En attente de déclenchement

[32613165] Commande : diffuser 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 de déclenchement

[32619541] Commande : diffuser 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] [Part1 :TransactionServer] Comportement de sortie : StateMachine_State1

[32619562] [Part1 :TransactionServer] Effet de transition : State1__TO__State2_4421

[32619567] instance de RequestSignal . valeur

[32619571] 11

[32619576] [Part1:TransactionServer] Comportement d'entrée : StateMachine_State2

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

[32619590] 12

[32619594] [Part1:TransactionServer] Faire le comportement : StateMachine_State2

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

[32620211] En attente de déclenchement

[32622266] Commande : fin de diffusion

[32622272] [Part1 :TransactionServer] Événement en file d'attente : FIN

[32622310] [Part1:TransactionServer] Événement envoyé : FIN

[32622349] [Part1 :TransactionServer] Comportement de sortie : StateMachine_State2

[32622359] [Part1 :TransactionServer] Effet de transition : State2__TO__Final_4023_4423

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

Limitation et solution de contournement

Étant donné que l'expansion de la macro implique une conversion de type, il est de la responsabilité de l'utilisateur de s'assurer que la conversion de type est valide.

Et voici des solutions de contournement pour certains cas courants où la conversion 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(specified SignalA) et triggerB(specified SignalB); 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, l'une avec triggerA (SignalA spécifié) et l'autre avec triggerB (SignalB).

  • Un State est la cible de plusieurs transitions de différents déclencheurs de signal
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 dans 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 Transition.

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