Main.st 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514
  1. PROGRAM _INIT
  2. Tisch_6 := 0;
  3. Tisch_6_Manuell := 0;
  4. Tisch_6_Automatik :=0; //Cech-Implement
  5. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  6. gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
  7. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  8. RTInfo_0(enable:=1);
  9. gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement
  10. gMerker_Laserung_fertig := TRUE; //Cech-Implement
  11. END_PROGRAM
  12. PROGRAM _CYCLIC
  13. gTisch_6;
  14. IF gMerker_Laser_Manuell = TRUE THEN
  15. gDO_Start_Laser := FALSE;
  16. gDO_Laser_Seitentuer_oeffnen := FALSE;
  17. END_IF
  18. IF gMerker_Laser_Automatik = TRUE THEN
  19. gDO_Laser_Seitentuer_oeffnen := FALSE;
  20. END_IF
  21. IF gDI_Laser_fertig = TRUE THEN
  22. gMerker_Laserung_fertig := TRUE; //Cech-Implement: Abkoppeln vom gDI_LAser_fertig
  23. END_IF
  24. //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)
  25. IF gVK_Freigabe_manuell = TRUE AND gVK_Stopper_Tisch_6 = TRUE THEN
  26. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  27. ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Stopper_Tisch_6 = FALSE THEN
  28. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  29. END_IF
  30. IF gVK_Freigabe_manuell = TRUE AND gVK_Vorstopper_Tisch_6 = TRUE THEN
  31. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  32. ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Vorstopper_Tisch_6 = FALSE THEN
  33. gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
  34. END_IF
  35. IF gVK_Freigabe_manuell = TRUE AND gVK_Aushebeeinheit_Tisch_6 = TRUE THEN
  36. gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
  37. ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Aushebeeinheit_Tisch_6 = FALSE THEN
  38. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  39. END_IF
  40. IF gVK_Freigabe_manuell = TRUE AND gVK_doppelt_Lasern = TRUE THEN
  41. gDO_doppelt_lasern := TRUE;
  42. ELSIF gVK_Freigabe_manuell = TRUE AND gVK_doppelt_Lasern = FALSE THEN
  43. gDO_doppelt_lasern := FALSE;
  44. END_IF
  45. IF gVK_Freigabe_manuell = TRUE AND gVK_Start_Laser = TRUE THEN //Cech-Comment:
  46. gDO_Start_Laser := TRUE;
  47. ELSIF gVK_Freigabe_manuell = TRUE AND gVK_Start_Laser = FALSE THEN
  48. gDO_Start_Laser := FALSE;
  49. END_IF
  50. IF gVK_Absaugung = FALSE THEN //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC
  51. gDO_Laser_Absaugung := FALSE; //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC
  52. END_IF //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC
  53. 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
  54. gDO_Laser_Absaugung := TRUE; //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC
  55. END_IF //Cech-Implement zum Aktivieren und deaktivieren der LAserabsaugung über einen Button am Control-Panel-PC
  56. //Cech-Comment: Alles neutralsieren, wenn die Station deaktiviert wurde mit dem Soft-Button am Hauptbildschirm
  57. IF gTaster_Tisch_6_aus = TRUE THEN
  58. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  59. gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
  60. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  61. gMerker_RFID_Tisch_6_gelesen := TRUE;
  62. Tisch_6_Automatik := 0;
  63. Tisch_6 := 0;
  64. Tisch_6_Manuell := 0;
  65. END_IF
  66. //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
  67. IF gDI_Laser_Automatik = TRUE AND gDI_Laser_Manuell = FALSE THEN
  68. gMerker_Laser_Automatik := TRUE;
  69. gMerker_Laser_Halbautomatik := FALSE;
  70. gMerker_Laser_Manuell := FALSE;
  71. END_IF
  72. IF gDI_Laser_Manuell = TRUE AND gDI_Laser_Automatik = FALSE THEN
  73. gMerker_Laser_Automatik := FALSE;
  74. gMerker_Laser_Halbautomatik := FALSE;
  75. gMerker_Laser_Manuell := TRUE;
  76. END_IF
  77. IF gDI_Laser_Manuell = FALSE AND gDI_Laser_Automatik = FALSE THEN
  78. gMerker_Laser_Automatik := FALSE;
  79. gMerker_Laser_Halbautomatik := TRUE;
  80. gMerker_Laser_Manuell := FALSE;
  81. END_IF
  82. CASE Tisch_6_Manuell OF //Cech-Comment: Handbetrieb (meiner Meinung nach nicht sauber, Fehler drinnen)
  83. 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)
  84. 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
  85. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  86. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  87. Tisch_6_Manuell := 10;
  88. 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
  89. gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
  90. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  91. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  92. Tisch_6_Manuell := 20;
  93. END_IF
  94. 10: //Cech-Comment: Warten, bis der WST die Station verlassen hat und alles ausfahren (Warum Aushebeeinheit?)
  95. IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN
  96. gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN; //Im Handbetrieb wird jeenfalls die Aushebeeinheit ausgefahren. Wahrscheinlich, damit händisch ein WST oder Sonstiges eingelegt werden kann
  97. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  98. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  99. Tisch_6_Manuell := 20;
  100. END_IF
  101. 20: //Cech-Comment: Wenn HAndbetrieb beendet wird am LAser-Umschalter, dann wird die Aushebeeinheit runtergafehren und die LAserabsaugung ausgeschaltet
  102. IF gMerker_Laser_Manuell = FALSE THEN
  103. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  104. gDO_Laser_Absaugung := FALSE;
  105. Tisch_6_Manuell := 30;
  106. END_IF
  107. 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
  108. lWarten_Aushebeeinheit_Tisch_6 := lWarten_Aushebeeinheit_Tisch_6 + (RTInfo_0.cycle_time/1000);
  109. IF gTisch_6.Inputs.Vor_Stopper = TRUE AND lWarten_Aushebeeinheit_Tisch_6 >= 500 THEN
  110. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  111. lWarten_Aushebeeinheit_Tisch_6 := 0;
  112. Tisch_6_Manuell := 40;
  113. ELSIF gTisch_6.Inputs.Vor_Stopper = FALSE AND lWarten_Aushebeeinheit_Tisch_6 >= 500 THEN
  114. lWarten_Aushebeeinheit_Tisch_6 := 0;
  115. Tisch_6_Manuell := 0;
  116. END_IF
  117. 40: // ... und der Stopper wird wieder ausgefahren
  118. IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN
  119. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  120. Tisch_6_Manuell := 0;
  121. END_IF
  122. END_CASE
  123. CASE Tisch_6 OF //Cech-Comment: Halbautomatik; Hier wird ein WST eingefahren bzw. auch ausgefahren;
  124. 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
  125. 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
  126. gMerker_Debug_Test_Counter := 11;
  127. gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
  128. gMerker_RFID_Tisch_6_gelesen := FALSE;
  129. Tisch_6 := 10;
  130. //Cech-Comment: Wen kein WST wartet aber RFID gelesen wurde, dann wird auch die Aushebeeinheit ausgefahren (offensichtlich befindet sich ein WST in der Station)
  131. 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
  132. gMerker_Debug_Test_Counter := 12;
  133. gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
  134. gMerker_RFID_Tisch_6_gelesen := FALSE;
  135. Tisch_6 := 10;
  136. //Cech-Comment: Wenn kein WST in der Station, aber einer davor, dann werden die Sietentüren geöffnet und der Vorstopper wird freigegeben
  137. 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
  138. gMerker_Debug_Test_Counter := 13;
  139. gDO_Laser_Seitentuer_oeffnen := TRUE;
  140. gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
  141. Tisch_6 := 200; /// war 110
  142. //Cech-Comment: Wenn entweder Vorstopper oder Stopper eingefahren sind, dann werden beide wieder ausgefahren
  143. 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
  144. gMerker_Debug_Test_Counter := 14;
  145. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  146. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  147. Tisch_6 := 0;
  148. END_IF
  149. //
  150. 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
  151. IF (*gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_ausfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_einfahren = FALSE THEN
  152. gMerker_Debug_Test_Counter := 110;
  153. gDO_Start_Laser := TRUE;
  154. 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
  155. Tisch_6 := 20;
  156. END_IF
  157. 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
  158. 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
  159. gMerker_Debug_Test_Counter := 120;
  160. gDO_Start_Laser := FALSE;
  161. gDO_Laser_Absaugung := FALSE;
  162. 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
  163. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  164. Tisch_6 := 30;
  165. END_IF
  166. 30: //Cech-Comment: WST wird rausgelassen
  167. IF (*gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_einfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_ausfahren = FALSE THEN
  168. gMerker_Debug_Test_Counter := 130;
  169. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  170. Tisch_6 := 40;
  171. END_IF
  172. 40: //Cech-Comment: Wenn der NAchstopper_Sensor einmal ein ...
  173. IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN
  174. gMerker_Debug_Test_Counter := 140;
  175. Tisch_6 := 45;
  176. END_IF
  177. 45: // ... und wieder aus geht, dann kann der Stopper wieder ausgefahren werden
  178. IF gTisch_6.Inputs.Nach_Stopper = FALSE THEN
  179. gMerker_Debug_Test_Counter := 145;
  180. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  181. Tisch_6 := 50;
  182. END_IF
  183. 50: //Cech-Comment: WEnn der WST am Stausensor vorbei ist, also ein ...
  184. IF gTisch_6.Inputs.Stausensor = TRUE THEN
  185. gMerker_Debug_Test_Counter := 150;
  186. Tisch_6 := 60;
  187. END_IF
  188. 60: // ... und wieder aus, dann wird der Prozess von oben wieder begonnen
  189. IF gTisch_6.Inputs.Stausensor = FALSE THEN
  190. gMerker_Debug_Test_Counter := 160;
  191. Tisch_6 := 0;
  192. END_IF
  193. //
  194. // Cech-Comment: von hier bis excl. 200 wird nicht durchfahren
  195. 110:
  196. IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
  197. gMerker_Debug_Test_Counter := 1110;
  198. Tisch_6 := 120;
  199. END_IF
  200. 120:
  201. IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
  202. gMerker_Debug_Test_Counter := 1120;
  203. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  204. Tisch_6 := 130;
  205. END_IF
  206. 130:
  207. IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
  208. (*gDO_Laser_Seitentuer_oeffnen := FALSE;*)
  209. gMerker_Debug_Test_Counter := 1130;
  210. Tisch_6 := 0;
  211. END_IF
  212. 200: //Cech-Comment: Wenn WST am Ausfahrsensor des Stoppers
  213. IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
  214. gMerker_Debug_Test_Counter := 1200;
  215. Tisch_6 := 210;
  216. END_IF
  217. 210: //Cech-Comment: WEnn WST am Ausfahrsensor vorbei, dann wird der Stopper wieder ausgefahren
  218. IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
  219. gMerker_Debug_Test_Counter := 1210;
  220. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  221. Tisch_6 := 220;
  222. END_IF
  223. 220: // ... und geprüft, ab der SW-Status des Stoppers auf ausgefahren steht
  224. IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
  225. gMerker_Debug_Test_Counter := 1220;
  226. Tisch_6 := 230;
  227. END_IF
  228. 230: // Cech-Comment: ... und auch tatsächlich schon ausgefahren ist und von vorne begonnen
  229. IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN
  230. gMerker_Debug_Test_Counter := 1230;
  231. Tisch_6 := 0;
  232. END_IF
  233. END_CASE
  234. CASE Tisch_6_Automatik OF
  235. 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
  236. lWarten_Laser_Dauer := 0;
  237. lWarten_Laser_Startsignal :=0;
  238. 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
  239. lWarten_Laser_Dauer := 0; //Cech-Implement
  240. gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
  241. gMerker_RFID_Tisch_6_gelesen := FALSE;
  242. Tisch_6_Automatik := 10;
  243. gDO_Laser_Seitentuer_oeffnen := TRUE; ////Cech-Implement;
  244. 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
  245. lWarten_Laser_Dauer := 0; //Cech-Implement
  246. gTisch_6.Cmd.Aushebeeinheit := KMD_AUSFAHREN;
  247. gMerker_RFID_Tisch_6_gelesen := FALSE;
  248. Tisch_6_Automatik := 10;
  249. gDO_Laser_Seitentuer_oeffnen := FALSE; ////Cech-Implement
  250. //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
  251. 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
  252. lWarten_Laser_Dauer := 0; //Cech-Implement
  253. gDO_Laser_Seitentuer_oeffnen := TRUE;
  254. gTisch_6.Cmd.Vorstopper := KMD_EINFAHREN;
  255. Tisch_6_Automatik := 200; // war 110
  256. 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
  257. lWarten_Laser_Dauer := 0; //Cech-Implement
  258. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  259. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  260. Tisch_6_Automatik := 0;
  261. END_IF
  262. //
  263. 10: //Cech-Comment: Laserport zum Starten des Lasers an die Laser-SPS wird eingeschaltet
  264. IF gMerker_Laser_Automatik = FALSE THEN
  265. Tisch_6_Automatik := 0;
  266. ELSE
  267. 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
  268. lWarten_Laser_Startsignal := lWarten_Laser_Startsignal + (RTInfo_0.cycle_time/1000);
  269. IF gMerker_Laser_Doppelzylinder = TRUE THEN
  270. gDO_doppelt_lasern := TRUE;
  271. END_IF
  272. IF lWarten_Laser_Startsignal >= 20000 THEN // !!!! DAS GANZE WARTEN KOMMT RAUS,WENN OPCUA SAUBER LÄUFT
  273. lWarten_Laser_Startsignal := 0;
  274. 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
  275. gDO_Laser_Absaugung := TRUE;
  276. Tisch_6_Automatik := 15;
  277. END_IF
  278. END_IF
  279. END_IF
  280. 15: //Cech-Comment: Nach 1000ms wird das Startsignal an den Laser zurückgenommen und weiter mit 20
  281. lWarten_Laser_Startsignal := lWarten_Laser_Startsignal + (RTInfo_0.cycle_time/1000);
  282. IF lWarten_Laser_Startsignal >= 1000 THEN
  283. gMerker_Laserung_fertig := FALSE;
  284. // 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
  285. // 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.
  286. IF gMerker_Laser_Doppelzylinder = TRUE THEN
  287. Tisch_6_Automatik := 16;
  288. ELSIF gMerker_Laser_Doppelzylinder = FALSE THEN
  289. Tisch_6_Automatik :=30;
  290. END_IF
  291. END_IF
  292. //Cech-Implement
  293. 16:
  294. 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
  295. // 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
  296. //Cech-Implement-Anfang
  297. //// 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
  298. gDO_Start_Laser := FALSE;
  299. gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement
  300. //// gMerker_Laser_Doppelzylinder := FALSE; // Müsste ohne dem gehen
  301. gDO_Laser_Seitentuer_oeffnen := FALSE; ////Cech-Implement
  302. // gDO_Laser_Seitentuer_oeffnen := TRUE;
  303. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  304. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  305. //gMerker_RFID_Value_Tisch_6 := 0;
  306. //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)
  307. Tisch_6_Automatik := 17;
  308. // ELSIF (gDI_Laser_fertig = TRUE AND gDI_keiner_Stoerung_Laser = FALSE)
  309. // gDO_Start_Laser := FALSE;
  310. // gMerker_Laser_Einstellen_fertig := FALSE;
  311. //Cech-Implement-Ende
  312. END_IF
  313. 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)
  314. IF (gMerker_Tisch_6_Ausgehoben = FALSE AND gTisch_6.Status.Vorstopper = STATUS_EINGEFAHREN AND gTisch_6.Inputs.Vor_Stopper = FALSE) THEN
  315. lWarten_Laser_Doppel_Innen := lWarten_Laser_Doppel_Innen + (RTInfo_0.cycle_time/1000);
  316. 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
  317. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  318. Tisch_6_Automatik := 18;
  319. END_IF
  320. END_IF
  321. 18:
  322. IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN
  323. Tisch_6_Automatik := 19;
  324. END_IF
  325. 19:
  326. IF (gMerker_Laser_Einstellen_fertig = TRUE) THEN
  327. gDO_Start_Laser := TRUE;
  328. Tisch_6_Automatik := 20;
  329. END_IF
  330. 20://Cech-Comment: Nach 1000ms wird das Startsignal an den Laser zurückgenommen und weiter mit 30
  331. lWarten_Laser_Startsignal := lWarten_Laser_Startsignal + (RTInfo_0.cycle_time/1000);
  332. IF lWarten_Laser_Startsignal >= 1000 THEN
  333. Tisch_6_Automatik := 30;
  334. END_IF
  335. 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
  336. lWarten_Laser_Dauer := lWarten_Laser_Dauer + (RTInfo_0.cycle_time/1000); //Cech-Implement
  337. 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
  338. //Cech-Implement-Anfang
  339. gDO_Start_Laser := FALSE;
  340. gDO_Laser_Absaugung := FALSE;
  341. gMerker_Laser_Einstellen_fertig := FALSE; //Cech-Implement
  342. gMerker_Laser_Doppelzylinder := FALSE;
  343. gDO_doppelt_lasern := FALSE;
  344. gDO_Laser_Seitentuer_oeffnen := FALSE; ////Cech-Implement
  345. // gDO_Laser_Seitentuer_oeffnen := TRUE;
  346. gTisch_6.Cmd.Aushebeeinheit := KMD_EINFAHREN;
  347. gMerker_RFID_Value_Tisch_6 := 0;
  348. 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)
  349. Tisch_6_Automatik := 40;
  350. // ELSIF (gDI_Laser_fertig = TRUE AND gDI_keiner_Stoerung_Laser = FALSE)
  351. // gDO_Start_Laser := FALSE;
  352. // gMerker_Laser_Einstellen_fertig := FALSE;
  353. //Cech-Implement-Ende
  354. END_IF
  355. 40: //Cech-Comment: Stopper wird eingefahren
  356. IF (*gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN*) gTisch_6.Outputs.Aushebeeinheit_einfahren = TRUE AND gTisch_6.Outputs.Aushebeeinheit_ausfahren = FALSE THEN
  357. gTisch_6.Cmd.Stopper := KMD_EINFAHREN;
  358. Tisch_6_Automatik := 50;
  359. END_IF
  360. 50: //Cech-Comment: schauen, wenn der WST die Station wirklich verlassen hat
  361. IF gTisch_6.Inputs.Nach_Stopper = TRUE THEN
  362. Tisch_6_Automatik := 55;
  363. END_IF
  364. 55: //Cech-Comment: Wenn der WST weg ist, wird der Stopper ausgefahren und der RFID-Leser wieder "scharf" geschaltet
  365. IF gTisch_6.Inputs.Nach_Stopper = FALSE THEN
  366. gTisch_6.Cmd.Stopper := KMD_AUSFAHREN;
  367. gMerker_block_RFID_read_Tisch_6 := FALSE; //Cech-Comment: Damit wird das RFID-Lesen nicht mehr "blockiert"
  368. Tisch_6_Automatik := 60;
  369. END_IF
  370. 60: //Cech-Comment: Wenn der Stausensor nach dem Laser den WST anzeigt und ...
  371. IF gTisch_6.Inputs.Stausensor = TRUE THEN
  372. Tisch_6_Automatik := 70;
  373. END_IF
  374. 70: //Cech-Comment: ...und vorbei ist, dann wird der Prozess wieder von Vorne begonnen
  375. IF gTisch_6.Inputs.Stausensor = FALSE THEN
  376. Tisch_6_Automatik := 0;
  377. END_IF
  378. //
  379. //Cech-Comment: Wird meiner Meinung nach im Augenblick nicht mehr ausgeführt bis excl. 200:
  380. 110:
  381. IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
  382. Tisch_6_Automatik := 120;
  383. END_IF
  384. 120:
  385. IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
  386. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  387. Tisch_6_Automatik := 130;
  388. END_IF
  389. 130:
  390. IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
  391. Tisch_6_Automatik := 0;
  392. END_IF
  393. //Cech-Comment: Wird meiner Meinung nach im Augenblick nicht mehr ausgeführt seit 110:
  394. 200: //Cech-Comment: Warten, bis ein WST den Stopper sicher verlassen hat ...
  395. IF gTisch_6.Inputs.Nach_Vorstopper = TRUE THEN
  396. Tisch_6_Automatik := 210;
  397. END_IF
  398. 210: // .... dann wird der Stopper ausgefahren
  399. IF gTisch_6.Inputs.Nach_Vorstopper = FALSE THEN
  400. gTisch_6.Cmd.Vorstopper := KMD_AUSFAHREN;
  401. Tisch_6_Automatik := 220;
  402. END_IF
  403. 220: // .... Wenn dann der Stopper ausgefahren ist, dann
  404. IF (*gTisch_6.Inputs.Vor_Stopper = TRUE AND*) gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
  405. Tisch_6_Automatik := 230;
  406. END_IF
  407. 230: // ... wird wieder von Vorne begonnen
  408. IF gTisch_6.Inputs.Vor_Stopper = TRUE THEN
  409. Tisch_6_Automatik := 0;
  410. END_IF
  411. END_CASE
  412. END_PROGRAM
  413. PROGRAM _EXIT
  414. (* Insert code here *)
  415. END_PROGRAM