Verfassen von anwenderdefinierten Batch-Trennregeln

In der Reihenfolgeplanung werden Trennregeln verwendet, um zu definieren, wie die eingehenden Fertigungsaufträge auf die Batches aufgeteilt werden sollen.
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 Batch-Trennregeln

Bevor Sie anwenderdefinierte Batch-Trennregeln erstellen und die entsprechenden Batch-Trennfunktionen verfassen können, müssen Sie die von der Batch-Trennfunktion verwendete Logik verstanden haben. Wenn ein Fertigungsauftrag bei einem Arbeitsgang mit spezifizierter Batch-Definition eingeht, wird die Batch-Trennfunktion aufgerufen.

Die aufgerufene Batch-Trennfunktion bestimmt anhand bestimmter Merkmale wie zum Beispiel Teilenummer und Farbe, in welchem zu bildenden Batch der eingehende Fertigungsauftrag platziert wird. Wenn noch weitere Fertigungsaufträge auf ihre Verarbeitung im Batch warten, kann der eingehende Fertigungsauftrag mit ihnen kombiniert werden; andernfalls wird ein neuer zu bildender Batch erstellt.

Benennen der Funktion

Sie können einen beliebigen Namen für die Batch-Trennfunktion wählen, solange es sich nicht um den Namen einer von Anwendern aufrufbaren Standardfunktion handelt.

Argumente


#include "factor.h"
FORMBAT *bsrl(ldp, batch)
LOAD *ldp;        /* pointer to the load */
BATCHDEF *batch;  /* pointer to the batch definition */

Die Funktion verwendet zwei Argumente: einen Zeiger auf die Ladung (Typ: LOAD *) und einen Zeiger auf den Batch (Typ: BATCHDEF *).

Rückgabewert

Die Funktion gibt einen Zeiger zurück, der auf den zu bildenden Batch zeigt, in den dieser Fertigungsauftrag eingefügt werden soll, oder der den Wert NULL besitzt, wenn ein neuer zu bildender Batch erstellt werden muss (Typ: FORMBAT *).

Im folgenden Beispiel für eine Batch-Trennfunktion wird als Basis das Teil verwendet:


FORMBAT *bsrl (LOAD *ldp, BATCHDEF *batch)
/*-----------------------------------------------------------------
     Batch separation rule which separates arriving jobs into
     different batches based on the item number.
     ARGS:
       ldp - pointer to the arriving load (job)
       batch - pointer to the batch that this load will follow
     RETURNS: pointer to the forming batch
-----------------------------------------------------------------*/
{
     FORMBAT *fb;
     for ( fb = (FORMBAT *) csfsls(batch->btfmls);
           fb != NULL;
           fb = (FORMBAT *) csnxls((CSENTITY *) fb) )
     {
         /* Return this forming batch if its children have the same
            part as the load passed in, and the new quantity will be
            less than or equal to the maximum.  */
         if ((strcmp(fb->fbldp->loordp->orptpt->panum,
                     ldp->loordp->orptpt->panum) == 0) &&
             (fb->fbquant + sequfb(ldp, batch, batch->btqurl)
              <_ batch-="batch-">btmax))
         {
              Return(fb);
         }
     }
     /* return NULL if we couldn't find one */
     Return(NULL);
{
</_>

Installieren der anwenderdefinierten Funktion

Um Ihre anwenderdefinierte Trennfunktion für die Reihenfolgeplanung verfügbar zu machen, müssen Sie sie mit der Funktion ucini1 installieren, indem Sie die Funktion sedfsb aufrufen. Diese Funktion hat zwei Argumente in der folgenden Reihenfolge:

  • Die Nummer der Batch-Trennregel, für die Sie das anwenderdefinierte Programm geschrieben haben.
  • Die Adresse Ihrer Batch-Trennfunktion.

So installieren Sie die obige Beispielregel "bsrl" an Regelposition 39:


sedfsb (39, bsrl);