AutomationView utilise deux notions liées mais distinctes. Les garder séparées évite beaucoup de confusion :
input / output / local) détermine les catégories affichées dans la barre latérale Variables pendant l'édition.local / global / io) est calculée uniquement à la génération du code API. Elle décide où chaque variable est déclarée dans le programme exporté.Aucun de ces champs n'est défini à la main. Les deux sont dérivés de l'usage de la variable et de la présence d'une adresse d'E/S.
| Contexte d'utilisation | Portée | |
|---|---|---|
| Valeurs | input, output, local |
local, global, io |
| Quand cela s'applique | Pendant l'édition, dans la barre latérale Variables | Uniquement à la génération du code API |
| Comment c'est défini | Suit l'assignation de canal d'E/S de la variable | Dérivé de l'adresse et du nombre de POU qui l'utilisent |
| Persisté | Reflété par l'assignation d'E/S dans le fichier .machine |
Non persisté : recalculé à chaque export |
Une variable peut être une entrée dans la barre latérale (contexte d'utilisation) et se retrouver avec la portée io à l'export : les deux décrivent des choses différentes.
La barre latérale Variables regroupe chaque variable sous l'une des trois catégories :
| Catégorie | Signification |
|---|---|
| Entrée | Assignée à un canal d'entrée |
| Sortie | Assignée à un canal de sortie |
| Locale | Non assignée à un canal d'E/S (valeur par défaut) |
Il s'agit purement d'un regroupement de la barre latérale. Assignez une variable à un canal dans l'onglet Architecture de l'éditeur de Machine et sa catégorie suit automatiquement.
Les commandes correspondantes filtrent la barre latérale par contexte d'utilisation :
| Commande | Effet |
|---|---|
| AutomationView: List Inputs | Affiche les variables assignées à des canaux d'entrée |
| AutomationView: List Outputs | Affiche les variables assignées à des canaux de sortie |
| AutomationView: List Locals | Affiche les variables non assignées à un canal |
Lors de la génération du code API, AutomationView attribue une portée à chaque variable selon son adresse et son usage à travers les unités d'organisation de programme (POU) :
| Portée | Règle | Déclarée dans |
|---|---|---|
| io | La variable a une adresse %I ou %Q |
La liste de variables globales d'E/S (IO GVL) |
| global | Pas d'adresse d'E/S, mais utilisée par deux POU ou plus | Une liste de variables globales partagée (GVL) |
| local | Pas d'adresse d'E/S, utilisée par un seul POU | Le bloc VAR de ce POU |
La règle est appliquée dans cet ordre : une adresse l'emporte toujours (la variable devient io), sinon un usage multi-POU la rend global, et tout le reste reste local.
| Cible | io | global | local |
|---|---|---|---|
| CODESYS | IO GVL | Liste de variables globales (GVL) | Bloc VAR du POU |
| PLCopen XML | <globalVars> (E/S) |
<globalVars> |
<localVars> du POU |
Le panneau Variables dispose aussi de deux modes d'affichage, accessibles depuis sa barre de titre. Ils contrôlent l'étendue du projet affichée : ce n'est pas une portée de variable.
AutomationView infère le type d'une variable à partir de sa première utilisation lorsqu'aucun type explicite n'est défini :
cycle_count == 5 infère INT.TON(timer_red, T#10s) déclare timer_red comme instance TON.Deux variables peuvent se résoudre à la même adresse physique si toutes deux sont liées au même canal. Un conflit, c'est une même adresse revendiquée par plus d'une variable. Lancez AutomationView: Validate Addresses avant l'export pour les détecter ; la commande indique le nombre de conflits et de variables non assignées dans une notification.
Supprimer une variable la retire uniquement du magasin en mémoire. Si un fichier source référence encore le nom, sa réanalyse recrée la variable. La suppression ne modifie pas la déclaration source.