API per leggere/scrivere variabili di campo

Introduzione

Le API descritte di seguito, fornite dalle classe IUAVariable, InformationModel e IUANode, permettono di leggere/scrivere singole variabili o più variabili insieme. Tipicamente si leggono/scrivono più variabili insieme per le seguenti necessità:

  • Leggere/scrivere un intero set di variabili prima di procedere con altre operazioni. Questo è indispensabile per esempio nella scrittura delle ricette.

  • Limitare il numero di comunicazioni con il campo, in favore delle prestazioni.

Nella tabella seguente sono indicate le API da usare per i diversi scopi:

Scopo

API

Leggere il valore di una variabile di campo nota.

IUAVariable.RemoteRead(timeoutMilliseconds)

Leggere i valori di più variabili di campo note.

InformationModel.RemoteRead(variables, timeoutMilliseconds)

Leggere i valori di più variabili di campo note figlie di uno specifico nodo.

IUANode.ChildrenRemoteRead(childVariables, timeoutMilliseconds)

Leggere i valori di tutte le variabili di campo figlie di uno specifico nodo.

IUANode.ChildrenRemoteRead(timeoutMilliseconds)

Scrivere il valore di una variabile di campo nota.

IUAVariable.RemoteWrite(value, timeoutMilliseconds)

Scrivere i valori di più variabili di campo note.

InformationModel.RemoteWrite(variableValues, timeoutMilliseconds)

Scrivere i valori di più variabili di campo note figlie di uno specifico nodo.

IUANode.ChildrenRemoteWrite(childVariableValues, timeoutMilliseconds)

Gestione delle eccezioni

I metodi descritti di seguito generano un’eccezione quando l’esecuzione va in errore. L’eccezione può essere catturata e gestita tramite le istruzioni try e catch.

IUAVariable.RemoteRead(timeoutMilliseconds)

Restituisce il valore della variabile su cui si invoca. L’argomento, opzionale, imposta un tempo di timeout.

UAValue RemoteRead(double timeoutMilliseconds);

Argomenti

timeoutMilliseconds double

Tempo di timeout, in millisecondi, dopo il quale l’API genera un’eccezione.

Nota

se non specificato, il valore predefinito dell’argomento è 30000, ovvero 30 secondi.

Restituisce

UAValue

Valore della variabile.

Esempio

Di seguito un esempio in cui si legge il valore della variabile Speed e lo si riporta in un messaggio informativo.

var currentSpeed = Project.Current.GetVariable("Model/Motor/Speed");
var value = currentSpeed.RemoteRead();
Log.Info(value.ToString());

IUAVariable.RemoteWrite(value, timeoutMilliseconds)

Scrive, nella variabile su cui si invoca, il valore indicato nel primo argomento. Il secondo argomento, opzionale, imposta un tempo di timeout.

void RemoteWrite(UAValue value, double timeoutMilliseconds);

Argomenti

value UAValue

Valore da scrivere.

timeoutMilliseconds double

Tempo di timeout, in millisecondi, dopo il quale l’API genera un’eccezione.

Nota

se non specificato, il valore predefinito dell’argomento è 30000, ovvero 30 secondi.

Esempio

Di seguito un esempio in cui si scrive il valore 42 nella variabile Speed.

var currentSpeed = Project.Current.GetVariable("Model/Motor/Speed");
currentSpeed.RemoteWrite(42);

InformationModel.RemoteRead(variables, timeoutMilliseconds)

Restituisce una lista di variabili di interesse.

static IEnumerable<RemoteVariableValue> RemoteRead(IEnumerable<RemoteVariable> variables, double timeoutMilliseconds);

Argomenti

variables IEnumerable<RemoteVariable>

Lista delle variabili di interesse.

timeoutMilliseconds double

Tempo di timeout, in millisecondi, dopo il quale l’API genera un’eccezione.

Nota

se non specificato, il valore predefinito dell’argomento è 30000, ovvero 30 secondi.

Restituisce

IEnumerable<RemoteVariableValue>

Lista delle variabili di interesse, espresse come coppia delle seguenti proprietà della classe RemoteVariableValue:

  • Variable IUAVariable : variabile

  • Value UAValue: valore della variabile

Esempio

Di seguito un esempio in cui si leggono i valori di tre variabili di tipo tag. Per farlo, si includono le variabili di interesse, cercate con metodo Get(), nella lista remoteVariables, che si passa come argomento del metodo RemoteRead(). I valori letti sono poi visualizzati tramite tre diverse caselle di testo.

var tag1 = Project.Current.Get<Tag>("CommDrivers/CodesysDriver1/CodesysStation1/Tags/Application/PLC_PRG/VAR1");
var tag2 = Project.Current.Get<Tag>("CommDrivers/CodesysDriver2/CodesysStation1/Tags/Application/PLC_PRG/VAR1");
var tag3 = Project.Current.Get<Tag>("CommDrivers/CodesysDriver3/CodesysStation1/Tags/Application/PLC_PRG/VAR1");

var remoteVariables = new List<RemoteVariable>()
{
    new RemoteVariable(tag1),
    new RemoteVariable(tag2),
    new RemoteVariable(tag3),
};
var values = InformationModel.RemoteRead(remoteVariables).ToList();

textbox1.Text = values[0].Value;
textbox2.Text = values[1].Value;
textbox3.Text = values[2].Value;

InformationModel.RemoteWrite(variableValues, timeoutMilliseconds)

Scrive i valori nelle variabili di interesse. Il secondo argomento, opzionale, imposta un tempo di timeout.

static void RemoteWrite(IEnumerable<RemoteVariableValue> variableValues, double timeoutMilliseconds);

Argomenti

variableValues IEnumerable<RemoteVariable>

Lista delle variabili di cui si vuole scrivere il valore, espresse come coppia delle seguenti proprietà della classe RemoteVariableValue:

  • Variable IUAVariable : variabile

  • Value UAValue: valore della variabile

timeoutMilliseconds double

Tempo di timeout, in millisecondi, dopo il quale l’API genera un’eccezione.

Nota

se non specificato, il valore predefinito dell’argomento è 30000, ovvero 30 secondi.

Esempio

Di seguito un esempio in cui si scrivono i valori di due variabili di tipo tag: il valore 0 per la variabile tag3 e il valore 123 per la variabile tag1. Per farlo, si includono le variabili di interesse, cercate con metodo Get(), nella lista remoteVariableValues, che si passa come argomento del metodo RemoteWrite().

var tag1 = Project.Current.Get<Tag>("CommDrivers/CodesysDriver1/CodesysStation1/Tags/Application/PLC_PRG/VAR1");
var tag3 = Project.Current.Get<Tag>("CommDrivers/CodesysDriver1/CodesysStation1/Tags/Application/PLC_PRG/VAR3");

var remoteVariableValues = new List<RemoteVariableValue>()
{
    new RemoteVariableValue(tag3, 0),
    new RemoteVariableValue(tag1, 123)
};
InformationModel.RemoteWrite(remoteVariableValues);

IUANode.ChildrenRemoteRead(timeoutMilliseconds)

Restituisce la lista di tutte le variabili direttamente figlie del nodo su cui si invoca. L’argomento, opzionale, imposta un tempo di timeout.

IEnumerable<RemoteChildVariableValue> ChildrenRemoteRead(double timeoutMilliseconds);

Argomenti

timeoutMilliseconds double

Tempo di timeout, in millisecondi, dopo il quale l’API genera un’eccezione.

Nota

se non specificato, il valore predefinito dell’argomento è 30000, ovvero 30 secondi.

Restituisce

IEnumerable<RemoteChildVariableValue>

Lista delle variabili direttamente figlie del nodo, espresse come coppia delle seguenti proprietà della classe RemoteChildVariableValue:

  • RelativePath string : percorso relativo della variabile all’interno del nodo

  • Value UAValue: valore della variabile

Esempio

Di seguito un esempio in l’API restituisce la lista reads di tutte le variabili contenute nel nodo myNode. Per ogni variabile (item) si genera un messaggio che ne riporta il percorso relativo e il valore.

Se l’API va in errore o viene raggiunto il tempo di timeout impostato, il codice di esempio seguente genera un messaggio di errore composto da «ChildrenRemoteRead failed:» e da un codice di errore previsto dall’API.

var myNode = Project.Current.Get("CommDrivers/Driver1/Station1/Tags/TagStructure1");
try
{
    var reads = myNode.ChildrenRemoteRead();
    foreach (var item in reads)
        Log.Info("Tag " + item.RelativePath + " has value " + item.Value);
}
catch (Exception ex)
{
    Log.Error("ChildrenRemoteRead failed: " + ex.ToString());
}

IUANode.ChildrenRemoteRead(childVariables, timeoutMilliseconds)

Restituisce una lista delle variabili di interesse figlie del nodo su cui si invoca. Il secondo argomento, opzionale, imposta un tempo di timeout.

IEnumerable<RemoteChildVariableValue> ChildrenRemoteRead(IEnumerable<RemoteChildVariable> childVariables, double timeoutMilliseconds);

Argomenti

childVariables IEnumerable<RemoteChildVariable>

Lista delle variabili di interesse, espresse come percorsi relativi all’interno del nodo su cui si invoca l’API.

timeoutMilliseconds double

Tempo di timeout, in millisecondi, dopo il quale l’API genera un’eccezione.

Nota

se non specificato, il valore predefinito dell’argomento è 30000, ovvero 30 secondi.

Restituisce

IEnumerable<RemoteChildVariableValue>

Lista delle variabili di interesse, espresse come coppia delle seguenti proprietà della classe RemoteChildVariableValue:

  • RelativePath string : percorso relativo della variabile all’interno del nodo

  • Value UAValue: valore della variabile

Esempio

Di seguito un esempio in l’API restituisce una lista reads che contiene le variabili d’interesse contenute nel nodo myNode. Le due variabili d’interesse sono state aggiunte all’interno della lista myVariables: una direttamente figlia del nodo (Tag1) e una all’interno di un nodo figlio (NestedStructure/Tag2).

Se l’API va in errore o viene raggiunto il tempo di timeout impostato, il codice di esempio seguente genera un messaggio di errore composto da «ChildrenRemoteRead failed:» e da un codice di errore previsto dall’API.

var myVariables = new List<RemoteChildVariable>()
{
    new RemoteChildVariable("Tag1"),
    new RemoteChildVariable("NestedStructure/Tag2")
};
var myNode = Project.Current.Get("CommDrivers/Driver1/Station1/Tags/TagStructure1");
try
{
    var reads = myNode.ChildrenRemoteRead(myVariables);
}
catch (Exception ex)
{
    Log.Error("ChildrenRemoteRead failed: " + ex.ToString());
}

IUANode.ChildrenRemoteWrite(childVariableValues, timeoutMilliseconds)

Scrive i valori delle variabili di interesse figlie del nodo su cui si invoca. Il secondo argomento, opzionale, imposta un tempo di timeout.

void ChildrenRemoteWrite(IEnumerable<RemoteChildVariableValue> childVariableValues, double timeoutMilliseconds);

Argomenti

childVariableValues IEnumerable<RemoteChildVariableValue>

Lista delle variabili di cui si vuole scrivere il valore, espresse come coppia delle seguenti proprietà della classe RemoteChildVariableValue:

  • RelativePath string : percorso relativo della variabile all’interno del nodo

  • Value UAValue: valore della variabile

timeoutMilliseconds double

Tempo di timeout, in millisecondi, dopo il quale l’API genera un’eccezione.

Nota

se non specificato, il valore predefinito dell’argomento è 30000, ovvero 30 secondi.

Esempio

Di seguito un esempio in cui l’API scrive i valori delle variabili definite nella lista valuesToWrite e contenute nel nodo myNode. Nella lista valuesToWrite per ogni variabile è indicato come primo argomento il percorso relativo della variabile e come secondo argomento il valore da scrivere.

Se l’API va in errore o viene raggiunto il tempo di timeout impostato, il codice di esempio seguente genera un messaggio di errore composto da «ChildrenRemoteRead failed: » e da un codice di errore previsto dall’API.

var valuesToWrite = new List<RemoteChildVariableValue>()
{
    new RemoteChildVariableValue("Tag1", 4),
    new RemoteChildVariableValue("Tag2", "Hello world"),
    new RemoteChildVariableValue("Tag3", true),
    new RemoteChildVariableValue("NestedStructure/Tag1", 5.9)
};
var myNode = Project.Current.Get("CommDrivers/Driver1/Station1/Tags/TagStructure1");
try
{
    myNode.ChildrenRemoteWrite(valuesToWrite);
}
catch (Exception ex)
{
    Log.Error("ChildrenRemoteWrite failed: " + ex.ToString());
}

Vedi anche

Concetti correlati

Variabili di campo

API correlate

API per mantenere sincronizzate variabili di campo