Tipi di variabili

Panoramica

Questo capitolo fornisce ulteriori informazioni sui seguenti tipi di variabili:

Variabili locali - VAR

Tra le parole chiave VAR e END_VAR, tutte le variabili di una POU sono dichiarate. Queste variabili non hanno alcun collegamento esterno; in altre parole, non possono essere scritte dall'esterno.

Considerare la possibilità di aggiungere un attributo a VAR.

Esempio

VAR
 iLoc1:INT; (* 1. Local Variable*)
END_VAR

Variabili di ingresso - VAR_INPUT

Tra le parole chiave VAR_INPUT e END_VAR, sono dichiarate tutte le variabili che servono come variabili di ingresso per una POU. Pertanto, nella posizione della chiamata, il valore delle variabili può essere fornito insieme a una chiamata.

Considerare la possibilità di aggiungere un attributo.

Esempio

VAR_INPUT
 iIn1:INT (* 1. Inputvariable*)
END_VAR

Variabili di uscita - VAR_OUTPUT

Tra le parole chiave VAR_OUTPUT e END_VAR, sono dichiarate tutte le variabili che servono come variabili di uscita di una POU. Pertanto, questi valori vengono riportati alla POU che effettua la chiamata.

Considerare la possibilità di aggiungere un attributo a VAR_OUTPUT.

Esempio

VAR_OUTPUT
 iOut1:INT; (* 1. Outputvariable*)
END_VAR

Variabili di uscita nelle funzioni e nei metodi:

Secondo IEC 61131-3 bozza 2, le funzioni (e i metodi) possono avere uscite aggiuntive. Queste funzioni possono essere assegnate nella chiamata della funzione, come illustrato nel seguente esempio.

Esempio

fun(iIn1 := 1, iIn2 := 2, iOut1 => iLoc1, iOut2 => iLoc2);

Variabili di ingresso e uscita - VAR_IN_OUT

Tra le parole chiave VAR_IN_OUT e END_VAR, sono dichiarate tutte le variabili che servono come variabili di ingresso e uscita per una POU.

NOTA: Con le variabili di tipo IN_OUT, il valore della variabile trasferita viene modificato (trasferito come puntatore, Call-by-Reference). Pertanto, il valore di ingresso per tali variabili non può essere una costante. Per questo motivo, anche le variabili di un blocco funzione VAR_IN_OUT non possono essere lette o scritte direttamente dall'esterno tramite <FBinstance>.<InOutVariable>.
NOTA: Non assegnare simboli di tipo bit (come variabili %MXaa.b o BOOL posizionate in tale indirizzo di tipo bit) ai parametri VAR_IN_OUT di tipo BOOL dei blocchi funzione. Se vengono rilevate assegnazioni di questo tipo, vengono segnalate come un errore di compilazione nella vista.

Esempio

VAR_IN_OUT
 iInOut1:INT; (* 1. Inputoutputvariable *)
END_VAR

Variabile di trasferimento - VAR_IN_OUT CONSTANT

Una variabile VAR_IN_OUT CONSTANT funge da parametro di riferimento costante. Una variabile o una costante (letterale) di tipo STRING o WSTRING può essere passata a questo parametro. Il parametro è di sola lettura. Il passaggio di proprietà non è consentito.

Sintassi

VAR_IN_OUT CONSTANT
    <variable name> : <data type>; // formal parameter
END_VAR

Le variabili VAR_IN_OUT CONSTANT vengono dichiarate senza assegnare un valore di inizializzazione.

Uso

  • Quando si chiama la POU, è possibile passare una variabile costante o letterale di tipo STRING o WSTRING. L'accesso in scrittura non è consentito.

  • Quando si passano i parametri di una costante STRING, la lunghezza della stringa non è limitata. La lunghezza della stringa non dipende dalla lunghezza della stringa delle variabili VAR_IN_OUT CONSTANT.

NOTA: Se l'opzione Sostituisci costanti è selezionata nella finestra di dialogo Impostazioni progetto > Opzioni del compilatore, il compilatore genera un messaggio di errore quando vengono passati i parametri di una costante con tipo di dati di base o una variabile costante con tipo di dati di base.

La variabile è supportata da EcoStruxure Machine Expert V2.0 e versioni successive.

Esempio: passaggio di parametri di costanti STRING e variabili STRING

FUNCTION funManipulate : BOOL
VAR_IN_OUT
    sReadWrite : STRING(16); (* Can be read or written here in POU *)
    dwVarReadWrite : DWORD; (* Can be read or written here in POU *)
END_VAR
VAR_IN_OUT CONSTANT
    c_sReadOnly : STRING(16); (* Constant string variable can only be read here in POU *)
END_VAR
sReadWrite := 'String_from_POU';
dwVarReadWrite := STRING_TO_DWORD(c_sReadOnly);
PROGRAM PRG_A
VAR
    sVarFits : STRING(16);
    sValFits : STRING(16) :='1234567890123456';
    dwVar: DWORD;
END_VAR
// The following line of code causes the compiler error C0417:
// C0417: VAR_IN_OUT parameter 'sReadWrite' needs a variable with write access as input.
funManipulate(sReadWrite:='1234567890123456', c_sReadOnly:='1234567890123456', dwVarReadWrite := dwVar);
// Correct code
funManipulate(sReadWrite := sValFits, c_sReadOnly := '23', dwVarReadWrite := dwVar);
funManipulate(sReadWrite := sVarFits, c_sReadOnly := sValFits, dwVarReadWrite :=dwVar);

Nell’esempio di codice, le stringhe sono passate alla funzione funManipulate tramite variabili VAR_IN_OUT differenti:

  • Quando si passa una stringa letterale a una variabile VAR_IN_OUT, viene emesso un errore del compilatore.

  • Quando si passa una variabile costante a una variabile VAR_IN_OUT CONSTANT, viene generato il codice corretto. Questo vale anche per il passaggio di variabili di stringa.

Variabili globali - VAR_GLOBAL

Si possono dichiarare variabili normali, costanti, variabili esterne o rimanenti che vengono definite nel progetto come variabili globali. Per dichiarare le variabili globali, utilizzare l'elenco delle variabili globali (GVL). È possibile aggiungere un GVL eseguendo il comando Aggiungi oggetto (per impostazione predefinita nel menu Progetto).

Dichiarare le variabili globali localmente tra le parole chiave VAR_GLOBAL e END_VAR.

Considerare la possibilità di aggiungere un attributo a VAR_GLOBAL.

Una variabile è identificata come variabile globale da un punto che ne precede il nome; ad esempio, .iGlobVar1.

Per informazioni dettagliate sull'uso multiplo dei nomi di variabili, l'operatore ambito globale dot (.) e gli spazi dei nomi, vedere il capitolo Operatore ambito globale.

Le variabili globali possono essere dichiarate soltanto negli elenchi di variabili globali (GVL). Servono per gestire le variabili globali in un progetto. È possibile aggiungere un GVL eseguendo il comando Aggiungi oggetto (per impostazione predefinita nel menu Progetto).

NOTA: Una variabile definita localmente in un POU con lo stesso nome di una variabile globale avrà la priorità nell'ambito del POU.
NOTA: Le variabili globali sono inizializzate prima delle variabili locali dei POU.

Variabili temporanee - VAR_TEMP

Questa caratteristica è un'estensione dello standard IEC 61131-3.

Le variabili temporanee sono (re)inizializzate ad ogni chiamata della POU. Le dichiarazioni VAR_TEMP sono possibili solo all'interno di programmi e blocchi funzione. Queste variabili sono inoltre accessibili solo all'interno della POU di programma o del blocco funzione.

Dichiarare le variabili globali localmente tra le parole chiave VAR_TEMP e END_VAR.

NOTA: È possibile utilizzare VAR_TEMP anziché VAR per ridurre lo spazio di memoria necessario per una POU (ad esempio all'interno di un blocco funzione se la variabile viene utilizzata solo temporaneamente).

Variabili statiche - VAR_STAT

Questa caratteristica è un'estensione dello standard IEC 61131-3.

Le variabili statiche possono essere utilizzate nei blocchi funzione, nei metodi e nelle funzioni. Dichiararle localmente tra le parole chiave VAR_STAT e END_VAR. Vengono inizializzate alla prima chiamata del rispettivo POU.

Come le variabili globali, le variabili statiche non perdono il loro valore quando di esce dal POU nel quale sono state dichiarate. Vengono condivise tra i POU nei quali sono dichiarate (ad esempio, diverse istanze di blocchi funzione, funzioni o metodi condividono la stessa variabile statica). Possono essere utilizzate, ad esempio, in una funzione come contatore per il numero di chiamate di funzioni.

Considerare la possibilità di aggiungere un attributo a VAR_STAT.

Variabili esterne - VAR_EXTERNAL

Sono le variabili globali importate nella POU.

Dichiararle localmente tra le parole chiave VAR_EXTERNAL e END_VAR e nell'elenco di variabili globali (GVL). La dichiarazione e la dichiarazione globale devono essere identiche. Se la variabile globale non esiste, viene visualizzato un messaggio.

NOTA: Non è necessario definire le variabili come esterne. Queste parole chiave sono fornite per garantire la compatibilità con lo standard IEC 61131-3.

Esempio

FUNCTION_BLOCK FB_DoSomething 
VAR_EXTERNAL
 iVarExt1:INT; (* 1st external variable *)
END_VAR

Variabili di istanza - VAR_INST

Se si dichiara una variabile di un metodo come variabile di istanza tramite l'attributo VAR_INST, tale variabile non viene memorizzata nella stack del metodo ma nello stack dell'istanza del blocco funzione. Si comporta quindi come altre variabili dell'istanza del blocco funzione e non viene reinizializzata quando si chiama il metodo.

Le variabili VAR_INST sono consentite solo nei metodi. È possibile accedere a tali variabili solo all'interno del metodo. Gli attributi come CONST, RETAIN non sono consentiti nella dichiarazione. I valori delle variabili possono essere monitorati nella parte di dichiarazione del metodo.

Esempio

METHOD meth_last : INT
VAR_INPUT
  iVar : INT;
END_VAR
VAR_INST
  iLast : INT := 0;
END_VAR
meth_last := iLast;
iLast := iVar;