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).