E0014: operands an operator or index does not take
Arithmetic takes numbers (ANY_NUM), MOD integers, AND, OR, XOR
and NOT booleans or bit strings (ANY_BIT), and both sides of an
operator must meet in one type by implicit conversion (Ed.3 6.6.2.5).
An array index is an integer; x.3 takes a bit string; r^ takes a
reference. A comparison takes elementary values (Ed.3 Table 33,
ANY_ELEMENTARY): two arrays, two structures or two function block
instances are not compared, their elements, fields or variables are.
VAR b : BOOL; i : INT; d : DINT; r : REAL; END_VAR
i := i + b; (* E0014: INT and BOOL *)
r := r + d; (* E0014: DINT does not widen to REAL; DINT_TO_REAL *)
i := i AND 1; (* E0014: AND takes BOOL or bit strings, not INT *)