Definizione di variabili persistenti
Le singole variabili così come le istanze della struttura e le istanze dei blocchi funzione possono essere contrassegnate come "persistenti" mediante l'uso di attributi. Quando un'istanza viene contrassegnata, tutti i membri di VAR
, VAR_INPUT
, E VAR_OUTPUT
verranno archiviati in modo persistente. Nel caso in cui le variabili in a VAR PERSISTENT
sono contrassegnate come "persistenti", verrà creato un avviso.
Inoltre sono disponibili attributi per definire un gruppo di archiviazione predefinito, nonché per escludere variabili particolari dall'archiviazione persistente di strutture o istanze di blocchi funzione.
Se la definizione delle variabili persistenti è stata modificata (aggiunta, rimozione, ridenominazione, modifica del tipo di dati) non deve essere eseguita alcuna nuova generazione di codice compositore (comando Genera). Queste modifiche verranno aggiornate automaticamente nelle istanze di Persistent Manager durante la compilazione.
Per informazioni sulle possibili conversioni implicite in caso di definizione del tipo di dati modificata, vedere: Parametro
Tipi di dati supportati
Le istanze con i seguenti tipi di dati non possono essere archiviate in modo persistente:
MORSO
Puntatore
Interfacce
Costanti
Array di tipi di dati non persistenti
Tutti gli altri tipi di dati sono supportati. Ciò include enumerazioni, tipi di dati sottointervallo, matrici di matrici e matrici multidimensionali:
ARRAY[0..9] OF ARRAY[5..6, 7..8, 9..10] OF INT
Tipo di dati: UNIONE
Per salvare l'istanza di un'unione in modo persistente, uno dei suoi campi deve essere contrassegnato come "rappresentante". Ci sono tre modi possibili:
Esattamente un campo nella dichiarazione dell'unione è contrassegnato con l'attributo
ac_persist_union_representant
(senza valore dell'attributo). Questo campo quindi "rappresenta" l'unione. Il suo valore verrà salvato e caricato in modo rappresentativo per l'intera unione.Un campo esatto nella dichiarazione dell'unione è contrassegnato con l'attributo
ac_persist
– questo definisce allo stesso tempo il rappresentante.L'istanza dell'unione è contrassegnata con l'attributo
ac_persist_union_set_representant
compreso il valore dell'attributo. Il valore dell'attributo descrive il nome del campo dell'unione che dovrà essere utilizzato come rappresentativo. Questo attributo sovrascrive un esistenteac_persist_union_representant
attributo nella dichiarazione dell'unione. Anche gli array di unioni possono essere contrassegnati e fare riferimento agli elementi dell'array.
'ac_persist_union_representant'
TYPE UnionWithRep : UNION di : DINT ; {attribute 'ac_persist_union_representant'} dw : DWORD ; END_UNION END_TYPE
'ac_persistere'
TYPE UnionWithPersist : UNION di : DINT ; {attribute 'ac_persist' := 'TestUnion'} dw : DWORD ; END_UNION END_TYPE
'ac_persist_union_set_representant'
FUNCTION_BLOCK FBTestUnion VAR {attribute 'ac_persist_union_set_representant' := 'dw'} u2 : UnionWithoutRep ; END_VAR
Matrice di unione
VAR {attribute 'ac_persist_union_set_representant' := 'dw'} aElems ARRAY[0..7] OF SomeUnion ; {attribute 'ac_persist_union_set_representant' := 'dw'} aaElems ARRAY[0..7] OF ARRAY[0..1] OF SomeUnion ; END_VAR
Il rappresentante deve avere le stesse dimensioni dell'intero sindacato. Altrimenti i dati completi non verrebbero salvati. Il rappresentante inoltre non deve avere aree di riempimento (aree di dati vuote create dal compilatore per allineare i dati nell'archivio).
La scomposizione del rappresentante in tipi di dati primitivi non deve contenere istanze di tipo
REAL
OLREAL
o istanza di tipoSTRING
OWSTRING
.Inoltre il rappresentante deve essere composto da tipi supportati (vedi sopra). Ad esempio il rappresentante può essere di tipo
Structure
– tuttavia, la struttura stessa non deve contenere Pointer.
Attributo: 'ac_persist'
L'attributo 'ac_persist
' può essere utilizzato per
Variabili
Istanze di strutture
Istanze di blocchi funzione
Membri delle strutture
Membri dei blocchi funzione
{attribute 'ac_persist' [ := '<PERSISTENCE_GROUP>']}
PERSISTENCE_GROUP
è il nome del gruppo di persistenza a cui deve essere attribuita la dichiarazione. Deve essere un identificatore IEC valido. Se qui non viene nominato alcun gruppo di persistenza, l'assegnazione verrà eseguita in base all'attributo 'ac_persist_set_default_group'
, che in questo caso deve essere definito.
Se un'istanza di struttura o un'istanza di blocco funzione è contrassegnata come "persistente" e anche almeno un membro nella dichiarazione è contrassegnato come "persistente", verrà creato un messaggio di errore.
La variabile t
viene assegnato al gruppo di persistenza PROCESS
. Tutti i membri verranno archiviati in modo persistente.
PROGRAM PLC_PRG VAR {attribute 'ac_persist' := 'PROCESS'} t : TON; END_VAR
Il membro iNumIOs
viene assegnato al gruppo di persistenza CONFIG
. Questo membro verrà archiviato in modo persistente per tutte le istanze del blocco funzione (se non esplicitamente soppresso dall'attributo 'ac_persist_exclude'
).
FUNCTION_BLOCK FB VAR {attribute 'ac_persist' := 'CONFIG'} iNumIOs : INT := 0; END_VAR
Attributo: 'ac_persist_set_default_group'
Se il nome del gruppo manca nell'attributo 'ac_persist'
, UN gruppo predefinito deve essere definito in un'istanza di blocco funzione o di struttura contenente la rispettiva variabile direttamente o indirettamente. Questo è possibile con l'attributo 'ac_persist_set_default_group'
. L'attributo può essere impostato anche per un membro del blocco funzione. La definizione più interna trovata di 'ac_persist_set_default_group'
verrà utilizzato come gruppo predefinito per la variabile.
Non è consentito l'uso 'ac_persist_set_default_group'
insieme a 'ac_persist'
O 'ac_persist_exclude'
. In questo caso verrà creato un messaggio di errore durante la generazione del codice.
FUNCTION_BLOCK FB_Util VAR {attribute 'ac_persist'} // no group //'ac_persist_set_default_group‘ and 'ac_persist_exclude' not allowed here i : INT := 0; END_VAR
PROGRAM PLC_PRG VAR {attribute 'ac_persist_set_default_group' := 'PROCESS'} fbu1 : FB_Util; {attribute 'ac_persist_set_default_group'´ := 'CONFIG'} fbu2 : FB_Util; END_VAR
Attributo: 'ac_persist_exclude'
L'attributo 'ac_persist_exclude'
viene utilizzato per escludere una variabile dalla memoria persistente, non importa se i membri nella dichiarazione della struttura o del blocco funzione sono definiti come "persistenti". Se non esistono membri persistenti nella dichiarazione verrà creato un errore durante la generazione del codice.
PROGRAM PLC_PRG VAR {attribute 'ac_persist_exclude'} fb1 : FB; END_VAR