ソース情報
- リポジトリ
- JohnNuwan/EVA_CORE
- ソースの最終更新活動
- 2026年7月18日 08:30
- 検出された SKILL.md の言語
- フランス語
- スター
- 0
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill rockwell-l5x-generationコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
SOC 職業分類に基づく
| name | rockwell-l5x-generation |
| description | Générer et éditer des fichiers L5X Studio 5000. |
| version | 1.1.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"tags":["rockwell","studio-5000","l5x","plc","xml","automation-engineering"],"related_skills":["industrial-plc-connectivity","rockwell-l5x-courbon-conventions"]} |
Cette compétence guide l'agent pour créer, modifier, parser et valider des fichiers de configuration et de code au format .L5X (Rockwell Automation Studio 5000 Logix Designer). Ce format XML décrit l'intégralité du projet PLC ou des éléments spécifiques (UDT, AOI, Programmes, Routines).
Les outils natifs suivants doivent être utilisés pour manipuler les fichiers :
`l5x_editor_analyze` : Extraire la structure (UDTs, AOIs, programmes, variables).`l5x_editor_validate` : Vérifier la syntaxe XML et détecter les tags orphelins.`l5x_editor_rename_tags` : Renommer en bloc les préfixes de variables (scope-aware).Les UDT (User-Defined Types) définissent des structures de données réutilisables pour les équipements (moteurs, vannes, instruments). Lors de la génération d'un UDT dans le L5X, l'agent doit formater le XML comme suit :
<UserDefinedTypes>
<UserDefinedType Name="UDT_Motor" Family="" Class="User">
<Description>Structure de contrôle standard pour moteur asynchrone</Description>
<Members>
<Member Name="CmdStart" DataType="BOOL" Dimension="0" Radix="Decimal" Hidden="false">
<Description>Commande de démarrage (Impulsion)</Description>
</Member>
<Member Name="CmdStop" DataType="BOOL" Dimension="0" Radix="Decimal" Hidden="false">
<Description>Commande d'arrêt (Impulsion)</Description>
</Member>
<Member Name="StsRunning" DataType="BOOL" Dimension= = =>
Retour de marche moteur
Retour de défaut moteur (Thermique ou Disjoncteur)
Consigne de vitesse en Hz (0.0 à 50.0)
Retour de vitesse mesuré en Hz
L'AOI (Add-On Instruction) est un bloc logique encapsulé. Elle s'appuie sur des paramètres d'entrée/sortie et des variables locales.
<AddOnInstructionDefinitions>
<AddOnInstructionDefinition Name="AOI_MotorControl" Revision="1.0" ExecuteMode="Block" Class="Standard">
<Description>Logique de commande et sécurité pour moteur asynchrone</Description>
<Parameters>
<Parameter Name="EnableIn" DataType="BOOL" Usage="Input" Required="true" Visible="true"/>
<Parameter Name="EnableOut" DataType="BOOL" Usage="Output" Required="false" Visible="true"/>
<Parameter Name="Ctrl" DataType="UDT_Motor" Usage="InOut" Required="true" Visible="true">
<Description>Structure UDT de l'équipement</Description>
Commande de réarmement du défaut
Timer de contrôle de retour de marche
Logique de commande en Structured Text
<![CDATA[// Gestion du défaut thermique / disjoncteur]]>
<![CDATA[IF Ctrl.StsFault AND ResetFault THEN]]>
<![CDATA[ Ctrl.StsFault := FALSE;]]>
<![CDATA[END_IF;]]>
<![CDATA[]]>
<![CDATA[// Contrôle de marche / arrêt]]>
<![CDATA[IF Ctrl.CmdStart AND NOT Ctrl.CmdStop AND NOT Ctrl.StsFault THEN]]>
<![CDATA[ Ctrl.StsRunning := TRUE;]]>
<![CDATA[ELIF Ctrl.CmdStop OR Ctrl.StsFault THEN]]>
<![CDATA[ Ctrl.StsRunning := FALSE;]]>
<![CDATA[END_IF;]]>
Avant de livrer un fichier L5X à l'import dans Studio 5000, vérifier systématiquement :
Tout code Structured Text dans <Content> ou <STText> doit être enveloppé dans <![CDATA[...]]>. Un fichier L5X sans CDATA provoque des erreurs de parsing XML à l'import.
# Vérifier que tous les L5X contiennent du CDATA
grep -l 'CDATA' *.L5X | wc -l # Nb de fichiers avec CDATA
grep -L 'CDATA' *.L5X # Lister ceux qui en manquent
Un fichier L5X valide ne doit pas avoir de balises <Content> vides :
# Vérifier qu'aucun fichier n'a de Content vide
grep -c '<Content/>\|<Content></Content>' *.L5X
Un fichier L5X complet contient :
<?xml version="1.0" encoding="UTF-8"?><RSLogix5000Content ...>- dans les noms (les remplacer par _)L'approche la plus robuste, validée sur le projet ROH DevAssist (29 FDS, 6 zones), est de déléguer chaque zone à un sous-agent qui génère un fichier L5X complet (pas un .st partiel). Le parent fournit :
context)Workflow validé :
1. CRÉER les UDTs et AOIs communs → 2 fichiers L5X de base
2. DÉLÉGUER chaque zone en parallèle (delegate_task toolsets=[file,terminal]) :
- title clair : "ROH_Zone_{NAME} — complete Rockwell L5X"
- context : CPU type, conventions, UDTs disponibles, exemple de tags
- goal : générer un L5X complet avec Routine ST dans CDATA
3. VALIDER (parent) : compter CDATA, vérifier Content non vide, lister lignes
4. ASSEMBLER : créer le Master_Project.L5X qui référence tous les fichiers
| Problème | Cause | Correction |
|---|---|---|
<Content></Content> vide | Sous-agent génère le XML mais oublie le code ST | Chaque sous-agent DOIT écrire le L5X en un seul fichier complet. Vérifier avec grep -c CDATA |
Pas de balises <![CDATA[...]]> | Le code ST écrit brut dans le XML casse les caractères <, >, & | Passer un exemple de L5X existant dans context comme format référence |
| Tags/Programs manquants | Sous-agent ne définit que la Routine, pas les Tags | Structure minimale : Tags (UDT instances + I/O aliases) + Program + Routine |
| Noms de fichiers avec tirets | Incompatible Rockwell (max 40 chars, underscores only) | Remplacer - par _ dans les noms de tags et fichiers |
| Machine d'état absente ou incomplète | Sous-agent écrit juste une logique séquentielle | Forcer un pattern de state machine (Idle → Starting → Running → Complete) |
Un L5X de zone généré par sous-agent contient toujours :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RSLogix5000Content SchemaRevision="1.0" SoftwareRevision="33.00"
TargetName="ROH_Zone_{NAME}" TargetType="Program">
<Controller UseAsFolder="true">
<Programs>
<Program Name="Zone_{NAME}">
<Tags>...</Tags>
<Routines>
<Routine Name="Main" Type="StructuredText">
<Content><![CDATA[
// 1. I/O Mapping - physical to UDT fields
// 2. Equipment Control - AOI calls for each device
// 3. Permissives & Interlocks
// 4. Equipment Phase State Machine (Idle→Running→Complete→Aborted)
// 5. UDT sync for AOI compatibility
]]></Content>
</Routine>
</Routines>
</Program>
</Programs>
</Controller>
</RSLogix5000Content>
La section Structured Text doit toujours contenoir 5 sections dans l'ordre :
# Vérification CDATA : doit être 100%
cd output/ROH_DevAssite/l5x/
for f in *.L5X; do
lines=$(wc -l < "$f")
cdata=$(grep -c 'CDATA' "$f")
echo "$f: ${cdata} CDATA, ${lines} lines"
done
# Vérification contenu vide : doit être 0
grep -r '<Content/>' . --include="*.L5X" | wc -l
Voir le fichier references/roh-devassist-worked-example.md pour le détail complet du projet Royal Canin extrusion line, incluant :
;.. (ex: Ctrl.CmdStart).// pour une ligne, ou /* ... */ pour des blocs de commentaires.MainConveyor).Cmd pour les commandes, Sts pour les status, Cfg pour les configurations, Alm pour les alarmes).UDT_AnalogInput, AOI_PID_Loop).<![CDATA[...]]> pour envelopper le code Structured Text.DataType pointe vers des types standards Logix (BOOL, SINT, INT, DINT, REAL, TIMER, COUNTER) ou des UDT existants.⚠️ SECTION CRITIQUE — Les sections 1-4 ci-dessus donnent une base générique, mais les projets réels de Courbon/EVA Saint-Étienne utilisent une architecture structurellement différente.
Avant de générer du code pour un projet Courbon, charger impérativement la skill rockwell-l5x-courbon-conventions et analyser les fichiers de référence ingénieurs.
Chaque équipement est représenté par 5 UDTs :
UDT_EM_{ZONE}_{EQ} ← Conteneur: {COMMAND, STATUS}
UDT_EM_{ZONE}_{EQ}_CMD ← {ID_EM, CMD, ID_FCT_RESERV, SETPOINT}
UDT_EM_{ZONE}_{EQ}_SETPOINT ← SP01..SP24 (REAL)
UDT_EM_{ZONE}_{EQ}_STA ← {ID_EM, STS, ID_FCT_RESERV, MEASURE}
UDT_EM_{ZONE}_{EQ}_STA_BOOL ← 18 bits (RUNNING,COMPLETE,FAILURE...)
UDT_EM_{ZONE}_{EQ}_REPORT ← Mesures (REAL)
CMD values : 0=Idle, 1=Start, 10=Stop, 20=Abort, 30=Reset STS values : 0=Idle, 1=Running, 2=Complete, 3=Aborted, 10=Fault
Chaque FCT est un programme avec ces tags obligatoires :
IO_FCT:UDT_GEN_FCT | IO_BATCH_MGT_FROM_FCT | IO_BATCH_MGT_TO_FCT
PLC_TASK_EXC:UDT_GEN_PLC_TASK | PLC_CONFIG:UDT_GEN_PLC_CONFIG
L_CURRENT_STEP:DINT | PARAM_{ZONE}:UDT_PARAM_{ZONE}
L_EM_{ZONE}_{EQ}:UDT_EM_{ZONE}_{EQ} (une par équipement)
UDT_GEN_FCT = {ID_FCT, CMD: GEN_FCT_CMD_BOOL{START,STOP,ABORT,RESET,HOLD,RESTART}, STA: GEN_FCT_STA_BOOL{RUNNING,COMPLETE,FAILURE,ABORTED,IDLE,...}, WRK, CFG}
Chaque FCT a 5 routines : Main(SFC) → Running(SFC) → Logic(ST) → EnableInFalse(RLL) → Prescan(RLL)
| Préfixe | Rôle | Exemple |
|---|---|---|
IO_FCT | Interface générique | IO_FCT : UDT_GEN_FCT |
IO_RECIPE | Recette | IO_RECIPE : UDT_RECIPE_EXTRU |
IO_BATCH_MGT_* | Batch MES | IO_BATCH_MGT_FROM_FCT |
PLC_TASK_EXC | Échange tâche | PLC_TASK_EXC : UDT_GEN_PLC_TASK |
L_EM_* | EM local | L_EM_EXTRU_MAG : UDT_EM_EXTRU_MAG |
L_CURRENT_STEP | Step DINT | L_CURRENT_STEP : DINT |
I_SYN_* | Entrée IHM | I_SYN_AUTHOR_START : BOOL |
PARAM_* | Paramètres | PARAM_EXTRU : UDT_PARAM_EXTRU |
EXC_* | Échange système | EXC_C_TO_G : Comm_From_Courbon_To_Geelen |
Les ingénieurs Courbon n'utilisent JAMAIS de UDTs comme UDT_Motor avec des champs plats CmdStart, StsRunning. Ils utilisent exclusivement le pattern EM 5-UDT (COMMAND/STATUS avec ID_EM, CMD, STS binaire).
PITFALL : Ne pas générer de code avec UDT_Motor, UDT_Valve, UDT_Sensor génériques. Toujours créer UDT_EM_{ZONE}_{EQ} avec le pattern CMD/STA même si l'équipement est "juste un moteur".
Voir references/engineer-convention-details.md pour la liste complète des UDTs réels, la nomenclature des 46 FCT, et les structures RECIPE/PARAM extraites des fichiers ingénieurs.
Quand des L5X ingénieurs existent (ex: ~45 FCT), ne PAS générer avant d'avoir extrait leurs conventions :
findall('.//DataType') pour les UDTs, findall('.//Tag') pour les tags, findall('.//Routine') pour les routines