Main.st 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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. gTisch_6.Outputs.Aushebeeinheit_einfahren := FALSE;
  110. gTisch_6.Outputs.Aushebeeinheit_ausfahren := TRUE;
  111. gTisch_6.Times.Aushebeeinheit_AusZeit := TRUE;
  112. gTisch_6.Times.Aushebeeinheit_EinZeit := FALSE;
  113. gTisch_6.Cmd.Aushebeeinheit := KMD_FERTIG;
  114. gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
  115. gMerker_Tisch_6_Ausgehoben := TRUE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio als BOOL, ob Aushebeeinheit in Position ist
  116. END_IF
  117. IF gTisch_6.Cmd.Aushebeeinheit = KMD_EINFAHREN THEN
  118. gTisch_6.Outputs.Aushebeeinheit_einfahren := TRUE;
  119. gTisch_6.Outputs.Aushebeeinheit_ausfahren := FALSE;
  120. gTisch_6.Times.Aushebeeinheit_AusZeit := FALSE;
  121. gTisch_6.Times.Aushebeeinheit_EinZeit := TRUE;
  122. gTisch_6.Cmd.Aushebeeinheit := KMD_FERTIG;
  123. gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
  124. gMerker_Tisch_6_Ausgehoben := FALSE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio als BOOL, ob Aushebeeinheit in Position ist
  125. END_IF
  126. (* Status, Zylinderposition ausgeben *)
  127. IF (gTisch_6.Inputs.Aushebeeinheit_eingefahren = TRUE) AND (gTisch_6.Inputs.Aushebeeinheit_ausgefahren = FALSE) THEN
  128. // Toter Zweig, weil der Input vom Aushebesensor nicht angeschlossen wurde
  129. gTisch_6.Status.Aushebeeinheit := STATUS_EINGEFAHREN;
  130. ELSIF (gTisch_6.Inputs.Aushebeeinheit_eingefahren = FALSE) AND (gTisch_6.Inputs.Aushebeeinheit_ausgefahren = TRUE) THEN
  131. // Toter Zweig, weil der Input vom Aushebesensor nicht angeschlossen wurde
  132. gTisch_6.Status.Aushebeeinheit := STATUS_AUSGEFAHREN;
  133. ELSE
  134. // Es wird immer dieser Zweig angefahren und der Status der Aushebeeinheit bleibt immer STATS_BUSY (255)
  135. gTisch_6.Status.Aushebeeinheit := STATUS_BUSY;
  136. END_IF
  137. // 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
  138. (* Zeitüberwachung Eingefahren*)
  139. // 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
  140. // gTisch_6.Times.Aushebeeinheit_ZeitRun := gTisch_6.Times.Aushebeeinheit_ZeitRun + (RTInfo_0.cycle_time/1000);
  141. // IF (gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE AND gTisch_6.Status.Aushebeeinheit = STATUS_EINGEFAHREN)
  142. // OR (gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE AND gTisch_6.Status.Aushebeeinheit = STATUS_AUSGEFAHREN)THEN
  143. // (* lPortal_Mittelanschlag_EinZeit := FALSE;
  144. // lPortal_Mittelanschlag_AusZeit := FALSE; *)
  145. // gTisch_6.Times.Aushebeeinheit_ZeitRun := 0;
  146. // END_IF
  147. // IF gTisch_6.Times.Aushebeeinheit_ZeitRun >= 5000 THEN
  148. // gTisch_6.Status.Aushebeeinheit := STATUS_ERROR;
  149. //// gMerker_Tisch_6_Ausgehoben := FALSE; //Cech-Implement: Für Opc-Ua-Übergabe an Centurio, ob Aushebeeinheit in Position ist
  150. // IF gTisch_6.Times.Aushebeeinheit_EinZeit = TRUE THEN
  151. // gError[0] := 1;
  152. // END_IF
  153. // IF gTisch_6.Times.Aushebeeinheit_AusZeit = TRUE THEN
  154. // gError[1] := 1;
  155. // END_IF
  156. // END_IF
  157. // ELSE
  158. // gTisch_6.Times.Aushebeeinheit_ZeitRun := 0;
  159. // END_IF
  160. END_PROGRAM
  161. PROGRAM _EXIT
  162. (* Insert code here *)
  163. END_PROGRAM