Écriture 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.
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 obtenir plus de détails sur les fonctions décrites dans cette rubrique, reportez-vous au Guide de personnalisation de l'ordonnancement (Scheduling Customization Guide) qui peut être téléchargé sur notre site Web d'assistance technique.

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. À 13 h aujourd'hui une charge avec une échéance à 16 h aujourd'hui place une demande et reçoit une valeur de classement de 3. À 15 h aujourd'hui, une charge avec une échéance à 17 h aujourd'hui place une demande et reçoit une valeur de classement de 2. Supposons que ces demandes sont les seules dans la file d'attente. Supposons qu'une de ces demandes est remplie à 15 h 30. 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);