PROGRAM _INIT Tisch_6 := 0; Tisch_6_Manuell := 0; Tisch_6_Automatik :=0; //Cech-Implement gTisch_6.Cmd.Stopper := KMD_EINFAHREN; gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN; gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; RTInfo_0(enable:=1); gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement gMerker_Laserung_fertig := TRUE; //Cech-Implement END_PROGRAM PROGRAM _CYCLIC gTisch_6; IF gMerker_Laser_Manuell = TRUE THEN gDO_Start_Laser := FALSE; gDO_Laser_Seitentuer_oeffnen := FALSE; END_IF IF gMerker_Laser_Automatik = TRUE THEN gDO_Laser_Seitentuer_oeffnen := FALSE; END_IF IF gDI_Laser_fertig = TRUE THEN gMerker_Laserung_fertig := TRUE; //Cech-Implement: Abkoppeln vom gDI_LAser_fertig END_IF //Cech-Comment: Hier wird der Status der Soft-Buttons am Hauptpanel abgefragt. Wenn die Freigabe erteilt ist, sind die anderen 5 Tasten (Ausheber, Vorstopperm, Stopper, Start-Laser und Doppelt-lasern aktiviert) IF gVK_Freigabe_manuell = TRUE AND gVK_Stopper_Tisch_6 = TRUE THEN gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Stopper_Tisch_6 = FALSE THEN gTisch_6.Cmd.Stopper := KMD_EINFAHREN; END_IF IF gVK_Freigabe_manuell = TRUE AND gVK_Vorstopper_Tisch_6 = TRUE THEN gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Vorstopper_Tisch_6 = FALSE THEN gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN; END_IF IF gVK_Freigabe_manuell = TRUE AND gVK_Aushebeeinheit_Tisch_6 = TRUE THEN gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Aushebeeinheit_Tisch_6 = FALSE THEN gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; END_IF IF gVK_Freigabe_manuell = TRUE AND gVK_doppelt_Lasern = TRUE THEN gDO_doppelt_lasern := TRUE; ELSIF gVK_Freigabe_manuell = TRUE AND gVK_doppelt_Lasern = FALSE THEN gDO_doppelt_lasern := FALSE; END_IF IF gVK_Freigabe_manuell = TRUE AND gVK_Start_Laser = TRUE THEN //Cech-Comment: gDO_Start_Laser := TRUE; ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Start_Laser = FALSE THEN gDO_Start_Laser := FALSE; END_IF IF gVK_Absaugung = FALSE THEN //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC gDO_Laser_Absaugung := FALSE; //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC END_IF //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC IF gVK_Absaugung = TRUE AND (gDO_Start_Laser = TRUE OR gMerker_Laser_Manuell = TRUE) THEN //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC gDO_Laser_Absaugung := TRUE; //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC END_IF //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC //Cech-Comment: Alles neutralsieren, wenn die Station deaktiviert wurde mit dem Soft-Button am Hauptbildschirm IF gTaster_Tisch_6_aus = TRUE THEN gTisch_6.Cmd.Stopper := KMD_EINFAHREN; gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN; gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; gMerker_RFID_Tisch_6_gelesen := TRUE; Tisch_6_Automatik := 0; Tisch_6 := 0; Tisch_6_Manuell := 0; END_IF //Cech-Comment: In diesem und den nachfolgenden IFs werden die drei möglichen Zustände von der LAser-SPS (MAnuell, Halbauto, Auto) auf die Linien-SPS übernommen IF gDI_Laser_Automatik = TRUE AND gDI_Laser_Manuell = FALSE THEN gMerker_Laser_Automatik := TRUE; gMerker_Laser_Halbautomatik := FALSE; gMerker_Laser_Manuell := FALSE; END_IF IF gDI_Laser_Manuell = TRUE AND gDI_Laser_Automatik = FALSE THEN gMerker_Laser_Automatik := FALSE; gMerker_Laser_Halbautomatik := FALSE; gMerker_Laser_Manuell := TRUE; END_IF IF gDI_Laser_Manuell = FALSE AND gDI_Laser_Automatik = FALSE THEN gMerker_Laser_Automatik := FALSE; gMerker_Laser_Halbautomatik := TRUE; gMerker_Laser_Manuell := FALSE; END_IF CASE Tisch_6_Manuell OF //Cech-Comment: Handbetrieb (meiner Meinung nach nicht sauber, Fehler drinnen) 0: // Cech-Comment: Ich schätze, dass hier der manuelle Laserbetrieb initiiert wird, indem eine WST-"Beladung" initiiert wird (IF: WST in LASer und wird ausgefahren, ELSE-IF: Kein WSt in LAser) IF gMerker_Laser_Manuell = TRUE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = FALSE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND Tisch_6 = 0 THEN gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; gTisch_6.Cmd.Stopper := KMD_EINFAHREN; Tisch_6_Manuell := 10; ELSIF gMerker_Laser_Manuell = TRUE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = FALSE AND gTisch_6.Inputs.Vor_Stopper = FALSE AND Tisch_6 = 0 THEN gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6_Manuell := 20; END_IF 10: //Cech-Comment: Warten, bis der WST die Station verlassen hat und alles ausfahren (Warum Aushebeeinheit?) IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; //Im Handbetrieb wird jeenfalls die Aushebeeinheit ausgefahren. Wahrscheinlich, damit händisch ein WST oder Sonstiges eingelegt werden kann gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6_Manuell := 20; END_IF 20: //Cech-Comment: Wenn HAndbetrieb beendet wird am LAser-Umschalter, dann wird die Aushebeeinheit runtergafehren und die LAserabsaugung ausgeschaltet IF gMerker_Laser_Manuell = FALSE THEN gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; gDO_Laser_Absaugung := FALSE; Tisch_6_Manuell := 30; END_IF 30: //Cech-Comment: Warten, bis die Aushebeeinheit unten ist. Dann wird der Stopper eingefahren, wenn ein WST wartet, bzw. der Prozess von vorne gestartet, wenn kein WST beim Vorstopper wartet lWarten_Aushebeeinheit_Tisch_6 := lWarten_Aushebeeinheit_Tisch_6 + (RTInfo_0.cycle_time/1000); IF gTisch_6.Inputs.Vor_Stopper = TRUE AND lWarten_Aushebeeinheit_Tisch_6 >= 500 THEN gTisch_6.Cmd.Stopper := KMD_EINFAHREN; lWarten_Aushebeeinheit_Tisch_6 := 0; Tisch_6_Manuell := 40; ELSIF gTisch_6.Inputs.Vor_Stopper = FALSE AND lWarten_Aushebeeinheit_Tisch_6 >= 500 THEN lWarten_Aushebeeinheit_Tisch_6 := 0; Tisch_6_Manuell := 0; END_IF 40: // ... und der Stopper wird wieder ausgefahren IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; Tisch_6_Manuell := 0; END_IF END_CASE CASE Tisch_6 OF //Cech-Comment: Halbautomatik; Hier wird ein WST eingefahren bzw. auch ausgefahren; 0: //Cech-Comment: Wenn ein WST vor dem LAser wartet und der Stausensor nicht anschlägt, aber der RFID gelesen wurde, wird die Aushebeeinheit hochgefahren (offensichtlich befindet sich ein WST in der Station IF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND gTaster_Tisch_6_aus = FALSE (*AND gMerker_RFID_Tisch_6_gelesen = TRUE *) THEN gMerker_Debug_Test_Counter := 11; gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; gMerker_RFID_Tisch_6_gelesen := FALSE; Tisch_6 := 10; //Cech-Comment: Wen kein WST wartet aber RFID gelesen wurde, dann wird auch die Aushebeeinheit ausgefahren (offensichtlich befindet sich ein WST in der Station) ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTisch_6.Inputs.Vor_VorStopper = FALSE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND gTaster_Tisch_6_aus = FALSE (*AND gMerker_RFID_Tisch_6_gelesen = TRUE*) THEN gMerker_Debug_Test_Counter := 12; gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; gMerker_RFID_Tisch_6_gelesen := FALSE; Tisch_6 := 10; //Cech-Comment: Wenn kein WST in der Station, aber einer davor, dann werden die Sietentüren geöffnet und der Vorstopper wird freigegeben ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_6_aus = FALSE THEN gMerker_Debug_Test_Counter := 13; gDO_Laser_Seitentuer_oeffnen := TRUE; gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN; Tisch_6 := 200; /// war 110 //Cech-Comment: Wenn entweder Vorstopper oder Stopper eingefahren sind, dann werden beide wieder ausgefahren ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = TRUE AND gMerker_Laser_Automatik = FALSE AND Tisch_6_Manuell = 0 AND gTaster_Tisch_6_aus = FALSE AND (gTisch_6.Inputs.Stopper_eingefahren = TRUE OR gTisch_6.Inputs.Vorstopper_eingefahren = TRUE) THEN gMerker_Debug_Test_Counter := 14; gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6 := 0; END_IF // 10: //Cech-Comment: Ich schätze, mit diesen Ports wird das LASern aus Liniensicht freigegeben (mit Start Absaugung) und bereits das Port für das Öffnen der Seitentüren gesetzt, damit LAser-SPS öffnet, wenn gelasert wurde IF (*gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_ausfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_einfahren = FALSE THEN gMerker_Debug_Test_Counter := 110; gDO_Start_Laser := TRUE; gDO_Laser_Seitentuer_oeffnen := FALSE; //!!!!!!!!!!!!!!!!!!!!!!Cech-Comment: Könnte mir vorstellen, dass hier ein FALSE hergehört und unter 20: dann gDO_Laser_Seitentuer_oeffnen := TRUE; das müsste ich ausprobieren Tisch_6 := 20; END_IF 20: //Cech-Comment: Wenn der grüne TAster gedrückt wurde (Offensichtlich ist das LAsern beendet und der WST kann ausgefahren werden) dann wird der WST ausgefahren IF gTisch_6.Inputs.Start = TRUE THEN //Cech-Comment: Dieser Input ist der grüne Taster unter dem Panal-PC, der HW-mäßig auf den Input 0 der 16 Input-Kanäle des Input-Moduls verdrahtet ist gMerker_Debug_Test_Counter := 120; gDO_Start_Laser := FALSE; gDO_Laser_Absaugung := FALSE; gDO_Laser_Seitentuer_oeffnen := TRUE; //!!!!!!!!!!!!!!!!!!!!!!Cech-Comment: Könnte mir vorstellen, dass hier ein TRUE hergehört und unter 10: dann gDO_Laser_Seitentuer_oeffnen := FALSE; das müsste ich ausprobieren gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; Tisch_6 := 30; END_IF 30: //Cech-Comment: WST wird rausgelassen IF (*gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_einfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_ausfahren = FALSE THEN gMerker_Debug_Test_Counter := 130; gTisch_6.Cmd.Stopper := KMD_EINFAHREN; Tisch_6 := 40; END_IF 40: //Cech-Comment: Wenn der NAchstopper_Sensor einmal ein ... IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN gMerker_Debug_Test_Counter := 140; Tisch_6 := 45; END_IF 45: // ... und wieder aus geht, dann kann der Stopper wieder ausgefahren werden IF gTisch_6.Inputs.Nach_Stopper = FALSE THEN gMerker_Debug_Test_Counter := 145; gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; Tisch_6 := 50; END_IF 50: //Cech-Comment: WEnn der WST am Stausensor vorbei ist, also ein ... IF gTisch_6.Inputs.Stausensor = TRUE THEN gMerker_Debug_Test_Counter := 150; Tisch_6 := 60; END_IF 60: // ... und wieder aus, dann wird der Prozess von oben wieder begonnen IF gTisch_6.Inputs.Stausensor = FALSE THEN gMerker_Debug_Test_Counter := 160; Tisch_6 := 0; END_IF // // Cech-Comment: von hier bis excl. 200 wird nicht durchfahren 110: IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN gMerker_Debug_Test_Counter := 1110; Tisch_6 := 120; END_IF 120: IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN gMerker_Debug_Test_Counter := 1120; gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6 := 130; END_IF 130: IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN (*gDO_Laser_Seitentuer_oeffnen := FALSE;*) gMerker_Debug_Test_Counter := 1130; Tisch_6 := 0; END_IF 200: //Cech-Comment: Wenn WST am Ausfahrsensor des Stoppers IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN gMerker_Debug_Test_Counter := 1200; Tisch_6 := 210; END_IF 210: //Cech-Comment: WEnn WST am Ausfahrsensor vorbei, dann wird der Stopper wieder ausgefahren IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN gMerker_Debug_Test_Counter := 1210; gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6 := 220; END_IF 220: // ... und geprüft, ab der SW-Status des Stoppers auf ausgefahren steht IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN gMerker_Debug_Test_Counter := 1220; Tisch_6 := 230; END_IF 230: // Cech-Comment: ... und auch tatsächlich schon ausgefahren ist und von vorne begonnen IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN gMerker_Debug_Test_Counter := 1230; Tisch_6 := 0; END_IF END_CASE CASE Tisch_6_Automatik OF 0: //Cech-Comment: Hier werden die Stati vom LaSerwahlschalter und den Stoppern, Schaltern und Sensoren der Station 6 abgefragt und entsprechend in die Case-Schleife verzweigt lWarten_Laser_Dauer := 0; lWarten_Laser_Startsignal :=0; IF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND (*gMerker_RFID_Tisch_6_gelesen = TRUE AND*) gTaster_Tisch_6_aus = FALSE THEN //Cech-Comment: gTAster_Tisch_6_aus ist der Softbutton am MAain-Panel, wo jede Station deaktiviert werden kann lWarten_Laser_Dauer := 0; //Cech-Implement gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; gMerker_RFID_Tisch_6_gelesen := FALSE; Tisch_6_Automatik := 10; gDO_Laser_Seitentuer_oeffnen := TRUE; ////Cech-Implement; ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND gTisch_6.Inputs.Vor_VorStopper = FALSE AND gTisch_6.Inputs.Vor_Stopper = TRUE AND gTisch_6.Inputs.Stausensor = FALSE AND (*gMerker_RFID_Tisch_6_gelesen = TRUE AND*) gTaster_Tisch_6_aus = FALSE THEN //Cech-Comment: gTAster_Tisch_6_aus ist der Softbutton am MAain-Panel, wo jede Station deaktiviert werden kann lWarten_Laser_Dauer := 0; //Cech-Implement gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; gMerker_RFID_Tisch_6_gelesen := FALSE; Tisch_6_Automatik := 10; gDO_Laser_Seitentuer_oeffnen := FALSE; ////Cech-Implement //Cech-Comment: Wenn ein WST wartet und keiner in der STation ist, weiters entweder der Stausensor anschlägt und/oder der RFID nicht gelesen wird !!!! Ergibt keinen Sinn für mich!!!! Ev. soll das saubere Anfangsbedingungen schaffen ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND gTisch_6.Inputs.Vor_VorStopper = TRUE AND gTisch_6.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_6_aus = FALSE THEN //Cech-Comment: gTAster_Tisch_6_aus ist der Softbutton am MAain-Panel, wo jede Station deaktiviert werden kann lWarten_Laser_Dauer := 0; //Cech-Implement gDO_Laser_Seitentuer_oeffnen := TRUE; gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN; Tisch_6_Automatik := 200; // war 110 ELSIF gMerker_Laser_Manuell = FALSE AND gMerker_Laser_Halbautomatik = FALSE AND gMerker_Laser_Automatik = TRUE AND (gTisch_6.Inputs.Stopper_eingefahren = TRUE OR gTisch_6.Inputs.Vorstopper_eingefahren = TRUE) AND gTaster_Tisch_6_aus = FALSE THEN //Cech-Comment: gTAster_Tisch_6_aus ist der Softbutton am MAain-Panel, wo jede Station deaktiviert werden kann lWarten_Laser_Dauer := 0; //Cech-Implement gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6_Automatik := 0; END_IF // 10: //Cech-Comment: Laserport zum Starten des Lasers an die Laser-SPS wird eingeschaltet IF gMerker_Laser_Automatik = FALSE THEN Tisch_6_Automatik := 0; ELSE IF (*gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN*) (gTisch_6.Outputs.Aushebeeinheit_ausfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_einfahren = FALSE) THEN // !!!!KOMT WIEDER REIN, WENN DAS OPCUA_SERVICE SAUBER LÄUFT "AND gMerker_Laser_Einstellen_fertig = TRUE)" THEN //Cech-Implement gMerker_Laser_Einstellen_fertig von Cech eingefügt lWarten_Laser_Startsignal := lWarten_Laser_Startsignal + (RTInfo_0.cycle_time/1000); IF gMerker_Laser_Doppelzylinder = TRUE THEN gDO_doppelt_lasern := TRUE; END_IF IF lWarten_Laser_Startsignal >= 20000 THEN // !!!! DAS GANZE WARTEN KOMMT RAUS,WENN OPCUA SAUBER LÄUFT lWarten_Laser_Startsignal := 0; gDO_Start_Laser := TRUE; // Cech-Implement, Comment: Das entspricht dem Port "WST in Position", wie es Hr.Ziegler von Bluhm nennt. Wenn Centurio den gMerker_Laser_Einstellen_fertig auf TRUE gesetzt hat darf LAserung gestartet werden gDO_Laser_Absaugung := TRUE; Tisch_6_Automatik := 15; END_IF END_IF END_IF 15: //Cech-Comment: Nach 1000ms wird das Startsignal an den Laser zurückgenommen und weiter mit 20 lWarten_Laser_Startsignal := lWarten_Laser_Startsignal + (RTInfo_0.cycle_time/1000); IF lWarten_Laser_Startsignal >= 1000 THEN gMerker_Laserung_fertig := FALSE; // gMerker_Laserung_fertig := FALSE; //Da hat der LAser das "gDI_Laser_fertig" längst auf FLASE gesetzt, sodass gMerker_Laserung_fertig nicht ganz oben wieder auf TRUE überschrieben wird // gDO_Start_Laser := FALSE; !!!!!!!!!!!!!!!!Dies geht nicht, weil Hr.Ziegler offensichtlich keinen Handshake programmiert hat, sondern "LAsern-fertig" gleich setzt, wenn wir sagen, dass Start-LAser low wird. Es wird nicht fertiggelasert. IF gMerker_Laser_Doppelzylinder = TRUE THEN Tisch_6_Automatik := 16; ELSIF gMerker_Laser_Doppelzylinder = FALSE THEN Tisch_6_Automatik :=30; END_IF END_IF //Cech-Implement 16: IF (gMerker_Laserung_fertig = TRUE AND gDI_keiner_Stoerung_Laser = TRUE)THEN (* OR lWarten_Laser_Dauer >= 10000 THEN *) //WEnn das Handshake in LaserSPS aktiv wird, dann kann das ELSIF theoretisch wieder weggenommen werdenTHEN // Und hier, beim Doppelzylinder darf die ZEit nicht überprüft werden, weil der Bediener die Doppeltaster drücken muss nach Einstellung von File und Seriennummer //Cech-Implement-Anfang //// gMerker_Laserung_fertig := TRUE; //Cech-Implement: Dient dazu, in der LAser-SPS den "Extern_Fertig"-Portpin wieder zurücknehmen zu können, und in der LAser-SPS aber zu wissen, dass die erste LAserung erfolgreich beendet wurde gDO_Start_Laser := FALSE; gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement //// gMerker_Laser_Doppelzylinder := FALSE; // Müsste ohne dem gehen gDO_Laser_Seitentuer_oeffnen := FALSE; ////Cech-Implement // gDO_Laser_Seitentuer_oeffnen := TRUE; gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; gTisch_6.Cmd.Stopper := KMD_EINFAHREN; //gMerker_RFID_Value_Tisch_6 := 0; //gMerker_block_RFID_read_Tisch_6 := TRUE; //Cech-Comment: Der MErker wenn TRUE blockiert das RFID-LEsen während des Einfahrens der Aushebeeinheit, um nicht neu zu beginnen (RFID kann beim Ausheben die VErbindung verlieren, das soll verhindert werden) Tisch_6_Automatik := 17; // ELSIF (gDI_Laser_fertig = TRUE AND gDI_keiner_Stoerung_Laser = FALSE) // gDO_Start_Laser := FALSE; // gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement-Ende END_IF 17: //Cech-Comment: Kann sein, dass die Zeit ganz rausgenommen werden kann, wenn es reciht, den Vor_Stopper Input abzufragen auf FALSE; KAnn sein, dass dieses Tisch6 Main-Programm in einen schnelleren TAsk gelegt weden muss (50 oder 20ms vielleicht) IF (gMerker_Tisch_6_Ausgehoben = FALSE AND gTisch_6.Status.Vorstopper = STATUS_EINGEFAHREN AND gTisch_6.Inputs.Vor_Stopper = FALSE) THEN lWarten_Laser_Doppel_Innen := lWarten_Laser_Doppel_Innen + (RTInfo_0.cycle_time/1000); IF lWarten_Laser_Doppel_Innen >= 100 THEN //Hier muss angeschaut werden, wie schnell der Stopper wieder ausgefahren werden kann, um den Block am WST 11cm für die LAserung der Innenseite zu erwischen gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; Tisch_6_Automatik := 18; END_IF END_IF 18: IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN Tisch_6_Automatik := 19; END_IF 19: IF (gMerker_Laser_Einstellen_fertig = TRUE) THEN gDO_Start_Laser := TRUE; Tisch_6_Automatik := 20; END_IF 20://Cech-Comment: Nach 1000ms wird das Startsignal an den Laser zurückgenommen und weiter mit 30 lWarten_Laser_Startsignal := lWarten_Laser_Startsignal + (RTInfo_0.cycle_time/1000); IF lWarten_Laser_Startsignal >= 1000 THEN Tisch_6_Automatik := 30; END_IF 30: //Cech-Comment: Wenn vom LAser das Signal "WST bereit zum ABtransport", also LAsern fertig, kommt, dann wird die Aushebeeinheit eingefahren, der RFID-Wert der Station auf "0" gesetzt lWarten_Laser_Dauer := lWarten_Laser_Dauer + (RTInfo_0.cycle_time/1000); //Cech-Implement IF (gDI_Laser_fertig = TRUE AND gDI_keiner_Stoerung_Laser = TRUE) THEN //OR lWarten_Laser_Dauer >= 10000 THEN //WEnn das Handshake in LaserSPS aktiv wird, dann kann das ELSIF theoretisch wieder weggenommen werdenTHEN //Cech-Implement-Anfang gDO_Start_Laser := FALSE; gDO_Laser_Absaugung := FALSE; gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement gMerker_Laser_Doppelzylinder := FALSE; gDO_doppelt_lasern := FALSE; gDO_Laser_Seitentuer_oeffnen := FALSE; ////Cech-Implement // gDO_Laser_Seitentuer_oeffnen := TRUE; gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN; gMerker_RFID_Value_Tisch_6 := 0; gMerker_block_RFID_read_Tisch_6 := TRUE; //Cech-Comment: Der MErker wenn TRUE blockiert das RFID-LEsen während des Einfahrens der Aushebeeinheit, um nicht neu zu beginnen (RFID kann beim Ausheben die VErbindung verlieren, das soll verhindert werden) Tisch_6_Automatik := 40; // ELSIF (gDI_Laser_fertig = TRUE AND gDI_keiner_Stoerung_Laser = FALSE) // gDO_Start_Laser := FALSE; // gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement-Ende END_IF 40: //Cech-Comment: Stopper wird eingefahren IF (*gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_einfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_ausfahren = FALSE THEN gTisch_6.Cmd.Stopper := KMD_EINFAHREN; Tisch_6_Automatik := 50; END_IF 50: //Cech-Comment: schauen, wenn der WST die Station wirklich verlassen hat IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN Tisch_6_Automatik := 55; END_IF 55: //Cech-Comment: Wenn der WST weg ist, wird der Stopper ausgefahren und der RFID-Leser wieder "scharf" geschaltet IF gTisch_6.Inputs.Nach_Stopper = FALSE THEN gTisch_6.Cmd.Stopper := KMD_AUSFAHREN; gMerker_block_RFID_read_Tisch_6 := FALSE; //Cech-Comment: Damit wird das RFID-Lesen nicht mehr "blockiert" Tisch_6_Automatik := 60; END_IF 60: //Cech-Comment: Wenn der Stausensor nach dem Laser den WST anzeigt und ... IF gTisch_6.Inputs.Stausensor = TRUE THEN Tisch_6_Automatik := 70; END_IF 70: //Cech-Comment: ...und vorbei ist, dann wird der Prozess wieder von Vorne begonnen IF gTisch_6.Inputs.Stausensor = FALSE THEN Tisch_6_Automatik := 0; END_IF // //Cech-Comment: Wird meiner Meinung nach im Augenblick nicht mehr ausgeführt bis excl. 200: 110: IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN Tisch_6_Automatik := 120; END_IF 120: IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6_Automatik := 130; END_IF 130: IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN Tisch_6_Automatik := 0; END_IF //Cech-Comment: Wird meiner Meinung nach im Augenblick nicht mehr ausgeführt seit 110: 200: //Cech-Comment: Warten, bis ein WST den Stopper sicher verlassen hat ... IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN Tisch_6_Automatik := 210; END_IF 210: // .... dann wird der Stopper ausgefahren IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN; Tisch_6_Automatik := 220; END_IF 220: // .... Wenn dann der Stopper ausgefahren ist, dann IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN Tisch_6_Automatik := 230; END_IF 230: // ... wird wieder von Vorne begonnen IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN Tisch_6_Automatik := 0; END_IF END_CASE END_PROGRAM PROGRAM _EXIT (* Insert code here *) END_PROGRAM