insn_SV.awl 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. ORGANIZATION_BLOCK OB 1
  2. BEGIN
  3. // Start timer and let it expire
  4. __STWRST
  5. L 0
  6. SV T 10
  7. SET
  8. R T 10
  9. U T 10
  10. __ASSERT== __STW VKE, 0
  11. SET
  12. L W#16#0010
  13. SV T 10
  14. U T 10
  15. __ASSERT== __STW VKE, 1
  16. L T 10
  17. __ASSERT>= __ACCU 1, 5
  18. __SLEEP 101
  19. U T 10
  20. __ASSERT== __STW VKE, 0
  21. L T 10
  22. __ASSERT== __ACCU 1, 0
  23. // Start timer and reset VKE before it expires
  24. __STWRST
  25. L 0
  26. SV T 10
  27. SET
  28. R T 10
  29. U T 10
  30. __ASSERT== __STW VKE, 0
  31. SET
  32. L W#16#0010
  33. SV T 10
  34. U T 10
  35. __ASSERT== __STW VKE, 1
  36. L T 10
  37. __ASSERT>= __ACCU 1, 5
  38. CLR
  39. L W#16#0010
  40. SV T 10
  41. U T 10
  42. __ASSERT== __STW VKE, 1
  43. L T 10
  44. __ASSERT>= __ACCU 1, 5
  45. __SLEEP 101
  46. U T 10
  47. __ASSERT== __STW VKE, 0
  48. L T 10
  49. __ASSERT== __ACCU 1, 0
  50. // Reset signal
  51. __STWRST
  52. L 0
  53. SV T 10
  54. SET
  55. R T 10
  56. U T 10
  57. __ASSERT== __STW VKE, 0
  58. SET
  59. L W#16#0010
  60. SV T 10
  61. U T 10
  62. __ASSERT== __STW VKE, 1
  63. L T 10
  64. __ASSERT>= __ACCU 1, 5
  65. SET
  66. R T 10
  67. U T 10
  68. __ASSERT== __STW VKE, 0
  69. L T 10
  70. __ASSERT== __ACCU 1, 0
  71. __SLEEP 101
  72. U T 10
  73. __ASSERT== __STW VKE, 0
  74. L T 10
  75. __ASSERT== __ACCU 1, 0
  76. // Test FR.
  77. // Always run SV with VKE=1. The preceding FR shall trigger an edge detect in SV.
  78. // Thus a re-trigger in SV shall happen -> timer shall not expire.
  79. __STWRST
  80. SET
  81. L W#16#0010
  82. SV T 11
  83. __SLEEP 50
  84. L T 11
  85. __ASSERT>= __ACCU 1, 1
  86. SET
  87. FR T 11
  88. CLR
  89. FR T 11
  90. SET
  91. L W#16#0010
  92. SV T 11
  93. __SLEEP 50
  94. L T 11
  95. __ASSERT>= __ACCU 1, 1
  96. SET
  97. FR T 11
  98. CLR
  99. FR T 11
  100. SET
  101. L W#16#0010
  102. SV T 11
  103. __SLEEP 50
  104. L T 11
  105. __ASSERT>= __ACCU 1, 1
  106. SET
  107. FR T 11
  108. CLR
  109. FR T 11
  110. SET
  111. L W#16#0010
  112. SV T 11
  113. __SLEEP 50
  114. L T 11
  115. __ASSERT>= __ACCU 1, 1
  116. // Test FR without FR edge (VKE at FR is always 1).
  117. // Always run SV with VKE=1. The timer shall not be retriggerd.
  118. __STWRST
  119. SET
  120. L W#16#0010
  121. SV T 12
  122. __SLEEP 50
  123. L T 12
  124. __ASSERT>= __ACCU 1, 1
  125. SET
  126. FR T 12
  127. SET
  128. L W#16#0010
  129. SV T 12
  130. __SLEEP 50
  131. SET
  132. FR T 12
  133. SET
  134. L W#16#0010
  135. SV T 12
  136. __SLEEP 50
  137. SET
  138. FR T 12
  139. SET
  140. L W#16#0010
  141. SV T 12
  142. __SLEEP 50
  143. L T 12
  144. __ASSERT== __ACCU 1, 0
  145. // Test timer parameter
  146. AUF DB 1
  147. L DBW 0
  148. __ASSERT== __ACCU 1, 24
  149. CALL FB 1, DB 1 (
  150. TIMER_VAR := T 42
  151. )
  152. CALL SFC 46 // STOP CPU
  153. END_ORGANIZATION_BLOCK
  154. FUNCTION_BLOCK FB 1
  155. VAR_INPUT
  156. TIMER_VAR : TIMER;
  157. END_VAR
  158. BEGIN
  159. L DIW 0
  160. __ASSERT== __ACCU 1, 42
  161. L #TIMER_VAR
  162. __ASSERT== __ACCU 1, 0
  163. U #TIMER_VAR
  164. __ASSERT== __STW VKE, 0
  165. SV #TIMER_VAR
  166. END_FUNCTION_BLOCK
  167. DATA_BLOCK DB 1
  168. FB 1
  169. BEGIN
  170. TIMER_VAR := T 24;
  171. END_DATA_BLOCK