Logic

La page Logic, sa colonne Espace d'adressage, les dossiers, la barre de commandes, le cycle et le canal d'écriture derrière chaque volet, et les trois permissions qui décident de ce que la page dessine.

Afficher en Markdown

Logic est la troisième entrée de la barre de navigation. Elle s'ouvre pour tout rôle qui détient Voir Logic, et son en-tête indique « Définissez des variables (valeurs calculées ou inscriptibles) et des actions (scripts qui les écrivent), composées sur l'espace d'adressage. » C'est une page liste et détail (comment les pages fonctionnent) : une colonne intitulée Espace d'adressage à gauche, une barre de commandes et un volet de détail à droite. Tout ce que vous modifiez ici s'enregistre automatiquement au fil de la frappe ; il n'y a de bouton d'enregistrement nulle part sur la page.

Dans ce domaine

Page Ce qu'elle couvre
L'espace d'adressage Les sept racines réservées, la façon dont une adresse s'écrit et s'assainit, la zone de filtre, et les trois façons de saisir une adresse.
Variables L'éditeur de variable : identité et adresse, les natures Expression et Memory, la carte Valeur, Définir la valeur.
Expressions Le langage d'expression, la surface de lecture d'un point, les règles que l'évaluateur impose, l'éditeur de script.
Actions L'éditeur d'action, ce qu'un script peut écrire, chaque message de validation, Exécuter et Activer/Désactiver.
Déclencheurs L'éditeur de déclencheur et le planificateur périodique.
Alarmes L'éditeur d'alarme, la machine d'état, la signalisation, Acquitter et Tout acquitter.
Venus d'autres pages Les racines System, Server, Connector et Process, le volet du point, et l'avis qui nomme la page qui les modifie.

La racine Assets de la même colonne forme un groupe à part : Ressources couvre Images, Icons, Colors, Symbols et Connection types.

La colonne Espace d'adressage

La colonne liste les racines de l'espace d'adressage sous deux intertitres. Définis ici contient ce que cette page crée et modifie : Variables, Alarms, Actions, Triggers et Assets. Venus d'autres pages contient ce qu'elle se contente d'afficher : System, Server, Connector et Process. Chaque racine du premier intertitre porte un compte (Variables et Alarms comptent leurs définitions, Actions et Triggers les leurs, Assets la somme de ses cinq catégories), et la racine Alarms, chaque dossier d'alarme et chaque ligne d'alarme portent un point coloré à la pire priorité qu'ils contiennent parmi celles qui sont actives ou en attente d'acquittement ; le point s'efface dès que l'alarme reçoit sa réponse.

L'arborescence est paresseuse : une branche se charge quand vous la dépliez. Les valeurs en direct ne sont jamais dessinées dans l'arborescence ; c'est le volet de détail du nœud sélectionné qui les montre, rafraîchies deux fois par seconde.

Commande Ce qu'elle fait
Filtrer… Réduit l'arborescence aux lignes dont le nom contient le texte, sans tenir compte de la casse. Un dossier survit dès qu'un de ses descendants correspond et s'ouvre sur ses correspondances ; la racine Assets se réduit aux catégories dont le nom correspond, ou reste entière quand seul son propre nom correspond ; une racine de l'espace d'adressage dont le nom correspond reste listée et charge sa branche quand on la déplie, tandis que les sections Actions et Triggers ne listent que les lignes qui correspondent.
Nouveau… (pied de colonne) Ouvre le menu de création : Nouvelle variable, Nouvelle action, Nouveau déclencheur, Nouvelle alarme, puis Nouveau dossier avec une destination par section (Variables, Alarms, Actions, Triggers). Tout ce qui est créé ici arrive à la racine de sa section sous le premier nom libre des séries Variable1, Action1, Trigger1, Alarm1 ou Folder1. Une définition nouvelle ne s'ouvre pas (voir Créer et copier) ; un dossier nouveau ouvre son champ de nom sur sa ligne de l'arborescence. Dessiné seulement pour un rôle qui détient Configurer Logic ; grisé avec la raison pendant que la station est verrouillée.
Tout déplier / Tout replier Ouvre chaque branche (en chargeant chaque niveau au passage) ou referme tout jusqu'aux racines.
Clic droit Sur une racine de section, sur l'un de vos dossiers, sur une ligne de définition ou sur la ligne Images, Icons, Colors ou Symbols : sélectionne la ligne et ouvre son menu (ci-dessous). Rien ne s'ouvre sur un nœud venu d'une autre page.

Le menu du clic droit porte, selon la ligne et le rôle : Nouvelle variable / Nouvelle action / Nouveau déclencheur / Nouvelle alarme (dans le dossier ou la racine cliqués), Nouveau dossier (grisé avec la raison sur un dossier déjà au troisième niveau), Exécuter (lignes d'action), Acquitter (lignes d'alarme), Tout acquitter (la racine Alarms), Activer ou Désactiver (actions, déclencheurs et alarmes), Déplacer vers (un sous-menu avec la racine de la section et chaque dossier où la ligne peut être classée), Copier, la suppression nommée comme sur la barre (Supprimer la variable, etc.), et sur un dossier Renommer le dossier et Retirer le dossier. Sur Images, Icons, Colors et Symbols, il porte leur barre : Importer une image…, Nouvelle icône utilisateur, Nouvelle couleur, Nouveau symbole utilisateur, Importer un symbole… et Copier l'instruction de conversation. Un rôle sans Configurer Logic ne reçoit qu'Exécuter, Acquitter et Tout acquitter quand il détient Piloter Logic, et Copier l'instruction de conversation sur Symbols ; une ligne qui n'en a aucun n'ouvre pas de menu.

La zone de détail est vide tant que vous n'avez rien sélectionné : « Sélectionnez un nœud pour l'examiner : les variables, actions, déclencheurs et alarmes ouvrent leur éditeur. Créez-en un avec Nouveau. »

La barre de commandes

La barre dessine les verbes du nœud sélectionné. Ce que le rôle n'autorise jamais n'est pas dessiné ; ce que la situation refuse pour l'instant reste dessiné, grisé, avec la raison dans son infobulle : « La configuration est verrouillée tant qu'une unité est en cours. » pendant une opération d'ingénierie, « Runtime arrêté » pendant que la station fonctionne en lecture seule.

Sélection Groupe de tête Groupe de queue (danger)
L'un de vos dossiers Nouvelle variable / action / déclencheur / alarme (la nature que sa section contient), Nouveau dossier (grisé « Ce dossier est déjà aussi profond que les dossiers s'imbriquent. » à la limite de profondeur), Renommer le dossier Retirer le dossier
Une variable Copier Supprimer la variable
Une action Exécuter, Activer ou Désactiver, Copier Supprimer l'action
Un déclencheur Activer ou Désactiver, Copier Supprimer le déclencheur
Une alarme Acquitter, Activer ou Désactiver, Copier Supprimer l'alarme
La racine Alarms Tout acquitter
Assets, Images Importer une image…
Assets, Icons Nouvelle icône utilisateur
Assets, Colors Nouvelle couleur
Assets, Symbols Nouveau symbole utilisateur, Importer un symbole…, Copier l'instruction de conversation
Un nœud System, Server, Connector ou Process L'avis de modification ailleurs et son bouton Ouvrir

Copier duplique la définition sélectionnée à la racine de sa section, sous le nom de la source quand il est libre et sinon Nom (2), Nom (3) et ainsi de suite, et met la copie en évidence dans le tableau de cette racine au lieu de l'ouvrir (voir Créer et copier) ; une alarme copiée démarre à Normale, un déclencheur copié démarre sans planification, une action copiée n'a aucune exécution enregistrée. Activer et Désactiver basculent l'indicateur Activé de la définition par le même enregistrement automatique que n'importe quel champ. Chaque Supprimer demande d'abord (« Supprimer « X » ? … Cette action est irréversible. ») et signale « Supprimé. » dans le journal des actions ; supprimer une variable ou une alarme laisse sans résolution chaque expression, script, condition et liaison de tableau de bord qui nommait son adresse, ce que la Vérification liste. Une suppression arrive sur le parent de ce qu'elle a supprimé : l'écran va au dossier où la définition était classée, ou à la racine de sa section, sélectionné et ouvert dans l'arbre avec son tableau de ce qui reste, et Retirer le dossier arrive de la même façon sur le dossier du dessus ou la racine de la section.

Créer et copier

Créer n'ouvre jamais ce qu'on a créé, et une copie est une création. Nouvelle variable, Nouvelle action, Nouveau déclencheur et Nouvelle alarme, que ce soit depuis le Nouveau… de la colonne, depuis le menu du clic droit d'une racine de section ou d'un dossier, ou depuis la barre d'un dossier ouvert, créent la ligne sous le premier nom libre de sa série et amènent l'écran à la page de son parent : le dossier où elle a été classée, ou la racine de la section. L'arborescence sélectionne ce parent et le déplie, le tableau de la page met la nouvelle ligne en évidence et l'amène dans la zone visible, et le journal des actions indique « Élément « Variable1 » créé. Ouvrez-le pour le modifier. » Une création faite depuis la barre du dossier lui-même laisse l'écran sur ce dossier. Copier fait de même à la racine de sa section, et le journal des actions indique alors « Copié vers « Setpoint (2) ». Ouvrez la copie pour la modifier. » Un filtre tapé dans la zone Filtrer… est effacé à l'arrivée, pour que le parent et la nouvelle ligne figurent dans l'arborescence et puissent y être montrés sélectionnés et dépliés.

La page d'une racine de section ou d'un de vos dossiers est un tableau de ce qu'elle contient, avec Nom, Adresse et Valeur, et au bout de chaque ligne un Ouvrir qui ouvre la définition exactement comme sa ligne dans l'arborescence (sur la racine Alarms, un rôle qui détient Piloter Logic y trouve aussi Acquitter). Une variable dont le type de sortie est Icône, Image ou Couleur dessine dans sa cellule Valeur son icône, son image ou son échantillon de couleur, assez petit pour la ligne (une couleur montre aussi son hexadécimal) ; la cellule n'écrit jamais le source de l'icône. Appuyer sur une ligne la choisit, et la ligne choisie est la ligne mise en évidence : la mise en évidence reste jusqu'à ce que vous choisissiez une autre ligne ou que vous meniez la colonne ailleurs. Un dossier nouveau fait exception : il ouvre son champ de nom sur sa ligne de l'arborescence.

Les dossiers

Chacune des quatre sections peut être organisée en dossiers. Un dossier appartient à une section et ne contient que les éléments de cette section ; il s'imbrique sur trois niveaux au plus. Un dossier n'est que de l'organisation : il n'a ni permission, ni évaluation, ni état.

Pour Variables et Alarms, la chaîne de dossiers compose l'adresse : une variable dans Forno se lit Variables.Forno.Setpoint, une variable de son sous-dossier Zona1 se lit Variables.Forno.Zona1.Setpoint. Un niveau d'une section est un espace de noms d'un seul segment, partagé par ses dossiers et ses définitions : deux dossiers peuvent chacun contenir un Setpoint, mais rien de classé au même niveau ne peut s'assainir en le même segment, et l'éditeur refuse un tel nom au fil de la frappe en nommant l'adresse déjà prise. Actions et Triggers sont référencés par identité : leurs dossiers n'organisent donc que l'arborescence, et leurs volets affichent une ligne d'emplacement au lieu d'une adresse.

Commande Ce qui se passe
Nouveau dossier Crée un dossier vide nommé FolderN et ouvre son champ de nom sur la ligne de l'arborescence ; laisser le champ vide ou inchangé conserve ce nom.
Renommer le dossier Ouvre le champ de nom sur la ligne. Chaque adresse sous le dossier suit, chaque référence est réécrite, et le journal des actions dit combien (« Dossier renommé ; 3 références mises à jour. »).
Déplacer vers Classe un dossier ou une définition sous un autre dossier de la même section, ou de nouveau à la racine de la section ; les adresses et les références suivent. La liste ne propose que les destinations légales : jamais le dossier lui-même, ni l'un de ses propres sous-dossiers, ni une autre section, ni un niveau où ses sous-dossiers dépasseraient la limite de profondeur.
Retirer le dossier Demande d'abord, en disant ce qui bouge : « Retirer le dossier « X » ? Ses 3 éléments passent dans Variables ; rien n'est supprimé. Les références aux adresses qui changent sont mises à jour. » Les éléments et les sous-dossiers sont reclassés un niveau plus haut ; le retrait est refusé quand deux d'entre eux entreraient en collision à destination.

Le cycle et la file

Le runtime tourne sur deux voies, et aucune des deux n'attend jamais un équipement. Le cycle s'exécute toutes les 100 ms sur une file séquentielle : il évalue chaque variable d'expression, puis chaque condition d'alarme activée, dans cet ordre, si bien qu'une condition lit les valeurs de variable de ce cycle, et il porte aussi les écritures en mémoire et de tag venues d'ailleurs ainsi que les acquittements d'alarme. La voie des actions exécute les scripts d'action, un à la fois, dans l'ordre où ils ont été demandés. Un balayage distinct, également toutes les 100 ms, envoie les déclencheurs échus sur la voie des actions.

Les deux voies étant indépendantes, un cycle peut tomber au milieu d'un script : deux lectures d'un même script peuvent donc voir des cycles différents ; en échange, un script qui s'arrête pour attendre un équipement ne retient que les actions placées derrière lui, jamais les expressions, les alarmes ni l'opérateur. Les écritures ne s'y disputent rien : l'ordre est tenu là où se trouve le câble, une file par équipement (voir plus bas). Les consommateurs (tableaux de bord, voies, cette page) lisent l'état publié ; rien sur cette page ne déclenche une évaluation à la main.

Écrire des valeurs

Chaque écriture passe par un seul canal, quelle qu'en soit l'origine : l'affectation d'un script ou Write(...), le champ Définir la valeur d'une variable mémoire, une commande de tableau de bord, une recette Process, l'agent, un client OPC UA externe qui écrit un nœud public, un client Modbus qui écrit une ligne de la table du serveur Modbus qui autorise l'écriture. Le canal refuse une valeur qui n'est pas finie ou qui ne se convertit pas vers le type de la cible, refuse une source qu'une recette en cours ou un verrouillage retient (en nommant qui la retient), journalise l'écriture de l'ancienne valeur vers la nouvelle sous sa source (Opérateur, MCP, l'essai), et l'applique. Ce que le canal tranche, il le tranche sans rien demander à personne : la valeur, la cible, le verrou, et jusqu'à savoir si l'équipement est seulement connecté. Une écriture de tag qu'il admet est ensuite remise à la file de livraison propre à cet équipement, dans le Connector, où les valeurs qui lui sont dues partent une à une, dans leur ordre d'arrivée, pendant que les autres équipements sont servis en parallèle ; une valeur qu'une écriture plus récente sur le même tag y dépasse ne quitte jamais la file, et c'est la plus récente que reçoit l'équipement. Qui a demandé est qui attend la réponse, hors de la Logique et dans son propre code : le composant du tableau de bord, l'écriture manuelle de la page du tag, l'outil de l'agent, le client OPC UA externe, le client Modbus, une recette en cours, et un script seulement là où il a écrit WriteAndWait. Une écriture dont la source est une action fait exception : elle ne va qu'à la capture détaillée, jamais à la console Événements, parce qu'un script qui écrit à chaque cycle produit des valeurs par milliers et enterrerait les nouvelles de la station sous elles. Ce que la console retient d'une action, ce sont ses échecs. Une écriture de tag prend la valeur physique et remonte à l'envers la chaîne de conversion du tag jusqu'à la valeur brute que l'équipement accepte. Le détail se trouve sur Variables et Actions.

Permissions et verrous

Permission Ce qu'elle autorise ici
Voir Logic Ouvrir la page et lire tout ce qu'elle contient, valeurs en direct comprises.
Configurer Logic Créer, modifier, renommer, déplacer, copier, activer, désactiver et supprimer variables, actions, déclencheurs, alarmes et dossiers, et tenir la bibliothèque de ressources.
Piloter Logic Écrire une valeur en mémoire, exécuter une action, acquitter des alarmes, ici, sur les tableaux de bord et sur la page Événements.

Un rôle qui n'a que Voir Logic lit toute la page : les éditeurs sont inertes sous une note (« Votre rôle peut consulter Logic mais ne peut pas le configurer (variables, actions, déclencheurs, alarmes et ressources). ») et aucun verbe de configuration ou de pilotage n'est dessiné. Un rôle qui a Piloter sans Configurer garde Exécuter, Acquitter, Tout acquitter et Définir la valeur vivants. Pendant qu'une unité Process tient la station, la page affiche l'avis de verrou d'ingénierie et chaque verbe de configuration et chaque champ d'éditeur sont grisés ; Exécuter, Acquitter et Définir la valeur restent disponibles. Pendant que le runtime est arrêté, la configuration comme le pilotage refusent avec « Runtime arrêté » ; l'arborescence et les volets restent lisibles mais ne portent aucune donnée en direct. Le catalogue des permissions se trouve sur Permissions.

Ce que la page ne fait pas

Il n'y a ni Enregistrer, ni Annuler : une frappe est un changement persisté (le journal des actions dit « Enregistré. ») et un enregistrement refusé recharge le champ avec ce que la station conserve. Les définitions que l'agent crée, modifie ou supprime par ses propres outils, ou qu'une autre fenêtre modifie, arrivent d'elles-mêmes dans la colonne ouverte. Un éditeur ouvert sur une définition ainsi supprimée se ferme, et le journal des actions la nomme et dit qu'elle a été supprimée en dehors de l'éditeur. L'historique des alarmes, la console Événements et les tableaux de bord vivent sur leurs propres pages.