La tabella elementi del circuito (ITEMS) è composta da un numero di definizioni di circuito (ITEM) contigue, ognuna delle quali contiene tutte le informazioni su uno specifico elemento.
La posizione (relativa al file) e la dimensione della tabella sono specificate rispettivamente nei seguenti campi, a seconda di dove utilizzata:
•dai campi RUNG.ITEMSOFF e RUNG.ITEMSSIZE, se utilizzato in circuito del blocco (RUNG).
•dai campi LIVECMD.ITEMSOFF e LIVECMD.ITEMSSIZE, se utilizzato in comandi modifiche live (LIVECMD).
Definizione elemento del circuito
Gli elementi del circuito (ITEM) hanno una parte iniziale comune, quindi un'area dati specifica per ogni tipo di elemento. La parte comune è la seguente:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U16 |
Codice tipo elemento. |
SIZE |
+2 |
U16 |
Dimensione completa dell'elemento (tutti i campi). |
DATA |
+4 |
... |
Dati specifici (opzionali). |
Gli elementi previsti sono i seguenti:
Simbolico |
ID |
Tipo |
Dati |
Descrizione |
---|---|---|---|---|
BB |
0x0001 |
|
|
Inizio ramo. |
NL |
0x0002 |
|
|
Prossimo livello ramo . Note: deve sempre essere compreso tra un BB e un EB. |
EB |
0x0003 |
|
|
Fine ramo . Note: deve sempre corrispondere ad un BB. |
OC |
0x0004 |
|
U32=Destinazione (#3): solo tipi BOOL |
Contatto aperto. |
CC |
0x0005 |
|
U32=Destinazione (#3): solo tipi BOOL |
Contatto chiuso. |
RE |
0x0006 |
|
U32=Destinazione (#3): solo tipi EDGE |
Fronte di salita. |
FE |
0x0007 |
|
U32=Destinazione (#3): solo tipi EDGE |
Fronte di discesa. |
AF |
0x0008 |
|
|
Sempre falso. |
OUT |
0x0009 |
F |
U32=Destinazione (#3): solo tipi BOOL |
Output. |
OL |
0x000A |
F |
U32=Destinazione (#3): solo tipi BOOL |
Output latch (set). |
OUL |
0x000B |
F |
U32=Destinazione (#3): solo tipi BOOL |
Output unlatch (reset). |
NOUT |
0x000C |
F |
U32=Destinazione (#3): solo tipi BOOL |
Output negato |
CLR |
0x000D |
F |
Azzeramento (clear). |
|
TP |
0x000E |
F |
U32=Destinazione (#3): solo tipi TIMER U32=Valore di preset 1 (#4) U32=Valore di preset 2 (#4) |
Abilita timer pulse. |
TON |
0x000F |
F |
U32=Destinazione (#3): solo tipi TIMER U32=Valore di preset 1 (#4) U32=Valore di preset 2 (#4) |
Abilita timer on delay. |
TOFF |
0x0010 |
F |
U32=Destinazione (#3): solo tipi TIMER U32=Valore di preset 1 (#4) U32=Valore di preset 2 (#4) |
Abilita timer off delay. |
TSQ |
0x0011 |
F |
U32=Destinazione (#3): solo tipi TIMER U32=Valore di preset 1 (#4) U32=Valore di preset 2 (#4) |
Abilita timer onda quadra. |
TINT |
0x0012 |
F |
U32=Destinazione (#3): solo tipi TIMER U32=Valore di preset 1 (#4) U32=Valore di preset 2 (#4) |
Abilita timer integrale. |
CU |
0x0013 |
F |
U32=Destinazione (#3): solo tipi COUNTER U32=Valore di preset (#4) |
Conteggio up. |
CD |
0x0014 |
F |
U32=Destinazione (#3): solo tipi COUNTER U32=Valore di preset (#4) |
Conteggio down. |
CUR |
0x0015 |
F |
U32=Destinazione (#3): solo tipi COUNTER U32=Valore di preset (#4) |
Conteggio up rotativo. |
CDR |
0x0016 |
F |
U32=Destinazione (#3): solo tipi COUNTER U32=Valore di preset (#4) |
Conteggio down rotativo. |
LD |
0x0017 |
F |
U32=Destinazione (#3): solo tipi COUNTER |
Preset su contatore. |
MATH |
0x0018 |
F |
U32=Espressione (#5) U32=Destinazione (#3) |
Blocco matematico. |
EQ |
0x0019 |
|
U32=Sorgente A (#2) U32=Sorgente B (#2) |
Blocco confronto uguaglianza (A == B). |
NE |
0x001A |
|
U32=Sorgente A (#2) U32=Sorgente B (#2) |
Blocco confronto diverso (A != B). |
GT |
0x001B |
|
U32=Sorgente A (#2) U32=Sorgente B (#2) |
Blocco confronto maggiore (A > B). |
GE |
0x001C |
|
U32=Sorgente A (#2) U32=Sorgente B (#2) |
Blocco confronto maggiore/uguale (A >= B). |
LT |
0x001D |
|
U32=Sorgente A (#2) U32=Sorgente B (#2) |
Blocco confronto minore (A < B). |
LE |
0x001E |
|
U32=Sorgente A (#2) U32=Sorgente B (#2) |
Blocco confronto minore/uguale (A <= B). |
COPY |
0x001F |
F |
U32=Sorgente (#2) U32=Destinazione (#3) U32=N. Elementi (#2) |
Copia dati da sorgente a destinazione, per il n. di elementi specificato. |
CALL |
0x0020 |
F |
U32 ID blocco da chiamare |
Chiamata di un blocco (sub-routine). |
RET |
0x0021 |
F |
|
Ritorno da un blocco all'interno. |
ADD |
0x0022 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Somma (A + B). |
SUB |
0x0023 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Sottrazione (A - B). |
MUL |
0x0024 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Moltiplicazione (A * B). |
DIV |
0x0025 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Divisione (A / B). |
AND |
0x0026 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
AND binario (A & B). |
OR |
0x0027 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
OR binario (A | B). |
NOT |
0x0028 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
NOT binario (~A). |
XOR |
0x0029 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
XOR binario (A ^ B). |
SQRT |
0x002A |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Radice quadrata di A. |
MOD |
0x002B |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Modulo (A mod B). |
POW |
0x002C |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Elevamento a potenza (A pow B). |
SIN |
0x002D |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Seno di A. |
COS |
0x002E |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Coseno di A. |
TAN |
0x002F |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Tangente di A. |
ASIN |
0x0030 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Arcoseno di A. |
ACOS |
0x0031 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Arcocoseno di A. |
ATAN |
0x0032 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Arcotangente di A. |
ATAN2 |
0x0033 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Arcotangente di A, B. |
LOG |
0x0034 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Logaritmo base 10 di A. |
LN |
0x0035 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Logaritmo base E di A. |
ABS |
0x0036 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Valore assoluto di A |
SIGN |
0x0037 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Segno di A. |
ROUND |
0x0038 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Arrotondamento all'intero più vicino ad A. |
MIN |
0x0039 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Minimo tra A e B. |
MAX |
0x003A |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Massimo tra A e B. |
RANGE |
0x003B |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Sorgente C (#2) U32=Destinazione (#3): solo tipi BOOL |
Verifica se A contenuto nel range B-C. |
LIMIT |
0x003C |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Sorgente C (#2) U32=Destinazione (#3) |
Limita A al range B-C. |
ROR |
0x003D |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Rotazione bit a destra (A >> B). |
ROL |
0x003E |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Rotazione bit a sinistra (A << B). |
SHR |
0x003F |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Shift bit a destra (A >> B). |
SHL |
0x0040 |
F |
U32=Sorgente A (#2) U32=Sorgente B (#2) U32=Destinazione (#3) |
Shift bit a sinistra (A << B). |
MOV |
0x0041 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Assegna A. |
TODEG |
0x0042 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Conversione di A da RAD a DEG. |
TORAD |
0x0043 |
F |
U32=Sorgente A (#2) U32=Destinazione (#3) |
Conversione di A da DEG a RAD. |
NEG |
0x0044 |
|
|
Negazione stato logico. |
NOP |
0x0045 |
F |
|
Nessuna operazione. |
EVAL |
0x0046 |
|
U32=Espressione (#5) |
Valutazione espressione (booleana). |
OBCALL |
0x0047 |
F |
U32=Nome instanza (#6) U32=Nome completo metodo (#9) U32=Elenco nomi parametro (#7) U32=Elenco valori parametro (#7) U32=Risultato (#3) U8[]=Dati espressione matematica (#8) |
Chiamata a metodo di una instanza OB. |
FT |
0x0048 |
|
|
Esecuzione iniziale |
ARE |
0x0049 |
|
|
Fronte di salita (anonimo) |
AFE |
0x004A |
|
|
Fronte di discesa (anonimo) |
(#1) Variabile a bit locale (tipo I32 o U32) con indirizzamento diretto (eventuali indici e numero di bit costanti).
(#2) Per sorgente/destinazione si intende nome di una variabile oppure la rappresentazione ascii di un valore numerico (solo sorgente), ovvero un offset alla tabella stringhe .
(#3) Per destinazione si intende nome di una variabile con offset alla tabella stringhe.
(#4) Per valore (o valore di preset) si intende un valore numerico in formato stringa: stringa vuota (o offset 0) si intende nessun valore assegnato.
(#5) Espressione intesa come stringa con offset alla tabella stringhe.
(#6) Per nome instanza si intende nome di una variabile con offset alla tabella stringhe, il cui TYPEID sia riferito ad una struttura utente con flag FISOBC.
(#7) Per elenco si intende una stringa (con offset alla tabella stringhe), composta da un certo numero di sotto-stringhe separate con carattere ascii 0xFF: i due elenchi (nomi/valori) DEVONO avere sempre lo stesso n. di elementi o essere entrambe vuote (=0).
(#8) La chiamata ad un metodo di una instanza OB viene effettivamente tradotto come una espressione matematica, in cui vengono preparati in stack gli eventuali parametri (valori in ordine naturale), viene effettuata la chiamata al metodo e quindi ritrovato l'eventuale risultato da stack.
(#9) Nome completo del metodo (univoco), inteso come stringa con offset alla tabella stringhe.
Dati espressione matematica
I dati dell'espressione matematica (usati dagli elementi MATH, COND e OBCALL), sono una serie di operazioni contigue (ordinati in polacca inversa) con la seguente intestazione comune:
Nome |
Offset |
Tipo |
Descrizione |
---|---|---|---|
CODE |
+0 |
U8 |
Codice operazione. |
DATA |
+1 |
... |
Dati specifici (opzionali). |
Le operazioni previste sono le seguenti:
Simbolico |
ID |
Dati |
In (stack) |
Out (stack) |
Descrizione |
---|---|---|---|---|---|
PUSH |
0x01 |
DBL=valore |
-- |
DBL |
Push valore in stack. |
PUSHV |
0x02 |
U32=Sorgente (#1) |
-- |
DBL |
Push valore variabile in stack. |
ADD |
0x03 |
|
DBL0,DBL1 |
DBL |
Somma. |
SUB |
0x04 |
|
DBL0,DBL1 |
DBL |
Sottrazione (#2). |
MUL |
0x05 |
|
DBL0,DBL1 |
DBL |
Moltiplicazione (#2). |
DIV |
0x06 |
|
DBL0,DBL1 |
DBL |
Divisione (#2). |
MOD |
0x07 |
|
DBL |
DBL |
Modulo (#3). |
ABS |
0x08 |
|
DBL |
DBL |
Valore assoluto (#3). |
SIN |
0x09 |
|
DBL |
DBL |
Seno. |
COS |
0X0A |
|
DBL |
DBL |
Coseno. |
TAN |
0x0B |
|
DBL |
DBL |
Tangente. |
ASIN |
0x0C |
|
DBL |
DBL |
Arcoseno. |
ACOS |
0x0D |
|
DBL |
DBL |
Arcocoseno. |
ATAN |
0x0E |
|
DBL |
DBL |
Arcotangente. |
POW |
0x0F |
|
DBL |
DBL |
Esponente. |
LOG10 |
0x10 |
|
DBL |
DBL |
Logaritmo base 10. |
LOG |
0x11 |
|
DBL |
DBL |
Logaritmo naturale. |
R_AND |
0x12 |
|
U32 |
U32 |
AND binario. |
R_OR |
0x13 |
|
U32 |
U32 |
OR binario. |
R_NOT |
0x14 |
|
U32 |
U32 |
NOT binario. |
R_XOR |
0x15 |
|
U32 |
U32 |
XOR binario. |
POPV |
0x16 |
U32=Destinazione (#1) |
DBL |
-- |
Pop valore da stack a variabile. |
R_ROR |
0x17 |
|
U32 |
U32 |
Rotazione bit a destra. |
R_ROL |
0x18 |
|
U32 |
U32 |
Rotazione bit a sinistra. |
R_SHR |
0x19 |
|
U32 |
U32 |
Shift bit a destra. |
R_SHL |
0x1A |
|
U32 |
U32 |
Shift bit a sinistra. |
TOBIN |
0x1B |
|
U32 |
U32 |
Conversione da BCD a binario. |
TOBCD |
0x1C |
|
U32 |
U32 |
Conversione da binario a BCD. |
TODEG |
0x1D |
|
DBL |
DBL |
Conversione da radianti a gradi. |
TORAD |
0x1E |
|
DBL |
DBL |
Conversione da gradi a radianti. |
ATAN2 |
0x1F |
|
DBL0,DBL1 |
DBL |
Arcotangente con due parametri. |
PUSHVB |
0x20 |
U32=Sorgente (#1) |
DBL |
-- |
Push valore variabile a bit in stack. |
POPVB |
0x21 |
U32=Destinazione (#1) |
DBL |
-- |
Pop valore da stack a variabile bit. |
POPL |
0x22 |
|
BOOL |
-- |
Pop valore logico (0=falso, altrimenti vero). |
|
0x23 |
|
|
|
(riservato) |
EQ |
0x24 |
|
DBL0,DBL1 |
BOOL |
Confronto: uguale. |
NE |
0x25 |
|
DBL0,DBL1 |
BOOL |
Confronto: differente. |
LT |
0x26 |
|
DBL0,DBL1 |
BOOL |
Confronto: minore. |
LE |
0x27 |
|
DBL0,DBL1 |
BOOL |
Confronto: minore o uguale. |
GT |
0x28 |
|
DBL0,DBL1 |
BOOL |
Confronto: maggiore. |
GE |
0x29 |
|
DBL0,DBL1 |
BOOL |
Confronto: maggiore o uguale. |
AND |
0x2A |
|
BOOL,BOOL |
BOOL |
AND logico. |
OR |
0x2B |
|
BOOL,BOOL |
BOOL |
OR logico. |
NOT |
0x2C |
|
BOOL |
BOOL |
NOT logico. |
XOR |
0x2D |
|
BOOL,BOOL |
BOOL |
XOR logico. |
CHS |
0x2E |
|
DBL |
DBL |
Cambio segno. |
SHR |
0x2F |
|
U32 |
U32 |
Shift logico a destra. |
SHL |
0x30 |
|
U32 |
U32 |
Shift logico a sinistra |
OBCALL |
0x31 |
U32=Metodo (#2) |
? |
? |
Chiamata diretta a metodo per instanza OB |
POP |
0x32 |
|
* |
-- |
Pop valore (skip) |
PUSHP |
0x33 |
U32=Sorgente (#1) |
U32 |
U32 |
Push puntatore a variabile |
(#1) Per sorgente/destinazione si intende nome di una variabile, ovvero un offset alla tabella stringhe .
(#2) Per metodo si intende stringa, ovvero un offset alla tabella stringhe, con formato "<nome_istanza>.#<hexid_metodo>" oppure "<nome_istanza>[<indice>].#<hexid_metodo>" (hexid = numero 32bit esadecimale ascii, senza prefisso 0x. Esempio: #000F00A09).