ORGANIZATION_BLOCK OB 100 BEGIN // Check DB/DI register assignments __ASSERT== __DBR 1, 0 __ASSERT== __DBR 2, 0 AUF DB 1 __ASSERT== __DBR 1, 1 __ASSERT== __DBR 2, 0 AUF DB 2 __ASSERT== __DBR 1, 2 __ASSERT== __DBR 2, 0 AUF DI 1 __ASSERT== __DBR 1, 2 __ASSERT== __DBR 2, 1 AUF DI 2 __ASSERT== __DBR 1, 2 __ASSERT== __DBR 2, 2 // Check initial DB 1 values AUF DB 1 L DBW 0 __ASSERT== __ACCU 1, 1337 L DBD 2 __ASSERT== __ACCU 1, DW#16#DEADBEEF L DBW 6 __ASSERT== __ACCU 1, W#16#0102 L DBB 8 __ASSERT== __ACCU 1, 3 L DBB 9 __ASSERT== __ACCU 1, 0 L DBW 10 __ASSERT== __ACCU 1, 42 // Check initial DB 2 values AUF DB 2 L DBW 0 __ASSERT== __ACCU 1, 123 L DBW 2 __ASSERT== __ACCU 1, 456 L DBB 4 __ASSERT== __ACCU 1, 1 L DBB 5 __ASSERT== __ACCU 1, 0 L DBD 6 __ASSERT== __ACCU 1, DW#16#77777777 // Check direct DB fetch AUF DB 2 __ASSERT== __DBR 1, 2 L DB1.DBW 0 __ASSERT== __DBR 1, 1 __ASSERT== __ACCU 1, 1337 L DB1.DBD 2 __ASSERT== __DBR 1, 1 __ASSERT== __ACCU 1, DW#16#DEADBEEF L DB1.DBW 6 __ASSERT== __DBR 1, 1 __ASSERT== __ACCU 1, W#16#0102 L DB1.DBB 8 __ASSERT== __DBR 1, 1 __ASSERT== __ACCU 1, 3 L DB1.DBB 9 __ASSERT== __DBR 1, 1 __ASSERT== __ACCU 1, 0 L DB1.DBW 10 __ASSERT== __DBR 1, 1 __ASSERT== __ACCU 1, 42 AUF DB 1 __ASSERT== __DBR 1, 1 L DB2.DBW 0 __ASSERT== __DBR 1, 2 __ASSERT== __ACCU 1, 123 SET = M 0.0 END_ORGANIZATION_BLOCK ORGANIZATION_BLOCK OB 1 BEGIN // OB 100 execution sanity check __ASSERT== M 0.0, 1 // Modify the DB 1 AUF DB 1 L 9876 T DBW 6 L 5432 T DBW 10 CLR = DBX 8.0 SET = DBX 8.2 // Check the DB 1 values L DBW 0 __ASSERT== __ACCU 1, 1337 L DBD 2 __ASSERT== __ACCU 1, DW#16#DEADBEEF L DBW 6 __ASSERT== __ACCU 1, 9876 L DBB 8 __ASSERT== __ACCU 1, 6 L DBB 9 __ASSERT== __ACCU 1, 0 L DBW 10 __ASSERT== __ACCU 1, 5432 // Check direct DB store AUF DB 2 // DB 2 on purpose L 2244 T DB1.DBW 6 L L#1008901 T DB1.DBD 2 SET = DB1.DBX 8.0 L 42 T DB1.DBB 9 L DB1.DBW 6 __ASSERT== __ACCU 1, 2244 L DB1.DBD 2 __ASSERT== __ACCU 1, L#1008901 U DB1.DBX 8.0 __ASSERT== __STW VKE, 1 L DB1.DBB 9 __ASSERT== __ACCU 1, 42 // FB 1 call test CLR = M 18.0 CALL FB 1, DB 2 ( INPUT_VAR := 8877, OUTPUT_VAR := LW 16, INOUT_VAR := M 18.0 ) __ASSERT== LW 16, 4433 __ASSERT== M 18.0, 1 // FC 1 call test L 1616 T LW 16 L 2020 T MW 20 CALL FC 1 ( INPUT_WORD := LW 16, INPUT_FC := FC 2, INPUT_FB := FB 1, INPUT_DB := DB 1, OUTPUT_BOOL0 := M 18.0, OUTPUT_BOOL1 := M 18.1, INOUT_INT := MW 20 ) __ASSERT== M 18.0, 1 __ASSERT== M 18.1, 0 // Check DB/DI register assignments around FC/FB calls AUF DB 12 AUF DI 13 __ASSERT== __DBR 1, 12 __ASSERT== __DBR 2, 13 CALL FC 10 __ASSERT== __DBR 1, 12 __ASSERT== __DBR 2, 13 CALL FB 11, DB 11 __ASSERT== __DBR 1, 11 __ASSERT== __DBR 2, 13 // Check DBNO, DINO, DBLG and DILG operators AUF DB 1 AUF DI 2 L DBNO __ASSERT== __ACCU 1, 1 L DINO __ASSERT== __ACCU 1, 2 L DBLG __ASSERT== __ACCU 1, 12 L DILG __ASSERT== __ACCU 1, 10 CALL SFC 46 // STOP CPU END_ORGANIZATION_BLOCK FUNCTION FC 1: VOID VAR_INPUT INPUT_WORD : WORD; INPUT_FC : BLOCK_FC; INPUT_FB : BLOCK_FB; INPUT_DB : BLOCK_DB; END_VAR VAR_OUTPUT OUTPUT_BOOL0 : BOOL; OUTPUT_BOOL1 : BOOL; END_VAR VAR_IN_OUT INOUT_INT : INT; END_VAR VAR_TEMP TEMP0 : INT; TEMP1 : BOOL; TEMP2 : INT; END_VAR BEGIN L #INPUT_WORD __ASSERT== __ACCU 1, 1616 L #INOUT_INT __ASSERT== __ACCU 1, 2020 SET = #OUTPUT_BOOL0 CLR = #OUTPUT_BOOL1 L 4343 T #TEMP0 SET = #TEMP1 L 6565 T #TEMP2 __ASSERT== LW 0, 4343 __ASSERT== L 2.0, 1 __ASSERT== LW 4, 6565 // Check the passed-in DB AUF #INPUT_DB L DBW 0 __ASSERT== __ACCU 1, 1337 END_FUNCTION FUNCTION_BLOCK FB 1 VAR_INPUT INPUT_VAR : INT; END_VAR VAR_OUTPUT OUTPUT_VAR : INT; END_VAR VAR_IN_OUT INOUT_VAR : BOOL; END_VAR VAR STAT_VAR : DWORD; END_VAR BEGIN L #INPUT_VAR __ASSERT== __ACCU 1, 8877 L 4433 T #OUTPUT_VAR U #INOUT_VAR __ASSERT== __STW VKE, 0 SET = #INOUT_VAR L #STAT_VAR __ASSERT== __ACCU 1, DW#16#77777777 END_FUNCTION_BLOCK FUNCTION FC 10 : VOID BEGIN __ASSERT== __DBR 1, 12 __ASSERT== __DBR 2, 13 AUF DB 1 AUF DI 2 __ASSERT== __DBR 1, 1 __ASSERT== __DBR 2, 2 END_FUNCTION FUNCTION_BLOCK FB 11 BEGIN __ASSERT== __DBR 1, 13 __ASSERT== __DBR 2, 11 AUF DB 1 AUF DI 2 __ASSERT== __DBR 1, 1 __ASSERT== __DBR 2, 2 END_FUNCTION_BLOCK DATA_BLOCK DB 1 TITLE = global DB STRUCT VARIABLE0 : INT; VARIABLE1 : DWORD; VARIABLE2 : WORD; VARIABLE3 : BOOL; VARIABLE4 : BOOL; VARIABLE5 : BOOL; VARIABLE6 : INT; END_STRUCT; BEGIN VARIABLE0 := 1337; VARIABLE1 := DW#16#DEADBEEF; VARIABLE2 := B#(1, 2); VARIABLE3 := True; VARIABLE4 := True; VARIABLE5 := False; VARIABLE6 := 42; END_DATA_BLOCK DATA_BLOCK DB 2 TITLE = instance DB for FB 1 FB 1 BEGIN INPUT_VAR := 123; OUTPUT_VAR := 456; INOUT_VAR := True; STAT_VAR := DW#16#77777777; END_DATA_BLOCK DATA_BLOCK DB 11 TITLE = instance DB for FB 11 FB 11 BEGIN END_DATA_BLOCK DATA_BLOCK DB 12 TITLE = global data block 12 STRUCT foo : INT; END_STRUCT; BEGIN foo := 12; END_DATA_BLOCK DATA_BLOCK DB 13 TITLE = global data block 13 STRUCT bar : INT; END_STRUCT; BEGIN bar := 13; END_DATA_BLOCK