Pages: 1 [2] 3 4 ... 6   Go Down
Author Topic: 4 Arduino Master Slave in RS485  (Read 9265 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Se immaginiamo un tempo più realistico, per esempio 50ms, torniamo nuovamente a 1,5 secondi per interrogare 30 slaves.

50 ms sono una eternità, il tempo medio per la transazione master/slave è 4-5 ms, il timeout mediamente si imposta tra 10-20 ms ed è una condizione di errore, non il caso standard, pertanto per interrogare 32 slave, con relative risposte, ci metto al massimo 200 ms, ovvero almeno 5 cicli al secondo.
Ti rammento che la velocità di comunicazione sulla RS485 arriva fino a 10 Mbps con linea non più lunga di 10 metri, 1Mbps con linea tra 10 metri e 100 metri, fino a 115200 bps con linea di 1.2km, ovviamente utilizzando il giusto cavo e non il primo cavaccio che troviamo nel cassetto smiley
Logged

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

E poi non è che il master debba terminare tutto il ciclo di interrogazioni quando deve spedire un comando.
Il controllo degli slave sarà fatto nei momenti di idle del sistema. Quando l'utente comanda un'azione, quell'azione deve sospendere il ciclo di idle (test degli slave ed altro) per essere eseguita immediatamente.
IMHO
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il controllo degli slave sarà fatto nei momenti di idle del sistema. Quando l'utente comanda un'azione, quell'azione deve sospendere il ciclo di idle (test degli slave ed altro) per essere eseguita immediatamente.

Diciamo che nel mondo reale solitamente c'è un ciclo continuo di interrogazione degli slave, non necessariamente tutti all'interno dello stesso ciclo, all'interno del quale vengono anche prese tutte le decisioni del caso ed eseguite le operazioni previste.
Quanto dura il ciclo dipende dalle esigenze del processo, in ambito industriale si spazia tranquillamente da qualche secondo a pochi ms, tutto dipende da cosa stai controllando e da quanto lavoro viene svolto localmente dagli slave.
Va da se che in caso di applicazioni time critical si arriva ad utilizzare un bus dedicato ad altissima velocità, 5-10 Mbps, per pochi slave e uno secondario per tutti gli altri in modo da ottimizzare la risposta del sistema.
Logged

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

Ma nel caso appunto di un sistema home-made non penso che bloccare il ciclo di interrogazioni per 1/2 secondi porti a chissà quali catastrofi  smiley-wink
Logged


Messina
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma nel caso appunto di un sistema home-made non penso che bloccare il ciclo di interrogazioni per 1/2 secondi porti a chissà quali catastrofi  smiley-wink

Io sinceramente me la ero pensata diversamente...appunto per evitare il tempo di latenza tra comando e reazione, il microcontroller integrato nello slave esegue direttamente il comando in questione inviando solo un feedback al master per informarlo dell'azione seguita, il master praticamente mi deve gestire soltanto l'invio di comandi da remoto ethernet shield e company...e interviene nel caso dell'attivazione del risparmio energetico disattivando le luci e mettendo in condizione gli slave di rispondere allo stato dei sensori PIR per l'accensione delle luci ecc...in pratica gli slave...oltre ad essere slave e quindi gestiti dal master hanno al loro interno un codice che eseguono per conto loro...
Logged

Messina
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ad esempio io utilizzerò uno slave per ogni stanza...in caso di attivazione manuale mi sembra inutile far partire il comando dalla stanza verso il master per poi restituire il comando di accensione...quindi esegue direttamente l'operazione ed informa il master di ciò che ha eseguito.
Logged

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

Senz'altro per una installazione nella propria casa chi meglio di te può sapere le tue esigenze?
Logged


Messina
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Senz'altro per una installazione nella propria casa chi meglio di te può sapere le tue esigenze?

Certo...questo è ovvio...il mio problema reale è la comunicazione seriale...che, parlandoci chiaro, non riesco a comprendere in nessun modo...se il tizio del sito avesse messo i commenti a fianco alle righe di codice spiegando che fa e a che serve quella stringa a quest'ora avrei finito...vorrei trovare un metodo molto più semplice per creare il protocollo ma non si trova nulla su internet...di comprensibile ho trovato solo qualche cosa qui sul forum, ma purtroppo non adatto alle mie esigenze...
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9185
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

..vorrei trovare un metodo molto più semplice per creare il protocollo ma non si trova nulla su internet...di comprensibile ho trovato solo qualche cosa qui sul forum, ma purtroppo non adatto alle mie esigenze...

Lascia perdere il protocollo fai dai da te, serve molta competenza ed esperienza per realizzarlo, usa modbus RTU che trovi pronto all'uso per Arduino https://sites.google.com/site/jpmzometa/arduino-mbrt
Logged

Messina
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi sa che è molto meglio...grazie...avevo trovato anche questo: http://www.gammon.com.au/forum/?id=11428
Logged

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

Senz'altro per una installazione nella propria casa chi meglio di te può sapere le tue esigenze?

Certo...questo è ovvio...il mio problema reale è la comunicazione seriale...che, parlandoci chiaro, non riesco a comprendere in nessun modo...se il tizio del sito avesse messo i commenti a fianco alle righe di codice spiegando che fa e a che serve quella stringa a quest'ora avrei finito...vorrei trovare un metodo molto più semplice per creare il protocollo ma non si trova nulla su internet...di comprensibile ho trovato solo qualche cosa qui sul forum, ma purtroppo non adatto alle mie esigenze...
Mi pareva di averti accennato alla sezione Serial sul Reference.
Se non ti ho già messo il link, te lo metto ora:
http://arduino.cc/en/Reference/Serial

Qui ci trovi tutto quello che devi studiarti sulla comunicazione seriale. Una volta che hai capito a che serve un Serial.available() o perché un carattere spedito come "a" è diverso da uno spedito come 'a', allora non ti serve più nessun commento nel codice  smiley-wink

Secondo me usare ModBus senza sapere come avvengono le cose è come prendersi un'auto senza sapere qual è il pedale del freno.
Dai un'occhiata ad uno degli sketch di esempio e poi ne riparliamo...  smiley-sweat
Logged


Messina
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

eheheeh...ti dò perfettamente ragione...fare qualcosa senza capire ciò che si fa...non è il massimo...ti ringrazio nuovamente per l'aiuto...domani leggerò la pagina del reference...peccato che sia in inglese...ma arduino non è italiano??? grrrrr... vabbè....
Logged

Offline Offline
Full Member
***
Karma: 2
Posts: 105
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma riuscire a collegare due arduino1 tra loro di cui uno Master e l'altro Slave e riuscire a usarlo in questa maniera :


ARDUINO  MASTER                     ARDUINO  SLAVE 1

Pin 3  Premo Pulsante                           Pin 3  Accendo Led per 2 secondi
Pin 4  Premo Pulsante                           Pin 4  Accendo Led per 2 secondi
Pin 5  Premo Pulsante                           Pin 5  Accendo Led per 2 secondi

.... come affrontare la creazione di un "protocollo" sul bus rs485 per riuscire ad effettuare quello che ho descritto sopra ???

Sembra strano ma veramente sul Web se ne parla poco o pochissimo e in più gli esempi che ci sono su youtube o siti vari non descrivono affatto l'approccio al protocollo e alla famosa "tabella" comandi da creare in byte...

Qualcuno che in parole più spicciole e con qualche esempio concreto di sketch base per iniziare a lavorarci sopra ???

Ringraziando in anticipo i futuri interlocutori vi auguro un buon fine settimana con Arduino....
Logged

Messina
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma riuscire a collegare due arduino1 tra loro di cui uno Master e l'altro Slave e riuscire a usarlo in questa maniera :


ARDUINO  MASTER                     ARDUINO  SLAVE 1

Pin 3  Premo Pulsante                           Pin 3  Accendo Led per 2 secondi
Pin 4  Premo Pulsante                           Pin 4  Accendo Led per 2 secondi
Pin 5  Premo Pulsante                           Pin 5  Accendo Led per 2 secondi

.... come affrontare la creazione di un "protocollo" sul bus rs485 per riuscire ad effettuare quello che ho descritto sopra ???

Sembra strano ma veramente sul Web se ne parla poco o pochissimo e in più gli esempi che ci sono su youtube o siti vari non descrivono affatto l'approccio al protocollo e alla famosa "tabella" comandi da creare in byte...

Qualcuno che in parole più spicciole e con qualche esempio concreto di sketch base per iniziare a lavorarci sopra ???

Ringraziando in anticipo i futuri interlocutori vi auguro un buon fine settimana con Arduino....

Bella domanda Pietro...io è quello che cerco...una dispensa che indichi come fare e il perchè fare una determinata procedura invece di un altra...gli esempi concreti a mio avviso servono ma non tanto... io sono dell'opinione che sarebbe meglio fare da se e confrontare con uno sketch già pronto...per comparare e per vedere eventuali dimenticanze...inoltre non dimentichiamoci che BYTE non è più supportato dalla versione 1.0 dell'IDE in poi...ma bisogna usare il Serial.write...c'è veramente poco in giro sul web....e se non fosse per quei pochi che hanno dedicato il loro tempo per spiegarmi qualcosa, sarei ancora a 0...ma ti dico la verità...che anche avendo letto e riletto e anche con gli aiuti dei ragazzi sul forum ancora non mi reputo in grado di scrivere un protocollo...ma se lo imparo per bene la faccio io una dispensa a disposizione di tutti...qualcuno ci deve pur pensare a farla....nei link che ho postato c'erano alcuni sketch....tu c'hai capito qualcosa?...magari condividiamo per riuscire ad arrivare a qualcosa di concreto...ciaoo
Logged

Battipaglia (SA)
Offline Offline
Jr. Member
**
Karma: 0
Posts: 70
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,

innanzitutto provo a rispondere alla domanda di peppe e pietro. Mi pare giusto dato che mi sono inserito di "prepotenza" nel thread.

Ovviamente la mia risposta potrebbe essere discussa insieme proprio perchè non sono sicuro che l'architettura che ho in mente sia quella corretta.

Come ho già detto, a differenza di peppe, io non immagino una logica di controllo sugli slaves perchè questo mi costringerebbe ad aggiornarne il firmware in caso di modifiche. Preferirei avere una logica centralizzata con gli slaves che fanno solo da sensori/attuatori.

Ciò premesso penso che il sistema dovrebbe funzionare in questo modo.

1 - il master chiede ad ogni slave il suo stato (per esempio lo stato dei pulsanti ad esso collegati oppure l'ultimo valore di temperatura letto)
2 - conoscendo lo stato di uno slave invia un comando ad uno o più slaves (per esempio sullo slave 2 è stato premuto il pulsante 1 e comanda allo slave 3 di chiudere il relè 2 ed allo slave 4 di chiudere il relè 3)

Dal punto di vista del protocollo seriale, pensando a qualcosa di simile a quello indicato all'inizio di questo thread, il master chiede lo stato ad ogni slave inviando un pacchetto con un determinato codice comando (per esempio RichiestaStatoInput = 1). Lo slave risponde con un pacchetto con codice comando RispostaStatoInput = 2. In questo caso deve comunicare un valore e lo fa utilizzando i bytes del pacchetto predisposti per eventuali dati. Il master deve quindi comandare la chiusura dei relè e lo fa inviando al relativo slave un pacchetto con codice comando ImpostaStatoOutput = 3 utilizzando ancora i bytes di dati per comunicare il valore di Stato che vuole impostare.

Ovviamente si tratta solo di una traccia, il protocollo andrebbe approfondito nel dettaglio anche in funzione di quello che si deve implementare.

Ciao.
Vittorio.
Logged

Pages: 1 [2] 3 4 ... 6   Go Up
Jump to: