Main.st 28 KB

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