1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
ORGANIZATION_BLOCK OB 100
BEGIN
// 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
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
// FB 1 call test
CLR
= M 18.0
CALL FB 1, DB 2 (
INPUT_VAR := 8877,
OUTPUT_VAR := MW 16,
INOUT_VAR := M 18.0
)
__ASSERT== MW 16, 4433
__ASSERT== M 18.0, 1
// FC 1 call test
L 1616
T MW 16
L 2020
T MW 20
CALL FC 1 (
INPUT_WORD := MW 16,
OUTPUT_BOOL0 := M 18.0,
OUTPUT_BOOL1 := M 18.1,
INOUT_INT := MW 20
)
__ASSERT== M 18.0, 1
__ASSERT== M 18.1, 0
END_ORGANIZATION_BLOCK
FUNCTION FC 1: VOID
VAR_INPUT
INPUT_WORD : WORD
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
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
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
|