stepchain.awl 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. FUNCTION_BLOCK FB 1
  2. TITLE =
  3. VERSION : 0.1
  4. VAR_INPUT
  5. T1_2 : BOOL ;
  6. T2_3 : BOOL := TRUE;
  7. T3_4 : BOOL := TRUE;
  8. T4_5 : BOOL := TRUE;
  9. T5_6 : BOOL := TRUE;
  10. T6_7 : BOOL := TRUE;
  11. T7_8 : BOOL := TRUE;
  12. T8_9 : BOOL := TRUE;
  13. T9_10 : BOOL := TRUE;
  14. T10_11 : BOOL := TRUE;
  15. T11_12 : BOOL := TRUE;
  16. T12_13 : BOOL := TRUE;
  17. T13_14 : BOOL := TRUE;
  18. T14_15 : BOOL := TRUE;
  19. T15_16 : BOOL := TRUE;
  20. T16_17 : BOOL := TRUE;
  21. T17_18 : BOOL := TRUE;
  22. T18_19 : BOOL := TRUE;
  23. T19_20 : BOOL := TRUE;
  24. T20_21 : BOOL := TRUE;
  25. T21_22 : BOOL := TRUE;
  26. T22_23 : BOOL := TRUE;
  27. T23_24 : BOOL := TRUE;
  28. T24_25 : BOOL := TRUE;
  29. T25_26 : BOOL := TRUE;
  30. T26_27 : BOOL := TRUE;
  31. T27_28 : BOOL := TRUE;
  32. T28_29 : BOOL := TRUE;
  33. T29_30 : BOOL := TRUE;
  34. T30_31 : BOOL := TRUE;
  35. T31_32 : BOOL := TRUE;
  36. T32_1 : BOOL := TRUE;
  37. RESET : BOOL ;
  38. WEITER_MB : BOOL ;
  39. WEITER_OB : BOOL ;
  40. END_VAR
  41. VAR_OUTPUT
  42. SCHRITT_NR : INT ;
  43. END_VAR
  44. VAR
  45. SM : INT ; //Schrittmerker
  46. END_VAR
  47. BEGIN
  48. NETWORK
  49. TITLE =
  50. U #RESET; // Kein Reset?
  51. SPBN krst; // Sprung zu Bedingungsprüfung
  52. L 0; // Schrittmerker rücksetzen
  53. T #SM;
  54. SPA ende;
  55. krst: U #WEITER_OB; // Weiter ohne Bedingung?
  56. SPB weit; // Sprung zu "weiter"
  57. U #WEITER_MB; // Nicht weiter mit Bedingung?
  58. SPBN ende; // Sprung zum Ende
  59. L #SM;
  60. L 1;
  61. SLD ; // accu2 = (1 << #SM)
  62. L DID 0; // Transitionen in accu1 laden
  63. TAD ; // Transitionen Bytereihenfolge tauschen
  64. UD ; // Transitionen mit (1 << #SM) maskieren
  65. SPZ ende; // Akt. Transition nicht aktiv? -> Ende
  66. weit: L #SM; // Schrittmerker inkrementieren
  67. INC 1;
  68. UD DW#16#1F;
  69. T #SM;
  70. ende: L #SM; // Schrittnummer ausgeben
  71. INC 1;
  72. T #SCHRITT_NR;
  73. END_FUNCTION_BLOCK
  74. DATA_BLOCK DB 1
  75. FB 1
  76. BEGIN
  77. END_DATA_BLOCK
  78. ORGANIZATION_BLOCK OB 1
  79. VAR_TEMP
  80. OB1_EV_CLASS : BYTE; // Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
  81. OB1_SCAN_1 : BYTE; // 1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
  82. OB1_PRIORITY : BYTE; // Priority of OB execution
  83. OB1_OB_NUMBR : BYTE; // 1 (Organization block 1, OB 1)
  84. OB1_RESERVED_1 : BYTE;
  85. OB1_RESERVED_2 : BYTE;
  86. OB1_PREV_CYCLE : INT; // Cycle time of previous OB 1 scan (milliseconds)
  87. OB1_MIN_CYCLE : INT; // Minimum cycle time of OB 1 (milliseconds)
  88. OB1_MAX_CYCLE : INT; // Maximum cycle time of OB 1 (milliseconds)
  89. OB1_DATE_TIME : DATE_AND_TIME; // Date and time OB 1 started
  90. END_VAR
  91. BEGIN
  92. CALL FB 1, DB 1 (
  93. T1_2 := E 0.0,
  94. T2_3 := E 0.1,
  95. T3_4 := E 0.2,
  96. T4_5 := E 0.3,
  97. T5_6 := E 0.4,
  98. T6_7 := E 0.5,
  99. T7_8 := E 0.6,
  100. T8_9 := E 0.7,
  101. T9_10 := E 1.0,
  102. T10_11 := E 1.1,
  103. T11_12 := E 1.2,
  104. T12_13 := E 1.3,
  105. T13_14 := E 1.4,
  106. T14_15 := E 1.5,
  107. T15_16 := E 1.6,
  108. T16_17 := E 1.7,
  109. T17_18 := E 2.0,
  110. T18_19 := E 2.1,
  111. T19_20 := E 2.2,
  112. T20_21 := E 2.3,
  113. T21_22 := E 2.4,
  114. T22_23 := E 2.5,
  115. T23_24 := E 2.6,
  116. T24_25 := E 2.7,
  117. T25_26 := E 3.0,
  118. T26_27 := E 3.1,
  119. T27_28 := E 3.2,
  120. T28_29 := E 3.3,
  121. T29_30 := E 3.4,
  122. T30_31 := E 3.5,
  123. T31_32 := E 3.6,
  124. T32_1 := E 3.7,
  125. RESET := E 4.0,
  126. WEITER_MB := E 4.1,
  127. WEITER_OB := E 4.2,
  128. SCHRITT_NR := AW 0,
  129. )
  130. END_ORGANIZATION_BLOCK