Main.st 24 KB

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