# Déclencheurs

> L'éditeur de déclencheur : identité et emplacement, la carte Planification avec Nature, Intervalle et Action à exécuter, le rail Cadencement, le planificateur à 100 ms avec son délai fixe et ses tops ignorés, les commandes, et ce qu'un déclencheur ne peut pas faire.

Un déclencheur lie une cause à une [action](logic-actions). L'unique nature de cause aujourd'hui est **Intervalle** : le planificateur exécute l'action associée à une période fixe. Sélectionnez un déclencheur sous la section Triggers de la colonne Logic, ou appuyez sur **Ouvrir** sur sa ligne dans le tableau de son dossier ou de la racine de sa section, pour ouvrir son éditeur (un déclencheur créé avec Nouveau… > Nouveau déclencheur ne s'ouvre pas, il est mis en évidence dans ce tableau, voir [Créer et copier](logic#creating-and-copying)) ; lire demande **Voir Logic**, modifier **Configurer Logic**. Un déclencheur n'a pas de verbe de pilotage : il part de lui-même, et l'exécution à la main est le verbe Exécuter de l'action.

L'en-tête montre la marque du déclencheur, le nom, la ligne « Une planification qui exécute une action d'elle-même, à l'intervalle que vous fixez. » et un badge **Désactivé** tant qu'il est éteint. La colonne du formulaire porte IDENTITÉ et PLANIFICATION ; le rail porte CADENCEMENT.

## Identité {#identity}

| Champ | Ce que c'est | Valeurs et valeur par défaut | Effet |
| --- | --- | --- | --- |
| Nom | Le nom affiché ; les exécutions que le déclencheur lance sont journalisées sous ce nom. | Texte libre ; un nouveau déclencheur s'appelle `TriggerN` ; un nom vide s'enregistre comme `Trigger`. | S'enregistre automatiquement à chaque frappe. Les déclencheurs sont référencés par identité : le renommage n'affecte rien d'autre. |
| Ligne d'emplacement | Où le déclencheur est classé : `Triggers / <dossier> / <nom>`. | Lecture seule. | Un déclencheur n'a pas d'adresse. Changez le dossier avec **Déplacer vers** dans l'arborescence. |
| Description (facultative) | Texte libre. | Vide. | Aucun. |

## Planification {#schedule}

| Champ | Ce que c'est | Valeurs et valeur par défaut | Effet |
| --- | --- | --- | --- |
| Nature | La cause. | Intervalle, la seule nature. | Aucun aujourd'hui. |
| Intervalle (ms) | La période de déclenchement. | Un entier d'au moins 100 (la résolution du balayage du planificateur) ; 1000 par défaut. | Une saisie plus petite, négative ou illisible conserve l'intervalle enregistré et affiche « L'intervalle doit être un entier d'au moins 100 ms (la résolution du planificateur). » Un intervalle changé remet l'horloge à zéro : le prochain top est dû un intervalle entier après le prochain balayage. |
| Action à exécuter | L'action que le déclencheur lance. | `(aucune)` ou n'importe quelle action de la station ; `(aucune)` par défaut. | Un déclencheur sans action reste inactif et indique « Associez une action. Le déclencheur reste inactif d'ici là. » ; celui dont l'action a été supprimée indique « L'action associée n'existe plus. Choisissez-en une autre. » ; celui dont l'action est désactivée indique « L'action associée « X » est désactivée, donc le déclencheur reste inactif. » |

Chaque champ s'enregistre automatiquement ; le message de validation est réévalué toutes les demi-secondes sous la carte.

## Cadencement {#scheduling}

Le planificateur balaie toutes les 100 ms et envoie ce qui est dû sur la voie des actions, la voie séquentielle où passent les scripts d'action, distincte du cycle de 100 ms des expressions et des alarmes :

- Un déclencheur qui vient d'être créé, activé, ou modifié dans son intervalle, sa nature ou son action est amorcé au balayage suivant : son premier top est dû un intervalle plus tard.
- Après un déclenchement, le top suivant est dû un intervalle entier à partir de **maintenant** (délai fixe) : il n'y a jamais de rafale de rattrapage après une période chargée.
- Un top qui devient dû alors que l'exécution précédente de ce déclencheur est encore en file ou en cours est **ignoré, pas mis en file** ; l'oubli est compté et le top suivant replanifié. Aucun retard ne peut s'accumuler derrière une action lente.
- Un déclencheur dont l'action manque ou est désactivée reste inactif : il est replanifié sans partir, et rester inactif ne compte jamais comme un top ignoré.
- L'exécution est journalisée sous le nom du déclencheur et son issue arrive sur le rail DERNIÈRE EXÉCUTION de l'action. Un déclencheur désactivé ne part jamais.

Le rail CADENCEMENT montre les diagnostics en direct : **Dernier déclenchement**, **Prochain déclenchement** (un tiret tant que le planificateur n'a pas amorcé l'horloge), **Tops ignorés** (un compte tenu en mémoire, remis à 0 après un redémarrage), et la note « Un top qui arrive alors que l'exécution précédente est encore en cours est ignoré, pas mis en file (aucun retard accumulé). Seule une exécution en échec parvient à la console des événements, sous le nom de ce déclencheur. »

Le volet de la racine Triggers liste chaque déclencheur avec son état dans la colonne Valeur : « Toutes les 1000 ms · dernier `<quand>` · ignorés N », ou « Désactivé ».

## Commandes {#commands}

| Commande | Ce qu'elle fait | Grisée quand | Non dessinée quand |
| --- | --- | --- | --- |
| Activer / Désactiver | Bascule Activé ; activer réamorce l'horloge. | Station verrouillée ou en lecture seule. | Le rôle n'a pas Configurer Logic. |
| Copier | Duplique le déclencheur (même action, même intervalle) à la racine Triggers sous un nom libre et le met en évidence dans le tableau de cette racine au lieu de l'ouvrir ([Créer et copier](logic#creating-and-copying)) ; la copie démarre sans planification. | Station verrouillée ou en lecture seule. | Le rôle n'a pas Configurer Logic. |
| Supprimer le déclencheur | Demande « Supprimer « X » ? Cela retire le déclencheur. Cette action est irréversible. » | Station verrouillée ou en lecture seule. | Le rôle n'a pas Configurer Logic. |

Supprimer l'action associée laisse le déclencheur sans action plutôt que de le supprimer avec elle.

## Ce que les déclencheurs ne font pas {#what-triggers-do-not-do}

Il n'existe aucune autre nature de cause : rien ne part sur un changement de valeur, sur une condition, à une heure de la journée ni au démarrage. Un déclencheur lance une action, jamais plusieurs, et ne part jamais à la main : exécutez l'action elle-même. Le planificateur s'arrête avec le runtime, et un déclenchement refusé par « Runtime arrêté » pendant que la station se ferme est abandonné en silence.
