• Non ci sono risultati.

1 Introduzione al progetto SPES…

3.1 Il protocollo Channel Access

Come già accennato in precedenza, questa infrastruttura realizza un protocollo di comunicazione comune tra tutti i dispositivi (client e server) collegati alla rete di controllo, fornendo gli strumenti necessari per localizzare e reperire qualsiasi variabile di controllo presente all’interno della memoria dati distribuita.

Le caratteristiche basilari che consentono a questo protocollo di gestire con successo l'intero sistema sono alla base del suo funzionamento, e possono essere riassunte nei seguenti punti:

- i programmi client effettuano un broadcast del nome delle variabili per trovare il server in cui esse sono disponibili;

- procedure di sicurezza (Channel Access Security) possono essere applicate per limitare l'accesso alle variabili di processo;

- i client possono essere obbligati ad aspettare il termine di una richiesta in corso prima di procedere;

- i client possono impostare delle procedure di monitor sulle PV, in modo da ricevere una notifica da parte del server non appena il valore della variabile cambia.

Figura 3.2 Esempio di funzionamento del protocollo Channel Access.

Nell'esempio della figura, un CA client effettua una search request per localizzare quale sia il CA server che dispone della process variable richiesta con un broadcast sulla rete, e rimane in attesa di una risposta da parte dell'host interessato. Il client effettua poi una richiesta di tipo caGet per

venire a conoscenza del valore della variabile, ed ottiene in risposta il valore attuale. Successivamente, il client effettua una operazione caPut per scrivere un nuovo valore su quella variabile, ed ottiene in risposta una conferma di avvenuta operazione, put complete. Ulteriori possibili risposte potrebbero essere state l'impostazione di un valore diverso, o una negata autorizzazione al cambio di valore. Infine il client inizia una procedura di monitor sulla variabile, e viene quindi informato automaticamente dal CA server ogni volta che la variabile monitorizzata cambia valore.

Il Channel Access tuttavia è modificabile, e può essere configurato a seconda delle esigenze attraverso le variabili di ambiente EPICS indicate in Tabella 3.1. Nel caso di sistemi operativi Linux, esse generalmente vengono definite all’interno del file profile presente nella directory /etc; nel caso del sistema operativo VxWorks queste possono esservi inserite tramite il comando putenv. Se tali variabili non sono definite nell’ambiente del sistema operativo, vengono allora caricati i valori di default dal sistema EPICS.

Nome Variabile Range Default

EPICS CA ADDR LIST {N.N.N.N N.N.N.N:P ...} < none >

EPICS CA AUTO ADDR LIST {YES, NO} YES

EPICS CA CONN TMO r > 0.1 sec 30

EPICS CA BEACON PERIOD r > 0.1 sec 15

EPICS CA REPEATER PORT i > 5000 5065

EPICS CA SERVER PORT i > 5000 5064

EPICS CA MAX ARRAY BYTES i ≥ 16384 16384

EPICS CA MAX SEARCH PERIOD r > 60 sec 300 EPICS TS MIN WEST −720 < i < 720 min 360 Tabella 3.1: Le variabili d’ambiente che configurano il protocollo Channel Access.

Il Channel Access è implementato sui protocolli TCP, IP, ed UDP, e quindi è richiesta una appropriata configurazione di rete per ogni host (indirizzo di rete, indirizzo di host, subnet mask).

Per quanto riguarda le porte che identificano il servizio, i server EPICS ricevono pacchetti di rete sulle porte 5064 (Channel Access Server Port) e 5065 (Channel Access Repeater Port). Questi due valori possono essere riconfigurati modificando il valore di due particolari variabili d’ambiente:

• EPICS_CA_SERVER_PORT → porta del Channel Access Server • EPICS_CA_REPEATER_PORT → porta del Channel Access Repeater Generalmente la necessità di modificare questi parametri sorge quando, in un sito, si decide di realizzare due o più sistemi di controllo indipendenti sulla stessa rete. Ad esempio, nel caso in cui si abbia un sistema di controllo di produzione ed un sistema di controllo di test, è desiderabile che le variabili di

processo dei due sistemi non collidano tra loro. Questo è possibile impostando dei diversi numeri di porta per i Channel Access Server e Channel Access Repeater.

Sotto Linux la configurazione delle variabili d’ambiente può essere eseguita inserendo, all’interno del file /etc/profile, i seguenti comandi:

export EPICS_CA_SERVER_PORT= numero di porta desiderato export EPICS_CA_REPEATER_PORT= numero di porta desiderato

Quando un Channel Access client si connette al canale, deve prima di tutto determinare l’indirizzo IP del server su cui le Process Variable risiedono. Per realizzare ciò, il client manda una richiesta di risoluzione del nome (search request) ad una lista di indirizzi di server; questi indirizzi di destinazione possono essere indirizzi IP unicast o indirizzi IP broadcast. Ogni search request contiene una lista di nomi di variabili di processo; se uno dei server raggiungibili conosce l’IP del Channel Access server che fornisce una o più variabili, questo manda una risposta al client contenente l’indirizzo IP e la porta del server desiderato.

Durante l’inizializzazione, il Channel Access costruisce una lista degli indirizzi dei server di destinazione. Tale processo avviene analizzando le interfacce di rete collegate all’host:

• per ogni interfaccia trovata che risulta collegata ad una sottorete IP abilitata in broadcast, l’indirizzo (broadcast) di tale rete viene aggiunto alla lista;

• per ogni interfaccia punto-punto trovata, l’indirizzo di destinazione di quel link viene aggiunto alla lista.

La lista automatica dei server può essere disabilitata se la variabile d’ambiente EPICS CA AUTO ADDR LIST è definita e configurata come segue:

EPICS_CA_AUTO_ADDR_LIST=NO

In questo modo si vincola l’host ad analizzare solamente le interfacce di rete relative agli indirizzi IP indicati nella variabile d’ambiente EPICS_CA_ADDR_LIST.

Gli indirizzi IP, in quest’ultima variabile, possono essere indicati sia in forma numerica sia sotto forma di nome dell’host, se il sistema operativo ”locale” fornisce il servizio di traduzione da host name ad IP address.

Inoltre:

• se vi sono più indirizzi IP, questi devono essere separati da uno spazio; • nel caso in cui un client debba comunicare con due server in ascolto su due porte differenti, viene usata la particolare sintassi:

indirizzo IP:nome porta

In generale, se non viene specificata alcuna porta, il sistema utilizzerà il valore indicato nella variabile EPICS_CA_SERVER_PORT. [6, 8, 9]