La piattaforma di sviluppo QWay consente di acquisire informazioni da PLC collegati a macchine di produzione, utilizzando il protocollo standard MODBUS TCP, uno standard de-facto nell’ambito dell’automazione industriale (per maggior informazioni vedere qui).
Il protocollo prevede una configurazione del tipo master-slave, con il dispositivo di controllo (PLC) che funge da slave e ha un proprio indirizzo IP, una porta di ascolto (normalmente la 502) e un proprio ID, e il dispositivo di lettura (nel nostro caso il server dove è installato QualiWare) che funge da master.
Esistono 4 diversi tipi di registri che è possibile leggere e scrivere, ognuno identificato da un apposito termine standard:
- Coils: leggibili e scrivibili, 1 bit (off/on), corrispondono a relè
- Discrete Inputs: leggibili, 1 bit (off/on), corrispondono a contatti
- Input Registers: leggibili, 16 bits (0 to 65,535), essenzialmente per misure e stato
- Holding Registers: leggibili e scrivibili, 16 bits (0 to 65,535), essenzialmente per configurazione
La piattaforma QWay incorpora la libreria ModbusTCP che mette a disposizione primitive per scrivere e leggere i registri di cui sopra. E’ disponibile un form dimostrativo di tutte le funzionalità di lettura e scrittura, utilizzabile come punto di partenza per lo sviluppo.
Per facilitare il test è anche disponibile un emulatore di slave, scaricabile da qui. Tale emulatore trasforma il PC sul quale viene eseguito in uno slave, il cui IP sarà quello del PC stesso, e per il quale è possibile definire la porta di ascolto e l’ID. Prima di attivarlo, premendo il tasto “Listen”, dovrà essere definita la funzione che dovrà emulare, e quindi dare la possibilità al master di leggere/scrivere i coils, di leggere i registri di input discreti, di leggere/scrivere i registri holding o di leggere i registri di input.
Nella parte inferiore è possibile definire i valori che dovranno essere letti dal master, o leggere i valori scritti dal master. Nel caso di registri di input discreti e coils è necessario cambiare il display format in LED o binary per vedere i valori corretti.
NOTE
- Il dispositivo dal quale QualiWare leggerà i dati deve essere configurato come SLAVE. In particolare, per i PLC Siemens SIMATIC S7 in caso di difficoltà si suggerisce di fare riferimento a questo articolo.
- Per verificare la corretta configurazione del dispositivo e del canale di comunicazione MODBUS è consigliabile usare il tool CAS MODBUS SCANNER, scaricabile da qui.
- Sui PLC Siemens è stato constatato che non è possibile collegare più di un master in lettura alla volta. Quando si fanno i test è quindi necessario accertarsi che l’applicazione, o il simulatore, siano attivi su un solo PC o server alla volta, altrimenti viene restituito un errore TCP apparentemente senza significato.
- Per memorizzare valori float, il PLC utilizza 2 registri holding consecutivi da 2 byte. Per convertirli in variabili di tioo “single” una volta acquisiti dal PLC stesso, si può usare la primitiva BitConverter.ToSingle, come nel codice seguente, che è riferito alla lettura di dati da PLC Siemens S7:
dim b(4) as byte b(0)=values(3) b(1)=values(2) b(2)=values(1) b(3)=values(0) dim v as single=BitConverter.ToSingle(b, 0)
In questo caso il valore è contenuto nei primi 4 bytes letti dal PLC (la variabile “values” è l’array di byte restituito dal PLC a seguito di un’operazione di lettura). Essi vengono messi nell’ordine opportuno in un array di 4 bytes e passati alla primitiva BitConverter.ToSingle. In modo del tutto analogo è possibile acquisire un valore double a partire da 8 bytes letti dal dispositivo e utilizzando la primitiva BitConverter.ToDouble.
E’ necessario tenere presenti che in PLC non Siemens i bytes potrebbero essere in un ordine differente.