LÖSUNG DER ERWEITERTEN AUFGABENSTELLUNG:

Baustein 6 soll sein Werkstück erst dann abgeben,
wenn auf Baustein 3 zwei Werkstücke bearbeitet
wurden. Wird Baustein 6 von Baustein 3 aktiviert,
nimmt er erneut den Zustand "warten" ein. Das
Signal bleibt bestehen (Wert 1), Baustein 3
durchläuft sein Programm erneut ohne Warten und
aktiviert Baustein 6 nach dem Abgeben seines
Werkstückes. Dadurch löscht Baustein 6 das Signal 
(setzt Wert=0) und gibt auch sein Werkstück ab.

// Modellname: synch10      SS 2000

// Die Makrodefinition '_impexp' dient zur Exportierung
// der Funktionen, Klassen und Variablen innerhalb der Library, 
// wird aber eigentlich nur fuer Windows benoetigt :-(

#ifdef WIN32
  #undef _impexp
  #define _impexp __declspec(dllexport)
#else
  #undef _impexp
  #define _impexp
#endif

#include <stdio.h>
#include "sfxprg.h"     // enthaelt die Funktionen der C-Schnittstelle


class SignalDaten : public UserData {   //Datenstruktur fuer Signale
public:
   SignalDaten() : UserData() {};
   int signal;
};

void _impexp initBstSignal (int bstNr, int sig){
  SignalDaten *zS = new SignalDaten ();
  zS->signal      =  sig;
  setBstUserData (bstNr, zS);
}

void  _impexp init_prog () {
  initBstSignal (6, 0);
}

void  _impexp prog_100 () {            //Baustein-Programm mit Programmnummer 100 
  SignalDaten *zS = (SignalDaten *)BstUserData (6);
  aufnehmen ();
  if (zS->signal == 0) warten ();
  arbeiten ();
  abgeben ();
  aktivieren (6);
}

void  _impexp prog_200 () {           //Baustein-Programm mit Programmnummer 200 
  SignalDaten *zS = (SignalDaten *)BstUserData (This);
  aufnehmen ();
  arbeiten ();
  zS->signal = 1;
  aktivieren (3);
  warten ();
  warten();		             //...bis zweites Teil auf Bst 3 fertig
  zS->signal = 0;
  abgeben ();
}
 
void  _impexp exit_prog () {
 }