Ecriture de règles de séquence personnalisées
Pour classer les files d'attente, la logique de chaque règle de séquencement est écrite dans une fonction de classement des charges. Vous pouvez écrire et installer des fonctions de classement adaptées pour ordonnancer les files grâce aux règles spécifiques à votre opération de fabrication.
Logique de la règle de séquence
Avant de créer vos propores fonctions de classement, vous devez comprendre comment les demandes sont traitées par la règle de séquence. Lorsqu'une charge place une demande, la fonction de classement attribue une valeur à la demande. La valeur de classement ne change jamais.
Par exemple, supposons qu'une règle de séquence classe les demandes en fonction du temps restant avant la date d'échéance. A 13h00 aujourd'hui, une charge avec une date d'échéance fixée à 16h00. aujourd'hui place une demande et se voit attribuer une valeur de classement de 3. A 15h00 aujourd'hui, une charge avec une date d'échéance fixée à 17h00. aujourd'hui place une demande et se voit attribuer une valeur de classement de 2. Supposons que ce soit les deux seules demandes dans la file d'attente. Supposons que l'une de ces demandes soit satisfaite à 15h30. La demande satisfaite est celle possédant la valeur 2, même s'il reste 1,5 heure avant l'heure d'échéance pour la demande de valeur 2 et 0,5 heure pour la demande de valeur 3.
Les demandes sont classées dans la liste interne représentant la file d'attente du bas vers le haut, en fonction de la valeur de classement. Vous pouvez inverser cet ordre dans votre logique personnalisée en multipliant les valeurs de classement par -1. Par exemple, pour classer les charges en fonction d'un temps de traitement plus long pour une opération actuelle, une fonction de classement retourne le nombre négatif du temps de traitement pour la charge à son opération actuelle.
Nom de la fonction
Votre fonction de classement personnalisée peut porter n'importe quel nom qui n'est pas un nom de fonction standard exécutable par l'utilisateur.
Arguments
#include "factor.h"
double myrule(ldp, atrib)
LOAD *ldp; /* pointer to the load. */
ATTRIBUTE *atr; /* pointer to attribute, if any, to base ranking on. */
La fonction doit accepter deux arguments dans l'ordre suivant :
- Une charge (type : LOAD*).
- Un attribut (type : ATTRIBUTE).
Valeur de retour
La fonction doit retourner une valeur (type : double) qui est la valeur de classement de la demande de la charge.
Voici un exemple d'une fonction de classement pour trier les charges en fonction de la plus petite charge dynamique (c'est-à-dire, le plus petit délai restant avant la date d'échéance moins le délai de traitement restant) :
double sqrl (LOAD *ldp, ATTRIBUTE *atr)
/*-----------------------------------------------------------------
Ranking function to cause loads to be ranked on a least dynamic
slack basis.
ARGS:
ldp - pointer to load for which to evaluate the ranking code
RETURNS: load ranking value
-----------------------------------------------------------------*/
{
double rt, lt;
int rn;
rt = sermot(ldp, &rn, <);
return(ldp->loordp->ordudt - DATENOW - rt);
}
Installation de la fonction personnalisée
Pour rendre votre fonction personnalisée disponible pour l'ordonnancement, vous devez l'"installer" à partir de la fonction d'initilisation ucini1 en appelant la fonction sedfrk. Sedfrk a deux arguments dans l'ordre suivant :
- Le numéro de la règle de séquence pour laquelle votre fonction de classement contient une logique personnalisée.
- L'adresse de votre fonction de classement de charge.
Par exemple, pour installer la règle exemple "sqrl" ci-dessus dans la position de règle 39 :
sedfrk (39, sqrl);