Our Website uses cookies so that we can provide a better service. Continue to use the site as normal if you are happy with this. Cookie policy here
Close

Sezione Didattica:

PLC S7 1200 e Zelio Logic: due amici che parlano tra loro


Esempio di comunicazione Master/slave in MODBUS TCP tra S7 1200 e Zelio Logic

L’applicazione descritta in questo documento è a puro scopo didattico.
L’autore e plcforum.it non assumono responsabilità per danni e inconvenienti, a cose e/o a persone, derivanti da un suo uso improprio.



Spesso capita di dover scambiare dati tra dispositivi (apparecchiature) di marca e/o tipologia differente e per far ciò ci avvale di un protocollo di comunicazione.
Uno dei protocolli di comunicazione ad oggi più utilizzato in ambito industriale, è il Modbus. Non è comunque raro trovarlo anche in ambito civilistico. Basti pensare agli analizzatori di rete elettrica presente nei quadri di distribuzione, ad alcune marche di sistemi anti intrusione, hai sistemi di controllo accesso ecc. ecc.
In questo esempio ci occupiamo di come mettere in comunicazione un PLC Siemens della famiglia S7 1200 che funzionerà da Master con un mini PLC e/o relè intelligente della Schneider Electric (Telemecanique). Lo Zelio Logic che funzionerà da Slave, con la possibilità di parametrizzare delle variabili di quest’ultimo, mediante un pannello operatore KTP 400 della Siemens.
Il tutto mediante collegamento Ethernet sfruttando il protocollo MODBUS TCP. Tale soluzione ci permetterà di poter creare delle applicazioni molto versatili, ed applicabili su differenti settori, tra cui la Home automation e/o domotica. Tenendo conto che all’interno dello Zelio logic risiederà e girerà il proprio software in modo indipendente, lo si potrà quasi paragonare ad un sistema Client-Server. Nell’esempio leggeremo il valore corrente di un temporizzatore del PLC remoto (lo Zelio logic) e ne imposteremo un nuovo preset mediante il su citato pannello operatore , visualizzeremo lo stato degli ingressi e ne comanderemo le uscite.

Esempio di configurazione HW/TCP del sistema:




Un brevissimo accenno sul protocollo Modbus.
Creato nel 1979 da Modicon (azienda ora parte del gruppo Schneider Electric) come protocollo proprietario per permettere la comunicazione tra i loro dispositivi. Ben presto è stato utilizzato anche da altri costruttori, fino a divenire successivamente uno standard, permettendo così di poter inserire nella medesima rete apparecchiature di marche differenti.
Il protocollo Modbus è un protocollo di tipo Master <> Slave, ciò sta ad indicare che è solo il master ad iniziare una comunicazione verso gli slave, che rispondono al master solo quanti interrogati. Il numero massimo di slave che possono essere interrogati da un master è di 247. Questo limite è solo un limite logico del protocollo.
Altra limitazione sul numero degli slave collegabili al master può anche essere dato dall’interfaccia fisica utilizzata. Ad esempio, se si utilizza una porta seriale standard di tipo RS485, il limite degli slave collegabili scende ad appena 31 unità se non vengono utilizzati particolari accorgimenti, come ad esempio l’inserimento sulla linea di dispositivi bridge “ripetitori di segnale”.
Esistono due versioni del protocollo Modbus, quello RTU e quello ASCII, ma quello utilizzato è quello RTU.

La connessione tra il master ed lo/gli slave può avvenire per mezzo di differenti tipologie di "porte" di comunicazioni hardware.

  • RS232, utilizzata maggiormente per le connessioni di tipo punto punto con un unico slave. La sua limitazione HW non permette connessioni multiple.
  • RS485, utilizzata per le connessioni multiple (con più slave).
  • TCP, utilizzata si per le connessioni punto punto che multipunto.

In questo esempio prenderemo in considerazione la sola versione RTU, perché è quello che utilizzeremo per far comunicare il PLC S7 1200 con lo Zelio Logic.
La struttura del messaggio Modbus (vedi figura 1) è composto nel seguente modo:

  • 1 byte contenente il numero dello slave;
  • 1 byte contenente il codice funzione;
  • n byte contenente il numero dei registri/valore da leggere e/o restituito;
  • 2 byte contenente il CRC;


Come tutti i protocolli bus, i dispositivi (oggetti) per essere interrogati dal master senza creare conflitti, hanno necessità di essere identificati all’interno di una rete in modo univoco, pertanto gli viene assegnato un indirizzo. Come precedentemente detto, gli indirizzi vanno da 1 a 247. Mai nessun slave potrà avere indirizzo zero, in quanto se un master trasmette verso un indirizzo “zero”, questo messaggio sarà ricevuto contemporaneamente da tutti gli slave. Questo viene identificato come messaggio “broadcast”.
Vengono trasmessi come messaggi broadcast tutti quei messaggi che non richiedono una risposta da parte degli slave.
Il codice funzione, è un codice che identifica la funzione che lo slave deve eseguire a seguito della richiesta del master. Nel protocollo Modbus, le funzioni che possono essere eseguite dagli slave sono le seguenti:


Codice Funzione.......................Descrizione

  • 01 Read Coil Status
  • 02 Read Input Status
  • 03 Read Holding Registers
  • 04 Read Input registers
  • 05 Force Single Coil
  • 06 Prese! Single register
  • 07 Read Status
  • 15 Force multiple Coils
  • 16 Preset Multiple Registers


Per far comunicare l’ S7 1200 con lo Zelio, prenderemo in considerazione i codici funzione 03 e 06 RTU che secondo le specifiche indicate dal datasheet del modulo Modbus dello Zelio (vedi figura 2) sono quelli più idonei al nostro scopo.


I registri:
I registri sono quelle aree di memoria nel quale vengono salvati i dati. Alcuni registri sono di sola lettura, mentre altri possono essere sia in lettura che di scrittura. Ovviamente ogni area di memoria ha anche esso un indirizzo che lo identifica in modo univoco. Il significato dei dati contenuti in questi registri come nel caso specifico è definito dal produttore dell’apparecchiatura. Vedi figura 3.
Infatti, osservando la figura su citata, si evince come a secondo del linguaggio di programmazione utilizzato nello Zelio Logic (Ladder o FBD), i registri assumano un significato ben definito.
Se prendiamo come esempio il registro di tipo word con indirizzo (IEC) MW16 oppure (Modicon) 4001+16, che è il medesimo registro, solo chiamato in modo differente, e, se lo Zelio Logic è stato programmato in ladder, questo registro è vuoto o inesistente, mentre se lo Zelio Logic è stato programmato in FDB, questo registro è in anzi tutto sia in scrittura che in lettura e contiene i dati della word JX1TX1, che saremo noi a definirne il significato durante la stesura del software come più avanti vedremo.
Per continuare l’esempio, il registro (IEC) MW20 (Modicon) 4001+20 è di sola lettura e a seconda del linguaggio utilizzato, (FBD o Ladder) può assumere significato differente. In FBD conterrà il valore che in fase di programmazione assegneremo noi alla word O1XT1, in Ladder, conterrà lo stato degli ingressi.
Nello Zelio le word identificate con JX sono word di ingresso, cioè atte a contenere i dati ricevuti dall’esterno, mentre le word identificate con OX sono word atte a contenere dati che lo Zelio deve inviare.
Per concludere, prendendo come esempio il registro (IEC) MW33 (Modicon) 4001+33, indifferentemente dal linguaggio di programmazione utilizzato, esso conterrà nei primi 8 bit partendo da sinistra l’ora del sistema, e nei successivi 8 bit i minuti. Questo registro come il precedente citato è sia in lettura che in scrittura, pertanto saremmo in grado sia di leggere l’ora ed i minuti dello Zelio che impostarli.
registri Zelio


La configurazione dello Zelio Logic
La configurazione dello Zelio, inizia ovviamente con la configurazione Hardware, inserendo nel progetto il uno dei moduli logico SR3 ed il relativo modulo di espansione per il protocollo Modbus TCP. Il modulo “SR3NET01” come da figura 4. Mediante il modulo “SR3NET01” siamo in grado di leggere e scrivere rispettivamente 8 registri del protocollo Modbus TCP, di cui 4 in sola lettura e 4 in lettura e scrittura.


All’avvio dell’ide, configuriamo il modulo “SR3NET01” assegnandogli i parametri di rete come visibile in Figura 5:




Il programma di esempio visibile in figura 6 e da scaricare all’interno dello Zelio Logic è semplice ed intuitivo. Vi sono due istruzioni chiamate CNA (punto 1) e CAN (punto 4) con la funzione di convertire rispettivamente una parola (word) in bit e viceversa. Un metodo analogo verrà utilizzato all’interno del PLC S7 1200. Al blocco CAN (punto 1) giungono i singoli bit provenienti dagli ingressi (punto 2) e vengono convertiti in word (punto 3) per essere poi resi disponibili nel rispettivo registro del Modbus. Medesima cosa avviene con il blocco CAN (punto 4) ma al contrario, il quale preleva i dati dal rispettivo registro del Modbus (punto 6) e li converte in bit (punto 5). In tal modo siamo in grado di leggere e scrivere gli ingressi dello Zelio Logic e di attivarne le rispettive uscite mediante S7 1200 ed il KTP400.
Analoga cosa avviene per il temporizzatore (punto 9) dove mediante J2XT1 (punto 7) è possibile passargli i dati di parametrizzazione provenienti dal rispettivo registro del Modbus e restituirne il valore mediante O2XT1 (punto 8). Tramite questi due registri siamo in grado di parametrizzare con S7 1200 il temporizzatore dello Zelio Logic e leggerne il valore corrente. Entrambi i valori saranno visualizzati sia sul display dello Zelio (punto 10) che sul display del KTP400.
registri Zelio


Il Programma per S7 1200.
Nella figura 7 è visibile la struttura del programma.
Esso contiene oltre al MAIN, un blocco funzionale per la comunicazione Modbus con il relativo blocco d’istanza, due blocchi funzione per la conversione da word a bit e viceversa, ed un blocco dati dove abbiamo appoggiato i buffer dei dati da ricevere ed inviare.



Dopo le configurazioni di base, tipo la scelta della CPU, l’assegnazione dell’indirizzo IP ecc., inseriamo e configuriamo il blocco della libreria MODBUS TCP selezionandola dal menù istruzioni a destra dell’ide, sotto la voce COMUNICAZIONE>PROCESSORE DI COMUNICAZIONE>MODBUS TCP>MB_CLIENT.
Dopo l’inserimento del blocco MB_CLIENT nel MAIN, deve essere opportunamente parametrizzato, come mostrato in figura 8.
Avendo inserito nel MAIN per comodità due blocchi MB_CLIENT, uno per trasmettere ed uno per riceve, abbiamo creato una sorta di interblocco tra il blocco RX e TX mediante due bit della memoria Merker (M4.1 ed M4.2). In questo modo se in uno dei due blocchi è ancora attivo un ordine, l’antro blocco non viene eseguito.

Descrizione dei parametri di configurazione:
DISCONNECT se portato alto, stabilisce la comunicazione con lo slave.
CONNECT_ID identifica in modo univoco l’istanza Modbus;
IP_OCTET_1/2/3/4 identifica l’indirizzo IP a cui connettersi;
IP_PORT identifica la porta di comunicazione;
MB_MODE definisce il modo di funzionamento, se il blocco deve inviare o ricevere. 0=RX ed 1=TX;
MB_DATA_ADDR è l’indirizzo iniziale del registro che deve essere letto o scritto per prima. Nel nostro caso iniziamo dal 40017 (4001+16) in scrittura ed in lettura dal 40021 (4001+20)
MB_DATA_LEN è il numero di registri da scrivere e/o leggere. Nell’esempio ne scriviamo e leggiamo in contemporanea 4.
MB_DATA_PTR punta hai registri del buffer di ricezione o trasmissione. Nell’esempio agli array presenti nel blocco dati che contengono i valori da inviare e ricevere.
DONE è true quando si è concluso l’esecuzione del blocco senza errori.
BUSY è true durante l’esecuzione del blocco, nell’esempio lo utilizziamo per comprendere quando è in esecuzione un ordine di ricezione o trasmissione per non sovrapporre altri ordini.
ERROR se true indica che si è verificato un errore, e nel parametro status viene indicato il codice dell’errore.
STATUS In esso è presente il codice di errore e/o di stato dell’istruzione.
registri Zelio


Dopo aver visto la parametrizzazione del blocco MB_CLIENT, il restò del programma viene da sé. Osservando la figura 9, vi evince l’istruzione MOVE che ha il compito di trasferire nella seconda posizione dell’array TX il nuovo valore di preset del temporizzatore presente all’interno del software dello Zelio Logic, con il valore digitato nell’HMI (figura 10).

Si possono anche vedere osservando sempre la figura 9 i due blocchi funzione FC1 ed FC2 che come detto in precedenza hanno il compito di convertire i singoli bit in merito allo stato dei pulsanti del pannello operatore in word per comandare le uscite dello Zelio e di leggere lo stato degli ingressi sempre dello Zelio e visualizzarli sullo schermo del pannello operatore. Un po’ ciò che accade nello Zelio Logic hai punti 1 e 4 della figura 6.
registri Zelio


Di seguito nella figura 10 è possibile vedere come appare la visualizzazione dei parametri per la gestione e la visualizzazione dello Zelio Logic:
registri Zelio


mentre nella figura 11 è possibile vedere la finestra di parametrizzazione dell’indirizzo IP con cui connettersi allo slave, lo stato della connessione è l’eventuale presenza di errori con il relativo codice di identificazione.



I codici sorgenti sia per lo Zelio Logic che per l’S7 1200 sono scaricabili da qui.

Il manuale del modulo Modbus SR3NET01 per lo Zelio Logic, può essere scaricato da qui

Nel forum è presente una discussione in cui viene trattato l'argomento: discussione

Articolo curato da Giuseppe Signorella