Main.st 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. PROGRAM _INIT
  2. Tisch_2 := 0;
  3. END_PROGRAM
  4. PROGRAM _CYCLIC
  5. //Cech-Comment: Schauen, ob auf einen Tstendruck gewartet wird, und eine Lampe als Signal eingeschaltet werden soll (output in jeder Station, ich weiß nicht, ob das am Terminal ein Lämpchen ist oder Ä)
  6. IF (gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND Tisch_2 = 0) OR (gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = FALSE AND Tisch_2 = 0) THEN
  7. gTisch_2.Outputs.Lampe_Start := TRUE;
  8. ELSE
  9. gTisch_2.Outputs.Lampe_Start := FALSE;
  10. END_IF
  11. //Cech-Comment: Wenn die Station generell deaktiviert ist, werden alle STopper eingefahren
  12. IF gTaster_Tisch_2_aus = TRUE THEN
  13. gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
  14. gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
  15. gMerker_RFID_Tisch_2_gelesen := TRUE;
  16. Tisch_2 := 0;
  17. END_IF
  18. CASE Tisch_2 OF
  19. //Cech-Comment: Mit dem grünen TAster werden entsprechend der Konstellation in der Station die Stopper aus und eingefahren und der RFID-Merker wird geschrieben oder gelöscht
  20. 0:
  21. //Cech-Comment: Wenn grüne TAste und ein WST in und auch vor der Station, danach frei und der RFID gelesen wurde, dann WST aus der Station entlasse und RFID-VAriable der Station auf ungelesen stellen
  22. IF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND gTaster_Tisch_2_aus = FALSE (*AND gMerker_RFID_Tisch_2_gelesen = TRUE*) THEN
  23. gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
  24. gMerker_RFID_Tisch_2_gelesen := FALSE;
  25. Tisch_2 := 10;
  26. // Cech-Comment: Wenn grüner TAster und kein WST vor der Station und WST in der Station und keiner nach der Station und RFID gelesen, dann WST entlassen und RFID-Variable der STation auf ungelesen setzen
  27. ELSIF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = FALSE AND gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Inputs.Stausensor = FALSE AND gTaster_Tisch_2_aus = FALSE (*AND gMerker_RFID_Tisch_2_gelesen = TRUE*) THEN
  28. gTisch_2.Cmd.Stopper := KMD_EINFAHREN;
  29. gMerker_RFID_Tisch_2_gelesen := FALSE;
  30. Tisch_2 := 70;
  31. // Cech-Comment: Wenn grüner TAster und WST vor der Station und kein WST in der Station, dann Vorstopper einfahren
  32. ELSIF gTisch_2.Inputs.Start = TRUE AND gTisch_2.Inputs.Vor_VorStopper = TRUE AND gTisch_2.Inputs.Vor_Stopper = FALSE AND gTaster_Tisch_2_aus = FALSE THEN
  33. gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
  34. Tisch_2 := 110;
  35. // Cech-Comment: Wenn Station aktiv und beide Stopper vor der Station und in der Station drinnen, dann beide Stopper ausfahren und Prozess mit "0" wieder von vorne beginnen
  36. ELSIF gTaster_Tisch_2_aus = FALSE AND gTisch_2.Inputs.Stopper_eingefahren = TRUE AND gTisch_2.Inputs.Vorstopper_eingefahren = TRUE THEN
  37. gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
  38. gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
  39. Tisch_2 := 0;
  40. END_IF
  41. // Cech-Comment: Im Block bis exclusive 70 wird ein neuer WST in die Station eingefahren, wenn ein WST die Station verlassen hat und ein anderer beim Vorstopper wartet
  42. 10: //Cech-Comment: Wenn der WST den Sensor NAchstopper überfahren hat, dann ...
  43. IF gTisch_2.Inputs.Nach_Stopper = TRUE THEN
  44. Tisch_2 := 20;
  45. END_IF
  46. 20: //Cech-Comment: WEnn der WST den Stopper verlassen hat, wird der Stopper ausgefahren und der Vorstopper freigegeben
  47. IF gTisch_2.Inputs.Nach_Stopper = FALSE THEN
  48. gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
  49. gTisch_2.Cmd.Vorstopper := KMD_EINFAHREN;
  50. Tisch_2 := 30;
  51. END_IF
  52. 30: //WST hat den Vorstopper passiert
  53. IF gTisch_2.Inputs.Nach_Vorstopper = TRUE THEN
  54. Tisch_2 := 40;
  55. END_IF
  56. 40: //und der Vorstopper wird wieder ausgefahren
  57. IF gTisch_2.Inputs.Nach_Vorstopper = FALSE THEN
  58. gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
  59. Tisch_2 := 50;
  60. END_IF
  61. 50: //Prozess wartet, bis der Stausensor hinter der STation anschlägt
  62. IF gTisch_2.Inputs.Stausensor = TRUE THEN
  63. Tisch_2 := 60;
  64. END_IF
  65. 60: //... und setzt den Prozess wieder auf "0", dann beginnt er wieder oben
  66. IF gTisch_2.Status.Vorstopper = STATUS_AUSGEFAHREN AND gTisch_2.Status.Stopper = STATUS_AUSGEFAHREN THEN
  67. Tisch_2 := 0;
  68. END_IF
  69. //Cech-Comment: Im Block bis exclusive 110: Prozess, wenn der WST aus der Station entlassen wurde und keiner beim Vortsopper wartet
  70. 70: //Nachstopper wird überfahren
  71. IF gTisch_2.Inputs.Nach_Stopper = TRUE THEN
  72. Tisch_2 := 80;
  73. END_IF
  74. 80: //NAchstopper wieder frei --> Stopper wieder ausfahren
  75. IF gTisch_2.Inputs.Nach_Stopper = FALSE THEN
  76. gTisch_2.Cmd.Stopper := KMD_AUSFAHREN;
  77. Tisch_2 := 90;
  78. END_IF
  79. 90: //Warten, bis der Stausensor erreicht ist
  80. IF gTisch_2.Inputs.Stausensor = TRUE THEN
  81. Tisch_2 := 100;
  82. END_IF
  83. 100: // und dann den Prozess wieder auf "0" stellen
  84. IF gTisch_2.Status.Stopper = STATUS_AUSGEFAHREN THEN
  85. Tisch_2 := 0;
  86. END_IF
  87. // Cech-Comment: Prozess wenn ein WST beim Vorstopper angekommen und Vorstopper eingefahren wurde, und in der Station aber kein WST drinnen steht
  88. 110: //Cech-Comment: WST hat Vorstopper passiert
  89. IF gTisch_2.Inputs.Nach_Vorstopper = TRUE THEN
  90. Tisch_2 := 120;
  91. END_IF
  92. 120: //Cech-Comment: Vorstopper wird wieder ausgefahren
  93. IF gTisch_2.Inputs.Nach_Vorstopper = FALSE THEN
  94. gTisch_2.Cmd.Vorstopper := KMD_AUSFAHREN;
  95. Tisch_2 := 130;
  96. END_IF
  97. 130: //Cech-Comment: Wenn alles stabil ist, denn wird der Prozess mit "0" von vorne begonnen
  98. IF gTisch_2.Inputs.Vor_Stopper = TRUE AND gTisch_2.Status.Vorstopper = STATUS_AUSGEFAHREN THEN
  99. Tisch_2 := 0;
  100. END_IF
  101. END_CASE
  102. END_PROGRAM
  103. PROGRAM _EXIT
  104. (* Insert code here *)
  105. END_PROGRAM