====== Cablaggio del bus RS485 ====== ===== Modbus: protocollo universale ===== Modbus è un protocollo di comunicazione seriale creato da un importante produttore di PLC nel lontano 1979. A differenza di molti altri protocolli di comunicazione è pubblicato apertamente ed è “royalty-free”, ciò ha permesso ad ogni produttore di PLC, Touch Panel ed in genere di schede elettroniche di implementarlo all’interno dei propri dispositivi, rendendolo così lo standard defacto per l’Automazione e la Domotica. \\ Modbus è un protocollo sicuro, infatti integra il controllo CRC su ogni messaggio per verificare l’integrità dei dati; tipicamente viene utilizzato su linee seriali RS- 232 e RS-485 denominato "**Modbus RTU**", mentre la versione TCP-IP è denominata “**Modbus TCP**”.\\ \\ Per chi volesse approfondire gli aspetti tecnici di questo protocollo di comunicazione vi consiglio di leggere questa interessante guida: [[http://www.sti.uniurb.it/romanell/Domotica_e_Edifici_Intelligenti/110113-Lez05b-Modbus-DomoticaEdEdificiIntelligenti-Romanelli.pdf|Il protocollo ModBus]] ===== Lettura dati via RS485 ===== La possibilità di disporre di un’uscita RS485 sul contatore permette di poter installare nel nostro impianto **fino a 32 contatori** per monitorare quanti e quali carichi vogliamo. Basterà infatti collegarli fra loro con un semplice doppino ritorto e collegarli al Raspberry mediante un economico adattatore USB-RS485, per poter monitorare e loggare tutti parametri energetici che desideriamo, mediante i già noti software 123solar e MeterN: {{ :img_metern:sdm120c_4.jpg?nolink&400 }} Grazie ad un software sviluppato da Gianfranco Di Prinzio (gianfrdp del forum energeticamebiente.it) che ha messo gentilmente a disposizione su [[https://github.com/gianfrdp/SDM120C|Github]], è possibile leggere tutti i valori da questo contatore.\\ \\ Il software prevede inoltre le necessarie integrazioni per poter utilizzare il contatore mediante i software MeterN e 123solar. Infatti la possibilità di poter leggere più contatori sullo stesso bus, permette di utilizzare 123solar anche con inverter non direttamente compatibili, ma leggendo anche la [[metern_scenario2|produzione fotovoltaica]] (e non solo i consumi) mediante un contatore. ===== Cablaggio rete modbus ===== Come potete vedere il collegamento nelle varie configurazioni è comunque molto semplice. Basterà collegare mediante un **doppino ritorto** le uscite RS485 del contatore (identificate con le lettere A e B) con le rispettive lettere riportate sulla chiavetta usb. **FATE ATTENZIONE A RISPETTARE LA POLARITA’ E COLLEGARE IL TUTTO CORRETTAMENTE**\\ Collegate i dispositivi sul bus solo a sistema NON alimentato {{ :img_metern:modbus-schema.jpg?direct&500 |}} Nel caso si installino più dispositivi sullo stesso bus si dovrà creare una catena come l’immagine seguente, mettendo in parallelo tutti i dispositivi del bus: {{ :img_metern:rs485_wiring.jpg?nolink&300 }} A differenza della rete di computer LAN o del cablaggio a 230 V di casa, con molti bus la disposizione ed il collegamento dei dispositivi non sono casuali. __Con il bus RS485, i singoli elementi devono essere collegati in sequenza a un’unica linea continua__, come perle in una collana. In questa tipologia, le ramificazioni non sono consentite {{ :img_metern:rete_rs485.jpg?nolink&500 }} Eventuali tronconi di derivazione dal bus devono avere una **lunghezza massima di 2m** Se per qualche motivo non potete fare a meno di usare un bus con **diramazioni a stella**, è necessario utilizzare degli apparecchi appositi (RS485 HUB) che isolano con un appropriato driver ogni singolo ramo, che verrà poi terminato normalmente. [[http://www.icpdas.com/products/Remote_IO/i-7000/pdf/I-7514U.pdf|Esempio]] ===== Cavo modbus ===== Queste sono le specifiche fornite da ABB (PowerOne) per lo specifico cavo per reti RS485 da utilizzare: {{ :img_123s:cavo_schermato.png?nolink&700x376 }} \\ Da notare che nel caso si utilizzino degli adattatori USB-RS485 dotati anche del polo GND (massa) non si deve collegare l'eventuale schermatura del cavo a questo polo, ma entrambi i conduttori di un ulteriore doppino. \\ E' possibile anche l'utilizzo dei **cavi LAN UTP** per la realizzazione dei collegamenti modbus in sostituzione dello specifico cavo RS485 (più costoso e più difficile da trovare).\\ \\ Personalmente ho utilizzato il cavo di rete per lunghezze fino a circa 30-40m senza particolari problemi.\\ \\ E' comunque importante che il cavo di rete abbia le seguenti caratteristiche: * sezione conduttori AWG24 (molto spesso sono AWG26 e quindi più sottili) * impedenza prossima a 120ohm * sia un cavo schermato * si utilizzino due fili che costituiscono un doppino ritorto ( __NON UTILIZZATE 2 DOPPINI DIVERSI PER I DUE FILI DEL BUS__ ) * non vi siano possibilmente giunzioni nel cavo * si utilizzi per l'eventuale polo GND i due fili in parallelo di un ulteriore doppino (come visibile nella prima immagine) * non utilizzare la schermatura come cavo GND Per approfondimenti sul cavo da utilizzare: [[http://www.flanesi.it/forum/viewtopic.php?f=17&t=1886|Cavi per seriale RS485 e cavi LAN]] ===== La velocità corretta ===== La capacità parassita della linea di trasmissione aumenta all’aumentare della lunghezza della linea, limitando di conseguenza la massima velocità del bus. Una legge empirica fornisce i seguenti valori: * 115200bps: fino a 85m * 57600bps: fino a 170m * 38400bps: fino a 250m * 19200bps: fino a 500m * **9600bps: fino a 1000m** * 8400bps: fino a 1200m (lunghezza max) Personalmente per l'impiego indicato sul wiki consiglio di **utilizzare la velocità di 9600 bps** che sono compatibili con i contatori impiegati ===== Le resistenze di terminazione ===== I cavi RS-485 hanno impedenza tipica di 120Ω. Di conseguenza è necessario inserire una resistenza di terminazione all’inizio del bus RS-485 (tipicamente sull'adattatore USB-RS485) ed alla fine (tipicamente in concomitanza dell’ultimo slave).\\ È opportuno scegliere **resistenze da 120Ω con tolleranza 1%**, per evitare sbilanciamenti nel bus di trasmissione. \\ Alcuni dispositivi, ad esempio gli inverter e/o gli adattatori USB-RS485, integrano internamente delle resistenze di terminazione, in alcuni casi attivabili con dip-switch; in questo caso occorre verificare che solamente il primo e l’ultimo dispositivo del bus abbiano la resistenza di terminazione attivata. * Su bus RS-485 particolarmente corti è possibile non inserire le resistenze di terminazione \\ Fino a 30-35m personalmente non ho avuto problemi e non ho avuto bisogno delle resistenze di terminazione {{ :img_metern:bus_rs485.jpg?nolink |}} \\ Attenzione che **alcuni adattatori USB-RS485 hanno già al loro interno la resistenza di terminazione da 120 ohm**.\\ **Prima di mettere una resistenza sull'adattatore, verificate che non sia già integrata!!** ===== GND? dove lo collego? ===== Molti dispositivi RS-485 dispongono del morsetto GND (ground), allo scopo di fornire un riferimento di tensione comune a tutti i ricetrasmettitori RS-485 del bus. In questo caso, occorre collegare tutti i pin GND dei dispositivi tra di loro, utilizzando un altro filo del cavo RS-485.\\ \\ Il pin GND non è comunque necessario alle schede alimentate in tensione continua, in quanto il riferimento di tensione comune è rappresentato dal polo negativo. **Non collegare il pin GND alla messa a terra dell'impianto e non si deve collegare alla schermatura del cavo ma utilizzare un altro filo del cavo RS-485** Per un approfondimento tecnico sulle reti RS485 suggerisco di leggersi i seguenti documenti: * [[http://www.flanesi.it/blog/download/RS485/Corretto_cablaggio_delle_reti_RS-485.pdf|Corretto cablaggio delle reti RS485]] * [[http://www.cle.sm/rete485.pdf|Guida alla rete RS485]] * [[ http://www.ainetautomation.com/Documentazione/guida_rapida_bus_rs485.pdf|Guida rapida: creazione di un bus RS485]]