Professional Documents
Culture Documents
IToolS basics
1
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
Sommario
Configurazione di Visual Studio ..........................................................................................................................................................3
Definizione del sistema di comunicazione ..........................................................................................................................................3
Configurazione ed analisi del sistema di comunicazione ....................................................................................................................3
Utilizzo e caratteristiche del componente Variable ............................................................................................................................7
Variable scaling ..............................................................................................................................................................................7
Variable targets ..............................................................................................................................................................................8
Variable events ............................................................................................................................................................................10
Variable advising ..........................................................................................................................................................................11
Variable threading .......................................................................................................................................................................11
Utilizzo e caratteristiche del componente Client ..............................................................................................................................12
Client events ................................................................................................................................................................................13
Utilizzo e caratteristiche del componente IOServer .........................................................................................................................13
IOServer events ............................................................................................................................................................................13
2
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
Prima di definire gli oggetti necessari al sistema di comunicazione necessario impostare lambiente di sviluppo per lutilizzo dei
componenti IToolS. Una volta completate queste operazioni preliminari possibile utilizzare tutti i componenti e controlli IToolS in
modo visuale.
La toolbox ora popolata con tutti i controlli e componenti esposti dal framework IToolS.
Il sistema di comunicazione IToolS identificato da un insieme di componenti che consentono di instaurare comunicazioni con
dispositivi remoti attraverso protocolli industriali. I componenti che definiscono questo insieme sono:
Ad esempio nella Variable definito il tipo di dato che si vuole gestire, loffset (indirizzo) del registro remoto che
si vuole leggere o scrivere, ecc
- Clients: rappresenta il contenitore dei Client. I client sono degli oggetti che si preoccupano dei corretto aggiornamento
delle Variable definite, inoltre mettono a disposizione una serie di metodi per eseguire operazioni sul sistema di
comunicazione:
- IOServer: questo oggetto responsabile della corretta creazione del canale di comunicazione, della definizione del tipo di
protocollo da utilizzare e della gestione delle richieste che vengono inoltrate dai client.
Nel paragrafo precedente sono stati identificati gli oggetti che intervengono nel processo di comunicazione, ora analizziamo in
modo sommario come necessario configurare gli oggetti per instaurare una comunicazione con un dispositivo remoto, pi avanti
saranno presi in considerazione in modo dettagliato anche con un esempio di codice quali sono le propriet che devono essere
impostate per modificare il comportamento del sistema di comunicazione in base alle proprie esigenze.
La prima operazione da eseguire per definire il sistema quello dichiarare quali sono le informazioni che si vogliono leggere o
scrivere dal dispositivo remoto, questo in linea di massima significa aver ben chiaro quali sono i registri del dispositivo remoto a cui
si vuole accedere. In base ai registri remoti a cui si vuole accedere necessario aggiungere al componente Group una serie di
Variable, ognuna delle quali identificata da un indirizzo che porta la variabile ad essere mappata su uno specifico registro del
dispositivo remoto.
3
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
4
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
A questo punto necessario inserire un oggetto IOServer alla form, quindi dalla Toolbox selezionare un oggetto IOServer e
trascinarlo sulla form, per completare il sistema di comunicazione inoltre necessario inserire un oggetto Clients:
La configurazione dellIOServer si completa con una serie di ulteriori propriet utilizzate per estendere la configurabilit di questo
componente:
- BlockSize: consente di definire la dimensione della singola richiesta che pu essere gestita dellioserver.
Pi precisamente le specifiche dei protocolli di comunicazione impongono che la dimensione del pacchetto trasmesso sul
canale di comunicazione rientri entro un certo numero di byte. Questo parametro dettato sia dal tipo di protocollo sia
da limiti funzionali del canale di comunicazione.
- Inverted: consente di impostare lordinamento dei byte allinterno della parola.
- IOServerTraceEvent: consente di definire per quali eventi deve essere eseguito il tracciamento.
- Retries: imposta il numero di tentativi da eseguire per richiesta in caso si esito negativo di una operazione sul canale di
comunicazione.
- Timeout: imposta il tempo massimo di attesa per ricevere la risposta sul canale di comunicazione.
- Trace: abilita la funzionalit di tracciamento dello stato dellIOServer.
- TraceProperties: consente di definire quali propriet devono essere tracciate.
Per la configurazione delloggetto Clients necessario selezionarlo, spostarsi sulla Properties Window e cliccare su Items, a questo
punto si apre una finestra di dialogo che consente di definire e configurare i vari Client che compongono il sistema. Il Client un
oggetto che ha la funzione di collegamento tra il Group e lIOServer, gestisce le richieste di aggiornamento automatico delle
Variable definite mette a disposizione del programmatore una serie di metodi ed eventi per eseguire operazioni sul dispositivo
remoto attraverso lioserver.
Come ulteriore nota importante far notare che loggetto Variable pu essere utilizzato anche singolarmente senza il bisogno di
essere inserito in un Group e di conseguenza assegnato ad un Client. Il valore della Variable pu essere impostato manualmente,
6
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
questo consente di utilizzare i meccanismi interni alla Variable in modo autonomo per soddisfare utilizzi personalizzati.
Per impostare il valore della Variable (propriet Value) disponibile il metodo SetExternalValue che accetta in ingresso un Object:
Esempio:
IToolS.Components.Communication.Variable variable1;
...
variable1.SetExternalValue(1234);
Di seguito presente un esempio in cui viene definito un sistema di comunicazione minimo in grado di leggere e scrivere il registro
0 dellarea Holding Register (HR) per un dispositivo che rende disponibile laccesso ai dati attraverso il protocollo Modbus
ethernet:
Loggetto Variable caratterizzato dal alcuni costrutti in grado di facilitare le funzionalit base che in generale sono richieste per
processi di questo tipo ad esempio rappresentazioni del valore assunto dalla Variable in base a scalature lineari e non, oppure la
notifica mediante eventi del raggiungimento da parte del valore della Variable di valori obiettivo (utilizzati ad esempio per la
gestione di allarmi).
Variable scaling
- Factor: definisce il fattore moltiplicativo da applicare al valore della Variable nel caso in cui ScalingMode sia impostato su
Factor;
- MaxValue: nel caso in cui ScalingMode sia impostato su Linear definisce lestremo superiore dellespressione lineare che
regola la scalatura, nel caso in cui ScalingMode sia impostato su MinMax definisce il massimo valore che pu assumere la
Variable.
- MinValue: nel caso in cui ScalingMode sia impostato su Linear definisce lestremo inferiore dellespressione lineare che
regola la scalatura, nel caso in cui ScalingMode sia impostato su MinMax definisce il minimo valore che pu assumere la
Variable.
Oltre alle possibili impostazioni di scalatura evidenziate possibile implementare uninterfaccia specifica in grado di definire
scalature complesse e completamente personalizzabili:
Esempio:
...
m_variable1.SetValueScale(new MyScaling());
Variable targets
Attraverso I target possibile gestire stati particolari della Variable come ad esempio il raggiungimento o meno di valori obiettivo.
In base allo stato del target possibile ad esempio definire se una certa condizione del processo deve essere dichiarato come di
allarme e di conseguenza eseguire o meno certe azioni necessarie per la corretta esecuzione.
stato di Reached necessario in primo luogo aggiungere un target quindi definirne le caratteristiche. La finestra di dialogo seguente
consente di impostare tutte le propriet principali che definiscono le caratteristiche del target.
Ci sono poi ulteriori propriet che definiscono le caratteristiche ed il comportamento del target :
- CustomProperties: ogni target ha una lista di propriet personalizzate che possono essere definite in fase di
progettazione. Nel caso in cui il target sia utilizzato come allarme, questa lista di oggetto personalizzati sar serializzata
nei dispositivi di archiviazione.
- AdvancedProperties: ogni target ha una lista di propriet avanzate che possono essere definite in fase di progettazione.
Nel caso in cui il target sia utilizzato come allarme, questa lista di oggetto personalizzati non sar serializzata nei
dispositivi di archiviazione.
- ActiveTime: consente di ottenere listante di tempo in cui il target si portato in stato di raggiunto.
- DeActiveTime: consente di ottenere listante di tempo in cui il target si portato in stato di fallito.
- GuidCode: identificativo univoco di ciascun target.
- TargetState: consente di ottenere o impostare lo stato del target.
- VariableTargetCheck: consente di assegnare al target una interfaccia personalizzata in grado di valutare lo stato del
target, normalmente questa propriet ha valore nullo.
Esempio:
9
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
Attraverso limplementazione di questa interfaccia possibile definire meccanismi di controllo del valore della Variable
personalizzati e complessi.
La Variable dispone inoltre di un ulteriore caratteristica in grado di rendere personalizzabile la conversione del valore in essa
contenuto. Per fare un esempio concreto si pu pensare al caso in cui il valore contenuto nella variabile definito da un intero a 16
bit ma si vuole gestire solo il byte alto o byte basso di questo valore.
Esempio:
int l;
object oRet = 0;
int oldValue = 0;
oldValue = System.Convert.ToInt32(variable.TypeBase.MemoryValue) & 0xFF00;
l = System.Convert.ToInt32(value) & 0xFF;
oRet = (object)((int)(l) | (int)oldValue);
variable.TypeBase.MemoryValue = oRet;
return oRet;
}
}
...
m_variable1.SetValueConverter(new MyConverter());
Variable events
Per semplificare lo sviluppo dellapplicazione, che dovr ad esempio gestire il processo produttivo o monitorare lo stato di un
impianto industriale, loggetto Variable mette a disposizione un serie di eventi e propriet in grado di notificare ad ogni variazione
di stato gli oggetti che la stanno osservando.
Di seguito sono elencati e descritti i vari eventi che caratterizzano loggetto Variable:
- Changed: evento generato ogni qual volta il valore della Variable viene modificato.
- Updated: evento generato ogni qual volta il valore della Variable viene aggiornato.
- PropertyChanged: evento generato come conseguenza della modificata di una qualsiasi propriet della Variable.
- StateChanged: evento generato ad ogni variazione dello stato della Variable. Lo stato della Variable contenuto e pu
essere ottenuto dall propriet State, tra i valori che pu assumere questa propriet troviamo:
a. None: lo stato della Variabile non definito.
b. Error: la Variable si trova in stato di errore.
c. Changed: il valore della Varible stato modificato.
d. Updated: il valore della Variable stato aggiornato.
e. Valid: la definizione della Variable considerata valida.
f. NotValid: la definizione della Variable considerata non valida.
- SynchronizationContextChanged: evento genrato ogni qual volta il contesto di sincronizzazione.
- TargetAdd: evento generato allatto di inserimento di un nuovo target.
- TargetRemove: evento generato allatto di rimozione di un target.
- TargetReached: evento generato ogni qual volta il target viene raggiunto.
- TargetFailed: evento generato ogni qual volta il target viene fallito.
- ValueChanged: evento generato ogni qual volta la propriet Value cambia valore. (vedi evento Changed).
- NotifyEvent: evento generato ogni qual volta la propriet Value cambia valore. (vedi evento Changed).
10
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
Variable advising
Mediante il Variable advising possibile attivare o disattivare la richiesta di notifica del valore di una Variable in base a condizioni
particolari in cui di trova lapplicazione. Normalmente questo meccanismo disattivato in quanto il valore di default della propriet
ActiveAdvise presente nelloggetto Variable impostata a false. Nel caso in cui ladvise della Variabile viene attivato per
richiedere la notifica del valore necessario invocare il metodo AttachAdvise, al contrario per disattivare la notifica del valore
necessario invocare il metodo DetachAdvise.
Esempio:
...
...
...
Questo costrutto risulta particolarmente utile per tutti quei sistemi in cui occorre limitare il traffico dati o in cui il numero
complessivo di dati che vengono scambiati con il dispositivo remoto risulta particolarmente elevato. Un esempio concreto pu
essere costituito da un applicazione in cui le Variable che vengono notificate sono solo quelle presenti nella finestra attualmente
visualizzata.
Le Variable in cui sono stati definiti dei target hanno sempre la notifica attivata, questo vincolo stabilito dal fatto che per
verificare lo stato del target il valore deve costantemente essere aggiornato.
Variable threading
Loggetto Variable nel corso della sua vita viene gestito e modificato da thread differenti, questo consente di poter eseguire un
modo parallelo operazioni differenti e di non bloccare lesecuzione del codice principale nel caso in cui si verifichi lattesa da parte
di una certa operazione il verificarsi ci una certa condizione. Al contrario, questa gestione in multi-threading provoca o pu
provocare problemi di serializzazione degli eventi o nel caso in cui siano essi utilizzati per impostare propriet in controlli grafici,
dare luogo a problemi di cross-threading. Per evitare questi noiosi problemi che devono poi essere gestiti propriamente dal
programmatore presente in ogni componente IToolS e quindi anche nelloggetto Variable un propriet statica
RaiseEventOnMainThread. Se questa propriet impostata a true tutti gli eventi generati dal framework IToolS vengono re
instradati sul thread principale evitando cos di dover gestire a valle i problemi di sincronizzazione evidenziati.
Per far si che gli eventi siano re instradati sul thread corretto disponibile un metodo comune a tutti i componenti che permette di
impostare il contesto di sincronizzazione
Esempio:
m_variable1.SetSynchronizationContext(System.Threading.SynchronizationContext.Current);
Attraverso questo metodo possibile reimpostare il contesto di sincronizzazione nel caso in cui per vari motivi sia esso non
corretto. Il contesto di sincronizzazione normalmente impostato nel momento in cui viene creato loggetto (allinvocazione del
costruttore), sono per presenti casi in cui per varie ragioni loggetto potrebbe essere creato da un thread secondario, in questi casi
possibile modificare il contesto di sincronizzazione attraverso il metodo evidenziato sopra in modo da evitare sincronizzazione
sbagliate che darebbero luogo a risultati non attesi.
11
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
Loggetto client svolge funzionalit di gestione ed accesso al sistema di comunicazione, in particolare si occupa di mantenere
aggiornate, in base al tempo di aggiornamento impostato, tutte le Variable presenti nel Group ad esso assegnato, inoltre mette a
disposizione diversi metodi per eseguire operazione di accesso ai dati come letture e scritture.
Nel momento in cui viene invocato il metodo Start vengono eseguiti i raggruppamenti delle Variable in modo da ottimizzare il
processo di aggiornamento, un thread viene creato ed attraverso la propria esecuzione deposita una richiesta di aggiornamento
delle Variable, contenute nel Group assegnato, nella coda delle richieste dellIOServer. La frequenza con cui avviene questo
deposito della richiesta dettata dal valore della propriet UpdateTime espressa in millisecondi, se il valore presente nella
propriet UpdateTime maggiore di zero laggiornamento sar periodico, diversamente nel caso in cui il valore di UpdateTime
uguale a zero viene inserita una sola richiesta allatto dellinvocazione del metodo di start, infine se il valore di UpdateTime
minore di zero non viene depositata alcuna richiesta di aggiornamento.
Riassumento:
- UpdateTime > 0: aggiornamento ciclico, deposito di una richiesta di aggiornamento ogni UpdateTime millisecondi.
- UpdateTime = 0: viene depositata una sola richiesta di aggiornamento allinvocazione del metodo di Start.
- UpdateTime < 0: non viene depositata alcuna richiesta di aggiornamento. Laggiornamento delle Variable deve essere
eseguito manualmente.
Loggetto Client dispone di un overload di metodi grazie ai quali possibile leggere e scrivere in modo sincrono o asincrono il valore
di oggetti di tipo Variable:
Operazioni asincrone: sono operazioni che non provocano il blocco dellesecuzione del codice. Attraverso i metodi
asincroni le richieste di accesso ai dati vengono depositate nella coda delle richieste dellioserver, che a sua volta le
soddisfer in base ai parametri di schedulazione in esso definiti:
Permette di leggere un gruppo di Variable in modo asincrono, questo significa che linvocazione di questo
metodo genera una richiesta che viene depositata nellIOServer. possibile indicare un metodo di callback da
richiamare al termine dellesecuzione della richiesta. La deadline indica la scadenza in millisecondi entro cui la
richiesta dovrebbe essere soddisfatta, attraverso questo parametro possibile dare una priorit alla richiesta.
Attraverso I metodi di scrittura asincrona possibile depositare un richiesta di scrittura di un gruppo di Variable,
specificando i valori che si vogliono impostare (parametro values). Come per il metodo di lettura asincrona
possibile indicare un metodo di callback da richiamare al termine dellesecuzione della richiesta.
Il parametro reRead consente di indicare se prima di eseguire la scrittura le Variable specificate debbono
essere aggiornate. Per la deadline valgono le stesse considerazioni fatte per il metodo di lettura asincrona.
Deposita nella coda delle richieste dellIOServer una richiesta di aggiornamento del Group di Variable assegnato
al Client. Per i parametri di callback e deadline valgono le considerazioni fatte per i due precedenti metodi.
Operazioni sincrone: sono operazioni che provocano il blocco dellesecuzione del codice, ci vale a dire che al ritorno
dallinvocazione dei metodi sincroni loperazione di accesso ai dati stata completamente eseguita.
Esegue la lettura di un gruppo di Variable, il valore di ritorno contiene tutte le informazioni circa le operazioni
che sono state effettuate durante lesecuzione di questo metodo.
12
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
Esegue la scrittura di un gruppo di Variable specificando I valori da impostare per ciascuna di esse (parametro
values), il valore di ritorno contiene tutte le informazioni circa le operazioni che sono state effettuate durante
lesecuzione di questo metodo.
o ClientResult UpdateSync();
Esegue laggiornamento in modo sincrono di tutte le Variable presenti nel Group assegnato al Client, il valore di
ritorno contiene tutte le informazioni circa le operazioni che sono state effettuate durante lesecuzione di
questo metodo.
Attraverso i metodi di Start e Stop, gi citati in precedenza, possibile rispettivamente avviare o arrestare il ciclo di esecuzione
in grado di mantenere aggiornate le Variable del Group assegnato in modo automatico.
Client events
Come per loggetto Variable anche il Client possiede una lista di eventi in grado di notificare gli osservatori che si sono registrati
sulle operazioni di accesso ai dati.
Di seguito sono elencati e descritti i vari eventi che caratterizzano loggetto Client:
- EndAsyncRead: Evento generato al termine dellesecuzione di una richiesta di lettura asincrona depositata attraverso il
metodo di ReadAsync.
- EndAsyncWrite: Evento generato al termine dellesecuzione di una richiesta di lettura asincrona depositata attraverso il
metodo di WriteAsync.
- EndAutoUpdate: Evento generato al termine di ogni ciclo di aggiornamento automatico delle Variable presenti nel Group
assegnato al Client.
- EndUpdate: Evento generato al termine di una richiesta di aggiornamento depositata attarverso il metodo di
UpdateAsync.
- EndFirstUpdate: Evento generato al termine del primo aggiornamento automatico delle Variable presenti nel Group
assegnato al Client.
- EndRequest: Evento generato al termine di ogni richiesta completata dallIOServer. I metodi di accesso ai dati che sono
stati menzionat, provocano la generazione di diverse richieste ognuna delle quali contiene le informazioni sulloperazione
da eseguire su una o pi Variable.
- EndSyncRead: Evento generato al completamento di unoperazione di lettura sincrona.
- EndSyncWrite: Evento generato al completamento di unoperazione di scrittura sincrona.
- BeginUpdate: Evento generato ogni qualvolta il processo di aggiornamento di un insieme di Variable sta iniziando.
Loggetto IOServer svolge la funzione di collettore di tutte le richieste di accesso ai dati che devono essere eseguite su un
dispositivo remoto. La gestione delle richieste che vengono depositate dai vari Client avviene attraverso un thread secondario che
estrae ed esegue dalla coda la richiesta pi prioritaria, al termine dellesecuzione della richiesta vengono richiamati i metodi di
callback (se previsti). Differente il caso in cui il Client richiede lesecuzione di unoperazione sincrona, in questa situazione non
viene depositata alcuna richiesta ma viene sincronizzato laccesso al canale di comunicazione con le altre operazioni mediante un
costrutto di accesso concorrente. Se lo stesso oggetto IOServer viene assegnato a Client differenti, questi condividono tra loro
laccesso al dispositivo remoto mediante le regole di sincronizzazione ed i parametri di schedulazione impostati sullIOServer.
IOServer events
Loggetto IOServer consente, ad oggetti osservatori opportunamente registrati, di essere notificati al verificarsi di eventi generati
dalle operazioni eseguite durante il processo di comunicazione con il dispositivo remoto.
13
IToolS basics Iprel Progetti s.r.l.
Version 1.1 31/10/2011
Di seguito sono elencati e descritti i vari eventi che caratterizzano loggetto IOServer:
- Changed: evento generato quando la propriet Name dellIOServer, e quindi il protocollo utilizzato, viene modificata.
- Connected: evento genrato nel momento in cui lIOServer riesce ad instaurare una connessione con il dispositivo remoto.
- Disconnected: evento generato nel momento in cui viene interrotta la comunicazione con il dispositivo remoto.
- EndRequest: evento generato al completamento dellesecuzione di ciascuna richiesta (vedi EndRequest per loggetto
Client).
- Error: errore genrato ogni qual volta si verifica un errore nel processo di comunicazione.
- Exchanged: evento generato ogni qual volta vengono scambiati dati con il dispositivo remoto.
- Running: evento generato nel momento in cui lIOServer passa nello stato di esecuzione e quindi si trova pronto per
prendere in carico le richieste depositate dai Client.
- StateChanged: evento generato nel momento in cui lo stato dellIOServer viene modificato, lo stato che lIOServer pu
assumere sono:
14