Verfassen von anwenderdefinierten Batch-Trennregeln
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);