123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559 |
- DATA_BLOCK DB 99
- TITLE = Main data block
- VERSION : 0.1
- STRUCT
- VAR0 : ARRAY [1 .. 2] OF INT;
- VAR1 : ARRAY [1 .. 2] OF INT := 1, 2;
- VAR2 : ARRAY [1 .. 2, 1 .. 2] OF INT := 1, 2, 3, 4;
- VAR3 : ARRAY [-2 .. -1] OF INT := -2, -1;
- VAR4 : ARRAY [1 .. 2, 1 .. 2, 1 .. 2, 1 .. 2, 1 .. 2, 1 .. 2] OF INT := 4 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
- VAR5 : ARRAY [0 .. 9 ] OF INT := 5 (1, 2);
- VAR6 : ARRAY [1 .. 2, 1 .. 10, 1 .. 5 ] OF INT := 5 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
- VAR7 : ARRAY [1 .. 14 ] OF BOOL := 7 (TRUE, FALSE);
- VAR8 : ARRAY [1 .. 3 ] OF BOOL := TRUE, FALSE, TRUE;
- VAR9 : ARRAY [1 .. 1 ] OF INT := 42;
- END_STRUCT;
- BEGIN
- VAR0[1] := 0;
- VAR0[2] := 0;
- VAR1[1] := -30000;
- VAR1[2] := 30000;
- // Do not write VAR2 here.
- // Keep the default startup values from the declaration.
- VAR3[-2] := -2;
- VAR3[-1] := -1;
- VAR4[1, 1, 1, 1, 1, 1] := 1;
- VAR4[1, 1, 1, 1, 1, 2] := 2;
- VAR4[1, 1, 1, 1, 2, 1] := 3;
- VAR4[1, 1, 1, 1, 2, 2] := 4;
- VAR4[1, 1, 1, 2, 1, 1] := 5;
- VAR4[1, 1, 1, 2, 1, 2] := 6;
- VAR4[1, 1, 1, 2, 2, 1] := 7;
- VAR4[1, 1, 1, 2, 2, 2] := 8;
- VAR4[1, 1, 2, 1, 1, 1] := 9;
- VAR4[1, 1, 2, 1, 1, 2] := 10;
- VAR4[1, 1, 2, 1, 2, 1] := 11;
- VAR4[1, 1, 2, 1, 2, 2] := 12;
- VAR4[1, 1, 2, 2, 1, 1] := 13;
- VAR4[1, 1, 2, 2, 1, 2] := 14;
- VAR4[1, 1, 2, 2, 2, 1] := 15;
- VAR4[1, 1, 2, 2, 2, 2] := 16;
- VAR4[1, 2, 1, 1, 1, 1] := 1;
- VAR4[1, 2, 1, 1, 1, 2] := 2;
- VAR4[1, 2, 1, 1, 2, 1] := 3;
- VAR4[1, 2, 1, 1, 2, 2] := 4;
- VAR4[1, 2, 1, 2, 1, 1] := 5;
- VAR4[1, 2, 1, 2, 1, 2] := 6;
- VAR4[1, 2, 1, 2, 2, 1] := 7;
- VAR4[1, 2, 1, 2, 2, 2] := 8;
- VAR4[1, 2, 2, 1, 1, 1] := 9;
- VAR4[1, 2, 2, 1, 1, 2] := 10;
- VAR4[1, 2, 2, 1, 2, 1] := 11;
- VAR4[1, 2, 2, 1, 2, 2] := 12;
- VAR4[1, 2, 2, 2, 1, 1] := 13;
- VAR4[1, 2, 2, 2, 1, 2] := 14;
- VAR4[1, 2, 2, 2, 2, 1] := 15;
- VAR4[1, 2, 2, 2, 2, 2] := 16;
- VAR4[2, 1, 1, 1, 1, 1] := 1;
- VAR4[2, 1, 1, 1, 1, 2] := 2;
- VAR4[2, 1, 1, 1, 2, 1] := 3;
- VAR4[2, 1, 1, 1, 2, 2] := 4;
- VAR4[2, 1, 1, 2, 1, 1] := 5;
- VAR4[2, 1, 1, 2, 1, 2] := 6;
- VAR4[2, 1, 1, 2, 2, 1] := 7;
- VAR4[2, 1, 1, 2, 2, 2] := 8;
- VAR4[2, 1, 2, 1, 1, 1] := 9;
- VAR4[2, 1, 2, 1, 1, 2] := 10;
- VAR4[2, 1, 2, 1, 2, 1] := 11;
- VAR4[2, 1, 2, 1, 2, 2] := 12;
- VAR4[2, 1, 2, 2, 1, 1] := 13;
- VAR4[2, 1, 2, 2, 1, 2] := 14;
- VAR4[2, 1, 2, 2, 2, 1] := 15;
- VAR4[2, 1, 2, 2, 2, 2] := 16;
- VAR4[2, 2, 1, 1, 1, 1] := 1;
- VAR4[2, 2, 1, 1, 1, 2] := 2;
- VAR4[2, 2, 1, 1, 2, 1] := 3;
- VAR4[2, 2, 1, 1, 2, 2] := 4;
- VAR4[2, 2, 1, 2, 1, 1] := 5;
- VAR4[2, 2, 1, 2, 1, 2] := 6;
- VAR4[2, 2, 1, 2, 2, 1] := 7;
- VAR4[2, 2, 1, 2, 2, 2] := 8;
- VAR4[2, 2, 2, 1, 1, 1] := 9;
- VAR4[2, 2, 2, 1, 1, 2] := 10;
- VAR4[2, 2, 2, 1, 2, 1] := 11;
- VAR4[2, 2, 2, 1, 2, 2] := 12;
- VAR4[2, 2, 2, 2, 1, 1] := 13;
- VAR4[2, 2, 2, 2, 1, 2] := 14;
- VAR4[2, 2, 2, 2, 2, 1] := 15;
- VAR4[2, 2, 2, 2, 2, 2] := 16;
- VAR5[0] := 1;
- VAR5[1] := 2;
- VAR5[2] := 1;
- VAR5[3] := 2;
- VAR5[4] := 1;
- VAR5[5] := 2;
- VAR5[6] := 1;
- VAR5[7] := 2;
- VAR5[8] := 1;
- VAR5[9] := 2;
- VAR6[1, 1, 1] := 1;
- VAR6[1, 1, 2] := 2;
- VAR6[1, 1, 3] := 3;
- VAR6[1, 1, 4] := 4;
- VAR6[1, 1, 5] := 5;
- VAR6[1, 2, 1] := 6;
- VAR6[1, 2, 2] := 7;
- VAR6[1, 2, 3] := 8;
- VAR6[1, 2, 4] := 9;
- VAR6[1, 2, 5] := 10;
- VAR6[1, 3, 1] := 11;
- VAR6[1, 3, 2] := 12;
- VAR6[1, 3, 3] := 13;
- VAR6[1, 3, 4] := 14;
- VAR6[1, 3, 5] := 15;
- VAR6[1, 4, 1] := 16;
- VAR6[1, 4, 2] := 17;
- VAR6[1, 4, 3] := 18;
- VAR6[1, 4, 4] := 19;
- VAR6[1, 4, 5] := 20;
- VAR6[1, 5, 1] := 1;
- VAR6[1, 5, 2] := 2;
- VAR6[1, 5, 3] := 3;
- VAR6[1, 5, 4] := 4;
- VAR6[1, 5, 5] := 5;
- VAR6[1, 6, 1] := 6;
- VAR6[1, 6, 2] := 7;
- VAR6[1, 6, 3] := 8;
- VAR6[1, 6, 4] := 9;
- VAR6[1, 6, 5] := 10;
- VAR6[1, 7, 1] := 11;
- VAR6[1, 7, 2] := 12;
- VAR6[1, 7, 3] := 13;
- VAR6[1, 7, 4] := 14;
- VAR6[1, 7, 5] := 15;
- VAR6[1, 8, 1] := 16;
- VAR6[1, 8, 2] := 17;
- VAR6[1, 8, 3] := 18;
- VAR6[1, 8, 4] := 19;
- VAR6[1, 8, 5] := 20;
- VAR6[1, 9, 1] := 1;
- VAR6[1, 9, 2] := 2;
- VAR6[1, 9, 3] := 3;
- VAR6[1, 9, 4] := 4;
- VAR6[1, 9, 5] := 5;
- VAR6[1, 10, 1] := 6;
- VAR6[1, 10, 2] := 7;
- VAR6[1, 10, 3] := 8;
- VAR6[1, 10, 4] := 9;
- VAR6[1, 10, 5] := 10;
- VAR6[2, 1, 1] := 11;
- VAR6[2, 1, 2] := 12;
- VAR6[2, 1, 3] := 13;
- VAR6[2, 1, 4] := 14;
- VAR6[2, 1, 5] := 15;
- VAR6[2, 2, 1] := 16;
- VAR6[2, 2, 2] := 17;
- VAR6[2, 2, 3] := 18;
- VAR6[2, 2, 4] := 19;
- VAR6[2, 2, 5] := 20;
- VAR6[2, 3, 1] := 1;
- VAR6[2, 3, 2] := 2;
- VAR6[2, 3, 3] := 3;
- VAR6[2, 3, 4] := 4;
- VAR6[2, 3, 5] := 5;
- VAR6[2, 4, 1] := 6;
- VAR6[2, 4, 2] := 7;
- VAR6[2, 4, 3] := 8;
- VAR6[2, 4, 4] := 9;
- VAR6[2, 4, 5] := 10;
- VAR6[2, 5, 1] := 11;
- VAR6[2, 5, 2] := 12;
- VAR6[2, 5, 3] := 13;
- VAR6[2, 5, 4] := 14;
- VAR6[2, 5, 5] := 15;
- VAR6[2, 6, 1] := 16;
- VAR6[2, 6, 2] := 17;
- VAR6[2, 6, 3] := 18;
- VAR6[2, 6, 4] := 19;
- VAR6[2, 6, 5] := 20;
- VAR6[2, 7, 1] := 1;
- VAR6[2, 7, 2] := 2;
- VAR6[2, 7, 3] := 3;
- VAR6[2, 7, 4] := 4;
- VAR6[2, 7, 5] := 5;
- VAR6[2, 8, 1] := 6;
- VAR6[2, 8, 2] := 7;
- VAR6[2, 8, 3] := 8;
- VAR6[2, 8, 4] := 9;
- VAR6[2, 8, 5] := 10;
- VAR6[2, 9, 1] := 11;
- VAR6[2, 9, 2] := 12;
- VAR6[2, 9, 3] := 13;
- VAR6[2, 9, 4] := 14;
- VAR6[2, 9, 5] := 15;
- VAR6[2, 10, 1] := 16;
- VAR6[2, 10, 2] := 17;
- VAR6[2, 10, 3] := 18;
- VAR6[2, 10, 4] := 19;
- VAR6[2, 10, 5] := 20;
- VAR7[1] := TRUE;
- VAR7[2] := FALSE;
- VAR7[3] := TRUE;
- VAR7[4] := FALSE;
- VAR7[5] := TRUE;
- VAR7[6] := FALSE;
- VAR7[7] := TRUE;
- VAR7[8] := FALSE;
- VAR7[9] := TRUE;
- VAR7[10] := FALSE;
- VAR7[11] := TRUE;
- VAR7[12] := FALSE;
- VAR7[13] := TRUE;
- VAR7[14] := FALSE;
- VAR8[1] := TRUE;
- VAR8[2] := FALSE;
- VAR8[3] := TRUE;
- VAR9[1] := 42;
- END_DATA_BLOCK
- FUNCTION FC 1 : VOID
- VAR_INPUT
- VAR00 : ARRAY [1 .. 2] OF INT;
- VAR01 : ARRAY [1 .. 2, 0 .. 1] OF INT;
- SELECT : INT;
- END_VAR
- VAR_OUTPUT
- VAROUT : ARRAY [1 .. 2] OF DINT;
- END_VAR
- VAR_TEMP
- DBNR : INT;
- END_VAR
- BEGIN
- // Only run tests for SELECT=1
- L #SELECT
- L 1
- <>I
- BEB
- // Check passed parameters
- L #VAR00[1]
- __ASSERT== __ACCU 1, 91
- L #VAR00[2]
- __ASSERT== __ACCU 1, 92
- L #VAR01[1, 0]
- __ASSERT== __ACCU 1, 9100
- L #VAR01[1, 1]
- __ASSERT== __ACCU 1, 9101
- L #VAR01[2, 0]
- __ASSERT== __ACCU 1, 9102
- L #VAR01[2, 1]
- __ASSERT== __ACCU 1, 9103
- L P##VAR00 // Ptr to array name is ptr to DB-ptr.
- LAR1
- UD DW#16#FF000000
- __ASSERT== __ACCU 1, DW#16#87000000
- L W [AR1, P#0.0]
- T #DBNR
- AUF DB [#DBNR]
- L D [AR1, P#2.0]
- LAR1
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, 91
- // Forward FC-parameter to FB
- CALL FB 2, DB 10 (
- VAR0 := #VAR00,
- )
- // Write the output
- L L#90001
- T #VAROUT[1]
- L L#90002
- T #VAROUT[2]
- END_FUNCTION
- FUNCTION_BLOCK FB 1
- VAR_INPUT
- VAR0 : ARRAY [1 .. 2] OF INT;
- VAR1 : ARRAY [1 .. 2, 0 .. 1] OF INT;
- VARBOOL : ARRAY [1 .. 10] OF BOOL;
- SELECT : INT;
- END_VAR
- VAR_OUTPUT
- VAROUT : ARRAY [1 .. 2] OF DINT;
- END_VAR
- BEGIN
- L #SELECT
- SPL ERR
- SPA M000
- SPA M001
- ERR: __ASSERT== 1, 2 // Wrong #SELECT
- // Check instance-DB initial values
- M000: L #VAR0[1]
- __ASSERT== __ACCU 1, 1
- L DIW 0
- __ASSERT== __ACCU 1, 1
- L #VAR0[2]
- __ASSERT== __ACCU 1, 2
- L DIW 2
- __ASSERT== __ACCU 1, 2
- L #VAR1[1, 0]
- __ASSERT== __ACCU 1, 100
- L DIW 4
- __ASSERT== __ACCU 1, 100
- L #VAR1[1, 1]
- __ASSERT== __ACCU 1, 101
- L DIW 6
- __ASSERT== __ACCU 1, 101
- L #VAR1[2, 0]
- __ASSERT== __ACCU 1, 102
- L DIW 8
- __ASSERT== __ACCU 1, 102
- L #VAR1[2, 1]
- __ASSERT== __ACCU 1, 103
- L DIW 10
- __ASSERT== __ACCU 1, 103
- U #VARBOOL[2]
- U #VARBOOL[3]
- U #VARBOOL[5]
- U #VARBOOL[8]
- U #VARBOOL[9]
- __ASSERT== __STW VKE, 1
- O #VARBOOL[1]
- O #VARBOOL[4]
- O #VARBOOL[6]
- O #VARBOOL[7]
- O #VARBOOL[10]
- __ASSERT== __STW VKE, 0
- L DIW 12
- __ASSERT== __ACCU 1, W#16#9601
- L P##VAR0 // Ptr to array name is ptr to first element
- __ASSERT== __ACCU 1, DW#16#85000000
- LAR1
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, 1
- SPA M500
- // Check passed parameters
- M001: L #VAR0[1]
- __ASSERT== __ACCU 1, 91
- L DIW 0
- __ASSERT== __ACCU 1, 91
- L #VAR0[2]
- __ASSERT== __ACCU 1, 92
- L DIW 2
- __ASSERT== __ACCU 1, 92
- L #VAR1[1, 0]
- __ASSERT== __ACCU 1, 9100
- L DIW 4
- __ASSERT== __ACCU 1, 9100
- L #VAR1[1, 1]
- __ASSERT== __ACCU 1, 9101
- L DIW 6
- __ASSERT== __ACCU 1, 9101
- L #VAR1[2, 0]
- __ASSERT== __ACCU 1, 9102
- L DIW 8
- __ASSERT== __ACCU 1, 9102
- L #VAR1[2, 1]
- __ASSERT== __ACCU 1, 9103
- L DIW 10
- __ASSERT== __ACCU 1, 9103
- U #VARBOOL[1]
- U #VARBOOL[4]
- U #VARBOOL[6]
- U #VARBOOL[7]
- U #VARBOOL[10]
- __ASSERT== __STW VKE, 1
- O #VARBOOL[2]
- O #VARBOOL[3]
- O #VARBOOL[5]
- O #VARBOOL[8]
- O #VARBOOL[9]
- __ASSERT== __STW VKE, 0
- L DIW 12
- __ASSERT== __ACCU 1, W#16#6902
- L P##VAR0 // Ptr to array name is ptr to first element
- __ASSERT== __ACCU 1, DW#16#85000000
- LAR1
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, 91
- SPA M500
- // Call FC 1 and forward array parameters
- M500: CALL FC 1 (
- VAR00 := #VAR0,
- VAR01 := #VAR1,
- SELECT := #SELECT,
- VAROUT := #VAROUT,
- )
- END_FUNCTION_BLOCK
- DATA_BLOCK DB 1
- TITLE = FB 1 instance DB
- FB 1
- BEGIN
- VAR0[1] := 1;
- VAR0[2] := 2;
- VAR1[1, 0] := 100;
- VAR1[1, 1] := 101;
- VAR1[2, 0] := 102;
- VAR1[2, 1] := 103;
- SELECT := 0;
- VARBOOL[1] := FALSE;
- VARBOOL[2] := TRUE;
- VARBOOL[3] := TRUE;
- VARBOOL[4] := FALSE;
- VARBOOL[5] := TRUE;
- VARBOOL[6] := FALSE;
- VARBOOL[7] := FALSE;
- VARBOOL[8] := TRUE;
- VARBOOL[9] := TRUE;
- VARBOOL[10] := FALSE;
- END_DATA_BLOCK
- FUNCTION_BLOCK FB 2
- VAR_INPUT
- VAR0 : ARRAY [1 .. 2] OF INT;
- END_VAR
- BEGIN
- L #VAR0[1]
- __ASSERT== __ACCU 1, 91
- L #VAR0[2]
- __ASSERT== __ACCU 1, 92
- END_FUNCTION_BLOCK
- DATA_BLOCK DB 10
- TITLE = FB 2 instance DB
- FB 2
- BEGIN
- VAR0[1] := 0;
- VAR0[2] := 0;
- END_DATA_BLOCK
- DATA_BLOCK DB 2
- TITLE = Parameter passing DB
- STRUCT
- VAR0 : ARRAY [1 .. 2] OF INT;
- VAR1 : ARRAY [1 .. 2, 0 .. 1] OF INT;
- VAR2 : ARRAY [1 .. 2] OF DINT;
- VAR3 : ARRAY [1 .. 10] OF BOOL;
- END_STRUCT;
- BEGIN
- VAR0[1] := 91;
- VAR0[2] := 92;
- VAR1[1, 0] := 9100;
- VAR1[1, 1] := 9101;
- VAR1[2, 0] := 9102;
- VAR1[2, 1] := 9103;
- VAR2[1] := L#0;
- VAR2[2] := L#0;
- VAR3[1] := TRUE;
- VAR3[2] := FALSE;
- VAR3[3] := FALSE;
- VAR3[4] := TRUE;
- VAR3[5] := FALSE;
- VAR3[6] := TRUE;
- VAR3[7] := TRUE;
- VAR3[8] := FALSE;
- VAR3[9] := FALSE;
- VAR3[10] := TRUE;
- END_DATA_BLOCK
- ORGANIZATION_BLOCK OB 1
- BEGIN
- // Check DB99 initial values
- L DB99.VAR0[1]
- __ASSERT== __ACCU 1, 0
- L DB99.DBW 0
- __ASSERT== __ACCU 1, 0
- L DB99.VAR0[2]
- __ASSERT== __ACCU 1, 0
- L DB99.DBW 2
- __ASSERT== __ACCU 1, 0
- L DB99.VAR1[1]
- __ASSERT== __ACCU 1, -30000
- L DB99.DBW 4
- __ASSERT== __ACCU 1, -30000
- L DB99.VAR1[2]
- __ASSERT== __ACCU 1, 30000
- L DB99.DBW 6
- __ASSERT== __ACCU 1, 30000
- L DB99.VAR2[1, 1]
- __ASSERT== __ACCU 1, 1
- L DB99.DBW 8
- __ASSERT== __ACCU 1, 1
- L DB99.VAR2[1, 2]
- __ASSERT== __ACCU 1, 2
- L DB99.DBW 10
- __ASSERT== __ACCU 1, 2
- L DB99.VAR2[2, 1]
- __ASSERT== __ACCU 1, 3
- L DB99.DBW 12
- __ASSERT== __ACCU 1, 3
- L DB99.VAR2[2, 2]
- __ASSERT== __ACCU 1, 4
- L DB99.DBW 14
- __ASSERT== __ACCU 1, 4
- // Call FB 1 without array parameter passing
- CALL FB 1, DB 1 (
- SELECT := 0,
- )
- // Call FB 1 with array parameter passing
- L 0
- T DB2.VAR2[1]
- T DB2.VAR2[2]
- CALL FB 1, DB 1 (
- VAR0 := DB2.VAR0,
- VAR1 := DB2.VAR1,
- VARBOOL := DB2.VAR3,
- SELECT := 1,
- VAROUT := DB2.VAR2,
- )
- L DB2.VAR2[1]
- __ASSERT== __ACCU 1, L#90001
- L DB2.VAR2[2]
- __ASSERT== __ACCU 1, L#90002
- // Call FC 1 with array parameter passing
- L 0
- T DB2.VAR2[1]
- T DB2.VAR2[2]
- CALL FC 1 (
- VAR00 := DB2.VAR0,
- VAR01 := DB2.VAR1,
- SELECT := 1,
- VAROUT := DB2.VAR2,
- )
- L DB2.VAR2[1]
- __ASSERT== __ACCU 1, L#90001
- L DB2.VAR2[2]
- __ASSERT== __ACCU 1, L#90002
- CALL SFC 46 // STOP CPU
- END_ORGANIZATION_BLOCK
|