
PROGRAM _INIT
	
	Tisch_2 := 0;

END_PROGRAM

PROGRAM _CYCLIC
		
		//Cech-Comment: Schauen, ob auf einen Tstendruck gewartet wird, und eine Lampe als Signal eingeschaltet werden soll (output in jeder Station, ich weiß nicht, ob das am Terminal ein Lämpchen ist oder Ä) 
		IF (gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND Tisch_2 = 0) OR (gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = FALSE AND Tisch_2 = 0) THEN
			gTisch_2.Outputs.Lampe_Start := TRUE;
		ELSE
			gTisch_2.Outputs.Lampe_Start := FALSE;
		END_IF
	
		//Cech-Comment: Wenn die Station generell deaktiviert ist, werden alle STopper eingefahren
		IF gTaster_Tisch_2_aus = TRUE THEN
			gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
			gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
			gMerker_RFID_Tisch_2_gelesen := TRUE;
			Tisch_2 := 0;
		END_IF

	CASE Tisch_2 OF

	//Cech-Comment: Mit dem grünen TAster werden entsprechend der Konstellation in der Station die Stopper aus und eingefahren und der RFID-Merker wird geschrieben oder gelöscht
		0:  
			//Cech-Comment: Wenn grüne TAste und ein WST in und auch vor der Station, danach frei und der RFID gelesen wurde, dann WST aus der Station entlasse und RFID-VAriable der Station auf ungelesen stellen
		IF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND gTaster_Tisch_2_aus = FALSE AND gMerker_RFID_Tisch_2_gelesen = TRUE THEN
			gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
			gMerker_RFID_Tisch_2_gelesen := FALSE;
				Tisch_2 := 10;
			// Cech-Comment: Wenn grüner TAster und kein WST vor der Station und WST in der Station und keiner nach der Station und RFID gelesen, dann WST entlassen und RFID-Variable der STation auf ungelesen setzen
		ELSIF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = FALSE AND gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND gTaster_Tisch_2_aus = FALSE AND gMerker_RFID_Tisch_2_gelesen = TRUE THEN
				gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
				gMerker_RFID_Tisch_2_gelesen := FALSE;
				Tisch_2 := 70;
			// Cech-Comment: Wenn grüner TAster und WST vor der Station und kein WST in der Station, dann Vorstopper einfahren
		ELSIF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_2_aus = FALSE THEN
				gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
				Tisch_2 := 110;

			// Cech-Comment: Wenn Station aktiv und beide Stopper vor der Station und in der Station drinnen, dann beide Stopper ausfahren und Prozess mit "0" wieder von vorne beginnen
		ELSIF gTaster_Tisch_2_aus = FALSE AND gTisch_2.Inputs.Stopper_eingefahren = TRUE AND gTisch_2.Inputs.Vorstopper_eingefahren = TRUE THEN
				gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
				gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
				Tisch_2 := 0;
		END_IF	
		
	// Cech-Comment: Im Block bis exclusive 70 wird ein neuer WST in die Station eingefahren, wenn ein WST die Station verlassen hat und ein anderer beim Vorstopper wartet
		10: 	//Cech-Comment: Wenn der WST den Sensor NAchstopper überfahren hat, dann ...
		IF gTisch_2.Inputs.Nach_Stopper = TRUE THEN
			Tisch_2 := 20;
		END_IF
		
		20:		//Cech-Comment: WEnn der WST den Stopper verlassen hat, wird der Stopper ausgefahren und der Vorstopper freigegeben
		IF gTisch_2.Inputs.Nach_Stopper = FALSE THEN
			gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
			gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
			Tisch_2 := 30;
		END_IF

		30:		//WST hat den Vorstopper passiert
		IF gTisch_2.Inputs.Nach_Vorstopper = TRUE THEN
			Tisch_2 := 40;
		END_IF

		40:		//und der Vorstopper wird wieder ausgefahren
		IF gTisch_2.Inputs.Nach_Vorstopper = FALSE THEN
			gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
			Tisch_2 := 50;
		END_IF

		50:		//Prozess wartet, bis der Stausensor hinter der STation anschlägt
		IF gTisch_2.Inputs.Stausensor = TRUE THEN
			Tisch_2 := 60;
		END_IF

		60:		//... und setzt den Prozess wieder auf "0", dann beginnt er wieder oben
		IF gTisch_2.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_2.Status.Stopper = STATUS_AUSGEFAHREN THEN
			Tisch_2 := 0;
		END_IF

	//Cech-Comment: Im Block bis exclusive 110: Prozess, wenn der WST aus der Station entlassen wurde und keiner beim Vortsopper wartet      	
		70: //Nachstopper wird überfahren
		IF gTisch_2.Inputs.Nach_Stopper = TRUE THEN
			Tisch_2 := 80;
		END_IF

		80:	//NAchstopper wieder frei --> Stopper wieder ausfahren
		IF gTisch_2.Inputs.Nach_Stopper = FALSE THEN
			gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
			Tisch_2 := 90;
		END_IF

		90:	//Warten, bis der Stausensor erreicht ist
		IF gTisch_2.Inputs.Stausensor = TRUE THEN
			Tisch_2 := 100;
		END_IF

		100:	// und dann den Prozess wieder auf "0" stellen
		IF gTisch_2.Status.Stopper = STATUS_AUSGEFAHREN THEN
			Tisch_2 := 0;
		END_IF

			
	//	Cech-Comment: Prozess wenn ein WST beim Vorstopper angekommen und Vorstopper eingefahren wurde, und in der Station aber kein WST drinnen steht
		110:	//Cech-Comment: WST hat Vorstopper passiert
		IF gTisch_2.Inputs.Nach_Vorstopper = TRUE THEN
			Tisch_2 := 120;
		END_IF

		120:	//Cech-Comment: Vorstopper wird wieder ausgefahren
		IF gTisch_2.Inputs.Nach_Vorstopper = FALSE THEN
			gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
			Tisch_2 := 130;
		END_IF

		130:	//Cech-Comment: Wenn alles stabil ist, denn wird der Prozess mit "0" von vorne begonnen
		IF gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
			Tisch_2 := 0;
		END_IF

	END_CASE	

END_PROGRAM

PROGRAM _EXIT
	(* Insert code here *)
	 
END_PROGRAM

