Traitement OPTLIB : Ordonnancement et optimisation
SBBWST : Distinction des exemplaires de poste de charge
Ce point d'entrée sert à mettre en œuvre une distinction des exemplaires de poste de charge principal dans l’ordonnancement (notion de sous-postes).
Pour ce faire, on intervient :
- à l’extraction des données poste (Eclatement des postes concernés en autant d’exemplaires que nécessaire)
- à l’extraction des opérations (Affectation de l’opération au bon exemplaire de poste suivant un critère paramétrable)
- à la mise à jour en sortie d'ordonnancement (mise à jour du critère) - voir traitement OPTLIBA.
Exemple :
Pour une distinction basée sur l’outillage, le poste P1 serait décomposé comme suit :
P1 - 00
P1 - 01 Outil1
P1 - 02 Outil2
On dispose toujours d’un exemplaire 00 pour les opérations non affectée suivant le critère.
Contexte et mode de fonctionnement
Transaction
Il n’y a pas de transaction en cours.
Fichier trace
Il peut y avoir un fichier trace ouvert (suivant paramètre de lancement de l’ordonnancement).
Différents cas d’appel
Le point d’entrée est appelé deux fois, chaque appel est identifiable par la variable globale GSBBWST :
GSBBWST = « LOADWST »
Extraction des postes de charge, le point d’entrée doit renseigner la liste des critères de rupture du poste.
Pour ce faire, le tableau XSBBT(15)(100) doit être alimenté en prenant soin de laisser le premier indice (0) à blanc. La variable NBSBB doit contenir le nombre de lignes renseignées. La variable globale GPE doit être positionnée à 1 pour signifier que le poste est sujet à distinction.
Exemple :
XSBBT(0) = ""
XSBBT(1) = "OUTIL1"
XSBBT(2) = "OUTIL2"
NBSBB = 3
GPE = 1
GSBBWST = « LOADOPE »
Extraction des opérations, le point d’entrée doit fournir le critère de distinction sous la forme d’un champ de la table MFGOPE, pour cela il faut renseigner la variable alphanumérique XSCHSBB (longueur 15).
Le tableau XSBBT doit être chargé à nouveau si nécessaire.
Exemple :
XSCHSBB = "EQUNUM" # Champ standard outillage
If [F:MWS]WST <> XWST
XSBBT(0) = ""
XSBBT(1) = "OUTIL1"
XSBBT(2) = "OUTIL2"
NBSBB = 3
Endif
GPE = 1
Important :
Comme il peut être nécessaire de parcourir la table MFGOPE pour retrouver les critères utilisés, une classe [F :MFO2] a été spécialement ouverte à cet usage (la classe [F :MFO] est en ligne et ne doit pas être modifiée
Variables et masques disponibles
Lors du premier appel (GSBBWST = « LOADWST »), la classe [F :MWS] est en ligne.
Lors du second appel (GSBBWST = « LOADOPE »), les classes [F :MWS] et [F :MFO] sont en ligne.
Tables ouvertes
Dans le tableau ci-dessous, le flag contenu significatif signifie que le contenu est en phase avec le contexte.
Table |
Contenu significatif |
Intitulé Table |
MFGHEAD |
Non |
Entête OF |
MFGITM |
Non |
Articles lancés |
MFGMAT |
Non |
Matières |
MFGOPE |
Non |
Opérations (MFO + MFO2) |
SCHEDULING |
Non |
Données de jalonnement |
WORKSTATIO |
Non |
Postes de charge |
TABWEEDIA |
Non |
Schémas hebdomadaires |
ITMMASTER |
Non |
Article |
ITMFACILIT |
Non |
Article/Site |
OPE_FOCUS : Mise en évidence d’opérations au lancement de l’ordonnancement
Ce point d'entrée permet de mettre en œuvre la définition d’une liste d’opérations devant être mises en évidences à l’afichage initial du gantt. Il permet également de remplacer le contenu de l’infobulle liée à l’opération.
Contexte et mode de fonctionnement
Transaction
Il n’y a pas de transaction en cours.
Fichier trace
Il peut y avoir un fichier trace ouvert (suivant paramètre de lancement de l’ordonnancement).
Différents cas d’appel
Le point d’entrée est appelé à l’extraction de chaque opération.
Le masque [M :OPTK] est en ligne au moment de l’appel.
Les classes [F :MFG], [F :MFO] et [F :SCH] sont en ligne avec un contenu significatif.
La mise en évidence d’une opération est formulée par un appel au sous-programme WRITE_FOCUS du traitement OPTLIBB.
Subprog WRITE_FOCUS(LFCY, LCOD, LOK, LMESS)
Avec:
Char LFCY : site de production
Char LCOD : code réponse
"000" = action de type focus (valeur constante)
Integer LOK : Indicateur focus
0 = pas de focus (seulement substitution texte infobulle)
1 = focus actif
Char LMESS : Message à afficher dans l'infobulle
L’identification de l’opération doit être renseignée dans le masque [M :OPW1] (MFGNUM, OPENUM, OPESPLNUM).
Exemple d’implémentation
###########################################################################
$ACTION
Case ACTION
When "OPE_FOCUS" : Gosub OPE_FOCUS
Endcase
Return
$OPE_FOCUS
Local Integer IOK : IOK = 0
Local Char XMESS(250)
Local Char WCHAIN, WSPECHAR
# pour test, on marque les opérations comportant un outil comme étant à mettre én évidence
If [F:MFO]EQUNUM = "" : Return : Endif
# quand on écrit une chaine, toujours s'assurer qu'elle ne contient pas de virgule, point-virgule ...
WCHAIN = [M:OPTK]ITMREF
WSPECHAR = ","
Gosub REMOVE_CHAR From OPTLIB
[M:OPTK]ITMREF = WCHAIN
WCHAIN = [M:OPTK]ITMREF
WSPECHAR = ";"
Gosub REMOVE_CHAR From OPTLIB
[M:OPTK]ITMREF = WCHAIN
# quand on écrit une chaine, toujours s'assurer qu'elle ne contient pas de virgule, point-virgule ...
WCHAIN = [M:OPTK]ITMDES1
WSPECHAR = ","
Gosub REMOVE_CHAR From OPTLIB
[M:OPTK]ITMDES1 = WCHAIN
# quand on écrit une chaine, toujours s'assurer qu'elle ne contient pas de virgule, point-virgule ...
WCHAIN = [M:OPTK]ITMDES1
WSPECHAR = ";"
Gosub REMOVE_CHAR From OPTLIB
[M:OPTK]ITMDES1 = WCHAIN
XMESS = [F:MFO]MFGNUM+"/"+num$([F:MFO]OPENUM)-[M:OPTK]ITMREF-[M:OPTK]ITMDES1-"____(Focus positionné sur cette sur cette opération ...) "
[M:OPW1]MFGNUM = [F:MFO]MFGNUM
[M:OPW1]OPENUM = [F:MFO]OPENUM
[M:OPW1]OPESPLNUM = [F:MFO]OPESPLNUM
Call WRITE_FOCUS([F:MFO]MFGFCY, "000", IOK, XMESS) From OPTLIBB
Return
Tables ouvertes
Dans le tableau ci-dessous, le flag contenu significatif signifie que le contenu est en phase avec le contexte.
Table | Contenu significatif | Intitulé Table |
MFGHEAD | Oui | Entête OF |
MFGOPE | Oui | Opérations |
SCHEDULING | Oui | Données de jalonnement |
INIT_JAL : Initialisation de l'ordonnancement
Ce point d’entrée permet d’intervenir sur l'ensemble des opérations chargées en mémoire avant l'extraction des opérations vers l'ordonnancement afin d'intervenir sur certaines valeurs.
Contexte et mode de fonctionnement
il s'agit ici d'intervenir sur la liste des opérations chargées en mémoire.
Les variables disponibles pour chaque opération sont:
Local Shortint WOPENUM (NBOPMX) : # numéro oper
Local Shortint WOPESPLNUM (NBOPMX) : # fract. oper
Local Char WWST (GLONWST) (NBOPMX) : # poste
Local Char WLAB (GLONWST) (NBOPMX) : # main d'oeuvre
Local Decimal WSETLABC(NBOPMX) : # coeff réglage MO
Local Decimal WOPELABC(NBOPMX) : # coeff oper MO
Local Integer WOPESTA (NBOPMX) : # état opération
Local Date WOPESTR (NBOPMX) : # date début
Local Date WOPEEND (NBOPMX) : # date fin
Local Integer WWSTN (NBOPMX) : # nb de postes
Local Integer WLABN (NBOPMX) : # nb de personnes
Local Integer WPRPTIM (NBOPMX) : # temps préparation
Local Decimal WSETTIM (NBOPMX) : # temps réglage pour 1 ex
Local Decimal WOPETIM (NBOPMX) : # temps opératoire pour 1 ex
Local Decimal WWAITIM (NBOPMX) : # temps attente
Local Decimal WPSPTIM (NBOPMX) : # temps post oper
Local Decimal WQTY (NBOPMX) : # quantité restante
Local Date WFRCSTRD (NBOPMX) : # date début forcé
Local Decimal WFRCSTRH (NBOPMX) : # Heure début forcé
Local Char WFRCHOU(5)(NBOPMX) # Heure forcée au format hh:mm
Local Decimal WFRCSTRF(NBOPMX) : # Fraction de jour début forcé
Local Integer WFRCFLG (NBOPMX) : # Flag oper début forcé
Local Integer WWSTTYP (NBOPMX) : # code sous-traitance
Local Decimal WSCOLTI (NBOPMX) : # délai sous-traitance
Local Char WWIPNUM (GLONVCR)(NBOPMX) : # n° encours sous-traitance
Local Char WSCOITMREF(GLONITM)(NBOPMX) : # article sous-traitance
Local Integer WSCDCOD (NBOPMX) : # code jalonnement
Local Integer WNEXOPEN (NBOPMX) : # no op suivante
Local Integer WNEXSPLN (NBOPMX) : # fract. op suivante (créé dans PG)
Local Integer WOPERG (NBOPMX) : # rang op
Local Integer WOPETRT (NBOPMX) : # ope traitée en classement
Local Decimal WSCDPCT (NBOPMX) : # % chev
Utilisation
Exemple de code pour remplacer le délai d'achat articl d'un service de sous-traitance par le délai article/site:
$ACTION
Case ACTION
When "INIT_JAL" : Gosub INIT_JAL
Endcase
Return
$INIT_JAL
For I = 0 To NBOP-1
If WWSTTYP(I) = 3
Read [ITF]ITF0=WSCOITMREF(I);WMFGFCY
If !fstat : WSCOLTI(I)= [F:ITF]OFS : Endif
Endif
Next I
Return