Actions
L'éditeur d'action : identité et emplacement, la carte du script, ce qu'un script peut lire et écrire, chaque message de validation, le verbe Exécuter et sa journalisation, Activer et Désactiver, Copier et Supprimer, et les limites d'une exécution.
Une action est un bloc d'instructions JavaScript qui lit l'espace d'adressage et écrit des variables mémoire et des tags. Les actions sont le chemin d'écriture de Logic : elles s'exécutent à la demande (Exécuter), sur un déclencheur, ou depuis un Bouton de tableau de bord qui leur est associé. Sélectionnez une action sous la section Actions Logic de la colonne Logic (ou créez-en une avec Nouveau… > Nouvelle action) pour ouvrir son éditeur ; la lecture demande Voir Logic, la modification Configurer Logic, l'exécution Piloter Logic.
L'en-tête montre la marque d'action, le nom, la ligne « Un script que vous exécutez à la demande, ou qu'un déclencheur exécute pour vous, en écrivant des variables et des tags. » et un badge Désactivée tant que l'action est éteinte. La colonne du formulaire porte IDENTITÉ et SCRIPT DE L'ACTION ; le rail porte DERNIÈRE EXÉCUTION.
Identité
| Champ | Ce que c'est | Valeurs / défaut | Effet |
|---|---|---|---|
| Nom | Le nom affiché et le libellé sous lequel une exécution est journalisée. | Texte libre ; une nouvelle action s'appelle ActionN ; un nom vide s'enregistre comme Action. |
Enregistré automatiquement au fil de la frappe. Les actions sont référencées par leur identité, donc un changement de nom ne réécrit rien et ne casse rien. |
| Ligne d'emplacement | Où l'action est classée, en toutes lettres : Actions / Startup / Walk setpoint. |
Lecture seule. | Une action n'a pas d'adresse ; la ligne dit un endroit, jamais quelque chose à taper dans une expression. Changez le dossier avec Déplacer vers dans l'arborescence. |
| Description (facultative) | Texte libre. | Vide par défaut. | Aucun. |
Script
La carte SCRIPT DE L'ACTION est l'éditeur de script avec l'indication « Instructions JavaScript (let, if, for, fonctions). Écrivez les variables mémoire par affectation (Variables.Setpoint = 21.5;) et les tags avec Connector.Driver.Device.Tag.Write(value). Les lectures ne sont pas filtrées par la qualité : vérifiez .State() et protégez les manques avec ?? avant tout calcul. » Le script s'enregistre automatiquement à chaque frappe et est validé toutes les demi-secondes ; le message apparaît sous l'indication. La validation n'exécute jamais le script.
Un script est du JavaScript ordinaire en mode strict (variables locales, if, boucles, fonctions, Math, Date, JSON) sur le même espace d'adressage et la même surface de lecture que les expressions, à deux différences près. Les lectures ne sont pas filtrées par la qualité : un vide se lit null, donc vérifiez .State() et protégez les calculs avec ?? ; traiter une mauvaise lecture est justement ce à quoi servent les actions. Et un script peut lire les variables d'expression (leur valeur publiée) ; seule une expression n'a pas le droit de les référencer.
Ce qu'une action peut écrire
Exactement deux constructions modifient l'installation, et les deux passent par le canal d'écriture journalisé :
| Écriture | Forme | Cible |
|---|---|---|
| Affectation de mémoire | Variables.Setpoint = 21.5; ou Variables.Forno.Setpoint = 21.5; |
Une variable mémoire, niveaux de dossier compris. La valeur est convertie vers le type de sortie de la variable et marquée pour la rémanence quand la variable est rémanente. |
| Écriture de tag | Connector.Simulated.Pump.Cmd.Write(true); |
Un tag vivant. La valeur est une valeur physique : elle remonte la chaîne de conversion du tag jusqu'à la valeur brute que l'équipement accepte. |
Une écriture est appliquée au fil de l'eau : ce qui a été appliqué avant un échec le reste, et le journal montre chaque écriture de l'ancienne vers la nouvelle valeur sous la source Action. Une écriture qui échoue lève une erreur, ce qui interrompt l'exécution en cours et en donne la raison dans son résultat :
- « L'écriture dans « X » a été rejetée : la valeur n'est pas finie. » (NaN ou infini)
- « « Tag » n'est pas matérialisé dans le connecteur. » (un équipement désactivé, ou un tag que le serveur intégré ne porte pas)
- « « value » n'a pas pu être converti pour « Tag ». »
- « « X » est protégé en écriture par «
<qui la retient>». » (une recette en cours ou un verrouillage retient la source) - « L'écriture dans « Tag » a échoué. Le serveur est-il en service ? »
- « La variable « X » est introuvable. » et « « Variables.X » est une variable d'expression : elle est calculée, jamais écrite. »
Ce que la validation refuse
| Message | Cause |
|---|---|
| Un script est obligatoire. | L'éditeur est vide. |
| Erreur de script : … | Le texte ne s'analyse pas. |
| Les adresses doivent être statiques : « Root » est atteint par un segment calculé. | Variables[name] ou tout segment qui n'est pas littéral. |
| Adresse incomplète « … ». | Une référence trop courte pour nommer un point. |
| « X » est introuvable. | Une lecture, ou une cible d'affectation, qui ne résout rien. |
| Affectez la variable elle-même : Variables.Name = value. | La partie gauche du = nomme un membre, ou descend plus bas que l'adresse d'une variable. |
| « X » est une variable d'expression : elle est calculée, jamais écrite. | Une affectation à une variable d'expression. |
| Les points « Connector » sont en lecture seule. Écrivez les tags avec Connector.Driver.Device.Tag.Write(value). | Une affectation à une racine autre que Variables (Process a son propre message). |
| Les points Process sont en lecture seule dans les actions ; les commandes d'essai et les écritures de préparation ne sont pas prises en charge par les scripts. | Une affectation à un point Process, ou un appel de Write sur lui. |
| Les commandes d'essai de Process ne peuvent pas être appelées depuis les actions ; les points de commande exposent des valeurs de disponibilité en lecture seule. | Un appel à Process.<Model>.<Unit>.Commands.Start() ou à tout autre point de commande ; un point Commands ne fait que dire si la commande pourrait s'exécuter maintenant. |
| Les opérateurs ++ et -- ne sont pas pris en charge sur les points. Utilisez Variables.Name = Variables.Name.ValueToReal() + 1. | Variables.N++. |
| Write(value) est l'écriture du tag : Connector.Driver.Device.Tag.Write(value). | Write appelé sur autre chose qu'une adresse de tag. |
Les variables locales JavaScript (let x = 1; x = x + 1;) échappent à toutes ces règles.
Exécuter
Exécuter est le verbe de tête de la barre au-dessus d'une action ouverte ; il n'est dessiné que pour un rôle qui détient Piloter Logic, et il est grisé avec « Runtime arrêté » pendant que la station est en lecture seule (le verrou d'ingénierie ne le grise pas : exécuter, c'est piloter, pas configurer). Quand le rôle détient aussi Configurer Logic, le brouillon de l'éditeur est enregistré d'abord et l'exécution porte sur la définition enregistrée ; sans cette permission, l'exécution porte sur la définition durable (les champs étant en lecture seule, les deux ne diffèrent jamais).
Chaque exécution se fait sur la file unique de la logique avec un moteur de script neuf, si bien qu'aucun état ne fuit d'une exécution à l'autre et qu'une exécution ne s'intercale jamais dans un cycle, dans une autre action ou dans une écriture d'opérateur. Une exécution est interrompue au-delà de 500 ms (« Le script a été interrompu : il a dépassé la limite de temps de 500 ms (boucle infinie ?). »), de 100 000 instructions ou de 4 MB de mémoire, chaque limite ayant son message. Une action désactivée échoue sans s'exécuter (« L'action est désactivée. ») ; un runtime arrêté répond « Le runtime de la logique n'est pas en service. » Le journal des actions indique « Exécution réussie en 12 ms. » ou « Échec de l'exécution : <raison> ». Seul l'échec parvient à la console Événements, sous le nom de l'action et accompagné de ce qui l'a invoquée : Manuel pour le verbe, le nom du déclencheur pour une exécution planifiée. Il est journalisé en avertissement la première fois, résumé tant qu'il échoue pour la même cause, puis noté une fois encore au rétablissement, et cette ligne de rétablissement est la seule entrée qu'une exécution réussie y écrira jamais. Une exécution qui réussit simplement, et chaque valeur qu'elle écrit, ne va qu'à la capture détaillée : un script qui écrit à chaque cycle produit des valeurs par milliers, et une console remplie de ces lignes est une console où personne ne lit plus les nouvelles de la station.
Le rail DERNIÈRE EXÉCUTION indique quand l'action s'est exécutée pour la dernière fois (ou « Jamais exécutée. »), « Durée : N ms », la dernière erreur dans un avis de prudence, et le rappel « Les exécutions se font sur la file unique de la logique. Seule une exécution en échec parvient à la console des événements ; une exécution réussie, et chaque valeur qu'elle écrit, est conservée pour la capture détaillée. Les déclencheurs appellent les actions selon leur planification. » Le rail appartient à l'action vivante : un enregistrement automatique ne l'efface pas ; un redémarrage du runtime, si.
Commandes
| Commande | Ce qu'elle fait | Grisée quand | Non dessinée quand |
|---|---|---|---|
| Exécuter | Enregistre le brouillon (avec Configurer Logic) et met une exécution en file. | Runtime arrêté. | Le rôle n'a pas Piloter Logic. |
| Activer / Désactiver | Bascule Activée ; une action désactivée refuse Exécuter et laisse au repos chaque déclencheur qui lui est associé. | Station verrouillée ou en lecture seule. | Le rôle n'a pas Configurer Logic. |
| Copier | Duplique l'action à la racine Actions sous un nom libre et ouvre la copie, qui n'a aucune exécution enregistrée et aucun déclencheur associé. | Station verrouillée ou en lecture seule. | Le rôle n'a pas Configurer Logic. |
| Supprimer l'action | Demande « Supprimer « X » ? Cela retire l'action. Cette action est irréversible. » Un déclencheur qui lui était associé se retrouve sans action, il n'est pas supprimé. | Station verrouillée ou en lecture seule. | Le rôle n'a pas Configurer Logic. |
Le volet de la racine Actions Logic liste chaque action avec son état dans la colonne Valeur : « Activée · dernière exécution <quand> », avec « · erreur » quand la dernière exécution a échoué, ou « Désactivée ».
Ce que les actions ne font pas
Elles n'envoient pas les commandes d'essai de Process, ne préparent pas une procédure et n'ajoutent pas de commentaire à un essai (ces points sont des valeurs de disponibilité et de préparation en lecture seule) ; elles n'acquittent pas les alarmes ; elles ne s'exécutent pas en parallèle ; elles ne conservent aucun état d'une exécution à l'autre et ne partagent aucune fonction ; et elles ne sont déclenchées ni par un changement de valeur ni par une condition, seulement par Exécuter, par l'intervalle d'un déclencheur ou par un bouton de tableau de bord.