LÖSUNG DER ERWEITERTEN AUFGABENSTELUNG:

Unter GTS wird zunächst die zweite Fertigungslinie erzeugt, alle neuen Bausteine 
materialflusstechnisch verknuepft und die Fahrtrouten erzeugt. 
Für die weiteren Zubehörteile werden die Arbeitsplannummern 30 und 60
mit Artikelnummern 3 und 4 erstellt. init_prog() muss umd die neuen Initialisierungen
und Bestellungen erweitert werden.

Die Klasse "BstBeziehungen" wird um einen "Partner2" erweitert, das bestellzaehler-Array
auf [6]1 vergroessert. Nur der Montageplatz (15) hat einen Partner2, alle anderen bekommen 
hierfuer eine Null.
Programm 200 des Montagplatztes wird um die Bestellung der weiteren Zubehörteile bei
der zweiten Fertigunglinie (ArtikelNr * 3) und die Synchronisation mit dieser erweitert. 
Analog zur ersten Linie wird auch auf der Quelle der zweiten eine 
ereignisgebundene Funktion installiert, um das Hoch- und Runterzaehlen der 
jeweiligen Bestellzaehler zu ermöglichen.


Auftragsdatei monzug20.tas

 ...
  5      30   Arbeitsplan_fuer_Artikel_3;
           0 
           1            1            3            1      1.00000      0.00000
                  1.000    1.000    1.000   1.000      1       5
           8    1   13      0.10000    0  Systemeintritt_ueber_Quelle13
                2   25      0.00000   -1  Einlagern_in_Regaleinheit5
                3   19      1.00000  100  Bearbeiten_auf_Maschine19
                4   26      0.00000   -1  Einlagern_in_Regaleinheit26
                5   21      3.00000  100  Bearbeiten_auf_Maschine21
                6   27      0.00000   -1  Einlagern_in_Regaleinheit27
                7   23     10.00000  100  Bearbeiten_auf_Maschine23
                8   24      1.00000    0  Systemaustritt_ueber_Senke24
   6      60   Arbeitsplan_fuer_Artikel_4;
           0 
           1            1            4            1      1.00000      0.00000
                  1.000    1.000    1.000   1.000      1       6
           8    1   13      0.10000    0  Systemeintritt_ueber_Quelle13
                2   25      0.00000   -1  Einlagern_in_Regaleinheit5
                3   19      1.00000  100  Bearbeiten_auf_Maschine19
                4   26      0.00000   -1  Einlagern_in_Regaleinheit26
                5   21      3.00000  100  Bearbeiten_auf_Maschine21
                6   27      0.00000   -1  Einlagern_in_Regaleinheit27
                7   23     10.00000  100  Bearbeiten_auf_Maschine23
                8   24      1.00000    0  Systemaustritt_ueber_Senke24
...

Programmdatei monzug20.cpp

class BstBeziehungen : public UserData {
public:
   BstBeziehungen() : UserData() {};
   int Puffer;
   int Lieferant;
   int Kunde;   
   int Partner;
   int Partner2;
   int Bestellzaehler[61]; 
};

void initBstBeziehungen(int bstNr, int puf, int lief, int kun, int part, int part2){
  BstBeziehungen *zBez 	= new BstBeziehungen();
  zBez->Puffer         	= puf;  
  zBez->Lieferant      	= lief;
  zBez->Kunde	   	= kun;
  zBez->Partner    	= part;
  zBez->Partner2    	= part2;
  zBez->Bestellzaehler[10] = 1;
  zBez->Bestellzaehler[20] = 1;
  zBez->Bestellzaehler[30] = 1;
  zBez->Bestellzaehler[60] = 1;
  setBstUserData(bstNr, zBez);
}

void _impexp quelleBestellungAusliefern () {
 ((BstBeziehungen *)BstUserData (3))->Bestellzaehler[ArbeitsplanNr (This)]--;
}

void _impexp quelleBestellungAusliefern2 () {
 ((BstBeziehungen *)BstUserData (19))->Bestellzaehler[ArbeitsplanNr (This)]--;
}

void _impexp init_prog () {
  
  initBstBeziehungen (3, 9, 1, 5, 0, 0);
  bestelleArbeitsplan (10, 1);
  bestelleArbeitsplan (20, 1);
  
  initBstBeziehungen (5, 10, 9, 7, 0, 0);
  bestelleArbeitsplan (10, 9);
  bestelleArbeitsplan (20, 9);

  initBstBeziehungen (7, 11, 10, 15, 15, 0);
  bestelleArbeitsplan (10, 10);
  bestelleArbeitsplan (20, 10);

  initBstBeziehungen (19, 25, 13, 21, 0, 0);
  bestelleArbeitsplan (30, 13);
  bestelleArbeitsplan (60, 13);
  
  initBstBeziehungen (21, 26, 25, 23, 0, 0);
  bestelleArbeitsplan (30, 25);
  bestelleArbeitsplan (60, 25);

  initBstBeziehungen (23, 27, 26, 15, 15, 0);
  bestelleArbeitsplan (30, 26);
  bestelleArbeitsplan (60, 26);

  initBstBeziehungen (15, 0, 11, 0, 7, 23);
  installEvent (ETaarbeiten, 1, "quelleBestellungAusliefern");
  installEvent (ETaarbeiten, 13, "quelleBestellungAusliefern2");
}

void _impexp prog_100 () {
  BstBeziehungen *zBez = (BstBeziehungen *)BstUserData(This);
  aufnehmen ();
  if ((AnzBestArbeitsplan(zBez->Puffer, ArbeitsplanNr (This)) < 2) 
      && (zBez->Bestellzaehler[ArbeitsplanNr (This)] == 0)) {
    zBez->Bestellzaehler[ArbeitsplanNr (This)] = AnzDirAvisSoll (This);
    bestelleArbeitsplan (ArbeitsplanNr (This), zBez->Lieferant, 
			zBez->Bestellzaehler[ArbeitsplanNr (This)]);
  }
  arbeiten ();
  if (zBez->Partner){
     syncBst (zBez->Partner);
     syncBst (zBez->Partner);
  }
  ((BstBeziehungen*)BstUserData (zBez->Kunde))->Bestellzaehler[ArbeitsplanNr (This)]--;
  abgeben ();
}

void _impexp prog_200 () {
  BstBeziehungen *zBez = (BstBeziehungen *)BstUserData (This);
  aufnehmen ();
  zBez->Bestellzaehler[ArtikelNr (This)] = 2;
  bestelleArbeitsplan (ArtikelNr (This), zBez->Lieferant);
  bestelleArbeitsplan (ArtikelNr (This) * 3, 27); // Regal 27 ist "Lieferant 2" ;->
  syncBst (zBez->Partner);
  syncBst (zBez->Partner2);
  arbeiten ();
  syncBst (zBez->Partner);
  syncBst (zBez->Partner2);
  abgeben ();
}

void _impexp exit_prog () {
}

