Parole chiave attributo per tipi di variabile

Panoramica

È possibile aggiungere le seguenti parole chiave attributo alla dichiarazione del tipo di variabile per specificare l'ambito:

Variabili rimanenti - 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).

NOTA: Una dichiarazione VAR PERSISTENT viene interpretata analogamente a VAR PERSISTENT RETAIN o VAR RETAIN PERSISTENT.
NOTA: Utilizzare il comando Aggiungi tutti i percorsi di istanza per accettare le variabili dichiarate come persistenti nell'oggetto Elenco persistente.

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.

Variabili Retain

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 Online Reset a caldo. 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 Online Reset origine e, a differenza delle variabili persistenti, quando si esegue il comando Online Reset a freddo o durante il download di un'applicazione.

NOTA: Solo le specifiche variabili definite come 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
FUNZIONAMENTO ANOMALO DELL'APPARECCHIATURA
  • Non utilizzare interfacce dalla libreria SystemConfigurationItf nella sezione ritentiva del programma (VAR_RETAIN).
  • Non utilizzare blocchi funzione dalla libreria SystemConfiguration nella sezione ritentiva del programma (VAR_RETAIN).
Il mancato rispetto di queste istruzioni può provocare morte, gravi infortuni o danni alle apparecchiature.
NOTA: Le librerie SystemConfigurationItf e SystemConfiguration sono disponibili solo per controller PacDrive (PacDrive LMC Eco, PacDrive LMC Pro/Pro2).
NOTA: Se una variabile in un blocco funzione è contrassegnata con 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.

Variabili persistenti

Le variabili persistenti sono identificate dalla parola chiave PERSISTENT (VAR_GLOBAL PERSISTENT). Vengono reinizializzate solo quando si esegue il comando Online Reset origine. A differenza delle variabili Retain, mantengono i loro valori dopo un download.

NOTA: Non utilizzare la dichiarazione 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.

NOTA: Una dichiarazione con VAR_GLOBAL PERSISTENT ha lo stesso effetto di una dichiarazione con VAR_GLOBAL PERSISTENT RETAIN o VAR_GLOBAL RETAIN PERSISTENT.
NOTA: I percorsi istantanei vengono aggiunti per le variabili contrassegnate con la parola chiave 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
NOTA: Le variabili persistenti possono essere dichiarate solo nell'oggetto Elenco persistente. Se vengono dichiarate altrove, si comportano come variabili Retain e sono rilevate come errore di Compilazione nella vista Messaggi. Le variabili Retain possono essere dichiarate negli elenchi di variabili globali o nelle POU.

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.

NOTA: Tenere attentamente presenti tutte le modifiche apportate alla parte di dichiarazione dell'elenco delle variabili persistenti e il loro effetto sulla reinizializzazione.

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.

NOTA: Se una variabile in un blocco funzione è contrassegnata con PERSISTENT, l'istanza del blocco funzione con le sue variabili viene archiviata nella memoria rimanente ma solo tale variabile viene trattata come persistente.

Comportamento delle variabili rimanenti

Consultare la Guida alla programmazione del controller specifico per ulteriori informazioni sul comportamento delle variabili rimanenti.

Costanti - 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.

Letterali con tipo

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.

Costanti in modalità online

Se l'impostazione predefinita Sostituisci costanti (File > Impostazioni progetto > Opzioni del compilatore) è attivata, le costanti in modalità online hanno il valore preceduto dal simbolo nella colonna Valore della vista Dichiarazione o Controllo. In tal caso, non è possibile accedervi, ad esempio, per forzarle o scriverle.