123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530 |
- DATA_BLOCK DB 100
- STRUCT
- VAR0 : STRING [254] := '';
- VAR1 : STRING [10] := 'test2';
- VAR2 : STRING [1] := 'i';
- FULLSTR0 : STRING; // Awlsim extension: No dimension = 254
- FULLSTR1 : STRING := 'abc'; // Awlsim extension: No dimension = 254
- ARRSTR0 : ARRAY [1 .. 2] OF STRING[3] := '01', '02';
- ARRSTR1 : ARRAY [1 .. 2] OF STRING [3];
- VAR3 : STRING [10];
- END_STRUCT;
- BEGIN
- VAR0 := 'test1';
- VAR1 := 'tt';
- ARRSTR1[1] := '11';
- ARRSTR1[2] := '12';
- END_DATA_BLOCK
- FUNCTION FC 1 : VOID
- VAR_INPUT
- FCS0 : STRING [254];
- FCS1 : STRING [1]; // Awlsim extension: size != 254
- FCS2 : STRING [10]; // Awlsim extension: size != 254
- FCSTR0 : STRING; // Awlsim extension: No dimension = 254
- FCSTR1 : STRING; // Awlsim extension: No dimension = 254
- END_VAR
- VAR_TEMP
- DBNR : INT;
- END_VAR
- BEGIN
- // Check access via DB-pointer.
- // Check #FCS0
- L P##FCS0
- LAR1
- UD DW#16#FF000000
- __ASSERT== __ACCU 1, DW#16#87000000
- L W [AR1, P#0.0]
- T #DBNR
- __ASSERT== __ACCU 1, 100
- AUF DB [#DBNR]
- L D [AR1, P#2.0]
- LAR1
- __ASSERT== __ACCU 1, P#DBX 0.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#FE05
- L D [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'test'
- L B [AR1, P#6.0]
- __ASSERT== __ACCU 1, '1'
- L B [AR1, P#7.0]
- __ASSERT== __ACCU 1, 0
- // Check #FCS1
- L P##FCS1
- LAR1
- UD DW#16#FF000000
- __ASSERT== __ACCU 1, DW#16#87000000
- L W [AR1, P#0.0]
- T #DBNR
- __ASSERT== __ACCU 1, 100
- AUF DB [#DBNR]
- L D [AR1, P#2.0]
- LAR1
- __ASSERT== __ACCU 1, P#DBX 268.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#0101
- L B [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'i'
- L B [AR1, P#3.0]
- __ASSERT== __ACCU 1, 0
- // Check #FCS2
- L P##FCS2
- LAR1
- UD DW#16#FF000000
- __ASSERT== __ACCU 1, DW#16#87000000
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, 0
- L D [AR1, P#2.0]
- LAR1
- UD DW#16#FF000000
- __ASSERT== __ACCU 1, DW#16#87000000
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#0A06
- L D [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'aabb'
- L W [AR1, P#6.0]
- __ASSERT== __ACCU 1, 'cc'
- // Check #FCSTR0
- L P##FCSTR0
- LAR1
- UD DW#16#FF000000
- __ASSERT== __ACCU 1, DW#16#87000000
- L W [AR1, P#0.0]
- T #DBNR
- __ASSERT== __ACCU 1, 100
- AUF DB [#DBNR]
- L D [AR1, P#2.0]
- LAR1
- __ASSERT== __ACCU 1, P#DBX 272.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#FE00
- L B [AR1, P#2.0]
- __ASSERT== __ACCU 1, 0
- // Check #FCSTR1
- L P##FCSTR1
- LAR1
- UD DW#16#FF000000
- __ASSERT== __ACCU 1, DW#16#87000000
- L W [AR1, P#0.0]
- T #DBNR
- __ASSERT== __ACCU 1, 100
- AUF DB [#DBNR]
- L D [AR1, P#2.0]
- LAR1
- __ASSERT== __ACCU 1, P#DBX 528.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#FE03
- L B [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'a'
- L B [AR1, P#3.0]
- __ASSERT== __ACCU 1, 'b'
- L B [AR1, P#4.0]
- __ASSERT== __ACCU 1, 'c'
- L B [AR1, P#5.0]
- __ASSERT== __ACCU 1, 0
- // Check direct access.
- // Check #FCS0
- L #FCS0[1]
- __ASSERT== __ACCU 1, 't'
- L #FCS0[2]
- __ASSERT== __ACCU 1, 'e'
- L #FCS0[3]
- __ASSERT== __ACCU 1, 's'
- L #FCS0[4]
- __ASSERT== __ACCU 1, 't'
- L #FCS0[5]
- __ASSERT== __ACCU 1, '1'
- L #FCS0[6]
- __ASSERT== __ACCU 1, 0
- // Check #FCS1
- L #FCS1[1]
- __ASSERT== __ACCU 1, 'i'
- // Check #FCS2
- L #FCS2[1]
- __ASSERT== __ACCU 1, 'a'
- L #FCS2[2]
- __ASSERT== __ACCU 1, 'a'
- L #FCS2[3]
- __ASSERT== __ACCU 1, 'b'
- L #FCS2[4]
- __ASSERT== __ACCU 1, 'b'
- L #FCS2[5]
- __ASSERT== __ACCU 1, 'c'
- L #FCS2[6]
- __ASSERT== __ACCU 1, 'c'
- L #FCS2[7]
- __ASSERT== __ACCU 1, 0
- // Check #FCSTR0
- L #FCSTR0[1]
- __ASSERT== __ACCU 1, 0
- // Check #FCSTR1
- L #FCSTR1[1]
- __ASSERT== __ACCU 1, 'a'
- L #FCSTR1[2]
- __ASSERT== __ACCU 1, 'b'
- L #FCSTR1[3]
- __ASSERT== __ACCU 1, 'c'
- L #FCSTR1[4]
- __ASSERT== __ACCU 1, 0
- END_FUNCTION
- FUNCTION_BLOCK FB 1
- VAR_INPUT
- FBS0 : STRING [254] := 'xy';
- FBS1 : STRING [1] := 'z';
- FBS2 : STRING [10];
- FBSTR0 : STRING; // Awlsim extension: No dimension = 254
- FBSTR1 : STRING; // Awlsim extension: No dimension = 254
- END_VAR
- VAR_TEMP
- DBNR : INT;
- END_VAR
- BEGIN
- // Check access via pointer.
- // Check #FBS0
- L P##FBS0
- LAR1
- __ASSERT== __ACCU 1, P#DIX 0.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#FE05
- L D [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'test'
- L B [AR1, P#6.0]
- __ASSERT== __ACCU 1, '1'
- L B [AR1, P#7.0]
- __ASSERT== __ACCU 1, 0
- // Check #FBS1
- L P##FBS1
- LAR1
- __ASSERT== __ACCU 1, P#DIX 256.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#0101
- L B [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'i'
- L B [AR1, P#3.0]
- __ASSERT== __ACCU 1, 0
- // Check #FBS2
- L P##FBS2
- LAR1
- __ASSERT== __ACCU 1, P#DIX 260.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#0A06
- L D [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'aabb'
- L W [AR1, P#6.0]
- __ASSERT== __ACCU 1, 'cc'
- // Check #FBSTR0
- L P##FBSTR0
- LAR1
- __ASSERT== __ACCU 1, P#DIX 272.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#FE00
- L B [AR1, P#2.0]
- __ASSERT== __ACCU 1, 0
- // Check #FBSTR1
- L P##FBSTR1
- LAR1
- __ASSERT== __ACCU 1, P#DIX 528.0
- L W [AR1, P#0.0]
- __ASSERT== __ACCU 1, W#16#FE03
- L B [AR1, P#2.0]
- __ASSERT== __ACCU 1, 'a'
- L B [AR1, P#3.0]
- __ASSERT== __ACCU 1, 'b'
- L B [AR1, P#4.0]
- __ASSERT== __ACCU 1, 'c'
- L B [AR1, P#5.0]
- __ASSERT== __ACCU 1, 0
- // Check direct access.
- // Check #FBS0
- L #FBS0[1]
- __ASSERT== __ACCU 1, 't'
- L #FBS0[2]
- __ASSERT== __ACCU 1, 'e'
- L #FBS0[3]
- __ASSERT== __ACCU 1, 's'
- L #FBS0[4]
- __ASSERT== __ACCU 1, 't'
- L #FBS0[5]
- __ASSERT== __ACCU 1, '1'
- L #FBS0[6]
- __ASSERT== __ACCU 1, 0
- // Check #FBS1
- L #FBS1[1]
- __ASSERT== __ACCU 1, 'i'
- // Check #FBS2
- L #FBS2[1]
- __ASSERT== __ACCU 1, 'a'
- L #FBS2[2]
- __ASSERT== __ACCU 1, 'a'
- L #FBS2[3]
- __ASSERT== __ACCU 1, 'b'
- L #FBS2[4]
- __ASSERT== __ACCU 1, 'b'
- L #FBS2[5]
- __ASSERT== __ACCU 1, 'c'
- L #FBS2[6]
- __ASSERT== __ACCU 1, 'c'
- L #FBS2[7]
- __ASSERT== __ACCU 1, 0
- // Check #FBSTR0
- L #FBSTR0[1]
- __ASSERT== __ACCU 1, 0
- // Check #FBSTR1
- L #FBSTR1[1]
- __ASSERT== __ACCU 1, 'a'
- L #FBSTR1[2]
- __ASSERT== __ACCU 1, 'b'
- L #FBSTR1[3]
- __ASSERT== __ACCU 1, 'c'
- L #FBSTR1[4]
- __ASSERT== __ACCU 1, 0
- END_FUNCTION_BLOCK
- DATA_BLOCK DB 1
- FB 1
- BEGIN
- END_DATA_BLOCK
- FUNCTION FC 2 : STRING
- VAR_INPUT
- FCINSTR : STRING;
- END_VAR
- BEGIN
- // Copy #FCINSTR to #RET_VAL
- L #FCINSTR[1]
- T #RET_VAL[1]
- L #FCINSTR[2]
- T #RET_VAL[2]
- L #FCINSTR[3]
- T #RET_VAL[3]
- L #FCINSTR[4]
- T #RET_VAL[4]
- L #FCINSTR[5]
- T #RET_VAL[5]
- L #FCINSTR[6]
- T #RET_VAL[6]
- L #FCINSTR[7]
- T #RET_VAL[7]
- L #FCINSTR[8]
- T #RET_VAL[8]
- L #FCINSTR[9]
- T #RET_VAL[9]
- L #FCINSTR[10]
- T #RET_VAL[10]
- END_FUNCTION
- ORGANIZATION_BLOCK OB 1
- BEGIN
- // Check short string immediates in L-instruction.
- L 'abcd'
- __ASSERT== __ACCU 1, DW#16#61626364
- L 'abc'
- __ASSERT== __ACCU 1, DW#16#00616263
- L 'ab'
- __ASSERT== __ACCU 1, DW#16#00006162
- L 'a'
- __ASSERT== __ACCU 1, DW#16#00000061
- L ''
- __ASSERT== __ACCU 1, DW#16#00000000
- // Check DB 100 initial values
- AUF DB 100
- // Check DB100.VAR0
- L DBW 0
- __ASSERT== __ACCU 1, W#16#FE05
- L DBD 2
- __ASSERT== __ACCU 1, 'test'
- L DBD 6
- __ASSERT== __ACCU 1, DW#16#31000000
- L DBW 10
- __ASSERT== __ACCU 1, 0
- LAR1 P#DBX 12.0
- VAR0: L D [AR1, P#0.0]
- __ASSERT== __ACCU 1, 0
- +AR1 P#4.0
- TAR1
- L P#DBX 256.0
- <>D
- SPB VAR0
- // Check DB100.VAR1
- L DBW 256
- __ASSERT== __ACCU 1, W#16#0A02
- L DBD 258
- __ASSERT== __ACCU 1, DW#16#74740000
- L DBD 262
- __ASSERT== __ACCU 1, 0
- L DBW 266
- __ASSERT== __ACCU 1, 0
- // Check DB100.VAR2
- L DBW 268
- __ASSERT== __ACCU 1, W#16#0101
- L DBB 270
- __ASSERT== __ACCU 1, 'i'
- L DBB 271
- __ASSERT== __ACCU 1, 0
- // Check DB100.FULLSTR0
- L DBW 272
- __ASSERT== __ACCU 1, W#16#FE00
- L DBW 274
- __ASSERT== __ACCU 1, 0
- LAR1 P#DBX 276.0
- STR0: L D [AR1, P#0.0]
- __ASSERT== __ACCU 1, 0
- +AR1 P#4.0
- TAR1
- L P#DBX 528.0
- <>D
- SPB STR0
- // Check DB100.FULLSTR1
- L DBW 528
- __ASSERT== __ACCU 1, W#16#FE03
- L DBD 530
- __ASSERT== __ACCU 1, DW#16#61626300
- L DBW 534
- __ASSERT== __ACCU 1, 0
- LAR1 P#DBX 536.0
- STR1: L D [AR1, P#0.0]
- __ASSERT== __ACCU 1, 0
- +AR1 P#4.0
- TAR1
- L P#DBX 784.0
- <>D
- SPB STR1
- // Check DB100.ARRSTR0[1]
- L DBW 784
- __ASSERT== __ACCU 1, W#16#0302
- L DBD 786
- __ASSERT== __ACCU 1, DW#16#30310000
- // Check DB100.ARRSTR0[2]
- L DBW 790
- __ASSERT== __ACCU 1, W#16#0302
- L DBD 792
- __ASSERT== __ACCU 1, DW#16#30320000
- // Check DB100.ARRSTR1[1]
- L DBW 796
- __ASSERT== __ACCU 1, W#16#0302
- L DBD 798
- __ASSERT== __ACCU 1, DW#16#31310000
- // Check DB100.ARRSTR1[2]
- L DBW 802
- __ASSERT== __ACCU 1, W#16#0302
- L DBD 804
- __ASSERT== __ACCU 1, DW#16#31320000
- // Check DB100.VAR3
- L DBW 808
- __ASSERT== __ACCU 1, W#16#0A00
- L DBD 810
- __ASSERT== __ACCU 1, 0
- L DBD 814
- __ASSERT== __ACCU 1, 0
- L DBW 818
- __ASSERT== __ACCU 1, 0
- // Check fully qualified symbolic access to DB 100
- // Check DB100.VAR0
- L DB100.VAR0[1]
- __ASSERT== __ACCU 1, 't'
- L DB100.VAR0[2]
- __ASSERT== __ACCU 1, 'e'
- L DB100.VAR0[3]
- __ASSERT== __ACCU 1, 's'
- L DB100.VAR0[4]
- __ASSERT== __ACCU 1, 't'
- L DB100.VAR0[5]
- __ASSERT== __ACCU 1, '1'
- L DB100.VAR0[6]
- __ASSERT== __ACCU 1, 0
- // Check DB100.VAR1
- L DB100.VAR1[1]
- __ASSERT== __ACCU 1, 't'
- L DB100.VAR1[2]
- __ASSERT== __ACCU 1, 't'
- L DB100.VAR1[3]
- __ASSERT== __ACCU 1, 0
- // Check DB100.VAR2
- L DB100.VAR2[1]
- __ASSERT== __ACCU 1, 'i'
- // Check DB100.FULLSTR0
- L DB100.FULLSTR0[1]
- __ASSERT== __ACCU 1, 0
- // Check DB100.FULLSTR1
- L DB100.FULLSTR1[1]
- __ASSERT== __ACCU 1, 'a'
- L DB100.FULLSTR1[2]
- __ASSERT== __ACCU 1, 'b'
- L DB100.FULLSTR1[3]
- __ASSERT== __ACCU 1, 'c'
- L DB100.FULLSTR1[4]
- __ASSERT== __ACCU 1, 0
- // Check DB100.VAR3
- L DB100.VAR3[1]
- __ASSERT== __ACCU 1, 0
- // Check string parameter passing
- CALL FC 1 (
- FCS0 := DB100.VAR0,
- FCS1 := DB100.VAR2,
- FCS2 := 'aabbcc', // Extension: param string immediate
- FCSTR0 := DB100.FULLSTR0,
- FCSTR1 := DB100.FULLSTR1,
- )
- CALL FB 1, DB 1 (
- FBS0 := DB100.VAR0,
- FBS1 := DB100.VAR2,
- FBS2 := 'aabbcc', // Extension: param string immediate
- FBSTR0 := DB100.FULLSTR0,
- FBSTR1 := DB100.FULLSTR1,
- )
- // Check STRING as RET_VAL
- L DB100.VAR3[1]
- __ASSERT== __ACCU 1, 0
- L DB100.VAR3[2]
- __ASSERT== __ACCU 1, 0
- L DB100.VAR3[3]
- __ASSERT== __ACCU 1, 0
- CALL FC 2 (
- FCINSTR := DB100.VAR1,
- RET_VAL := DB100.VAR3,
- )
- L DB100.VAR3[1]
- __ASSERT== __ACCU 1, 't'
- L DB100.VAR3[2]
- __ASSERT== __ACCU 1, 't'
- L DB100.VAR3[3]
- __ASSERT== __ACCU 1, 0
- CALL SFC 46 // STOP CPU
- END_ORGANIZATION_BLOCK
|