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