Come fa Python a comunicare con il mondo modbus? Quali librerie utilizzare per leggere e scrivere dati per esempio con un Logo! Siemens e questo linguaggio di programmazione?
Benvenuto sul mio sito dedicato all’automazione industriale, nel tutorial di oggi ti mostro come con Python, sfruttando la libreria ModbusTCP, sia possibile interfacciarsi con il mondo modbus per scambiare dati con le varie apparecchiature.
Nell’esempio di oggi (corredato di video che trovi in fondo alla pagina) mettiamo in collegamento Python con un piccolo PLC Logo! Siemens, il quale per oggi non svolgerà il suo normale compito di controllore, ma soltanto quello di modulo di ingressi e uscite modbus.
Tutti sappiamo che Python è un linguaggio molto versatile, non tutti però sono a conoscenza del fatto che esso ci mette a disposizione alcune librerie utili nell’automazione industriale, come per esempio la libreria pymodbusTCP.
Questa libreria permette a Python di agire sia come client che come server modbus, e nella dimostrazione di oggi, sfruttiamo il modulo client per leggere e scrivere dati nel Logo! Siemens.
L’utilizzo del piccolo PLC della casa tedesca nasce dal fatto che avendolo a disposizione, si presta benissimo per testare la comunicazione modbus tra apparecchiature di diversa natura.
Utilizzare la comunicazione modbus ci permette di creare una varietà di applicazioni, come per esempio i data logger, sistemi di monitoraggio, o addirittura soft plc, come troviamo in uno dei miei altri tutorials.
Nell’immagine che segue vediamo un pezzetto dello script Python, contenente le funzioni create per leggere e scrivere i dati sulle apparecchiature.
Il programma permette di leggere i dati degli ingressi digitali e delle uscite digitali, e di comandarle, sfruttando le classi definite all’interno del modulo client della libreria PyModbusTCP.
Si possono leggere gli ingressi analogici, i valori delle parole, i bit all’interno di queste, i merkers, i merkers analogici, e tutto ciò che i moduli modbus ci mettono a disposizione sulla rete.
Ecco nella prossima immagine il menu dell’applicazione runtime.
Come vediamo dalla figura sopra, abbiamo diviso il menu per aree di memoria, e sono state previste delle funzioni per scrivere molte variabili insieme, come per esempio l’opzione 13 che azzera tutte le uscite digitali.
Nell’immagine sotto vediamo il risultato del comando 31, che va a leggere tutti gli ingressi analogici; nel nostro sistema di test abbiamo solamente un ingresso attivo, e vediamo il valore letto di 145.
Nella prossima figura, troviamo sia la schermata del programma Logo! che quella della routine Python in esecuzione; possiamo notare i due ingressi attivati in entrambe le finestre.