Pages: [1]   Go Down
Author Topic: Richiesta d'aiuto per protocollo ModBus  (Read 1312 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Full Member
***
Karma: 0
Posts: 197
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti, volevo fare una rete composta da 3 o 4 Arduini connessi tra loro in modalità multimaster attraverso l'interfaccia RS485. Ho pensato al modbus ma ho cercato un po' in rete ma mi rimangono dei dubbi:

Credo che questo esempio faccia al caso mio:

http://code.google.com/p/modbusmaster/

ma non ho capito una cosa:

Code:
// instantiate ModbusMaster object as slave ID 2
// defaults to serial port 0 since no port was specified
ModbusMaster node(2);

Questo significa che il nodo su cui sta girando lo sketch è il numero 2 oppure significa che sto effettuando una comunicazione verso il nodo 2 ?

Se "2" è il nodo corrente, come faccio a sapere a chi è indirizzato il comando ?

Se invece "2" è l'indirizzo del destinatario, come faccio ad impostare l'ID del nodo corrente ?

Non dovrebbe essere una cosa del tipo: Sono il nodo 3, questo comando è indirizzato al nodo 5, quest'altro comando è indirizzato al nodo 8 ... ecc ?!?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se i Arduino non sono troppo distanti puoi usare I2C. Per I2C non serve altra hardware ecetto 2 resistenze.
Ciao Uwe
Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 197
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Purtroppo gli arduino sono un po' distanti tra di loro. Il circuito con i max485 l'ho già fatto, Volevo usare il Modbus perchè ho anche scritto un semplice protocollo di comunicazione ma ho dei problemi, se faccio trasmettere un dato dall'arduino 1 all'arduino 2 nessun problema, ma quando tento di far andare i messaggi in entrambe le direzioni i messaggi non arrivano correttamente. Ho usato questa sequenza:

Arduino 1 setta il pin di direzione per trasmettere
Arduino 1 dice ad arduino 2 di settare/resettare un'uscita
Arduino 1 resetta il pin di direzione per ricevere
Arduino 2 riceve il messaggio e setta l'uscita
Arduino 2 setta il pin di direzione per trasmettere
Arduino 2 dice ad arduino 1 che ha ricevuto correttamente il messaggio
Arduino 2 resetta il pin di direzione per ricevere

Invece di settare/resettare le uscite desiderate ne setta/resetta altre, è come se il messaggio non arriva correttamente. Eppure ho anche fatto un sistema per controllare che i dati arrivino correttamente e funziona.

Ho anche provato ad aggiungere dei delay per essere sicuro che i messaggi siano arrivati completamente prima di utilizzarli ma niente !
Logged

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 8
Posts: 2955
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Uwfed ma quando carichi la libreria per usare I2c, non vengono attivate automaticamente le resistenze interne di pullup?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 251
Posts: 21269
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@brainbooster
Non so dirtelo su 2 piedi, ma so dirti che le resistenze dipendono dalla capacitá parasita dei cavi; Metti resistenze anche molto piú basse di quella pull up che sono da 20 a 50kOhm.
Ciao Uwe
« Last Edit: October 10, 2010, 01:37:20 pm by uwefed » Logged

0
Offline Offline
Full Member
***
Karma: 0
Posts: 197
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

No no, forse mi sono espresso male, non ho usato l'I2C ho usato l' RS485 senza nessun protocollo già fatto. Praticamente se il programma è fatto in questo modo, funziona tutto (anche inviando tanti comandi)

Arduino 1 setta il pin di direzione per trasmettere
Arduino 1 dice ad arduino 2 di settare/resettare un'uscita
Arduino 1 resetta il pin di direzione per ricevere
Arduino 2 riceve il messaggio e setta l'uscita

Se invece aggiungo anche la parte dove "Arduino 2" rimanda indietro un messaggio di conferma non funziona:

Arduino 1 setta il pin di direzione per trasmettere
Arduino 1 dice ad arduino 2 di settare/resettare un'uscita
Arduino 1 resetta il pin di direzione per ricevere
Arduino 2 riceve il messaggio e setta l'uscita
+
Arduino 2 setta il pin di direzione per trasmettere
Arduino 2 dice ad arduino 1 che ha ricevuto correttamente il messaggio
Arduino 2 resetta il pin di direzione per ricevere


Per non impazzire ulteriormente avevo pensato di passare a Modbus che è già fatto e lavora già su RS485
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 5
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

AAARRRGHHHHH... io uso gia modbus su arduino ... sia RTU cioe seriale si su ETHernet  va da dio..
Logged

Pages: [1]   Go Up
Jump to: