Main.st 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. PROGRAM _INIT
  2. RTInfo_0(enable:=1);
  3. Wartezeit_OPCUA := 1100;
  4. gMerker_Tisch_1_RFID_UID_STR := '0';
  5. gMerker_Tisch_2_RFID_UID_STR := '0';
  6. gMerker_Tisch_3_RFID_UID_STR := '0';
  7. gMerker_Tisch_4_RFID_UID_STR := '0';
  8. gMerker_Tisch_5_RFID_UID_STR := '0';
  9. gMerker_Tisch_6_RFID_UID_STR := '0';
  10. gMerker_Tisch_7_RFID_UID_STR := '0';
  11. gMerker_Tisch_8_RFID_UID_STR := '0';
  12. END_PROGRAM
  13. PROGRAM _CYCLIC
  14. //********************************** Tisch 1 ***********************************************
  15. (* Lesen *)
  16. gMerker_Tisch_1_RFID_Vorhanden := gTisch_1_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *) //Cech-Comment: Wenn dieses Bit gesetzt ist, dann ist ein Datenträger im LEsebereich
  17. //Cech-Comment: Diese zehn Integer-Werte sind im Balluff-Manual MAN_BIS_M_4XX_045_... Kap.9.2 S48 beschrieben
  18. // Die TAG-UID wird automatisch nach einem TAG-PResent vom Lesekopf ausgelesen und in das LEseregister geschrieben; da braucht kein LEsebefehl ausgegeben werden
  19. CASE Tisch_1_RFID OF
  20. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  21. 0: IF gTisch_1_RFID_Read[0] = 129 (*AND gTisch_1_RFID_Write[0].0 = FALSE*) THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde, dann liefert der TAG automatisch die UID zurück
  22. gMerker_Tisch_1_STRING_HELPER := '';
  23. gMerker_Tisch_1_RFID_UID_STR := '';
  24. FOR i := 1 TO 8 DO
  25. gMerker_Tisch_1_STRING_HELPER := USINT_TO_STRING (gTisch_1_RFID_Read[i]);
  26. IF LEN(gMerker_Tisch_1_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  27. gMerker_Tisch_1_STRING_HELPER := CONCAT('00', gMerker_Tisch_1_STRING_HELPER);
  28. ELSIF LEN(gMerker_Tisch_1_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  29. gMerker_Tisch_1_STRING_HELPER := CONCAT('0', gMerker_Tisch_1_STRING_HELPER);
  30. END_IF;
  31. gMerker_Tisch_1_RFID_UID_STR := CONCAT( gMerker_Tisch_1_RFID_UID_STR, gMerker_Tisch_1_STRING_HELPER );
  32. END_FOR
  33. Tisch_1_RFID := 5;
  34. END_IF
  35. 5: IF gMerker_Tisch_1_RFID_Vorhanden = FALSE AND gTisch_1.Status.Stopper = STATUS_EINGEFAHREN THEN
  36. gMerker_Tisch_1_RFID_UID_STR := '0';
  37. Tisch_1_RFID := 0;
  38. END_IF
  39. //Cech-Implement-Ende
  40. END_CASE
  41. //********************************** Tisch 2 ***********************************************
  42. gMerker_Tisch_2_RFID_Vorhanden := gTisch_2_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
  43. CASE Tisch_2_RFID OF
  44. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  45. 0: IF gTisch_2_RFID_Read[0] = 129 AND gTisch_2_RFID_Write[0].0 = FALSE THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde
  46. gMerker_Tisch_2_STRING_HELPER := '';
  47. gMerker_Tisch_2_RFID_UID_STR := '';
  48. FOR i := 1 TO 8 DO
  49. gMerker_Tisch_2_STRING_HELPER := USINT_TO_STRING (gTisch_2_RFID_Read[i]);
  50. IF LEN(gMerker_Tisch_2_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  51. gMerker_Tisch_2_STRING_HELPER := CONCAT('00', gMerker_Tisch_2_STRING_HELPER);
  52. ELSIF LEN(gMerker_Tisch_2_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  53. gMerker_Tisch_2_STRING_HELPER := CONCAT('0', gMerker_Tisch_2_STRING_HELPER);
  54. END_IF;
  55. gMerker_Tisch_2_RFID_UID_STR := CONCAT( gMerker_Tisch_2_RFID_UID_STR, gMerker_Tisch_2_STRING_HELPER );
  56. END_FOR
  57. Tisch_2_RFID := 5;
  58. END_IF
  59. 5: IF gMerker_Tisch_2_RFID_Vorhanden = FALSE AND gTisch_2.Status.Stopper = STATUS_EINGEFAHREN THEN
  60. gMerker_Tisch_2_RFID_UID_STR := '0';
  61. Tisch_2_RFID := 0;
  62. END_IF
  63. //Cech-Implement-Ende
  64. END_CASE
  65. //********************************** Tisch 3 ***********************************************
  66. gMerker_Tisch_3_RFID_Vorhanden := gTisch_3_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
  67. CASE Tisch_3_RFID OF
  68. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  69. 0: IF gTisch_3_RFID_Read[0] = 129 AND gTisch_3_RFID_Write[0].0 = FALSE THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde
  70. gMerker_Tisch_3_STRING_HELPER := '';
  71. gMerker_Tisch_3_RFID_UID_STR := '';
  72. FOR i := 1 TO 8 DO
  73. gMerker_Tisch_3_STRING_HELPER := USINT_TO_STRING (gTisch_3_RFID_Read[i]);
  74. IF LEN(gMerker_Tisch_3_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  75. gMerker_Tisch_3_STRING_HELPER := CONCAT('00', gMerker_Tisch_3_STRING_HELPER);
  76. ELSIF LEN(gMerker_Tisch_3_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  77. gMerker_Tisch_3_STRING_HELPER := CONCAT('0', gMerker_Tisch_3_STRING_HELPER);
  78. END_IF;
  79. gMerker_Tisch_3_RFID_UID_STR := CONCAT( gMerker_Tisch_3_RFID_UID_STR, gMerker_Tisch_3_STRING_HELPER );
  80. END_FOR
  81. Tisch_3_RFID := 5;
  82. END_IF
  83. 5: IF gMerker_Tisch_3_RFID_Vorhanden = FALSE AND gTisch_3.Status.Stopper = STATUS_EINGEFAHREN THEN
  84. gMerker_Tisch_3_RFID_UID_STR := '0';
  85. Tisch_3_RFID := 0;
  86. END_IF
  87. END_CASE
  88. //********************************** Tisch 4 ***********************************************
  89. gMerker_Tisch_4_RFID_Vorhanden := gTisch_4_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
  90. CASE Tisch_4_RFID OF
  91. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  92. 0: IF gTisch_4_RFID_Read[0] = 129 AND gTisch_4_RFID_Write[0].0 = FALSE THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde
  93. gMerker_Tisch_4_STRING_HELPER := '';
  94. gMerker_Tisch_4_RFID_UID_STR := '';
  95. FOR i := 1 TO 8 DO
  96. gMerker_Tisch_4_STRING_HELPER := USINT_TO_STRING (gTisch_4_RFID_Read[i]);
  97. IF LEN(gMerker_Tisch_4_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  98. gMerker_Tisch_4_STRING_HELPER := CONCAT('00', gMerker_Tisch_4_STRING_HELPER);
  99. ELSIF LEN(gMerker_Tisch_4_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  100. gMerker_Tisch_4_STRING_HELPER := CONCAT('0', gMerker_Tisch_4_STRING_HELPER);
  101. END_IF;
  102. gMerker_Tisch_4_RFID_UID_STR := CONCAT( gMerker_Tisch_4_RFID_UID_STR, gMerker_Tisch_4_STRING_HELPER );
  103. END_FOR
  104. Tisch_4_RFID := 5;
  105. END_IF
  106. 5: IF gMerker_Tisch_4_RFID_Vorhanden = FALSE AND gTisch_4.Status.Stopper = STATUS_EINGEFAHREN THEN
  107. gMerker_Tisch_4_RFID_UID_STR := '0';
  108. Tisch_4_RFID := 0;
  109. END_IF
  110. END_CASE
  111. //********************************** Tisch 5 ***********************************************
  112. gMerker_Tisch_5_RFID_Vorhanden := gTisch_5_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
  113. CASE Tisch_5_RFID OF
  114. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  115. 0: IF gTisch_5_RFID_Read[0] = 129 AND gTisch_5_RFID_Write[0].0 = FALSE THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde
  116. gMerker_Tisch_5_STRING_HELPER := '';
  117. gMerker_Tisch_5_RFID_UID_STR := '';
  118. FOR i := 1 TO 8 DO
  119. gMerker_Tisch_5_STRING_HELPER := USINT_TO_STRING (gTisch_5_RFID_Read[i]);
  120. IF LEN(gMerker_Tisch_5_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  121. gMerker_Tisch_5_STRING_HELPER := CONCAT('00', gMerker_Tisch_5_STRING_HELPER);
  122. ELSIF LEN(gMerker_Tisch_5_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  123. gMerker_Tisch_5_STRING_HELPER := CONCAT('0', gMerker_Tisch_5_STRING_HELPER);
  124. END_IF;
  125. gMerker_Tisch_5_RFID_UID_STR := CONCAT( gMerker_Tisch_5_RFID_UID_STR, gMerker_Tisch_5_STRING_HELPER );
  126. END_FOR
  127. Tisch_5_RFID := 5;
  128. END_IF
  129. 5: IF gMerker_Tisch_5_RFID_Vorhanden = FALSE AND gTisch_5.Status.Stopper = STATUS_EINGEFAHREN THEN
  130. gMerker_Tisch_5_RFID_UID_STR := '0';
  131. Tisch_5_RFID := 0;
  132. END_IF
  133. END_CASE
  134. //********************************** Tisch 6 ***********************************************
  135. gMerker_Tisch_6_RFID_Vorhanden := gTisch_6_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
  136. CASE Tisch_6_RFID OF
  137. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  138. 0: IF gTisch_6_RFID_Read[0] = 129 (*AND gTisch_6_RFID_Write[0].0 = FALSE *) THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde
  139. gMerker_Tisch_6_STRING_HELPER := '';
  140. gMerker_Tisch_6_RFID_UID_STR := '';
  141. FOR i := 1 TO 8 DO
  142. gMerker_Tisch_6_STRING_HELPER := USINT_TO_STRING (gTisch_6_RFID_Read[i]);
  143. IF LEN(gMerker_Tisch_6_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  144. gMerker_Tisch_6_STRING_HELPER := CONCAT('00', gMerker_Tisch_6_STRING_HELPER);
  145. ELSIF LEN(gMerker_Tisch_6_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  146. gMerker_Tisch_6_STRING_HELPER := CONCAT('0', gMerker_Tisch_6_STRING_HELPER);
  147. END_IF;
  148. gMerker_Tisch_6_RFID_UID_STR := CONCAT( gMerker_Tisch_6_RFID_UID_STR, gMerker_Tisch_6_STRING_HELPER );
  149. END_FOR
  150. Tisch_6_RFID := 5;
  151. END_IF
  152. 5: IF gMerker_Tisch_6_RFID_Vorhanden = FALSE AND gTisch_6.Status.Stopper = STATUS_EINGEFAHREN THEN
  153. gMerker_Tisch_6_RFID_UID_STR := '0';
  154. Tisch_6_RFID := 0;
  155. END_IF
  156. END_CASE
  157. //********************************** Tisch 7 ***********************************************
  158. gMerker_Tisch_7_RFID_Vorhanden := gTisch_7_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
  159. CASE Tisch_7_RFID OF
  160. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  161. 0: IF gTisch_7_RFID_Read[0] = 129 AND gTisch_7_RFID_Write[0].0 = FALSE THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde
  162. gMerker_Tisch_7_STRING_HELPER := '';
  163. gMerker_Tisch_7_RFID_UID_STR := '';
  164. FOR i := 1 TO 8 DO
  165. gMerker_Tisch_7_STRING_HELPER := USINT_TO_STRING (gTisch_7_RFID_Read[i]);
  166. IF LEN(gMerker_Tisch_7_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  167. gMerker_Tisch_7_STRING_HELPER := CONCAT('00', gMerker_Tisch_7_STRING_HELPER);
  168. ELSIF LEN(gMerker_Tisch_7_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  169. gMerker_Tisch_7_STRING_HELPER := CONCAT('0', gMerker_Tisch_7_STRING_HELPER);
  170. END_IF;
  171. gMerker_Tisch_7_RFID_UID_STR := CONCAT( gMerker_Tisch_7_RFID_UID_STR, gMerker_Tisch_7_STRING_HELPER );
  172. END_FOR
  173. Tisch_7_RFID := 5;
  174. END_IF
  175. 5: IF gMerker_Tisch_7_RFID_Vorhanden = FALSE AND gTisch_7.Status.Stopper = STATUS_EINGEFAHREN THEN
  176. gMerker_Tisch_7_RFID_UID_STR := '0';
  177. Tisch_7_RFID := 0;
  178. END_IF
  179. //Cech-Implement-Ende
  180. END_CASE
  181. //********************************** Tisch 8 ***********************************************
  182. gMerker_Tisch_8_RFID_Vorhanden := gTisch_8_RFID_Read[0].0; (* Auslesen ob Chip vor Lesekopf *)
  183. CASE Tisch_8_RFID OF
  184. //Cech-Implement-Beginn: Hier soll die UID aus dem TAg nach Tag-Present rausgeholt und auf 8Byte-Array gMerker_Tisch_1_RFID_UID übergeben werden, damit die UID für Centurio über Opc-Ua übergeben werden kannn
  185. 0: IF gTisch_8_RFID_Read[0] = 129 AND gTisch_8_RFID_Write[0].0 = FALSE THEN //Cech-Comment: Wenn der TAG im Lesebereich ist und der Lesekopf betriebsbereit ist ( Read[0] = 1000 0001 ), aber noch kein Lesebefehl ausgegeben wurde
  186. gMerker_Tisch_8_STRING_HELPER := '';
  187. gMerker_Tisch_8_RFID_UID_STR := '';
  188. FOR i := 1 TO 8 DO
  189. gMerker_Tisch_8_STRING_HELPER := USINT_TO_STRING (gTisch_8_RFID_Read[i]);
  190. IF LEN(gMerker_Tisch_8_STRING_HELPER) = 1 THEN //Cech-Comment: Wenn der String nur 1 ZEichen ist, muss mit 2 Nullen links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  191. gMerker_Tisch_8_STRING_HELPER := CONCAT('00', gMerker_Tisch_8_STRING_HELPER);
  192. ELSIF LEN(gMerker_Tisch_8_STRING_HELPER) = 2 THEN //Cech-Comment: Wenn der String nur 2 Zeichen ist, muss mit 1 Null links verlängert werden, sonst wird ID verstümmelt und ist dadurch nicht mehr eindeutig über alle 8 Bytes der UID
  193. gMerker_Tisch_8_STRING_HELPER := CONCAT('0', gMerker_Tisch_8_STRING_HELPER);
  194. END_IF;
  195. gMerker_Tisch_8_RFID_UID_STR := CONCAT( gMerker_Tisch_8_RFID_UID_STR, gMerker_Tisch_8_STRING_HELPER );
  196. END_FOR
  197. Tisch_8_RFID := 5;
  198. END_IF
  199. 5: IF gMerker_Tisch_8_RFID_Vorhanden = FALSE AND gTisch_8.Status.Stopper = STATUS_EINGEFAHREN THEN
  200. gMerker_Tisch_8_RFID_UID_STR := '0';
  201. Tisch_8_RFID := 0;
  202. END_IF
  203. END_CASE
  204. OPCUA_TEST_1;
  205. OPCUATEST2;
  206. OPCUATEST3;
  207. END_PROGRAM
  208. PROGRAM _EXIT
  209. (* Insert code here *)
  210. END_PROGRAM