I passi del nostro lavoro sono stati i seguenti:
Prima fase
In questa fase del lavoro abbiamo provato la comunicazione tra PC e PLC attraverso un cavo seriale RS-232 in configurazione null-modem senza segnali di handshake manuali. I programmi di comunicazione sono stati realizzati, per il PLC in Istruction List (IL), mentre per il PC in Assembler. Il colloquio consiste nello scambio di byte tra le due macchine in modo che il PLC mandi i dati dell'impianto al PC dove è stato realizzato un piccolo SCADA per la supervisione ed il controllo dell'impianto. Il PLC PCD1 possiede una porta seriale chiamata connettore PGU dove è collegato, tramite un cavo seriale, un PC tramite il quale si scaricano i programmi da fare girare sul PLC. Dopo che il programma è stato scaricato dal PC al PLC occorre che il PLC parta in modalità a freddo ( Cold Start ) affinchè le modifiche riguardanti la modalità di funzionamento della porta seriale siano effettive. Sotto è mostrato il listato su PLC della ricezione e trasmissione di dati :
Schema di collegamento null-modem tra due seriali.
Per quanto riguarda il PC sotto è mostrato il listato
riguardante la gestione dei caratteri che vengono mandati e ricevuti.
Il listato permette il settaggio in maniera dinamica dei parametri della
porta seriale, la ricezione e la trasmissione dei caratteri facendoli visualizzare
in una finestra. Per fare questo ci siamo serviti delle chiamate di sistema
tramite comandi Assembler. Non tutti i PC rispondono a questi comandi perchè
le primitive sono state realizzate per i PC IBM e richiamando questi comandi
da un compatibile potrebbero non funzionare, quindi la colpa di un eventuale
malfunzionamento del programma non è dovuto al codice macchina, ma al PC che
non è un IBM.
Verificata questo tipo di comunicazione è possibile passare alla seconda
fase.
Seconda fase
In questa fase si è voluta verificare la situazione nella quale due PC
possano scambiarsi dati attraverso una comunicazione Wireless.
Il sistema consiste in una rete di comunicazione Wireless composta dai
seguenti dispositivi :
Per la comunicazione tra i diversi dispositivi il sistema Wireless utilizza il protocollo TCP/IP dove ogni dispositivo collegato alla rete è provvisto di un indirizzo IP, quindi la comunicazione tra dispositivi diversi si semplifica molto grazie appunto all'utilizzo di indirizzi internet per le diverse macchine collegate alla rete. Le schede installate correttamente devono possedere un indirizzo IP univoco, che può essere scelto in maniera arbitraria compatibilmente con lo spazio di indirizzi consentito. La scelta è ricaduta sugli indirizzi di fabbrica e cioè 10.10.10.128 per la stazione Ethernet Converter e 10.10.10.129 per la PC-Card montata su PCMCIA. Nel kit di installazione sono presenti dei programmi di diagnostica per verificare il corretto funzionamento della scheda Ethernet. Nella PC-Card PCMCIA montata su un PC sono stati installati programmi di diagnostica e configurazione. Tramite il programma di configurazione si è impostata la rete in modalità 'ad-hoc' per la mancanza di WavePOINT II e scelti dei parametri adatti per questo tipo di rete, anche se la maggior parte non sono stati modificati avendoli lasciati ai valori di default. Alcuni parametri importamti della scheda Ethernet Converter sono : indirizzo IP 10.10.10.128, protocollo di comunicazione passthrough2 che permette di mettere il dispositivo in ascolto sulla porta 4000 e i parametri della seriale quali 9600 Baud, 8 bit dati, nessuna parità ed un bit di stop. Tutti questi parametri sono elencati nelle tabelle successive. Per verificare la corretta installazione delle schede ci siamo serviti del programma di diagnostica che permette il test delle schede collegate, visualizzando dei parametri per la comunicazione radio, quali la qualità del segnale, il rapporto segnale/rumore, byte inviati e ricevuti ed altri ancora. Lo scambio dei dati tra i due PC è stato realizzato utilizzando il linguaggio Java sfruttando i comandi che gestiscono il TCP/IP. Le classi che sono state utilizzate sono quelle relative ai ServerSocket e Socket. I ServerSocket servono al programma che risiede sul server per gestire le richieste del client remoto, mentre i Socket servono per creare nuovi client che chiedono un servizio al server. Siccome lo scopo è quello di fare comunicare un PC ed un PLC, sul PC dove è collegata la stazione Ethernet Converter EC/S è stato realizzato un PLC virtuale tramite dei comandi in C che gestiscono a basso livello la porta seriale, sull'altro PC dove risiede la PC-Card è stato creato un programma in Java che gestisce le richieste del PLC virtuale. Il programma del PLC virtuale è molto semplice e consiste sostanzialmente nei comandi Inport per leggere un byte dalla seriale, Outport per scrivere un byte sulla seriale. Il programma sull'altro PC dove risiede lo SCADA è, come abbiamo già detto, realizzato tramite le classi ServerSocket e Socket di Java. La classe ServerSocket la utilizziamo per montare un nuovo socket server con l'indirizzo IP 10.10.10.129 della PC-Card; questo serve per ricevere le richieste del PLC virtuale, mentre motiamo un socket client all'indirizzo IP 10.10.10.128 per spedire i dati al PLC virtuale. Mandiamo in esecuzione il programma Java sul PC dove risiede la PC-Card e dopo che il programma è stato caricato attiviamo lo SCADA. La classe ServerSocket monterà un socket server all'indirizzo IP 10.10.10.129 e un socket client all'indirizzo IP 10.10.10.128; quindi il server si mette in ascolto, cioè aspetta che qualche client si collega. Dopo qualche secondo, la stazione Ethernet si collega al Server alla porta 4000 come client e può così cominciare la comunicazione tra i due dispositivi. Il flusso di dati è organizzato nel seguente modo : per spedire i dati dal PC al PLC virtuale usiamo l'indirizzo IP 10.10.10.128, mentre dal PLC virtuale al PC usiamo l'indirizzo IP 10.10.10.129. Per garantire l'arrivo e la partenza dei dati i dispositivi sono provvisti di led che indicano l'invio e ricezione di dati ed il corretto funzionamento delle stazioni collegate alla rete. Di seguito è riportato il listato del programma Java.
La terza ed ultima fase consiste nell'assemblare tutto quello che si
è fatto nelle fasi precedenti e cioè sostituire il PLC virtuale con il PLC
reale, quindi montare il cavo seriale nella porta seriale del PLC. Sul PLC
è stato realizzato un programma in Istruction List che permette al PLC di
scambiare i dati in formato byte con il PC in maniera bidirezionale. Il programma
che è stato realizzato per il nostro sistema è molto semplice nel funzionamento
ed è spiegato qui di seguito. Lo SCADA interroga periodicamente ad una frequenza
molto elevata, circa 100 Hz, il PLC chiedendogli i dati; il PLC accolta la
richiesta invia i dati dell'impianto allo SCADA che li visualizzerà subito
dopo il loro arrivo. I dati che il PLC manda consistono nella lettura degli
ingressi del controllore che essendo dei flag vengono impacchettati in un
registro e spediti allo SCADA. Essendo i registri del PLC a 32 bit, i primi
3 byte significativi sono posti a zero perchè lo scambio dati avviene a singolo
byte. Se per un qualunque motivo gli ingressi del PLC dovessero cambiare,
quest'ultimo invia i dati allo SCADA senza che questo li richieda tramite
polling. Abbiamo stabilito dei caratteri che identificano i comandi quali
la richiesta dei dati, l'invio dei dati alterati dal PLC, diagnostica del
PLC ed altri ancora. Di seguito è riportato il listato del programma sul PLC
in istruction list.
Problemi durante il lavoro
I problemi durante lo sviluppo delle tre fasi sono stati diversi, ma grazie a questi abbiamo capito diverse problematiche del sistema che difficilmente sono documentate nei manuali per gli addetti ai lavori. Inizialmente nella prima fase abbiamo avuto il problema della configurazione del cavo null-modem, cercando di collegare in modo corretto i pin delle porte. Ci sono diverse tipologie di collegamento null-modem, ma quella illustrata più in alto è quella che funziona correttamente. Il problema della configurazione della porta seriale del PLC è stato risolto molto semplicemente facendo partire a freddo il PLC; infatti durante la partenza a freddo del PLC, in un programma in Istruction List, vengono eseguiti per prima cosa i blocchi ad organizzazione esclusiva e precisamente nel nostro caso il blocco 16 dove è stato selezionato il SASI 0 che è quello relativo alla assegnazione della interfaccia seriale, mentre nel numero di testo successivo ci sono tutti i parametri relativi al settaggio della comunicazione. I problemi della seconda fase sono stati un po più complicati dovuti al fatto che abbiamo settato diversi parametri per configurare la scheda in modo che funzionasse al meglio. I parametri critici sono stati quelli relativi alla selezione fra i protocolli Passthrough, Passhhthrough2, Telnet ed Lpd. Inizialmente le schede non riuscivano a scambiarsi i dati perchè è stato selezionato il protocollo di comunicazione passthrough che è un protocollo proprietario della casa produttrice dei dispositivi, successivamente è stato impostato il protocollo passhthrough2 il quale permette lo scambio dati attraverso il protocollo TCP/IP avendo montato due socket quali il tcpbind1a ed il tcpbind1b che sono rispettivamente socket per ricevere e spedire dati. Fatto questo è stato possibile fare colloquiare le due schede facendo scambiare fra di loro dei byte. Dalla parte del PLC virtuale non c'è stato alcun problema perchè i dati una volta spediti attraverso il cavo seriale sono stati impacchettati automaticamente dalla scheda Ethernet Converter per essere compatibili con il formato di dati che usa il Java sfruttando il TCP/IP. La terza fase è quella che ci ha dato maggiori problemi e che tutt'ora non sono stati risolti per i motivi spiegati qui di seguito. La scheda Ethernet Converter EC/S possiede un cavo seriale che è pin-to-pin, cioè il piedino 1 del primo connettore è collegato col piedino 1 del secondo e così via. Questa configurazione va bene per un PC, difatti la seconda fase è andata in porto, ma quando colleghiamo il cavo seriale al PLC, questo non lo riconosce come cavo valido e quindi non è stato possibile concludere la terza fase del progetto. Questo problema è dovuto anche al fatto che il PLC si configura automaticamente quando viene inserito un cavo diverso da quello che serve per scaricare i programmi sul controllore digitale. Infatti nella prima fase i passi sono : scaricare il programma sul PLC tramite il cavo apposito, esegure una partenza a freddo, togliere l'alimentazione del PLC e inserire il cavo null-modem. Un elemento di verifica del tipo di cavo è stato quello della visualizzazione di segnali di ok sui led del PLC e specificatamente led tutti accesi, PLC che ha riconosciuto il cavo, led tutti spenti, problema con il tipo di cavo.
Configurazione ottimale dei parametri
Il problema ,a parte la configurazione, è stata la scelta delle
strutture da usare dalla parte della PC-Card essendo,a differenza della seriale,operare
a basso livello.
Si è quindi deciso di usare Java 1.2 ed in particolare i socket che
dopo una fase di rodaggio iniziale,si sono dimostrati efficaci e ci hanno
permesso di lavorare direttamente con gli indirizzi IP invece di quelli fisici.
Invece dalla parte della WaveLAN EC/S si è continuato ad usare il programma
in C che va a leggere direttamente sulla seriale.
Il programma Java manda dati verso
l'Ethernet Converter tramite il suo indirizzo IP
e il numero di porta 4000. I dati vengono mandati attraverso un flusso o file
di caratteri ASCII opportunamente bufferizzati.
Quando arrivano a destinazione l'Ethernet Converter li spacchetta e li converte
in segnali compatibili con quelli che escono da un cavo seriale RS-232 in
modo che un qualsiasi programma possa leggere i dati della seriale e gestirli
come meglio crede.
Lavoro a cura di:
Amico Salvatore
Cassarino Andrea