DB.awl 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. ORGANIZATION_BLOCK OB 100
  2. BEGIN
  3. // Check DB/DI register assignments
  4. __ASSERT== __DBR 1, 0
  5. __ASSERT== __DBR 2, 0
  6. AUF DB 1
  7. __ASSERT== __DBR 1, 1
  8. __ASSERT== __DBR 2, 0
  9. AUF DB 2
  10. __ASSERT== __DBR 1, 2
  11. __ASSERT== __DBR 2, 0
  12. AUF DI 1
  13. __ASSERT== __DBR 1, 2
  14. __ASSERT== __DBR 2, 1
  15. AUF DI 2
  16. __ASSERT== __DBR 1, 2
  17. __ASSERT== __DBR 2, 2
  18. // Check initial DB 1 values
  19. AUF DB 1
  20. L DBW 0
  21. __ASSERT== __ACCU 1, 1337
  22. L DBD 2
  23. __ASSERT== __ACCU 1, DW#16#DEADBEEF
  24. L DBW 6
  25. __ASSERT== __ACCU 1, W#16#0102
  26. L DBB 8
  27. __ASSERT== __ACCU 1, 3
  28. L DBB 9
  29. __ASSERT== __ACCU 1, 0
  30. L DBW 10
  31. __ASSERT== __ACCU 1, 42
  32. // Check initial DB 2 values
  33. AUF DB 2
  34. L DBW 0
  35. __ASSERT== __ACCU 1, 123
  36. L DBW 2
  37. __ASSERT== __ACCU 1, 456
  38. L DBB 4
  39. __ASSERT== __ACCU 1, 1
  40. L DBB 5
  41. __ASSERT== __ACCU 1, 0
  42. L DBD 6
  43. __ASSERT== __ACCU 1, DW#16#77777777
  44. // Check direct DB fetch
  45. AUF DB 2
  46. __ASSERT== __DBR 1, 2
  47. L DB1.DBW 0
  48. __ASSERT== __DBR 1, 1
  49. __ASSERT== __ACCU 1, 1337
  50. L DB1.DBD 2
  51. __ASSERT== __DBR 1, 1
  52. __ASSERT== __ACCU 1, DW#16#DEADBEEF
  53. L DB1.DBW 6
  54. __ASSERT== __DBR 1, 1
  55. __ASSERT== __ACCU 1, W#16#0102
  56. L DB1.DBB 8
  57. __ASSERT== __DBR 1, 1
  58. __ASSERT== __ACCU 1, 3
  59. L DB1.DBB 9
  60. __ASSERT== __DBR 1, 1
  61. __ASSERT== __ACCU 1, 0
  62. L DB1.DBW 10
  63. __ASSERT== __DBR 1, 1
  64. __ASSERT== __ACCU 1, 42
  65. AUF DB 1
  66. __ASSERT== __DBR 1, 1
  67. L DB2.DBW 0
  68. __ASSERT== __DBR 1, 2
  69. __ASSERT== __ACCU 1, 123
  70. SET
  71. = M 0.0
  72. END_ORGANIZATION_BLOCK
  73. ORGANIZATION_BLOCK OB 1
  74. BEGIN
  75. // OB 100 execution sanity check
  76. __ASSERT== M 0.0, 1
  77. // Modify the DB 1
  78. AUF DB 1
  79. L 9876
  80. T DBW 6
  81. L 5432
  82. T DBW 10
  83. CLR
  84. = DBX 8.0
  85. SET
  86. = DBX 8.2
  87. // Check the DB 1 values
  88. L DBW 0
  89. __ASSERT== __ACCU 1, 1337
  90. L DBD 2
  91. __ASSERT== __ACCU 1, DW#16#DEADBEEF
  92. L DBW 6
  93. __ASSERT== __ACCU 1, 9876
  94. L DBB 8
  95. __ASSERT== __ACCU 1, 6
  96. L DBB 9
  97. __ASSERT== __ACCU 1, 0
  98. L DBW 10
  99. __ASSERT== __ACCU 1, 5432
  100. // Check direct DB store
  101. AUF DB 2 // DB 2 on purpose
  102. L 2244
  103. T DB1.DBW 6
  104. L L#1008901
  105. T DB1.DBD 2
  106. SET
  107. = DB1.DBX 8.0
  108. L 42
  109. T DB1.DBB 9
  110. L DB1.DBW 6
  111. __ASSERT== __ACCU 1, 2244
  112. L DB1.DBD 2
  113. __ASSERT== __ACCU 1, L#1008901
  114. U DB1.DBX 8.0
  115. __ASSERT== __STW VKE, 1
  116. L DB1.DBB 9
  117. __ASSERT== __ACCU 1, 42
  118. // FB 1 call test
  119. CLR
  120. = M 18.0
  121. CALL FB 1, DB 2 (
  122. INPUT_VAR := 8877,
  123. OUTPUT_VAR := LW 16,
  124. INOUT_VAR := M 18.0
  125. )
  126. __ASSERT== LW 16, 4433
  127. __ASSERT== M 18.0, 1
  128. // FC 1 call test
  129. L 1616
  130. T LW 16
  131. L 2020
  132. T MW 20
  133. CALL FC 1 (
  134. INPUT_WORD := LW 16,
  135. INPUT_FC := FC 2,
  136. INPUT_FB := FB 1,
  137. INPUT_DB := DB 1,
  138. OUTPUT_BOOL0 := M 18.0,
  139. OUTPUT_BOOL1 := M 18.1,
  140. INOUT_INT := MW 20
  141. )
  142. __ASSERT== M 18.0, 1
  143. __ASSERT== M 18.1, 0
  144. // Check DB/DI register assignments around FC/FB calls
  145. AUF DB 12
  146. AUF DI 13
  147. __ASSERT== __DBR 1, 12
  148. __ASSERT== __DBR 2, 13
  149. CALL FC 10
  150. __ASSERT== __DBR 1, 12
  151. __ASSERT== __DBR 2, 13
  152. CALL FB 11, DB 11
  153. __ASSERT== __DBR 1, 11
  154. __ASSERT== __DBR 2, 13
  155. // Check DBNO, DINO, DBLG and DILG operators
  156. AUF DB 1
  157. AUF DI 2
  158. L DBNO
  159. __ASSERT== __ACCU 1, 1
  160. L DINO
  161. __ASSERT== __ACCU 1, 2
  162. L DBLG
  163. __ASSERT== __ACCU 1, 12
  164. L DILG
  165. __ASSERT== __ACCU 1, 10
  166. CALL SFC 46 // STOP CPU
  167. END_ORGANIZATION_BLOCK
  168. FUNCTION FC 1: VOID
  169. VAR_INPUT
  170. INPUT_WORD : WORD;
  171. INPUT_FC : BLOCK_FC;
  172. INPUT_FB : BLOCK_FB;
  173. INPUT_DB : BLOCK_DB;
  174. END_VAR
  175. VAR_OUTPUT
  176. OUTPUT_BOOL0 : BOOL;
  177. OUTPUT_BOOL1 : BOOL;
  178. END_VAR
  179. VAR_IN_OUT
  180. INOUT_INT : INT;
  181. END_VAR
  182. VAR_TEMP
  183. TEMP0 : INT;
  184. TEMP1 : BOOL;
  185. TEMP2 : INT;
  186. END_VAR
  187. BEGIN
  188. L #INPUT_WORD
  189. __ASSERT== __ACCU 1, 1616
  190. L #INOUT_INT
  191. __ASSERT== __ACCU 1, 2020
  192. SET
  193. = #OUTPUT_BOOL0
  194. CLR
  195. = #OUTPUT_BOOL1
  196. L 4343
  197. T #TEMP0
  198. SET
  199. = #TEMP1
  200. L 6565
  201. T #TEMP2
  202. __ASSERT== LW 0, 4343
  203. __ASSERT== L 2.0, 1
  204. __ASSERT== LW 4, 6565
  205. // Check the passed-in DB
  206. AUF #INPUT_DB
  207. L DBW 0
  208. __ASSERT== __ACCU 1, 1337
  209. END_FUNCTION
  210. FUNCTION_BLOCK FB 1
  211. VAR_INPUT
  212. INPUT_VAR : INT;
  213. END_VAR
  214. VAR_OUTPUT
  215. OUTPUT_VAR : INT;
  216. END_VAR
  217. VAR_IN_OUT
  218. INOUT_VAR : BOOL;
  219. END_VAR
  220. VAR
  221. STAT_VAR : DWORD;
  222. END_VAR
  223. BEGIN
  224. L #INPUT_VAR
  225. __ASSERT== __ACCU 1, 8877
  226. L 4433
  227. T #OUTPUT_VAR
  228. U #INOUT_VAR
  229. __ASSERT== __STW VKE, 0
  230. SET
  231. = #INOUT_VAR
  232. L #STAT_VAR
  233. __ASSERT== __ACCU 1, DW#16#77777777
  234. END_FUNCTION_BLOCK
  235. FUNCTION FC 10 : VOID
  236. BEGIN
  237. __ASSERT== __DBR 1, 12
  238. __ASSERT== __DBR 2, 13
  239. AUF DB 1
  240. AUF DI 2
  241. __ASSERT== __DBR 1, 1
  242. __ASSERT== __DBR 2, 2
  243. END_FUNCTION
  244. FUNCTION_BLOCK FB 11
  245. BEGIN
  246. __ASSERT== __DBR 1, 13
  247. __ASSERT== __DBR 2, 11
  248. AUF DB 1
  249. AUF DI 2
  250. __ASSERT== __DBR 1, 1
  251. __ASSERT== __DBR 2, 2
  252. END_FUNCTION_BLOCK
  253. DATA_BLOCK DB 1
  254. TITLE = global DB
  255. STRUCT
  256. VARIABLE0 : INT;
  257. VARIABLE1 : DWORD;
  258. VARIABLE2 : WORD;
  259. VARIABLE3 : BOOL;
  260. VARIABLE4 : BOOL;
  261. VARIABLE5 : BOOL;
  262. VARIABLE6 : INT;
  263. END_STRUCT;
  264. BEGIN
  265. VARIABLE0 := 1337;
  266. VARIABLE1 := DW#16#DEADBEEF;
  267. VARIABLE2 := B#(1, 2);
  268. VARIABLE3 := True;
  269. VARIABLE4 := True;
  270. VARIABLE5 := False;
  271. VARIABLE6 := 42;
  272. END_DATA_BLOCK
  273. DATA_BLOCK DB 2
  274. TITLE = instance DB for FB 1
  275. FB 1
  276. BEGIN
  277. INPUT_VAR := 123;
  278. OUTPUT_VAR := 456;
  279. INOUT_VAR := True;
  280. STAT_VAR := DW#16#77777777;
  281. END_DATA_BLOCK
  282. DATA_BLOCK DB 11
  283. TITLE = instance DB for FB 11
  284. FB 11
  285. BEGIN
  286. END_DATA_BLOCK
  287. DATA_BLOCK DB 12
  288. TITLE = global data block 12
  289. STRUCT
  290. foo : INT;
  291. END_STRUCT;
  292. BEGIN
  293. foo := 12;
  294. END_DATA_BLOCK
  295. DATA_BLOCK DB 13
  296. TITLE = global data block 13
  297. STRUCT
  298. bar : INT;
  299. END_STRUCT;
  300. BEGIN
  301. bar := 13;
  302. END_DATA_BLOCK