Ecriture de règles de séquence personnalisées

Remarque:  Pour consulter un récapitulatif de la procédure de création des règles personnalisées, reportez-vous à la rubrique Ecriture de règles d'ordonnancement personnalisées. Pour plus de détails sur les fonctions décrites dans cette rubrique, reportez-vous au manuel Scheduling Customization Guide qui peut être téléchargé sur notre site Web de support .

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);
Rubriques liées