123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- 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
|