用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill siemens-scl命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | siemens-scl |
| description | Générer, optimiser et déboguer du code Siemens SCL. |
| version | 1.0.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"EVA":{"tags":["siemens","scl","tia-portal","plc","industrial-automation"],"related_skills":["simplify-code","plan"]}} |
Le Structured Control Language (SCL) est un langage textuel de haut niveau basé sur le Pascal, défini dans la norme CEI 61131-3 (Structured Text). Il est particulièrement adapté pour le traitement de données complexes, les calculs mathématiques, les algorithmes de tri et la manipulation de tableaux dans les automates Siemens (S7-1200, S7-1500, S7-300 et S7-400).
Cette compétence aide l'agent EVA à concevoir du code SCL propre, modulaire, optimisé pour TIA Portal, et conforme aux bonnes pratiques industrielles et aux standards EVA.
À utiliser lorsque l'utilisateur demande :
FB ou FC) en SCL.Ne pas utiliser pour :
rockwell-studio5000 pour Rockwell Allen-Bradley).Pour les automates S7-1200 et S7-1500, toujours privilégier l'accès optimisé pour les DB et les blocs :
%DB1.DBX0.0 ou %MW10).InstanceDB.StatusWord.Bit0).Respecter le standard de nommage EVA pour différencier la portée et le type de variable :
| Type de Variable | Préfixe | Exemple | Description |
|---|---|---|---|
| Input (Entrée) | i_ ou in_ | i_StartSignal | Paramètre d'entrée du bloc. |
| Output (Sortie) | q_ ou out_ | q_MotorRunning | Paramètre de sortie du bloc. |
| InOut (Entrée/Sortie) | iq_ ou io_ | iq_ProcessValue | Paramètre passé par référence. |
| Static (Statique) | stat_ | stat_CycleCounter | Variable interne persistante (FB uniquement). |
| Temp (Temporaire) | temp_ | temp_LoopIndex | Variable en pile, non persistante. |
| Constant | c_ | c_MaxLimit | Valeur constante fixe. |
.scl)Voici le squelette d'un Function Block (FB) standard incluant les déclarations de variables et la logique :
FUNCTION_BLOCK "FB_EVA_ControlMotor"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
i_Start : Bool; // Commande de démarrage
i_Stop : Bool; // Commande d'arrêt
i_Fault : Bool; // Signal de défaut matériel
END_VAR
VAR_OUTPUT
q_Run : Bool; // Sortie commande moteur
q_Error : Bool; // Indication de défaut
END_VAR
VAR
stat_Active : Bool; // État mémorisé de marche
END_VAR
BEGIN
// Logique de marche/arrêt avec sécurité défaut
IF #i_Fault THEN
#stat_Active := FALSE;
#q_Error := TRUE;
ELSIF #i_Stop THEN
#stat_Active := FALSE;
#q_Error := FALSE;
ELSIF #i_Start AND NOT #q_Error THEN
#stat_Active := TRUE;
END_IF;
// Assignation de la sortie physique
#q_Run := #stat_Active;
END_FUNCTION_BLOCK
Note : TIA Portal utilise le symbole # devant les variables locales au bloc.
IF #i_Temperature > 80.0 THEN
#q_Overheating := TRUE;
#q_FanSpeed := 100;
ELSIF #i_Temperature > 50.0 THEN
#q_Overheating := FALSE;
#q_FanSpeed := 50;
ELSE
#q_Overheating := FALSE;
#q_FanSpeed := 0;
END_IF;
CASE #stat_Step OF
0: // Étape Initiale
#q_Motor := FALSE;
IF #i_Start THEN
#stat_Step := 10;
END_IF;
10: // Démarrage moteur
#q_Motor := TRUE;
IF #i_RunningFeedback THEN
#stat_Step := 20;
END_IF;
20: // Surveillance
IF NOT #i_RunningFeedback THEN
#stat_Step := 99; // Erreur
END_IF;
99: // État Erreur
#q_Motor := FALSE;
#q_Alarm := TRUE;
IF #i_Reset THEN
#q_Alarm := FALSE;
#stat_Step := 0;
END_IF;
END_CASE;
// Initialisation ou cumul sur un tableau
#temp_TotalVal := 0;
FOR #temp_Index := 0 TO 9 DO
#temp_TotalVal := #temp_TotalVal + #iq_SensorData[#temp_Index];
END_FOR;
Toujours déclarer les Timers IEC dans les variables statiques du FB pour éviter l'allocation de DB de travail externes inutiles (concept de multi-instance) :
Déclaration :
VAR
stat_TimerMotor : TON_TIME; // Ou IEC_TIMER
END_VAR
Appel dans le code :
#stat_TimerMotor(IN := #i_StartCmd,
PT := T#5s);
#q_DelayedStart := #stat_TimerMotor.Q;
Confusion sur la persistance des variables TEMP :
VAR_TEMP (ex. : #temp_State) à la fin d'un cycle et s'attendre à la retrouver au cycle suivant.VAR (statiques) pour stocker les informations persistantes entre deux cycles de tâche automate.Outil d'indexation hors limites (Array Out of Bounds) :
LOWER_BOUND et UPPER_BOUND pour sécuriser les boucles dynamiques.Utilisation intensive de boucles WHILE non sécurisées :
WHILE ou REPEAT dont la condition de sortie peut ne pas être atteinte. Cela augmente le temps de cycle de l'automate et déclenche le chien de garde (Watchdog) de la CPU (passage en STOP).FOR ou ajouter un compteur de sécurité pour forcer la sortie de la boucle WHILE.i_, les sorties q_, et les statiques stat_.INT_TO_REAL, REAL_TO_INT si nécessaire).Array) sont sécurisés pour éviter un dépassement de limites en run-time.TON_TIME ou IEC_TIMER) et non comme des DB globaux séparés.VAR CONSTANT à la place).