Pages: [1] 2   Go Down
Author Topic: Protocolli per non brevi distanze  (Read 1050 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao,
Ho deciso di rispolverare Arduino per dei progetti che mi piacerebbe intraprendere...
Il punto principale è come far dialogare vari Arduino  tra una stanza è l'altra.
Fortunatamente esistono molte librerie per fare ciò, scarterei il Can bus perché richiede  troppe connessioni ed un cip dedicato MCP2515 + 2551 ecc.
principalmente pensavo al  RS485 per la semplicità del circuito con qualche bus già bello fatto!
Ma sono aperto a qualsiasi suggerimento.
Considerando che questa problematica è stata già affrontata da molti di Voi,
mi piacerebbe  ricevere un consiglio per non inoltrarmi  in strade che non portano molto lontano.
Quello che mi sconcerta è quantità di librerie per Modbus ma quale scegliere?
Esiste anche il Dmx ma da una superficiale lettura  non sembra essere bidirezionale.

Grazie

Luca
« Last Edit: October 17, 2012, 06:52:55 am by llluca » Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'rs485 dovrebbe essere più che sufficiente.
Però non è una "breve" distanza; per breve distanza io penso all'i2c o alla SPI che al massimo arrivano ad una decina di centimetri!
se correggi il titolo sono sicuro che avrai più aiuto.

Tra l'altro se ne è già parlato spesso, la cosa migliore IMHO è un chip da seriale rs232 livelli TTL (insomma, la seriale di arduino) in RS485; Infatti la libreria SoftwareSerial ti permette di trasformare due pin qualsiasi dell'arduino in TX/RX (ma per via dell'implementazione software puoi rivecevere a massimo 19200baud e scrivere poco più velocemente, ma di solito è più che sufficiente), e quindi creare facilmente una rete con molti collegamenti. Infice credo che i chip siffatti siano abbastanza economici (max485 CREDO vada bene, verica se i livello sono ttl o no)
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 313
Posts: 21624
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

I 75176 sono migliori, costano meno e sono meno sensibili alle interferenze.
Logged


Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

(max485 CREDO vada bene, verica se i livello sono ttl o no)
Confermo ttl!

@  leo72  i 75176 = € 0,672  i max 485  € 3,12 ottimo consiglio!  smiley-yell

Grazie per la risposta ma mi chiedevo volendo usare un protocollo, ed essendocene parecchi e con molte discussioni in merito, verso quale sarebbe meglio orientarsi?



Logged

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora, se hai bisogno di una connessione multimaster mi sembra che la CAN lo sia. Se ti basta monomaster e multislave potresti utilizzare il Modbus. Come librerie potresti utilizzare queste:
https://sites.google.com/site/jpmzometa/arduino-mbrt

Quasi sicuramente vanno adattate all'IDE di Arduino 1.x ma è una cavolata.
Non sono state implementate tutte le funzioni previste dallo standard ma dovrebbero bastare. Vedi un po' te.

Per il master ti segnalo anche questa libreria:
http://www.arduino.cc/playground/Code/ModbusMaster

Il modbus secondo me fa al caso tuo perché prevede fino a 127 slave, è standardizzato, universalmente riconosciuto e prevede anche un controllo sull'integrità dei dati mediante un controllo CRC.

EDIT: Dai un'occhiata anche qui:
http://arduino.cc/forum/index.php?topic=36562.0
Parla della I2C (chiamata anche TWI), la quale prevede il multimaster.

EDIT2: Altrimenti ancora perché non le Wifi-shield?
« Last Edit: October 17, 2012, 07:23:55 am by Janos » Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

EDIT2: Altrimenti ancora perché non le Wifi-shield?
PEr ora vorrei concentrarmi solo su protocolli via filo

Ma la domanda forse banale è con un monomaster:
Può uno   slave   fare sniffing     dei dati sulla rete per vederli dal monitor seriale ?
o questo è prerogativa dell master?
Se non ho capito male esiste la filtratura dei dati che dovrebbe dipendere dall' indirizzo dello salve?

Vi ringrazio per la pazienza  smiley  e come si capirà la confusione nella mia testa non è poca.... smiley
« Last Edit: October 18, 2012, 06:45:28 am by llluca » Logged

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si, è possibile effettuare lo sniffing dei dati. Tutti gli slave ricevono gli stessi dati ma solo quello con quel dato indirizzo risponde. Inoltre il CRC ti permette di avere sicurezza sull'integrità dei dati ma contro alterazioni dovute da interferenze, mentre è sensibile di un eventuale attacco intenzionale.

Quote from: Wikipedia
Utile per l'individuazione di errori casuali nella trasmissione dati (a causa di interferenze, rumore di linea, distorsione), il CRC non è invece affidabile per verificare la completa correttezza dei dati contro tentativi intenzionali di manomissione. A tal fine sono utilizzati algoritmi di hash quali MD5 e SHA1, più robusti seppur computazionalmente meno efficienti.

In pratica il master invia sul bus un messaggio del tipo "slave X, funzione Y(ad esempio letti un valore), altri comandi, CRC". Solo lo slave interrogato, se ha correttamente interpretato il messaggio, risponde ma tutti hanno ricevuto lo stesso messaggio.
Per vedere come è fatto un meggaggio "frame" di una comunicazione Modbus puoi vedere qui:
http://en.wikipedia.org/wiki/Modbus
« Last Edit: October 17, 2012, 10:20:30 am by Janos » Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
Forse sto capendo, esempio per capire meglio il problema...
In un appartamento ho 4 o 5 sensori di temperatura  questi probabilmente arduino tiny
si dovrebbero comportare da Slave Giusto?
Voglio visualizzare la temperatura  su vari lcd  ma questi cosa sarebbero?

Soluzione 1) il master riceve i dati se questi cambiano li ritrasmette il nuovo dato  agli salve lcd?
Soluzione 2) Gli slave Lcd possono intercettare i dati temperatura e visualizzarli autonomamente.

Volendo utilizzare un protocollo tipo  Modbus  dovrei ragionare con la soluzione 1?

grazie
Logged

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho capito...  smiley-sweat

Allora, fa tutto il master, sia inviare che ricevere i dati. Quando il master invia sul bus un messaggio tutti gli slave lo ricevono ma solo quello che corrisponde a quel dato indirizzo lo elabora, tutti gli altri semplicemente lo ignorano. Sarà il master che farà un polling su tutti i sensori per sapere le varie temperature, gli slave non possono di loro iniziativa inviare dati al master e tantomeno fra di se.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

slave non possono di loro iniziativa inviare dati al master e tantomeno fra di se.
Forse ho capito il principio, Il vantaggio è non avere dati Che si scontrano collidono nel bus, perchè  i vari nodi in un certo senso sono diretti dal master.

Quindi in questa ottica è preferibile l'adozione di un protocollo come Modbus.

Grazie

Luca
« Last Edit: October 18, 2012, 06:50:08 am by llluca » Logged

0
Offline Offline
Shannon Member
****
Karma: 117
Posts: 10106
:(){:|:&};: TOX id: fcb8e918bef08581e23f6ddf9d4dba77697c25b217bf372736ed959a95fde36df5b8c5b90fbb
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

scontrano nel bus

si dice collisione, se cerchi trovi tanta roba su questo problema
Logged

my Arduino code: https://github.com/lestofante/arduinoSketch
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Firenze
Offline Offline
Jr. Member
**
Karma: 1
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Parlando di modbus, monomaster non significa che gli slave non possono inviare dati al master, monomaster significa che il master e' l'unico in grado di ricevere richieste (lettura e scrittura). Le richieste possono essere di vario tipo in base al tipo di dato da gestire e all'operazione da eseguire. Con una richiesta di scrittura puoi inviare dati al master da un qualsiasi slave, mentre con una richiesta di lettura lo slave richiede dei dati al master e il master invia i dati richiesti al client che li ha richiesti (non a tutti).

Perche non modbus TCP e shield ethernet?

Logged

"Cosi non si va avanti..." disse il gambero

Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie! (forse) ho capito! è esattamente quello che avevo in mente...

Perche non modbus TCP e shield ethernet?
oltre a una ovvia questione di costi vedi ethernet shield vs 75176 quali vantaggi avrei in + ?
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 166
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Chiedo scusa fin da ora per la banalità della domanda ma vorrei  capire alcune cose.
Analizzando l'esempio SimpleModbusSlaveExample:

Code:
modbus_configure(9600, 1, 2, TOTAL_REGS_SIZE);
9600 = velocità
1= indirizzo dispositivo da 1 a 127 (mio pensiero lo 0 = master?)
2=  pin numero due (int0 o quarto pin fisico) connessi a re -de del max485 (posso usare qualsiasi digital pin?)
ma Rx e Tx sono sempre fissi o li posso modificare?

TOTAL_REGS_SIZE = array dei dati

Grazie per la pazienza
Luca
Logged

Firenze
Offline Offline
Jr. Member
**
Karma: 1
Posts: 65
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie! (forse) ho capito! è esattamente quello che avevo in mente...

Perche non modbus TCP e shield ethernet?
oltre a una ovvia questione di costi vedi ethernet shield vs 75176 quali vantaggi avrei in + ?

- la diagnostica (sniffing con wireshark)
- simulatori (sia master che slave) se ne trovano tanti in internet
- integrazione su una eventuale rete esistente
- l'alimentazione da poe
Logged

"Cosi non si va avanti..." disse il gambero

Pages: [1] 2   Go Up
Jump to: