È possibile aggiungere le seguenti parole chiave attributo alla dichiarazione del tipo di variabile per specificare l'ambito:
RETAIN: vedere Variabili Retain.
PERSISTENT: vedere Variabili persistenti.
CONSTANT: vedere Costanti - CONSTANT, letterali con tipo.
RETAIN, PERSISTENT
Le variabili rimanenti possono mantenere il loro valore per il periodo di esecuzione normale del programma. Dichiararle come variabili Retain o, in modo più rigoroso, come variabili persistenti.
La dichiarazione determina il livello di resistenza di una variabile rimanente in caso di ripristino, download o riavvio del controller. Nelle applicazioni si usa principalmente la combinazione di entrambi i flag di rimanenza (vedere Variabili persistenti).
VAR PERSISTENT viene interpretata analogamente a VAR PERSISTENT RETAIN o VAR RETAIN PERSISTENT.
La persistenza si ottiene con le seguenti procedure:
Determinando i task ciclici che accedono alla variabile.
Copiando la variabile nell'elenco di variabili globali persistenti alla fine del primo task ciclico (in ogni ciclo).
Copiando il valore della variabile persistente nella variabile normale al riavvio del controller.
Poiché la memoria viene allocata sia nella dichiarazione che nel percorso dell'istanza, questa variabile persistente richiede una doppia allocazione di memoria in ciascun ciclo. Ciò può portare a tempi di elaborazione più lunghi, soprattutto con valori grandi e strutturati.
Le variabili dichiarate come Retain sono memorizzate in un'area di memoria non volatile. Per dichiarare questo tipo di variabile, utilizzare la parola chiave RETAIN nella parte di dichiarazione di un POU o di un elenco di variabili globali.
Esempio
VAR RETAIN
iRem1 : INT; (* 1. Retain variable*)
END_VAR
Le variabili Retain mantengono il loro valore anche dopo uno spegnimento imprevisto o normale del controller o quando si esegue il comando . Al riavvio del programma, i valori ritenuti continueranno ad essere elaborati. Le altre variabili non Retain vengono nuovamente inizializzate, con i relativi valori di inizializzazione o, se questi non sono stati dichiarati, con i valori di inizializzazione predefiniti.
Ad esempio, è possibile utilizzare un valore ritenuto quando un'operazione, come il conteggio dei pezzi di un macchinario di produzione, deve continuare dopo un'interruzione di corrente.
Le variabili Retain, tuttavia, vengono reinizializzate quando si esegue il comando e, a differenza delle variabili persistenti, quando si esegue il comando o durante il download di un'applicazione.
VAR RETAIN sono memorizzate nella memoria non volatile. Le variabili locali definite come VAR RETAIN nelle funzioni, tuttavia, NON sono memorizzate nella memoria non volatile. La definizione locale di VAR RETAIN nelle funzioni non ha alcun effetto..
Utilizzando interfacce o blocchi funzioni esternamente alle librerie di configurazione sistema nella sezione ritentiva del programma (VAR_RETAIN) si provocano eccezioni di sistema, che possono rendere il controller inutilizzabile e richiedere un riavvio.
| AVVERTIMENTO | |
|---|---|
RETAIN, l'istanza del blocco funzione con le sue variabili viene archiviata nella memoria rimanente. Per ulteriori informazioni, vedere questa funzione non è disponibile per tutti i controller. Consultare la Guida alla programmazione del controller specifico.
Le variabili persistenti sono identificate dalla parola chiave PERSISTENT (VAR_GLOBAL PERSISTENT). Vengono reinizializzate solo quando si esegue il comando . A differenza delle variabili Retain, mantengono i loro valori dopo un download.
AT in combinazione con VAR PERSISTENT.
Esempio di applicazione:
un contatore di ore di funzionamento, che deve continuare anche dopo un'interruzione di corrente o un download. Vedere la tabella sinottica sul comportamento delle variabili rimanenti.
È possibile dichiarare le variabili persistenti solo in uno speciale elenco di variabili globali del tipo di oggetto variabili persistenti assegnato all'applicazione. È possibile aggiungere un solo elenco di questo tipo a un'applicazione.
VAR_GLOBAL PERSISTENT ha lo stesso effetto di una dichiarazione con VAR_GLOBAL PERSISTENT RETAIN o VAR_GLOBAL RETAIN PERSISTENT.
PERSISTENT all'esterno dell'editor di elenchi persistenti. Per ulteriori informazioni, fare riferimento al comando.
Come le variabili Retain, anche le variabili persistenti sono memorizzate in un'area di memoria separata.
Esempio
VAR_GLOBAL PERSISTENT RETAIN
iVarPers1 : DINT; (* 1. Persistent+Retain Variable App1 *)
bVarPers : BOOL; (* 2. Persistent+Retain Variable App1 *)
END_VAR
A ogni nuovo caricamento dell'applicazione, l'elenco delle variabili persistenti sul controller viene confrontato con quello del progetto. L'elenco sul controller è identificato dall'applicazione. In caso di incongruenze, verrà richiesto di reinizializzare tutte le variabili persistenti dell'applicazione. L'incoerenza può risultare dalla modifica del nome, dall'elliminazione o da altre modifiche apportate alle dichiarazioni presenti nell'elenco.
Le nuove dichiarazioni possono essere aggiunte solo alla fine dell'elenco. Durante un download, queste verranno rilevate come nuove e non richiederanno una reinizializzazione dell'intero elenco. Se si modifica il nome o il tipo dati di una variabile, questa viene gestita come una nuova dichiarazione e provoca una reinizializzazione della variabile al successivo download o modifica in linea.
PERSISTENT, l'istanza del blocco funzione con le sue variabili viene archiviata nella memoria rimanente ma solo tale variabile viene trattata come persistente.
Consultare la Guida alla programmazione del controller specifico per ulteriori informazioni sul comportamento delle variabili rimanenti.
CONSTANT
Le costanti sono identificate dalla parola chiave CONSTANT. È possibile dichiararle localmente (unità di oggetti di programmazione) o globalmente (elenco di variabili globali). È possibile accedere alle variabili costanti in sola lettura nella parte di implementazione di una POU.
Sintassi
<scope> CONSTANT <identifier>:<type> := <initialization>;
END_VAR
Con <scope> : VAR | VAR_INPUT | VAR_STAT | VAR_GLOBAL
Assicurarsi di assegnare un valore di inizializzazione quando si dichiara una variabile costante.
Esempio
VAR CONSTANT
c_iCon1:INT:=12; (* 1. Constant*)
END_VAR
Vedere il capitolo Operandi per un elenco di possibili vincoli.
Fondamentalmente, nell'uso delle costanti IEC, verrà utilizzato il tipo di dati più piccolo possibile. Se è necessario utilizzare un altro tipo di dati, è possibile farlo grazie ai letterali con tipo, senza bisogno di dichiarare esplicitamente le costanti. La costante verrà fornita con un prefisso che ne stabilisce il tipo.
Sintassi
<type>#<literal>;
|
<type> |
specifica il tipo di dati desiderato possibili valori: BOOL, SINT, USINT, BYTE, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL Il tipo deve essere scritto con lettere maiuscole. |
|
<literal> |
specifica la costante Immettere dati corrispondenti al tipo di dati specificato in <type>. |
Esempio
iVar1:=DINT#34;
Se non è possibile convertire la costante nel tipo di destinazione senza perdita di dati, viene emesso un messaggio.
È possibile utilizzare i letterali con tipo in tutti i casi in cui si possono utilizzare le normali costanti.