소스 정보
- 저장소
- 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 isa88-batch-control명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | isa88-batch-control |
| description | Structurer le code PLC selon le standard ISA-88. |
| version | 1.3.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"tags":["isa-88","batch","phase","state-model","process-automation","standard"],"related_skills":["siemens-scl-generation","beckhoff-ads-integration"]} |
Cette compétence régit l'organisation du code d'automatisation des procédés de type "Batch" (discontinus) selon les standards internationaux ANSI/ISA-88 (IEC 61512). Elle détaille la modélisation complète des 17 états logiques d'une phase de procédé et l'interaction sécurisée avec les modules de commande (Control Modules).
Chaque Phase d'Équipement doit implémenter un automate fini gérant 17 états. Le tableau ci-dessous explicite le rôle et la nature de chaque état :
| État | Nature | Rôle fonctionnel |
|---|---|---|
| IDLE | Stable | Attente d'un ordre de démarrage (START). Équipement à l'arrêt sécurisé. |
| STARTING | Transitoire | Initialisation de la phase, vérification des permissives et démarrage. |
| RUNNING | Stable | Exécution de la logique principale de production (ex: chauffe, dosage). |
| COMPLETING | Transitoire | Fin de cycle (ex: vidange, refroidissement de ligne). |
| COMPLETED | Stable | Tâche terminée avec succès. Attente de l'ordre de réinitialisation (RESET). |
| PAUSING | Transitoire | Décélération ou mise en attente temporaire de l'équipement. |
| PAUSED | Stable | Arrêt temporaire. Permet de reprendre immédiatement l'état RUNNING. |
| HOLDING | Transitoire | Transition d'arrêt sécurisé suite à un défaut process ou une commande HOLD. |
| HELD | Stable | Phase suspendue et figée dans un état sûr. Attente de RESTART ou ABORT. |
| RESTARTING | Transitoire | Vérification des permissives avant reprise de la production. |
| STOPPING | Transitoire | Transition d'arrêt ordonné du procédé. |
| STOPPED | Stable | Procédé arrêté proprement. Attente d'un ordre pour nettoyage. |
Dans une architecture ISA-88, une Phase ne pilote jamais directement les I/O physiques de l'automate. Elle envoie des requêtes à un Control Module (CM) (ex: une vanne motorisée ou un variateur) et surveille ses états de retour.
Si le CM n'atteint pas l'état requis dans un délai imparti (Timeout), la phase doit lever un défaut et passer de manière autonome en mode de repli (Holding).
TYPE UDT_Phase_Control :
STRUCT
bStart : BOOL; // Lancement de la phase
bHold : BOOL; // Demande de mise en pause
bRestart : BOOL; // Demande de reprise
bAbort : BOOL; // Demande d'arrêt d'urgence
bReset : BOOL; // Réinitialisation après fin ou défaut
rTargetQty : REAL; // Consigne quantité à transférer (Litres)
END_STRUCT
END_TYPE
TYPE UDT_Phase_Status :
STRUCT
iState : INT; // État S88 courant
bActive : BOOL; // Phase en cours
bFault : BOOL; // Défaut actif de la phase
rTransferredQty : REAL; // Quantité déjà transférée (Litres)
END_STRUCT
END_TYPE
PROGRAM PRG_Phase_Transfert
VAR_INPUT
Ctrl : UDT_Phase_Control;
rFlowRate : REAL; // Mesure de débit courant (L/s)
(* Interfaces vers les Control Modules (CM) *)
bStsValveOpened : BOOL; // Retour d'état ouverte de la vanne de transfert
bStsValveFault : BOOL; // Défaut matériel de la vanne
END_VAR
VAR_OUTPUT
Status : UDT_Phase_Status;
bCmdValveOpen : BOOL; // Commande logique vers le Control Module Vanne
END_VAR
VAR
tmrValveTimeout : TON; // Surveillance du temps d'ouverture vanne
rQtyAccumulated : REAL; // Volume accumulé (Litres)
iCurrentState : INT := 0; // S88 State interne
END_VAR
VAR_TEMP
dT : REAL; // Pas de temps de la tâche (s)
END_VAR
BEGIN
dT := 0.1; // Supposons un cycle fixe de 100ms
// 1. GESTION DES TRANSITIONS DE SÉCURITÉ PRIORITAIRES (ABORT / STOP)
IF Ctrl.bAbort THEN
iCurrentState := 60; // ABORTING
END_IF;
// 2. MACHINE D'ÉTAT S88
CASE iCurrentState OF
0: // IDLE
bCmdValveOpen := FALSE;
Status.bActive := FALSE;
Status.bFault := FALSE;
rQtyAccumulated := 0.0;
IF Ctrl.bStart THEN
iCurrentState := 10; // RUNNING
END_IF;
10: // RUNNING
Status.bActive := TRUE;
bCmdValveOpen := TRUE; // Demande d'ouverture au CM
// Intégration du volume transféré (bilan)
rQtyAccumulated := rQtyAccumulated + (rFlowRate * dT);
// Sécurité : Surveillance du temps de réponse du CM vanne (Timeout 5.0 secondes)
tmrValveTimeout(IN := NOT bStsValveOpened, PT := T#5s);
IF bStsValveFault OR tmrValveTimeout.Q THEN
tmrValveTimeout(IN := FALSE);
Status.bFault := TRUE;
iCurrentState := 20; // HOLDING (Défaut)
ELIF Ctrl.bHold THEN
iCurrentState := 20; // HOLDING (Volontaire)
ELIF rQtyAccumulated >= Ctrl.rTargetQty THEN
iCurrentState := 30; // COMPLETING (Objectif atteint)
END_IF;
20: // HOLDING (Mise en sécurité)
bCmdValveOpen := FALSE; // Demande de fermeture de sécurité de la vanne
// Attente de l'arrêt effectif ou de l'acquittement
IF NOT bStsValveOpened THEN
iCurrentState := 21; // HELD
END_IF;
21: // HELD (Sécurité acquise / En attente)
bCmdValveOpen := FALSE;
IF Ctrl.bRestart AND NOT bStsValveFault THEN
iCurrentState := 22; // RESTARTING
END_IF;
22: // RESTARTING
// Réinitialisation des diagnostics avant retour en RUNNING
tmrValveTimeout(IN := FALSE);
iCurrentState := 10; // Retour en RUNNING
30: // COMPLETING
bCmdValveOpen := FALSE;
iCurrentState := 31; // COMPLETED
31: // COMPLETED
bCmdValveOpen := FALSE;
Status.bActive := FALSE;
IF Ctrl.bReset THEN
iCurrentState := 70; // RESETTING
END_IF;
60: // ABORTING (Urgence)
bCmdValveOpen := FALSE; // Coupure physique immédiate
iCurrentState := 61; // ABORTED
61: // ABORTED
bCmdValveOpen := FALSE;
Status.bActive := FALSE;
IF Ctrl.bReset THEN
iCurrentState := 70; // RESETTING
END_IF;
70: // RESETTING
rQtyAccumulated := 0.0;
Status.bFault := FALSE;
tmrValveTimeout(IN := FALSE);
iCurrentState := 0; // Retour à IDLE
END_CASE;
// Copie vers la structure externe de statut
Status.iState := iCurrentState;
Status.rTransferredQty := rQtyAccumulated;
END_PROGRAM
RESET| ABORTING | Transitoire | Transition d'arrêt d'urgence instantané de tous les actionneurs. |
| ABORTED | Stable | Sécurité maximale. Attente d'un ordre RESET manuel après réarmement. |
| RESETTING | Transitoire | Initialisation des variables, compteurs et nettoyage physique. |