Verfassen von anwenderdefinierten Reihenfolgeregeln

Zum Festlegen der Rangfolge für Anforderungswarteschlangen wird die Logik jeder Reihenfolgeregel in eine Funktion zur Bestimmung der Ladungsrangfolge geschrieben. Sie können angepasste Funktionen zur Bestimmung der Ladungsrangfolge schreiben und installieren, um Warteschlangen anhand von Regeln zu ordnen, die an Ihren Fertigungsprozess angepasst sind.
Hinweis:  Eine Zusammenfassung der beim Erstellen anwenderdefinierter Regeln durchzuführenden Schritte finden Sie unter Verfassen von anwenderdefinierten Reihenfolgeplanungs-Regeln. Weitere Informationen zu den in diesem Thema beschriebenen Funktionen finden Sie im Handbuch für die Anpassung der Reihenfolgeplanung, das Sie von unserer Support-Website herunterladen können.

Logik von Reihenfolgeregeln

Bevor Sie eigene Funktionen zur Bestimmung der Ladungsrangfolge erstellen, sollten Sie sich vergegenwärtigen, wie Anforderungen durch die Reihenfolgeregel verarbeitet werden. Wenn eine Ladung eine Anforderung in die Warteschlange stellt, weist die Funktion zur Bestimmung der Ladungsrangfolge dieser Anforderung einen Rangfolgenwert zu. Der Rangfolgenwert ändert sich nie.

Beispiel: Eine Reihenfolgeregel bestimmt die Rangfolge von Anforderungen auf der Basis der bis zum Fälligkeitstermin verbleibenden Zeit. Eine Ladung mit einem Fälligkeitstermin heute 16:00 Uhr erstellt heute um 13:00 Uhr eine Anforderung und erhält den Rangfolgewert 3. Eine Ladung mit einem Fälligkeitstermin heute 17:00 Uhr erstellt heute um 15:00 Uhr eine Anforderung und erhält den Rangfolgewert 2. Nehmen Sie an, dass dies die einzigen Anforderungen in der Warteschlange sind. Eine dieser Anforderungen wird um 15:30 erfüllt. Erfüllt wurde die Anforderung mit dem Rangfolgenwert 2, obwohl sie erst in 1,5 Stunden und die Anforderung mit dem Rangfolgenwert 3 bereits in 0,5 Stunden fällig ist.

Anforderungen werden in der internen Liste geordnet, die die Warteschlange mit nach aufsteigenden Rangfolgenwerten geordneten Anforderungen darstellt. Sie können diese Reihenfolge in der anwenderdefinierten Logik umkehren, indem Sie den Rangfolgenwert mit -1 multiplizieren. Um z. B. Ladungen ausgehend von der längsten Verarbeitungszeit für einen aktuellen Arbeitsgang zu ordnen, würde eine Rangfolgenfunktion den negativen Wert der Verarbeitungszeit für die Ladung im aktuellen Arbeitsgang zurückgeben.

Benennen der Funktion

Sie können einer anwenderdefinierten Funktion zur Bestimmung der Ladungsrangfolge jeden Namen zuweisen, der nicht mit dem Namen einer Standardfunktion, die von Anwendern aufgerufen werden kann, identisch ist.

Argumente


#include "factor.h"
double myrule(ldp, atrib)
LOAD       *ldp;  /* pointer to the load. */
ATTRIBUTE  *atr;  /* pointer to attribute, if any, to base ranking on. */

Die Funktion muss zwei Argumente in der folgenden Reihenfolge akzeptieren:

  • Eine Ladung (Typ: LOAD*).
  • Ein Attribut (Typ: ATTRIBUT).

Rückgabewert

Die Funktion muss einen Wert zurückgeben (Typ: double), bei dem es sich um den Rangfolgewert der Ladungsanforderung handelt.

Das folgende Beispiel stellt eine Funktion zur Bestimmung der Ladungsrangfolge dar, mit der Ladungen auf der Grundlage des kleinsten dynamischen Schlupfes (d. h. der kürzesten verbleibenden Zeit bis zum Fälligkeitstermin abzüglich der verbleibenden Verarbeitungszeit) geordnet werden:


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);
}

Installieren der anwenderdefinierten Funktion

Damit die anwenderdefinierte Funktion von der Reihenfolgeplanung verwendet werden kann, müssen Sie sie von der Initialisierungsfunktion ucini1 aus "installieren", indem Sie die Funktion sedfrk aufrufen. Sedfrk verwendet zwei Argumente in der folgenden Reihenfolge:

  • Die Nummer der Reihenfolgeregel, für die anwenderdefinierte Logik von der Rangfolgenfunktion bereitgestellt wird.
  • Die Adresse der Funktion zur Bestimmung der Ladungsrangfolge.

So geben Sie beispielsweise zum Installieren der o. a. Beispielregel "sqrl" an der Regelposition 39 Folgendes ein:


sedfrk (39, sqrl);