La planification¶
Avant d'être exécuté, un OF est découpé en cycles. C'est le rôle de la chaîne de planification, symétrique du moteur d'exécution : un tronc générique (ALL - …), encadré par une entrée et un callback spécifiques à chaque séquence.
La chaîne¶
flowchart TD
A[Entrée séquence<br/><br/>CC / EX - Planification des cycles] --> B[ALL - Vérification de planification<br/><br/>Contrôles OF, quantité, équipement]
B --> C[ALL - Création d'un cycle<br/><br/>Crée l'entité CYCLE, met à jour le poids planifié]
C --> D[Callback séquence<br/><br/>CC / EX - Planification - callback]
D -->|is_last_cycle = faux| B
D -->|is_last_cycle = vrai| E[Fin : OF entièrement planifié]
L'entrée (spécifique séquence)¶
CC - Planification des cycles / EX - Planification des cycles collectent les paramètres du premier cycle (voir Dérouler une production), résolvent ep_id depuis l'équipement choisi, posent sequence_type, empaquettent les champs spécifiques (provenances) dans le payload, puis lancent ALL - Vérification de planification.
ALL - Vérification de planification¶
Start-form : of_id, cycle_weight_base, ep_id, recette_id, planified_date, sequence_type, payload.
Contrôles successifs, chacun avec sa branche d'erreur :
- OF disponible (activité et statut) : sinon OF non disponible.
- Quantité à produire valable : sinon Pas de quantité.
- Poids du cycle non vide : sinon Poids du cycle non vide.
- Équipement concerné valide : sinon Pas un équipement concerné.
Cas particulier de la replanification : si l'OF est déjà planifié (already_planned), une confirmation est demandée, puis le statut Planifié est retiré avant de recalculer. La tâche calcule ensuite les quantités et l'index de cycle, et lance ALL - Création d'un cycle.
ALL - Création d'un cycle¶
Start-form identique (avec recette_id obligatoire). Le BPM :
- crée l'entité
CYCLE(BPMTaskCreateEntity) et la rattache à l'OF, - renseigne ses propriétés (poids, recette, index, date),
- positionne son statut / activité initiale,
- met à jour le poids planifié et l'index de cycle sur l'OF,
- lance le callback de la séquence.
Callback dynamique
Le nom du callback n'est pas figé : Création d'un cycle lance le BPM dont le nom lui est passé dans la variable bpmName, fournie par l'entrée. Le tronc générique reste ainsi ignorant des séquences.
Le callback (spécifique séquence)¶
CC - Planification des cycles - callback / EX - Planification des cycles - callback reçoivent le cycle_id créé et désempaquettent le payload pour écrire les champs spécifiques sur le cycle :
- CC :
CYCLE_PROVENANCE_CYCLEouCYCLE_PROVENANCE_CUVON(selonhave_cycle/have_cuvon). - EX :
CYCLE_PROVENANCE_CONTENEUR_R1/R2(selonhave_r1/have_r2).
Puis la boucle : tant que is_last_cycle est faux, le callback relance ALL - Création d'un cycle avec le poids restant (weight_to_planified) pour le cycle suivant. Quand is_last_cycle est vrai, la planification s'arrête.
is_last_cycle est un champ confirmation
Il renvoie la chaîne "boolean_true" / "boolean_false", d'où le double test is_last_cycle == TRUE || is_last_cycle == true dans les conditions (voir conventions).
Lancer un cycle planifié¶
Une fois la planification faite, ALL - Démarrage d'une séquence (start-form : cycle_id) démarre un cycle :
- contrôle que le cycle est dans un état valide et que l'équipement est disponible (sinon statut incorrect / EP indisponible),
- recopie les paramètres du cycle sur l'équipement,
- passe le cycle en cours,
- lance
ALL - Prochaine étape, qui prend le relais pour toute l'exécution.