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
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
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é