Download del PDF dell’intera serie di articoli sul Modbus
I moduli Modbus Slave Overdigit sono conformi alla specifica ufficiale Modbus ma al tempo stesso sfruttano le caratteristiche di flessibilità del protocollo per ottenere delle prestazioni notevolmente superiori rispetto a qualsiasi altro dispositivo Modbus presente sul mercato.
L’incremento di prestazioni può essere completamente sfruttato solo nel caso di utilizzo dei Web-PLCs Overdigit in quanto è richiesta anche l’implementazione di codici funzione custom. Tuttavia ciò dimostra la possibilità di utilizzare il protocollo Modbus anche per soddisfare le esigenze più specifiche, in apparenza realizzabili solo con lo sviluppo di protocolli totalmente proprietari. In questo modo è quindi possibile mantenere la compatibilità, sullo stesso bus di campo, tra dispositivi Modbus standard e sistemi che possono ottenere prestazioni superiori ma che comunque utilizzano anch’essi il protocollo Modbus.
Per quanto riguarda il “Physical layer” i moduli Overdigit sono dotati di un driver RS485 con 1/2 unità di carico. Ciò significa che è possibile collegare fino ad un massimo di 64 dispositivi sul bus senza utilizzare ripetitori di linea. Il connettore a 6 poli, standardizzato per tutti i moduli, consente di alimentare i dispositivi e di connettere l’interfaccia seriale al bus di campo. All’interno dei moduli è prevista la resistenza di terminazione il cui inserimento è ottenuto mediante un ponticello esterno nella morsettiera tra il polo del segnale B ed il polo RES:
I segnali A e B sono anche indicati rispettivamente come 485- e 485+ evidenziando la polarità della linea nello stato attivo di pilotaggio del bit=0, in contrapposizione allo stato non attivo della trasmissione. Si noti infatti che lo stato non attivo, per la presenza delle resistenze di polarizzazione di default, assume la stessa polarità associata alla trasmissione del bit=1.
Il driver della linea RS485 utilizzato nei moduli Overdigit permette comunicazioni seriali fino alla massima velocità di 1Mb/s anche se normalmente i sistemi Modbus presenti sul mercato non superano mai la velocità di 115200b/s.
Il “Data Link layer” implementato nei moduli Overdigit prevede quattro modalità del bit di parità:
La modalità “No-1stop” non è prevista nella specifica del protocollo Modbus ma è stata comunque implementata per ottenere la compatibilità con i numerosi sistemi commerciali che hanno “deviato” dalla specifica e che hanno di fatto apportato una variante, abbastanza diffusa ma non ufficiale, al protocollo Modbus seriale.
Riguardo l’implementazione delle Protocol Data Unit (PDU), definite nel ”Application layer”, i moduli Overdigit prevedono tutti i codici comando standard necessari alle gestione delle risorse dello specifico modulo. Per l’indirizzamento degli oggetti è stato adottato l’indirizzamento esteso per cui il campo Address della PDU si può estendere su tutto il range 0÷65535 per ciascuna delle quattro aree dati definite dal protocollo. In pratica comunque, per il funzionamento dei vari dispositivi, sono normalmente necessari solo pochi indirizzi a partire dal valore 0.
Inoltre, nei moduli Overdigit, sono stati aggiunti alcuni codici funzione custom, secondo quanto consentito dal protocollo Modbus, che permettono di velocizzare notevolmente le operazioni di aggiornamento delle risorse del modulo.
In particolare sono stati aggiunti i codici 100, 101, 102 rispettivamente per aggiornare tutti i bytes di ingresso, di uscita e di ingresso/uscita del modulo. In tal caso tutte le risorse di I/O del modulo sono compattate in un unico stream di bytes nell’area Data della PDU.
Il codice comando che maggiormente permette di rendere efficace l’aggiornamento del modulo è quello per la lettura degli ingressi e la scrittura delle uscite:
L’utilizzo di questo comando permette di aggiornare tutta l’area immagine degli ingressi e delle uscite del modulo in un solo scambio di frames. Per ottenere ciò nei convenzionali moduli Slave con protocollo Modbus è necessario eseguire più interrogazioni successive ed utilizzare variabili di tipo word anche se l’informazione da scambiare può essere contenuta in un solo byte. Nel caso dei moduli Overdigit le risorse di I/O sono invece inserite all’interno di un array di bytes lungo quanto necessario per contenere lo stato di tutte le variabili associate alle risorse.
Le quantità dei bytes di I/O possono essere note a priori oppure determinate in modo dinamico, per esempio al power-on, mediante il codice comando standard 17 (Report Slave ID):
Il campo dati nella PDU della risposta è costituito da un unico array di 20 bytes che contiene, in posizioni predefinite, le informazioni relative al modulo e alle dimensioni delle aree di I/O:
L’utilizzo del codice comando 102, in abbinamento con la massima velocità di comunicazione impostabile (1Mb/s), permette di aggiornare tutta l’area di I/O dei moduli in tempi notevolmente ridotti rispetto a quanto normalmente si ottiene su altri sistemi commerciali.
Per esempio, nel caso del modulo Overdigit EX1608DD con 16 ingressi + 8 uscite digitali, il tempo complessivo di comunicazione è di soli 250μs. La maggior parte dei moduli analoghi presenti sul mercato spesso limitano la velocità massima a 38400b/s e non prevedono comandi addizionali. Per questo, per effettuare l’aggiornamento degli I/O, è richiesta l’esecuzione di una lettura di un “Input Register” e di una scrittura di un “Holding Register”. Considerando anche un tempo nullo di elaborazione dei frames e quindi di una risposta immediata da parte dello slave, si ottiene un tempo complessivo di comunicazione di circa 13ms ossia ben 52 volte maggiore.
Ovviamente prestazioni così spinte richiedono l’implementazione anche di funzioni custom, come avviene nella libreria Modbus per CoDeSys dei Web PLCs Overdigit, ma il vantaggio principale, rispetto allo sviluppo di un protocollo completamente proprietario, è che comunque la struttura principale del protocollo rimane conforme allo standard Modbus permettendo la compatibilità di questi moduli con tutti i più tradizionali dispositivi.