Main.st 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. PROGRAM _INIT
  2. RTInfo_0(enable:=1);
  3. END_PROGRAM
  4. PROGRAM _CYCLIC
  5. (* #############################################################################################################
  6. ############################# Stopper Tisch 6 #####################################
  7. ############################################################################################################# *)
  8. //Cech-Comment: Dieses gesamte Programm bedient nur die einzelnen Stopper und die Aushebeeinheit, wenn ein anderes Programm den Befehl gibt, Aus- bzw. Einzufahren
  9. //Cech-Comment: Initiierung des Ausfahrens (bzw. des Einfahrens im nächsten Block) mit allen Variablen. Der Vorgang beginnt somit
  10. IF gTisch_6.Cmd.Stopper = KMD_AUSFAHREN THEN
  11. gTisch_6.Outputs.Stopper_einfahren := FALSE;
  12. gTisch_6.Times.Stopper_AusZeit := TRUE;
  13. gTisch_6.Times.Stopper_EinZeit := FALSE;
  14. gTisch_6.Cmd.Stopper := KMD_FERTIG;
  15. gTisch_6.Status.Stopper := STATUS_BUSY;
  16. END_IF
  17. IF gTisch_6.Cmd.Stopper = KMD_EINFAHREN THEN
  18. gTisch_6.Outputs.Stopper_einfahren := TRUE;
  19. gTisch_6.Times.Stopper_AusZeit := FALSE;
  20. gTisch_6.Times.Stopper_EinZeit := TRUE;
  21. gTisch_6.Cmd.Stopper := KMD_FERTIG;
  22. gTisch_6.Status.Stopper := STATUS_BUSY;
  23. END_IF
  24. //Cech-Comment: STATUS_BUSY bleibt solange erhalten, bis die Rückmeldung kommt, dass der Stopper fertig ein- bzw. ausgefahren ist
  25. (* Status, Zylinderposition ausgeben *)
  26. IF (gTisch_6.Inputs.Stopper_eingefahren = TRUE) AND (gTisch_6.Inputs.Stopper_ausgefahren = FALSE) THEN
  27. gTisch_6.Status.Stopper := STATUS_EINGEFAHREN;
  28. ELSIF (gTisch_6.Inputs.Stopper_eingefahren = FALSE) AND (gTisch_6.Inputs.Stopper_ausgefahren = TRUE) THEN
  29. gTisch_6.Status.Stopper := STATUS_AUSGEFAHREN;
  30. ELSE
  31. gTisch_6.Status.Stopper := STATUS_BUSY;
  32. END_IF
  33. //Cech-Comment: Schauen, ob nach 5s die Stopper noch nicht umgestellt sind und Status STATUS_ERROR setzen
  34. (* Zeitüberwachung Eingefahren*)
  35. IF (gTisch_6.Times.Stopper_EinZeit = TRUE AND gTisch_6.Status.Stopper <> STATUS_EINGEFAHREN) OR (gTisch_6.Times.Stopper_AusZeit = TRUE AND gTisch_6.Status.Stopper <> STATUS_AUSGEFAHREN) THEN
  36. gTisch_6.Times.Stopper_ZeitRun := gTisch_6.Times.Stopper_ZeitRun + (RTInfo_0.cycle_time/1000);
  37. IF (gTisch_6.Times.Stopper_EinZeit = TRUE AND gTisch_6.Status.Stopper = STATUS_EINGEFAHREN)
  38. OR (gTisch_6.Times.Stopper_AusZeit = TRUE AND gTisch_6.Status.Stopper = STATUS_AUSGEFAHREN)THEN
  39. (* lPortal_Mittelanschlag_EinZeit := FALSE;
  40. lPortal_Mittelanschlag_AusZeit := FALSE; *)
  41. gTisch_6.Times.Stopper_ZeitRun := 0;
  42. END_IF
  43. IF gTisch_6.Times.Stopper_ZeitRun >= 5000 THEN
  44. gTisch_6.Status.Stopper := STATUS_ERROR;
  45. //Cech-Comment: diese globalen Errors sind offensichtlich
  46. IF gTisch_6.Times.Stopper_EinZeit = TRUE THEN
  47. gError[0] := 1;
  48. END_IF
  49. IF gTisch_6.Times.Stopper_AusZeit = TRUE THEN
  50. gError[1] := 1;
  51. END_IF
  52. END_IF
  53. ELSE
  54. gTisch_6.Times.Stopper_ZeitRun := 0;
  55. END_IF
  56. (* #############################################################################################################
  57. ############################# VorStopper Tisch 6 #####################################
  58. ############################################################################################################# *)
  59. IF gTisch_6.Cmd.Vorstopper = KMD_AUSFAHREN THEN
  60. gTisch_6.Outputs.Vorstopper_einfahren := FALSE;
  61. gTisch_6.Times.Vorstopper_AusZeit := TRUE;
  62. gTisch_6.Times.Vorstopper_EinZeit := FALSE;
  63. gTisch_6.Cmd.Vorstopper := KMD_FERTIG;
  64. gTisch_6.Status.Vorstopper := STATUS_BUSY;
  65. END_IF
  66. IF gTisch_6.Cmd.Vorstopper = KMD_EINFAHREN THEN
  67. gTisch_6.Outputs.Vorstopper_einfahren := TRUE;
  68. gTisch_6.Times.Vorstopper_AusZeit := FALSE;
  69. gTisch_6.Times.Vorstopper_EinZeit := TRUE;
  70. gTisch_6.Cmd.Vorstopper := KMD_FERTIG;
  71. gTisch_6.Status.Vorstopper := STATUS_BUSY;
  72. END_IF
  73. (* Status, Zylinderposition ausgeben *)
  74. IF (gTisch_6.Inputs.Vorstopper_eingefahren = TRUE) AND (gTisch_6.Inputs.Vorstopper_ausgefahren = FALSE) THEN
  75. gTisch_6.Status.Vorstopper := STATUS_EINGEFAHREN;
  76. ELSIF (gTisch_6.Inputs.Vorstopper_eingefahren = FALSE) AND (gTisch_6.Inputs.Vorstopper_ausgefahren = TRUE) THEN
  77. gTisch_6.Status.Vorstopper := STATUS_AUSGEFAHREN;
  78. ELSE
  79. gTisch_6.Status.Vorstopper := STATUS_BUSY;
  80. END_IF
  81. (* Zeitüberwachung Eingefahren*)
  82. IF (gTisch_6.Times.Vorstopper_EinZeit = TRUE AND gTisch_6.Status.Vorstopper <> STATUS_EINGEFAHREN) OR (gTisch_6.Times.Vorstopper_AusZeit = TRUE AND gTisch_6.Status.Vorstopper <> STATUS_AUSGEFAHREN) THEN
  83. gTisch_6.Times.Vorstopper_ZeitRun := gTisch_6.Times.Vorstopper_ZeitRun + (RTInfo_0.cycle_time/1000);
  84. IF (gTisch_6.Times.Vorstopper_EinZeit = TRUE AND gTisch_6.Status.Vorstopper = STATUS_EINGEFAHREN)
  85. OR (gTisch_6.Times.Vorstopper_AusZeit = TRUE AND gTisch_6.Status.Vorstopper = STATUS_AUSGEFAHREN)THEN
  86. (* lPortal_Mittelanschlag_EinZeit := FALSE;
  87. lPortal_Mittelanschlag_AusZeit := FALSE; *)
  88. gTisch_6.Times.Vorstopper_ZeitRun := 0;
  89. END_IF
  90. IF gTisch_6.Times.Vorstopper_ZeitRun >= 5000 THEN
  91. gTisch_6.Status.Vorstopper := STATUS_ERROR;
  92. IF gTisch_6.Times.Vorstopper_EinZeit = TRUE THEN
  93. gError[0] := 1;
  94. END_IF
  95. IF gTisch_6.Times.Vorstopper_AusZeit = TRUE THEN
  96. gError[1] := 1;
  97. END_IF
  98. END_IF
  99. ELSE
  100. gTisch_6.Times.Vorstopper_ZeitRun := 0;
  101. END_IF
  102. (* #############################################################################################################
  103. ############################# Aushebeeinheut Tisch 6 #####################################
  104. ############################################################################################################# *)
  105. (* Cech-Comment: Bei der Aushebeeinheit ist die Sensorik nicht angeschlossen, die KAbel gehen ins Leere! Warum, weiß ich nicht. Möglicherweise Ressourcenmangel am Hauptschrank
  106. Daher werden wahrscheinlich bei der Aushebeeinheit die Steuersignale gegengleich geschaltet ( kann aber auch eine eEigenheit der Aushebeeinheit sein).
  107. Jedenfalls läuft der Timer immer und die Zeitüberwachung wird nicht verwendet. Es handelt sich somit um eine reine Steuerung ohne Sensorkontrolle. Das muss man berücksichtigen bei Änderungen in diesem Teil der SW*)
  108. IF gTisch_6.Cmd.Aushebeeinheit = KMD_AUSFAHREN THEN
  109. gMerker_Debug_Test_Counter := 111;
  110. gTisch_6.Outputs.Aushebeeinheit_einfahren := FALSE;
  111. gTisch_6.Outputs.Aushebeeinheit_ausfahren := TRUE;
  112. gTisch_6.Times.Aushebeeinheit_AusZeit := TRUE;
  113. gTisch_6.Times.Aushebeeinheit_EinZeit := FALSE;
  114. gTisch_6.Cmd.Aushebeeinheit := KMD_FERTIG;
  115. gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
  116. gMerker_Tisch_6_Ausgehoben := TRUE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio als BOOL, ob Aushebeeinheit in Position ist
  117. END_IF
  118. IF gTisch_6.Cmd.Aushebeeinheit = KMD_EINFAHREN THEN
  119. gMerker_Debug_Test_Counter := 112;
  120. gTisch_6.Outputs.Aushebeeinheit_einfahren := TRUE;
  121. gTisch_6.Outputs.Aushebeeinheit_ausfahren := FALSE;
  122. gTisch_6.Times.Aushebeeinheit_AusZeit := FALSE;
  123. gTisch_6.Times.Aushebeeinheit_EinZeit := TRUE;
  124. gTisch_6.Cmd.Aushebeeinheit := KMD_FERTIG;
  125. gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
  126. gMerker_Tisch_6_Ausgehoben := FALSE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio als BOOL, ob Aushebeeinheit in Position ist
  127. END_IF
  128. (* Status, Zylinderposition ausgeben *)
  129. IF (gTisch_6.Inputs.Aushebeeinheit_eingefahren = TRUE) AND (gTisch_6.Inputs.Aushebeeinheit_ausgefahren = FALSE) THEN
  130. // Toter Zweig, weil der Input vom Aushebesensor nicht angeschlossen wurde
  131. gMerker_Debug_Test_Counter := 113;
  132. gTisch_6.Status.Aushebeeinheit := STATUS_EINGEFAHREN;
  133. ELSIF (gTisch_6.Inputs.Aushebeeinheit_eingefahren = FALSE) AND (gTisch_6.Inputs.Aushebeeinheit_ausgefahren = TRUE) THEN
  134. // Toter Zweig, weil der Input vom Aushebesensor nicht angeschlossen wurde
  135. gMerker_Debug_Test_Counter := 114;
  136. gTisch_6.Status.Aushebeeinheit := STATUS_AUSGEFAHREN;
  137. ELSE
  138. // Es wird immer dieser Zweig angefahren und der Status der Aushebeeinheit bleibt immer STATS_BUSY (255)
  139. gMerker_Debug_Test_Counter := 115;
  140. gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
  141. END_IF
  142. // Cech-Comment: Die Zeitüberwachung hat für die Aushebeeinheit eigentlich nur sehr bedingt Sinn!?, weil ja nur gesteuert wird; Ist wahrscheinlich mehr ein Bypass
  143. (* Zeitüberwachung Eingefahren*)
  144. // IF (gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE AND gTisch_6.Status.Aushebeeinheit <> STATUS_EINGEFAHREN) OR (gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE AND gTisch_6.Status.Aushebeeinheit <> STATUS_AUSGEFAHREN) THEN
  145. // gTisch_6.Times.Aushebeeinheit_ZeitRun := gTisch_6.Times.Aushebeeinheit_ZeitRun + (RTInfo_0.cycle_time/1000);
  146. // IF (gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE AND gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN)
  147. // OR (gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE AND gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN)THEN
  148. // gMerker_Debug_Test_Counter := 116;
  149. // (* lPortal_Mittelanschlag_EinZeit := FALSE;
  150. // lPortal_Mittelanschlag_AusZeit := FALSE; *)
  151. // gTisch_6.Times.Aushebeeinheit_ZeitRun := 0;
  152. // END_IF
  153. // IF gTisch_6.Times.Aushebeeinheit_ZeitRun >= 5000 THEN
  154. // gMerker_Debug_Test_Counter := 117;
  155. // gTisch_6.Status.Aushebeeinheit := STATUS_ERROR;
  156. //// gMerker_Tisch_6_Ausgehoben := FALSE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio, ob Aushebeeinheit in Position ist
  157. // IF gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE THEN
  158. // gMerker_Debug_Test_Counter := 118;
  159. // gError[0] := 1;
  160. // END_IF
  161. // IF gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE THEN
  162. // gMerker_Debug_Test_Counter := 119;
  163. // gError[1] := 1;
  164. // END_IF
  165. // END_IF
  166. // ELSE
  167. // gTisch_6.Times.Aushebeeinheit_ZeitRun := 0;
  168. // END_IF
  169. END_PROGRAM
  170. PROGRAM _EXIT
  171. (* Insert code here *)
  172. END_PROGRAM