The circuit element table (ITEMS) consists of a number of contiguous circuit definitions (ITEMs), each of which contains all the information about a specific element.
The location (relative to the file) and size of the table are specified in the following fields, respectively, depending on where used:
•by the RUNG.ITEMSOFF and RUNG.ITEMSSIZE fields, if used in block circuit (RUNG).
•by the fields LIVECMD.ITEMSOFF and LIVECMD.ITEMSSIZE, if used in live change commands (LIVECMD).
Circuit element definition
Circuit elements (ITEMs) have a common initial part, then a specific data area for each type of element. The common part is as follows:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U16 |
Element type code. |
SIZE |
+2 |
U16 |
Full size of element (all fields). |
DATE |
+4 |
... |
Specific data (optional). |
The expected elements are as follows:
Symbolic |
ID |
Type |
Data |
Description |
---|---|---|---|---|
BB |
0x0001 |
|
|
Start of branch. |
NL |
0x0002 |
|
|
Next branch level . Notes: must always be between a BB and an EB. |
EB |
0x0003 |
|
|
End of branch . Notes: must always correspond to a BB. |
OC |
0x0004 |
|
U32=Destination (#3): BOOL types only. |
Open contact. |
CC |
0x0005 |
|
U32=Destination (#3): BOOL types only. |
Closed contact. |
RE |
0x0006 |
|
U32=Destination (#3): EDGE types only. |
Rising edge. |
FE |
0x0007 |
|
U32=Destination (#3): EDGE types only. |
Falling edge. |
AF |
0x0008 |
|
|
Always false. |
OUT |
0x0009 |
F |
U32=Destination (#3): BOOL types only. |
Output. |
OL |
0x000A |
F |
U32=Destination (#3): BOOL types only. |
Output latch (set). |
OUL |
0x000B |
F |
U32=Destination (#3): BOOL types only. |
Output unlatch (reset). |
NOUT |
0x000C |
F |
U32=Destination (#3): BOOL types only |
Output denied |
CLR |
0x000D |
F |
Zeroing (clear). |
|
TP |
0x000E |
F |
U32=Destination (#3): TIMER types only U32=Preset value 1 (#4) U32=Preset value 2 (#4). |
Enable timer pulse. |
TON |
0x000F |
F |
U32=Preset value (#3): TIMER types only. U32=Preset value 1 (#4) U32=Preset value 2 (#4). |
Enable timer on delay. |
TOFF |
0x0010 |
F |
U32=Preset value (#3): TIMER types only. U32=Preset value 1 (#4) U32=Preset value 2 (#4). |
Enable timer off delay. |
TSQ |
0x0011 |
F |
U32=Preset value (#3): TIMER types only. U32=Preset value 1 (#4) U32=Preset value 2 (#4). |
Enable square wave timer. |
TINT |
0x0012 |
F |
U32=Preset value (#3): TIMER types only. U32=Preset value 1 (#4) U32=Preset value 2 (#4). |
Enable integral timer. |
CU |
0x0013 |
F |
U32=Preset value (#3): COUNTER types only U32=Preset value (#4). |
Count up. |
CD |
0x0014 |
F |
U32=Preset value (#3): COUNTER types only U32=Preset value (#4). |
Count down. |
CUR |
0x0015 |
F |
U32=Preset value (#3): COUNTER types only. U32=Preset value (#4). |
Rotary count up. |
CDR |
0x0016 |
F |
U32=Preset value (#3): COUNTER types only. U32=Preset value (#4). |
Count down rotary. |
LD |
0x0017 |
F |
U32=Preset value (#3): COUNTER types only. |
Preset on counter. |
MATH |
0x0018 |
F |
U32=Expression (#5) U32=Destination (#3) U8[]=Mathematical expression data. |
Math block. |
EQ |
0x0019 |
|
U32=Source A (#2) U32=Source B (#2). |
Equality comparison block (A == B). |
NE |
0x001A |
|
U32=Source A (#2) U32=Source B (#2) |
Different comparison block (A != B). |
GT |
0x001B |
|
U32=Source A (#2) U32=Source B (#2) |
Major comparison block (A > B). |
GE |
0x001C |
|
U32=Source A (#2) U32=Source B (#2) |
Major/equal comparison block (A >= B). |
LT |
0x001D |
|
U32=Source A (#2) U32=Source B (#2) |
Minor comparison block (A < B). |
LE |
0x001E |
|
U32=Source A (#2) U32=Source B (#2) |
Minor/equal comparison block (A <= B). |
COPY |
0x001F |
F |
U32=Source (#2) U32=Destination (#3) U32=N. Elements (#2) |
Copies data from source to destination, for the specified no. of elements. |
CALL |
0x0020 |
F |
U32 Block ID to call |
Call of a block (sub-routine). |
RET |
0x0021 |
F |
|
Return from a block to the inside. |
ADD |
0x0022 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Sum (A + B). |
SUB |
0x0023 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Subtraction (A - B). |
MUL |
0x0024 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Multiplication (A * B). |
DIV |
0x0025 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Division (A / B). |
AND |
0x0026 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
AND binary (A & B). |
OR |
0x0027 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Binary OR (A | B). |
NOT |
0x0028 |
F |
U32=Source A (#2) U32=Destination (#3) |
NOT binary (~A). |
XOR |
0x0029 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
XOR binary (A ^ B). |
SQRT |
0x002A |
F |
U32=Source A (#2) U32=Destination (#3) |
Square root of A. |
MOD |
0x002B |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Module (A mod B). |
POW |
0x002C |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Power elevation (A pow B). |
SIN |
0x002D |
F |
U32=Source A (#2) U32=Destination (#3) |
Sine of A. |
COS |
0x002E |
F |
U32=Source A (#2) U32=Destination (#3) |
Cosine of A. |
TAN |
0x002F |
F |
U32=Source A (#2) U32=Destination (#3) |
Tangent of A. |
ASIN |
0x0030 |
F |
U32=Source A (#2) U32=Destination (#3) |
Archosene of A. |
ACOS |
0x0031 |
F |
U32=Source A (#2) U32=Destination (#3) |
Arcocosene of A. |
ATAN |
0x0032 |
F |
U32=Source A (#2) U32=Destination (#3) |
Arcotangent of A. |
ATAN2 |
0x0033 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Arcotangent of A, B. |
LOG |
0x0034 |
F |
U32=Source A (#2) U32=Destination (#3) |
Base 10 logarithm of A. |
LN |
0x0035 |
F |
U32=Source A (#2) U32=Destination (#3) |
Base E logarithm of A. |
ABS |
0x0036 |
F |
U32=Source A (#2) U32=Destination (#3) |
Absolute value of A |
SIGN |
0x0037 |
F |
U32=Source A (#2) U32=Destination (#3) |
A sign. |
ROUND |
0x0038 |
F |
U32=Source A (#2) U32=Destination (#3) |
Rounding to the nearest integer to A. |
MIN |
0x0039 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Minimum between A and B. |
MAX |
0x003A |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Maximum between A and B. |
RANGE |
0x003B |
F |
U32=Source A (#2) U32=Source B (#2) U32=Source C (#2) U32=Destination (#3): BOOL types only. |
Checks whether A contained in the range B-C. |
LIMIT |
0x003C |
F |
U32=Source A (#2) U32=Source B (#2) U32=Source C (#2) U32=Destination (#3) |
Limit A to the B-C range. |
ROR |
0x003D |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Right bit rotation (A >> B). |
ROL |
0x003E |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Left bit rotation (A << B). |
SHR |
0x003F |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Shift bit to the right (A >> B). |
SHL |
0x0040 |
F |
U32=Source A (#2) U32=Source B (#2) U32=Destination (#3) |
Shift bit to the left (A << B). |
MOV |
0x0041 |
F |
U32=Source A (#2) U32=Destination (#3) |
Assign A. |
TODEG |
0x0042 |
F |
U32=Source A (#2) U32=Destination (#3) |
Conversion of A from RAD to DEG. |
TORAD |
0x0043 |
F |
U32=Source A (#2) U32=Destination (#3) |
Conversion of A from DEG to RAD. |
NEG |
0x0044 |
|
|
Negation of logical state. |
NOP |
0x0045 |
F |
|
No operation. |
EVAL |
0x0046 |
|
U32=Expression (#5) U8[]=Mathematical expression data. |
Evaluation expression (boolean). |
OBCALL |
0x0047 |
F |
U32=Instance name (#6) U32=Complete method name (#9) U32=List of parameter names (#7) U32=List of parameter values (#7) U32=Result (#3) U8[]=Mathematical expression data (#8) |
Call to method of an OB instance. |
FT |
0x0048 |
|
|
Initial execution |
ARE |
0x0049 |
|
|
Rising edge (anonymous) |
AFE |
0x004A |
|
|
Falling edge (anonymous) |
(#1) Local bit variable (type I32 or U32) with direct addressing (any constant indexes and number of bits).
(#2) Source/destination means variable name or ascii representation of a numeric value (source only), or an offset to the string table.
(#3) By destination means name of a variable with offset to the string table.
(#4) Value (or preset value) means a numeric value in string format: empty string (or offset 0) means no value assigned.
(#5) Expression means string with offset to string table.
(#6) Instance name means name of a variable with offset to the string table, whose TYPEID refers to a user structure with FISOBC flag.
(#7) List means a string (with offset to the string table), consisting of a number of sub-strings separated with ascii character 0xFF: the two lists (names/values) MUST always have the same no. of elements or be both empty (=0).
(#8) The call to a method of an OB instantiation is actually translated as a mathematical expression, in which any parameters (values in natural order) are prepared on the stack, the call to the method is made, and then any result is found from the stack.
(#9) Full name of the method (unique), understood as a string with offset to the string table.
Mathematical expression data
Mathematical expression data (used by MATH, COND, and OBCALL elements), is a series of contiguous operations (ordered in inverse polity) with the following common header:
Name |
Offset |
Type |
Description |
---|---|---|---|
CODE |
+0 |
U8 |
Operation code. |
DATE |
+1 |
... |
Specific data (optional). |
The expected operations are as follows:
Symbolic |
ID |
Data |
In (stack) |
Out (stack) |
Description |
---|---|---|---|---|---|
PUSH |
0x01 |
DBL=value |
-- |
DBL |
Push value into stack. |
PUSHV |
0x02 |
U32=Source (#1) |
-- |
DBL |
Push variable value into stack. |
ADD |
0x03 |
|
DBL0,DBL1 |
DBL |
Sum. |
SUB |
0x04 |
|
DBL0,DBL1 |
DBL |
Subtraction (#2). |
MUL |
0x05 |
|
DBL0,DBL1 |
DBL |
Multiplication (#2). |
DIV |
0x06 |
|
DBL0,DBL1 |
DBL |
Division (#2). |
MOD |
0x07 |
|
DBL |
DBL |
Module (#3). |
ABS |
0x08 |
|
DBL |
DBL |
Absolute value (#3). |
SIN |
0x09 |
|
DBL |
DBL |
Sine. |
COS |
0X0A |
|
DBL |
DBL |
Cosine. |
TAN |
0x0B |
|
DBL |
DBL |
Tangent. |
ASIN |
0x0C |
|
DBL |
DBL |
Arcosene. |
ACOS |
0x0D |
|
DBL |
DBL |
Arcocosene. |
ATAN |
0x0E |
|
DBL |
DBL |
Arcotangent. |
POW |
0x0F |
|
DBL |
DBL |
Exponent. |
LOG10 |
0x10 |
|
DBL |
DBL |
Logarithm base 10. |
LOG |
0x11 |
|
DBL |
DBL |
Natural logarithm. |
R_AND |
0x12 |
|
U32 |
U32 |
Binary AND. |
R_OR |
0x13 |
|
U32 |
U32 |
OR binary. |
R_NOT |
0x14 |
|
U32 |
U32 |
NOT binary. |
R_XOR |
0x15 |
|
U32 |
U32 |
XOR binary. |
POPV |
0x16 |
U32=Destination (#1) |
DBL |
-- |
Pop value from stack to variable. |
R_ROR |
0x17 |
|
U32 |
U32 |
Right-hand bit rotation. |
R_ROL |
0x18 |
|
U32 |
U32 |
Left-hand bit rotation. |
R_SHR |
0x19 |
|
U32 |
U32 |
Shift bit to the right. |
R_SHL |
0x1A |
|
U32 |
U32 |
Shift bit to the left. |
TOBIN |
0x1B |
|
U32 |
U32 |
BCD to binary conversion. |
TOBCD |
0x1C |
|
U32 |
U32 |
Binary to BCD conversion. |
TODEG |
0x1D |
|
DBL |
DBL |
Conversion from radians to degrees. |
TORAD |
0x1E |
|
DBL |
DBL |
Conversion from degrees to radians. |
ATAN2 |
0x1F |
|
DBL0,DBL1 |
DBL |
Arcotangent with two parameters. |
PUSHVB |
0x20 |
U32=Source (#1) |
DBL |
-- |
Push variable bit value into stack. |
POPVB |
0x21 |
U32=Destination (#1) |
DBL |
-- |
Pop value from stack to variable bit. |
POPL |
0x22 |
|
BOOL |
-- |
Pop logical value (0=false, otherwise true). |
|
0x23 |
|
|
|
(reserved) |
EQ |
0x24 |
|
DBL0,DBL1 |
BOOL |
Comparison: equal. |
NE |
0x25 |
|
DBL0,DBL1 |
BOOL |
Comparison: different. |
LT |
0x26 |
|
DBL0,DBL1 |
BOOL |
Comparison: minor. |
LE |
0x27 |
|
DBL0,DBL1 |
BOOL |
Comparison: less than or equal to. |
GT |
0x28 |
|
DBL0,DBL1 |
BOOL |
Comparison: greater than. |
GE |
0x29 |
|
DBL0,DBL1 |
BOOL |
Comparison: greater than or equal to. |
AND |
0x2A |
|
BOOL,BOOL |
BOOL |
AND logical. |
OR |
0x2B |
|
BOOL,BOOL |
BOOL |
OR logical. |
NOT |
0x2C |
|
BOOL |
BOOL |
NOT logical. |
XOR |
0x2D |
|
BOOL,BOOL |
BOOL |
logical XOR. |
CHS |
0x2E |
|
DBL |
DBL |
Sign change. |
SHR |
0x2F |
|
U32 |
U32 |
Logical shift to the right. |
SHL |
0x30 |
|
U32 |
U32 |
Logical shift to the left |
OBCALL |
0x31 |
U32=Method (#2) |
? |
? |
Direct method call to OB instantiation |
POP |
0x32 |
|
* |
-- |
Pop value (skip) |
PUSHP |
0x33 |
U32=Source (#1) |
U32 |
U32 |
Push pointer to variable |
(#1) Source/destination means name of a variable, i.e., an offset to the string table.
(#2) By method means string, i.e., an offset to the string table, with format "<instance_name>.#<hexid_method>" or "<instance_name>[<index>].#<hexid_method>" (hexid = 32bit hexadecimal ascii number, without prefix 0x. Example method no. 0xFA9 of OB instance 'myob' : "myob#00000FA9".