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. |
|
Leggere i valori di più variabili di campo note. |
|
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. |
|
Scrivere il valore di una variabile di campo nota. |
|
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 : variabileValue
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 : variabileValue
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 nodoValue
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 nodoValue
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 nodoValue
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
API correlate