用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill schneider-unity命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Concevoir et maintenir un watchdog auto-correcteur pour services HTTP — checks de santé, auto-restart, état persistant, rapports et pièges bash.
Serveur de messagerie sécurisé auto-hébergé (Signal-like) avec Flask + WebSocket + AES-256-GCM + pont EVA
ADAM-SENTINEL — Veilleur technologique 24h/24h. Scanne 10 domaines, cree des rapports, met a jour les skills, alerte sur les CVE et breaking changes.
基于 SOC 职业分类
正在显示 SKILL.md
| name | schneider-unity |
| description | Programmer sous Control Expert et manipuler les fichiers XMY. |
| version | 1.2.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"EVA":{"tags":["schneider","unity-pro","control-expert","plc","st","m340","m580","industrial-automation","ddt","dfb","xmy"],"related_skills":["simplify-code","plan"]}} |
EcoStruxure Control Expert (anciennement connu sous le nom de Unity Pro) est l'environnement de développement et de programmation pour les contrôleurs logiques programmables (API/PLC) de la gamme Schneider Electric, notamment les Modicon M340, M580, Premium et Quantum.
Le langage Texte Structuré (ST) y est privilégié pour l'implémentation de calculs complexes, de boucles et de blocs logiques algorithmiques. Control Expert utilise également un format d'exportation/importation standardisé basé sur le XML (fichiers .XMY) pour stocker et transférer les structures de données (DDT), les sections de code et les Blocs Fonctionnels Dérivés (DFB) créés par l'utilisateur.
Cette compétence permet à l'agent EVA de générer du code ST valide pour Schneider Control Expert et de lire, analyser ou générer des fichiers XML d'importation .XMY conformes aux spécifications de l'éditeur.
À utiliser lorsque l'utilisateur demande de :
.XMY (fichiers de DFB) ou .FEF (fichiers d'export globaux).%MW ou non localisées).Le langage ST de Schneider Electric implémente la norme CEI 61131-3 avec les spécificités de compilation suivantes :
:=.#. Les noms de variables s'écrivent directement.(* commentaire *) pour les blocs multi-lignes et // pour les lignes simples (supporté sur les versions récentes).Pour différencier la portée des variables et maintenir un code propre :
| Type de Variable | Préfixe | Exemple | Description |
|---|---|---|---|
| Input (Entrée DFB) | i_ | i_Cmd_Start | Signal physique ou commande logique entrant. |
| Output (Sortie DFB) | q_ | q_Motor_On | Signal physique ou commande logique sortant. |
| InOut (Entrée/Sortie) | iq_ | iq_Settings | Référence passée en lecture/écriture. |
| Static (Mémoire interne) | stat_ | stat_Feedback_Timer | Instance de bloc temporisateur ou mémoire. |
| Temp (Temporaire) | temp_ | temp_Index | Variable de calcul locale non persistante. |
DFB_Motor_Advanced)Voici le code ST de logique interne pour un DFB de contrôle de moteur :
(* ==========================================================================
LOGIQUE DE COMMANDE ET DIAGNOSTIC MOTEUR ADVANCED
========================================================================== *)
(* 1. Gestion des modes Auto / Manuel *)
IF i_Cmd_Mode_Auto THEN
stat_Mode_Auto := TRUE;
ELSIF i_Cmd_Mode_Man THEN
stat_Mode_Auto := FALSE;
END_IF;
(* 2. Logique de commande de démarrage *)
IF stat_Mode_Auto THEN
stat_Run_Request := i_Cmd_Auto_Start AND NOT i_Cmd_Auto_Stop;
ELSE
stat_Run_Request := (stat_Run_Request OR i_Cmd_Man_Start) AND NOT i_Cmd_Man_Stop;
END_IF;
(* 3. Application des sécurités (Interlock prioritaires) *)
IF NOT i_Safety_Interlock OR i_Fault_Reset_Cmd THEN
stat_Run_Request := FALSE;
END_IF;
(* 4. Gestion de la temporisation de retour de marche (TON standard) *)
(* Note: L'instance 'stat_Timer_Feedback' (type TON) doit être déclarée dans le dictionnaire DFB *)
stat_Timer_Feedback(IN := q_Motor_Run AND NOT i_Feedback_Run, PT := t#3s);
(* 5. Logique de défaut *)
IF stat_Timer_Feedback.Q THEN
stat_Fault_Active := TRUE;
ELSIF i_Fault_Reset_Cmd THEN
stat_Fault_Active := FALSE;
END_IF;
(* 6. Affectation des sorties du DFB *)
q_Motor_Run := stat_Run_Request AND NOT stat_Fault_Active;
q_Fault_Active := stat_Fault_Active;
q_Mode_Auto_Active := stat_Mode_Auto;
Les automates Schneider Modicon gèrent la mémoire selon deux concepts :
%MW100 pour un mot de 16 bits, %MX100.0 pour un bit localisé).REAL occupe 2 mots consécutifs, %MW100 et %MW101).Les DDT permettent de regrouper des variables de types hétérogènes pour structurer l'information (ex: état d'une vanne, mesures d'une sonde).
TYPE T_Valve_Control :
STRUCT
bOpen_Cmd : BOOL; (* Commande d'ouverture *)
bClose_Cmd : BOOL; (* Commande de fermeture *)
bLimit_Open : BOOL; (* Fin de course ouverte *)
bLimit_Close : BOOL; (* Fin de course fermée *)
rPosition : REAL; (* Position de recopie 0-100% *)
bFault : BOOL; (* Défaut de positionnement *)
END_STRUCT
END_TYPE
Pour importer un DFB ou des variables dans Control Expert sans saisie manuelle, on utilise le format XML d'import/export Schneider (.XMY).
.XMY) :<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FBExchangeFile>
<!-- En-tête officiel Control Expert -->
<fileHeader company="Schneider Automation" product="Unity Pro" version="14.1"/>
<contentHeader name="DFB_Valve_Control" version="1.0.0">
<comment>Contrôle de vanne standardisé EVA</comment>
</contentHeader>
<FBBlock nameType="DFB_Valve_Control" FBKind="UserAssociated">
<!-- Paramètres d'Entrée (i_...) -->
<parameters name="i_Cmd_Open" connectionType="Read" typeName="BOOL">
<comment>Commande ouverture vanne</comment>
</parameters>
<parameters name="i_Cmd_Close" connectionType="Read" typeName="BOOL">
<>Commande fermeture vanne
Retour fin de course ouverte
Retour fin de course fermée
Commande de bobine ouverture physique
Indication de défaut de la vanne
Timer de contrôle de mouvement
Mémoire interne de l'état de défaut
<![CDATA[
(* Logique du temporisateur de mouvement *)
stat_Timer_Check(IN := (q_Valve_Open AND NOT i_FBC_Open) OR (NOT q_Valve_Open AND NOT i_FBC_Close), PT := t#5s);
(* Détection du défaut *)
IF stat_Timer_Check.Q THEN
stat_Fault_State := TRUE;
END_IF;
(* Commande d'ouverture *)
IF i_Cmd_Open AND NOT i_Cmd_Close AND NOT stat_Fault_State THEN
q_Valve_Open := TRUE;
ELSIF i_Cmd_Close OR stat_Fault_State THEN
q_Valve_Open := FALSE;
END_IF;
q_Fault := stat_Fault_State;
]]>
Variables non déclarées dans le dictionnaire :
.XMY de type variables) pour l'importer avant de charger le code ST.Index de tableaux dynamiques non bornés :
ARRAY [0..9] OF INT à l'aide d'une variable d'index non sécurisée. Un dépassement d'indice provoque l'arrêt immédiat (CPU Halt) de l'automate.Chevauchement d'adresses %MW :
DINT (32 bits) sur %MW10 et une variable INT (16 bits) sur %MW11. La modification de %MW10 altérera la valeur de %MW11 de manière silencieuse.%MW pour l'échange de données HMI avec des écarts d'adresse stricts (+2 pour les variables de 32 bits et floats).IF, FOR, CASE) sont fermés avec leur mot-clé de clôture (END_IF;, END_FOR;, END_CASE;).# devant les variables locales (spécificité Siemens).(* ... *) ou //.TON, TOF, R_TRIG) sont déclarées dans la section <privateVariables> ou déclarées globalement..XMY contiennent des balises racines <FBExchangeFile> ou <variablesExchangeFile> valides avec des namespaces conformes.BOOL, INT, REAL).<?xml version="1.0" encoding="UTF-8"...).