| name | rockwell-studio5000 |
| description | Programmer en ST Rockwell et manipuler des fichiers L5X. |
| version | 1.3.0 |
| author | EVA |
| license | PrivĂ©e EVA St-Ătienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"tags":["rockwell","studio5000","logix-designer","plc","l5x","industrial-automation"],"related_skills":["simplify-code","plan"]} |
Programmation Rockwell Automation (Studio 5000 & L5X)
Vue d'ensemble
L'environnement Studio 5000 Logix Designer d'Allen-Bradley (Rockwell Automation) est la référence pour programmer les contrÎleurs ControlLogix et CompactLogix.
Référence technique : Voir references/rockwell-generation-workflow.md pour le workflow de génération automatisée depuis des FDS, references/rgy-project-structure.md pour un exemple concret de projet RGY multi-FDS, references/roh-project-structure.md pour un exemple de projet PDF-only (ROH), references/parallel-subagent-generation.md pour la génération parallÚle multi-zone par sous-agents, et references/l5x-consolidation-workflow.md pour le script de post-traitement qui consolide les sorties de sous-agents en fichiers L5X valides avec CDATA.
Quand l'utiliser
Ă utiliser lorsque l'utilisateur demande :
- De générer des blocs de code ou des routines en Structured Text (ST) pour Studio 5000.
- D'analyser ou de générer des structures XML L5X pour importer des Add-On Instructions (AOI), des routines, des types de données définis par l'utilisateur (UDT), ou des programmes complets.
- De structurer des variables selon les portées locales (Program Tags) et globales (Controller Tags).
- D'implémenter des régulations ou des traitements analogiques (mises à l'échelle).
- De traduire des schémas à contacts (Ladder) en Structured Text Logix.
1. Portées des Variables (Controller Tags vs Program Tags)
Dans les architectures Logix, la gestion de la mémoire est divisée en deux portées fondamentales :
Controller Tags (Portée Globale)
- Définition : Variables partagées au niveau de l'ensemble du contrÎleur.
- Usage recommandé :
- Ăchanges HMI/SCADA.
- Communications inter-automates (Produce/Consume, instructions MSG).
- Ăchanges de donnĂ©es globaux entre diffĂ©rents programmes de l'automate.
- AccÚs : Accessible directement par n'importe quelle routine de n'importe quel programme en écrivant simplement le nom du tag (ex :
HMI_Start_Button).
Program Tags (Portée Locale)
- Définition : Variables encapsulées à l'intérieur d'un programme spécifique (contenant un ou plusieurs ensembles de routines).
- Usage recommandé :
- Variables de calcul temporaire, mémoires d'état internes, variables locales de routine.
- Encapsulation logique pour s'assurer qu'un autre programme ne modifie pas accidentellement des données internes.
- Réutilisation de structures logiques identiques dans des programmes différents.
- AccĂšs interne : Accessible directement par toutes les routines du mĂȘme programme.
- AccÚs externe (Syntaxe de référence croisée) : Pour accéder à un tag local depuis un autre programme ou un équipement externe, la syntaxe qualifiée est
\ProgramName.TagName (introduite sur les versions de firmware récentes).
2. Structure Hiérarchique des Fichiers XML L5X
Les fichiers L5X sont des structures XML strictes et ordonnées représentant le projet ou des sous-composants (AOI, Routines, UDTs, Programmes).
Structure globale d'un fichier L5X complet :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="33.00" TargetName="MyProject" TargetType="Controller">
<Controller Name="MyController">
<DataTypes>
<DataType Name="UDT_AnalogInput">
<Members>
<Member Name="RawValue" DataType="INT" Dimension="0" Radix="Decimal" Access="Read/Write"/>
<Member Name="ScaledValue" DataType="REAL" Dimension="0" Radix="Float" Access="Read/Write"/>
<Member Name="Fault" DataType="BOOL" Dimension= = =/>
<![CDATA[
// Logique de l'AOI
Temp_Val := Input;
Scaled := Temp_Val * 10.0;
]]>
<![CDATA[
// Appel de logique de routine
Local_Step := 10;
]]>
[!IMPORTANT]
- Entités XML : Les caractÚres spéciaux dans le code ST (
<, >, &) provoquent des erreurs de parsing XML s'ils sont insérés bruts.
- Solution : Envelopper systématiquement le code Structured Text dans des sections
<![CDATA[ ... ]]> à l'intérieur de l'élément <Content>.
3. Structure des Temporisateurs (TIMER) et Mathématiques Associées
Sous Logix, les temporisations utilisent le type prédéfini TIMER qui possÚde une structure de registres interne fixe et s'exprime exclusivement en millisecondes (ms).
Propriétés de la Structure TIMER :
.PRE (Preset) : DINT (32 bits), valeur de cible ou consigne de temps.
.ACC (Accumulator) : DINT (32 bits), valeur de temps écoulé actuelle.
.EN (Enable) : BOOL, indique si l'instruction de temporisation est activée.
.TT (Timer Timing) : BOOL, indique que le timer est en cours d'accumulation (.EN actif et .ACC < .PRE).
.DN (Done) : BOOL, passe Ă TRUE lorsque .ACC >= .PRE.
Utilisation opérationnelle en ST :
// Appel et exécution d'un Timer TON (On-Delay)
MyTimer.PRE := 5000; // Consigne de 5.0 secondes (5000 ms)
MyTimer.TimerEnable := Run_Cmd; // Condition d'activation
TON(MyTimer); // Exécution de l'instruction systÚme
// Récupération de l'état
Timer_Done := MyTimer.DN; // TRUE aprĂšs 5 secondes d'activation continue
Timer_Active := MyTimer.TT; // TRUE pendant l'écoulement du temps
// Calcul du temps restant (Mathématiques sur temporisateurs)
Time_Remaining := MyTimer.PRE - MyTimer.ACC; // Temps restant en ms
Comportements de Réinitialisation :
4. Conventions de Nommage et Algorithme de Mise Ă l'Ăchelle (Scaling)
Conventions de Nommage Rockwell :
- Longueur maximale : 40 caractÚres pour tous les noms de tags, de routines, de programmes ou de types de données.
- CaractĂšres valides : Lettres (
A-Z, a-z), chiffres (0-9) et caractĂšres de soulignement (_).
- RÚgles d'écriture :
- Doit obligatoirement commencer par une lettre.
- Interdiction d'avoir des caractÚres de soulignement consécutifs (ex :
Pump__Start est invalide).
- Ne doit pas se terminer par un caractĂšre de soulignement (ex :
Pump_Start_ est invalide).
- Les espaces et caractÚres accentués sont strictement interdits.
Algorithme StandardisĂ© de Mise Ă l'Ăchelle (Scaling) en ST :
Les automates Rockwell ne disposent pas d'une instruction native simple de mise à l'échelle (comme l'instruction SCALE sur d'autres plateformes). On implémente souvent cet algorithme sous forme d'AOI ou de fonction Structured Text.
// Formule mathématique linéaire :
// Output = ((Input - Raw_Min) / (Raw_Max - Raw_Min)) * (EU_Max - EU_Min) + EU_Min
// Implémentation robuste en ST Rockwell
Span_Raw := Raw_Max - Raw_Min;
Span_EU := EU_Max - EU_Min;
IF Span_Raw <> 0.0 THEN
// Calcul de la valeur brute proportionnelle
Scaled_Temp := ((Input_Raw - Raw_Min) / Span_Raw) * Span_EU + EU_Min;
// ĂcrĂȘtage (Clamping) pour Ă©viter les valeurs hors limites physiques
IF Scaled_Temp > EU_Max THEN
Output_Scaled := EU_Max;
ELSIF Scaled_Temp < EU_Min THEN
Output_Scaled := EU_Min;
ELSE
Output_Scaled := Scaled_Temp;
END_IF;
Scale_Fault := FALSE;
ELSE
// Erreur de configuration (Division par zéro évitée)
Output_Scaled := EU_Min;
Scale_Fault := TRUE;
END_IF;
5. Génération Multi-FDS depuis un Répertoire Projet
Lorsqu'un projet industriel contient plusieurs dizaines de FDS rĂ©partis par zone fonctionnelle (rĂ©ception, broyage, extrusion, conditionnement, etc.), le traitement doit ĂȘtre systĂ©matisĂ©.
Convention de nommage des FDS projet
{PREFIX}-FDS-{ZONE}-{FEATURE}-{VERSION}.{ext}
Exemple concret (projet RGY â recyclage plastique) :
RGY-FDS-RECEPTION-UNLOAD-G.pdf â Zone RĂ©ception, dĂ©chargement, version G
RGY-FDS-GRINDING-DOSING-F.pdf â Zone Broyage, dosage, version F
RGY-FDS-EXTRUSION_L2-GENERALITIES-B.pdf â Zone Extrusion Ligne 2, gĂ©nĂ©ralitĂ©s, version B
Arborescence projet type
client_data/{PROJET}/FDS/
âââ 00-GENERAL/ â FDS transverses (supervision, calibration, chauffage, agitation)
âââ 01-{ZONE_A}/ â FDS spĂ©cifiques Ă la zone A
âââ 02-{ZONE_B}/ â FDS spĂ©cifiques Ă la zone B
â âââ 1-LINE_1/ â Sous-lignes si la zone est divisĂ©e
â âââ 2-LINE_2/
âââ .../ â 8 Ă 12 zones max
âââ RGY-FS-LIST-{DATE}.xls â Fichier de liste des E/S (I/O List) complĂ©mentaire
âââ Master/ â Dossiers masters contenant les originaux non rĂ©visĂ©s
Workflow de génération
- Scanner le répertoire : Lister tous les fichiers
.pdf et .docx valides (ignorer ~$* fichiers temporaires Office).
- Traiter les généralités d'abord : Les FDS
GENERALITIES ou GENERAL définissent les blocs génériques (UDT, AOI, routines standard) qui s'appliquent à toute la zone.
- Traiter les FDS spécifiques : Chaque FDS produit une AOI et/ou une routine ST.
- Injecter le skid : Utiliser le flag
--skid du script generate_rockwell_from_fds.py pour remplacer les patterns SKXX par le numéro de skid réel.
- Cross-check avec l'I/O List : Le fichier XLS (liste des E/S) sert à valider que tous les tags utilisés dans le code ST correspondent à des entrées/sorties physiques déclarées.
PiÚge spécifique multi-FDS
- Ne pas mĂ©langer les versions : Un mĂȘme projet peut avoir des FDS Ă des rĂ©visions diffĂ©rentes (A, B, C...). Toujours prendre la version la plus rĂ©cente (lettre la plus haute dans l'ordre alphabĂ©tique).
- Fichiers temporaires Office : Les fichiers
~$*.docx sont des verrous temporaires â les ignorer systĂ©matiquement.
- RĂ©pertoires Master : Contiennent souvent des originaux non rĂ©visĂ©s â ne pas les traiter si les FDS officiels existent dans le dossier parent.
PiĂšges Courants (Common Pitfalls)
-
Unité de temps incorrecte dans les Timers :
- Erreur : Affecter directement une valeur en secondes au champ
.PRE (ex: MyTimer.PRE := 5; pour 5 secondes).
- Correction : Les timers Logix s'expriment uniquement en millisecondes. Toujours multiplier la valeur en secondes par 1000 (ex:
MyTimer.PRE := 5000;).
-
Utilisation erronée de .Q ou .IN (réflexes Siemens/Codesys) :
- Erreur : Essayer de lire la variable de sortie
.Q ou d'assigner l'activation sur .IN.
- Correction : Utiliser exclusivement
.DN (Done) pour la sortie de temporisation et .TimerEnable ou le paramĂštre de l'instruction TON pour l'activation.
-
Limites de caractÚres des étiquettes (Tags) :
- Erreur : Dépasser accidentellement la limite des 40 caractÚres lors de la génération automatique d'étiquettes à partir d'un fichier d'audit.
- Correction : Implémenter une routine de troncature intelligente garantissant que tous les tags générés font maximum 40 caractÚres et se terminent proprement par un caractÚre alphanumérique.
-
Génération L5X par sous-agents délégués (delegate_task) :
- Erreur : Déléguer la génération complÚte de fichiers L5X (avec code ST, CDATA, XML) à des sous-agents. Les sous-agents produisent des L5X avec des
<Content> vides, sans CDATA, ou avec des structures XML incohérentes entre zones.
- Cause : Le script
generate_rockwell_from_fds.py utilise async_call_llm depuis l'infrastructure EVA â les sous-agents n'y ont pas accĂšs et reconstruisent leur propre logique de gĂ©nĂ©ration XML de façon non standardisĂ©e.
- Correction :
a) Déléguer uniquement la lecture des FDS et la génération des fichiers
.st (Structured Text) aux sous-agents.
b) Centraliser la génération des L5X (AOI + Routine) dans un script de post-traitement unique qui :
- Parcourt tous les
.st générés
- Embarque le code ST dans des blocs CDATA
- Produit des fichiers L5X avec une structure XML cohérente
- Valide qu'aucun
<Content> n'est vide
c) Voir section 4 pour le détail du workflow de consolidation.
Liste de Vérification (Checklist)