Variabile: PERSISTENTE Permalink

Le variabili persistenti sono dichiarate nella sezione di dichiarazione ‎VAR_GLOBAL RETAIN PERSISTENT‎ nell'elenco delle variabili globali persistenti. Per le variabili contrassegnate con la parola chiave ‎PERSISTENT‎ al di fuori dell'editor di persistenza, i percorsi delle istanze vengono aggiunti lì.

A partire dalla versione CODESYS V3.3.0.1, una dichiarazione di variabile con ha lo stesso effetto di ‎RETAIN PERSISTENT‎ o ‎PERSISTENT‎.

In un blocco funzionale non deve esserci alcuna dichiarazione di variabile che contenga esclusivamente ‎PERSISTENT‎, ma solo ‎PERSISTENT RETAIN‎ o ‎RETAIN PERSISTENT‎.

Sintassi della dichiarazione nell'elenco delle variabili persistenti globali ‎PersistentVars‎

VAR_GLOBAL PERSISTENT RETAIN
    <identifier> : <data type> (:= <initialization>)?;
 <instance path to POU variable>
END_VAR

Sintassi della dichiarazione nei POU

<scope> PERSISTENT RETAIN
    <identifier> : <data type> ( := <initialization> )?; // ( ... )? : Optional
END_VAR
<scope> : VAR | VAR_INPUT | VAR_OUTPUT | VAR_IN_OUT | VAR_STAT | VAR_GLOBAL

Non è consentita l'assegnazione di ingressi, uscite o indirizzi di memoria con la parola chiave ‎AT‎.

Non utilizzare mai il tipo di dati ‎POINTER TO‎ negli elenchi di variabili persistenti. Se l'applicazione viene scaricata di nuovo, i loro indirizzi potrebbero cambiare. Le avvertenze del compilatore corrispondenti vengono visualizzate nella finestra dei messaggi.

Se si cambiano spesso i nomi o i tipi di dati delle variabili permanenti, è meglio dichiararle come variabili di mantenimento con la sola parola chiave ‎RETAIN‎.

AVVISO

AVVISO
AVVISO
AVVISO

AVVISO

AVVISO

Evitare di inserire percorsi di istanza, perché in questo caso si utilizza il doppio della memoria e si può verificare un tempo di ciclo maggiore. Invece, dichiarare le variabili nell'elenco delle variabili persistenti.

Esempio

Dichiarazione nell'elenco delle variabili persistenti di ‎PersistentVars‎

{attribute 'qualified_only'}
VAR_GLOBAL PERSISTENT RETAIN
        g_iCounter : INT;
        // Generated instance path of persistent variable
        PLC_PRG.fb_A.iPersistentCounter_A: INT;
END_VAR

Dichiarazione nel blocco funzione ‎FB_A‎

FUNCTION_BLOCK FB_A
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR PERSISTENT RETAIN
        iPersistentCounter_A : INT;
END_VAR

Dichiarazione nel programma ‎PLC_PRG‎

VAR
        fb_A1 : FB_A;
END_VAR

Possibili luoghi di dichiarazione

Descrizione

Direttamente nell'elenco delle variabili globali persistenti

La variabile è persistente e si trova nell'area di memoria protetta.

Localmente in un programma con un percorso di istanza nell'elenco delle variabili persistenti

Localmente in un blocco funzione con un percorso di istanza nell'elenco delle variabili persistenti

La variabile è persistente e si trova nell'area di memoria protetta e nella memoria (doppia allocazione).

Solo localmente in un programma

Solo localmente in un blocco funzione

La variabile non è persistente. Nella finestra dei messaggi viene visualizzato un avviso.

CONSIGLIO:

Fare clic su «Declarations  Add All Instance Paths» per importare le variabili nell'elenco delle variabili persistenti.

Localmente in una funzione

Questo tipo di dichiarazione non ha alcun effetto. La variabile non è persistente.

Nell'editor di persistenza, fare clic su «Declarations  Add All Instance Paths» se le variabili locali sono contrassegnate come ‎PERSISTENT‎.

Se possibile, evitare di contrassegnare come ‎PERSISTENT‎ le variabili dichiarate in un blocco funzione. Questo perché l'istanza del blocco funzione viene memorizzata interamente nella memoria permanente e non solo la variabile marcata.