用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/JohnNuwan/EVA_CORE --skill batch-process-isa88命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | batch-process-isa88 |
| description | Modéliser des recettes et des phases batch ISA-88. |
| version | 1.0.0 |
| author | EVA |
| license | Privée EVA St-Étienne |
| platforms | ["linux","macos","windows"] |
| metadata | {"EVA":{"tags":["isa-88","batch","s88","recipe","phase-manager","plc","scl","structured-text","industrial-automation"],"related_skills":["siemens-scl","mes-integration","packml-isa-tr88","isa95-modelling","process-pharma","process-agrifood"]}} |
La norme ISA-88 (ANSI/ISA-88.01 / IEC 61512) est le standard mondial pour le contrôle des procédés de fabrication par lots (batch). Elle est omniprésente dans les industries agroalimentaire, pharmaceutique, chimique et cosmétique — cœur de métier d'EVA.
ISA-88 sépare strictement :
Cette compétence guide l'agent EVA pour modéliser des procédures batch, concevoir des machines d'état de phases, et structurer des recettes conformes à ISA-88.
À utiliser lorsque l'utilisateur demande :
Ne pas utiliser pour :
siemens-scl ou pid-tuning-control).mes-integration).Chaque phase d'un procédé batch suit une machine d'état standardisée avec des transitions strictes :
┌──────────┐
┌─────────│ IDLE │◄────────────────────┐
│ └────┬─────┘ │
│ │ Start │ Reset
│ ▼ │
│ ┌──────────┐ Hold ┌────┴─────┐
│ │ RUNNING │───────────────▶│ HELD │
│ └────┬─────┘ └────┬─────┘
│ │ │ Restart
│ │ Complete │
│ ▼ ─────┘
│ ┌──────────┐
│ │COMPLETING│
│ └────┬─────┘
│ │
│ ▼
│ ┌──────────┐
└─────────│ COMPLETE │
└──────────┘
(Depuis tout état sauf IDLE)
│ Abort
▼
┌──────────┐ Reset ┌──────────┐
│ ABORTING │───────────────▶│ ABORTED │──────▶ IDLE
└──────────┘ └──────────┘
(Depuis tout état sauf IDLE)
│ Stop
▼
┌──────────┐ Reset ┌──────────┐
│ STOPPING │───────────────▶│ STOPPED │──────▶ IDLE
└──────────┘ └──────────┘
TYPE "E_PhaseState" : INT
// États de la machine d'état ISA-88 d'une phase
IDLE := 0;
RUNNING := 1;
COMPLETING := 2;
COMPLETE := 3;
HELD := 4;
HOLDING := 5;
RESTARTING := 6;
STOPPING := 7;
STOPPED := 8;
ABORTING := 9;
ABORTED := 10;
END_TYPE
Le Phase Manager est le bloc FB central qui pilote la machine d'état d'une phase :
FUNCTION_BLOCK "FB_PhaseManager"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 1.0
VAR_INPUT
i_CmdStart : Bool; // Commande de démarrage depuis le superviseur batch
i_CmdHold : Bool; // Commande de mise en pause
i_CmdRestart : Bool; // Commande de reprise après pause
i_CmdStop : Bool; // Commande d'arrêt contrôlé
i_CmdAbort : Bool; // Commande d'arrêt d'urgence
i_CmdReset : Bool; // Commande de réinitialisation
i_PhaseReady : Bool; // Retour : la phase a terminé son action
i_PhaseFault : Bool; // Retour : la phase a détecté un défaut
END_VAR
VAR_OUTPUT
q_State : Int; // État courant de la machine d'état (E_PhaseState)
q_IsRunning : Bool; // Indique que la phase est en cours d'exécution
q_IsComplete : Bool; // Indique que la phase a terminé avec succès
q_IsAborted : Bool; // Indique que la phase a été interrompue
q_IsFaulted : Bool; // Indique un défaut de la phase
END_VAR
VAR
stat_State : Int := 0; // État interne persistant
END_VAR
BEGIN
// Gestion des commandes d'arrêt prioritaires (depuis tout état sauf IDLE)
IF #stat_State <> 0 THEN
IF #i_CmdAbort THEN
#stat_State := 9; // ABORTING
ELSIF #i_CmdStop AND #stat_State < 7 THEN
#stat_State := 7; // STOPPING
END_IF;
END_IF;
CASE #stat_State OF
0: // IDLE — En attente de démarrage
#q_IsRunning := FALSE;
#q_IsComplete := FALSE;
#q_IsAborted := FALSE;
#q_IsFaulted := FALSE;
IF #i_CmdStart THEN
#stat_State := 1; // → RUNNING
END_IF;
1: // RUNNING — Phase en cours d'exécution
#q_IsRunning := TRUE;
IF #i_PhaseFault THEN
#q_IsFaulted := TRUE;
#stat_State := 9; // → ABORTING
ELSIF #i_CmdHold THEN
#stat_State := 5; // → HOLDING
ELSIF #i_PhaseReady THEN
#stat_State := 2; // → COMPLETING
END_IF;
2: // COMPLETING — Finalisation en cours
// Logique de nettoyage ou de purge ici
#stat_State := 3; // → COMPLETE
3: // COMPLETE — Phase terminée avec succès
#q_IsRunning := FALSE;
#q_IsComplete := TRUE;
IF #i_CmdReset THEN
#stat_State := 0; // → IDLE
END_IF;
4: // HELD — Phase en pause
#q_IsRunning := FALSE;
IF #i_CmdRestart THEN
#stat_State := 6; // → RESTARTING
END_IF;
5: // HOLDING — Transition vers pause
#q_IsRunning := FALSE;
#stat_State := 4; // → HELD
6: // RESTARTING — Reprise en cours
#stat_State := 1; // → RUNNING
7: // STOPPING — Arrêt contrôlé en cours
#q_IsRunning := FALSE;
#stat_State := 8; // → STOPPED
8: // STOPPED — Machine arrêtée proprement
IF #i_CmdReset THEN
#stat_State := 0; // → IDLE
END_IF;
9: // ABORTING — Arrêt d'urgence en cours
#q_IsRunning := FALSE;
// Couper toutes les sorties de la phase ici
#stat_State := 10; // → ABORTED
10: // ABORTED — Phase interrompue
#q_IsAborted := TRUE;
IF #i_CmdReset THEN
#q_IsAborted := FALSE;
#q_IsFaulted := FALSE;
#stat_State := 0; // → IDLE
END_IF;
END_CASE;
// Publier l'état courant sur la sortie
#q_State := #stat_State;
END_FUNCTION_BLOCK
Une recette batch se décompose en Header, Formula et Procedure :
{
"recipe_id": "REC_YOGURT_NATURE_001",
"header": {
"name": "Yaourt Nature 500g",
"version": "2.1",
"author": "EVA Process",
"product_code": "YN500",
"batch_size": {"value": 5000, "unit": "kg"},
"equipment_class": "Cuve de Maturation"
},
"formula": {
"parameters": [
{"name": "Température de pasteurisation", "value": 85.0, "unit":
Le Projet Automate génère des blocs fonctionnels (FB) par catégorie d'organe via des templates Jinja2. Le pattern de génération peut être étendu pour produire des blocs de phases ISA-88 :
# Extension du générateur Jinja2 pour les phases batch
# Ajouter dans app/templates/plc/siemens/ un template fb_phase.scl.j2
TEMPLATE_PHASE = """
FUNCTION_BLOCK "{{ phase.name }}"
{ S7_Optimized_Access := 'TRUE' }
VERSION : {{ phase.version }}
VAR_INPUT
i_CmdStart : Bool;
i_CmdHold : Bool;
i_CmdAbort : Bool;
i_CmdReset : Bool;
{% for param in phase.params %}
i_{{ param.name }} : {{ param.plc_type }}; // {{ param.description }}
{% endfor %}
END_VAR
VAR_OUTPUT
q_State : Int;
q_IsComplete : Bool;
q_IsAborted : Bool;
END_VAR
VAR
stat_PhaseManager : "FB_PhaseManager";
{% for actuator in phase.actuators %}
stat_{{ actuator.name }} : Bool;
{% endfor %}
END_VAR
BEGIN
// Gestion de la machine d'état ISA-88
#stat_PhaseManager(
i_CmdStart := #i_CmdStart,
i_CmdHold := #i_CmdHold,
i_CmdAbort := #i_CmdAbort,
i_CmdReset := #i_CmdReset,
i_PhaseReady := #q_IsComplete,
i_PhaseFault := FALSE
);
#q_State := #stat_PhaseManager.q_State;
#q_IsAborted := #stat_PhaseManager.q_IsAborted;
// Logique spécifique de la phase
IF #stat_PhaseManager.q_IsRunning THEN
{% for action in phase.actions %}
// {{ action.comment }}
{{ action.code }};
{% endfor %}
END_IF;
END_FUNCTION_BLOCK
"""
Confondre les modèles physique et procédural :
Oublier les transitions HOLDING/HELD :
Paramètres de recette sans bornes de validation :
min et max. Le Phase Manager doit rejeter et alarmer toute valeur hors limites.