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