Aller au contenu

Le moteur générique

Principe

Un seul processus, ALL - Prochaine étape, fait avancer n'importe quel équipement dans n'importe quelle séquence. Il ne connaît pas les séquences « en dur » : il lit de la configuration.

Deux tables, portées par des variables globales, décrivent chaque séquence :

  • SEQUENCE_ORDER[type] : la liste ordonnée des numéros d'étape. Ex. CC = [10, 20, 30, 40, 51, …].
  • SEQUENCE_ACTIONS[type][étape] : le BPM à lancer pour chaque étape.

L'avancement se fait par index + 1 : le moteur trouve l'étape courante dans SEQUENCE_ORDER, prend la suivante, et lance le BPM correspondant.

Déroulé d'un passage

flowchart TD
    A[Constantes<br/><br/>Charge les globaux] --> B[Séquence - ordre et actions<br/><br/>Construit SEQUENCE_ORDER / ACTIONS]
    B --> C[Infos production<br/><br/>Lit OF, cycle, étape sur l'équipement]
    C --> D[Récupérer le type de séquence<br/><br/>Lit CYCLE_TYPE_SEQUENCE]
    D --> E[Calcul du code de séquence<br/><br/>Libellé → code via SEQUENCE_CODES]
    E --> F[Nouvelle étape<br/><br/>Index+1 → étape suivante + BPM]
    F --> G{Étape connue ?}
    G -- non --> H[Alerte séquence]
    G -- oui --> I{BPM connu ?}
    I -- non --> J[Alerte BPM]
    I -- oui --> K[Mise à jour étape] --> L[Lancer le processus technique]

D'où vient le type de séquence ?

Le moteur tourne sur l'équipement, mais lit le type de séquence sur le cycle courant (EP_WIW_CYCLECYCLE_TYPE_SEQUENCE). Ce champ contient un libellé technique (extraction, concentration___chaud). Il est converti en code court (EX, CC) via le global SEQUENCE_CODES. C'est ce code court qui indexe toutes les tables.

Source unique

Le type descend de l'OF vers le cycle à la planification (OF_TYPE_SEQUENCE → CYCLE_TYPE_SEQUENCE), puis du cycle vers le moteur. Une seule source qui descend, donc pas de table refId → type à maintenir.

Le modèle « un événement = une avance »

Le moteur lance les BPM d'étape sans les attendre : il ne bloque pas sur leur exécution. C'est un événement de complétion (fin d'un automate, validation d'un opérateur) qui relance Prochaine étape : un événement, une avance.

En conséquence, une étape qui n'émet pas d'événement propre (étape sautée, mode dégradé) doit s'auto-avancer, en relançant Prochaine étape avec les paramètres entityId = ep_id et nouvelle_etape_forcee = 999 (999 = « avance normalement d'un cran »).

Forçage d'étape

Le paramètre nouvelle_etape_forcee permet de sauter vers une étape précise (au lieu de index + 1). Il est utilisé essentiellement pour les embranchements conditionnels (ex. « caisse déjà présente → sauter directement à l'étape 100 »). La valeur 999 permet d'avancer normalement d'un cran.

Le forçage sert aussi à reboucler : une fin de passe qui décide de refaire un tour force le retour à l'étape du début de passe (ex. CC : retour à l'étape 30, concentration) au lieu d'avancer. Voir le choix de fin de passe CC.

Clôture de cycle vs fin de passe

Deux étapes terminales à ne pas confondre (voir le vocabulaire) :

  • Fin de passe (ex. CC étape 45) : décision métier de refaire un tour d'équipement ou de continuer la séquence. Ne ferme rien.
  • Clôture de cycle (ALL - Clôture de cycle, étapes 100/170) : ferme l'entité cycle en fin de séquence (poids produit, passage en activité CLOTURE), puis laisse la place à ALL - Déclaration de fin d'ordre de fabrication qui décide si l'OF est terminé.