Vai al contenuto
PLC Forum


Errori di comunicazione del bus (Modbus RTU)


DickMorley

Messaggi consigliati

Buongiorno a tutti,

sto' realizzando un'applicazione dove sono presenti alcuni dispositivi che comunicano in modbus RTU con un PLC ( M340); nello specifico 4 VSD ( altivar 312) ed 1 termoregolatore (Ascon KT1). Il plc M340 e' il master, i VSD slave 1,2,3,4 e il regolatore Slave 5; parametri di comunicazione :19,2 kbaud modbus RTU 8 n 1.

Il problema riscontrato e' che quando viene connesso il termoregolatore al bus non comunica con il master e va in errore. Dopo aver verificato la correttezza dei parametri di comunicazione (indirizzi, velocità , parità ecc.),  delle connessioni elettriche ( resistenze di terminazione, cavi ecc.) , delle istruzioni di lettura/ scrittura e degli indirizzi a cui puntare ho eseguito qualche test  "per esclusione" e sono arrivato ai seguenti risultati:

1- PLC + regolatore : comunicazione ok, nessun errore. Operazioni di R/W : ok

2- PLC + 1VSD : comunicazione ok, nessun errore. Operazioni di R/W : ok

3 - PLC + 4VSD : comunicazione ok, nessun errore. Operazioni di R/W : ok

4- PLC + 1VSD + regolatore : mancata risposta dello slave ( regolatore), errore di comunicazione sul bus, VSD funziona correttamente.

5- PLC + 4VSD + regolatore : mancata risposta dello slave ( regolatore), errore di comunicazione sul bus, 4 VSD funzionano correttamente.

Per le connessioni dei dispositivi al bus utilizzo un "hub modbus LUGC9" e la linea del regolatore e' lunga ca 15 mt, mentre le altre dai 50 cm ad 1 metro max.

E' possibile che questo introduca un ritardo eccessivo tra i frame ( ad esempio superiore a 3,5 volte il tempo di un carattere) e che il messaggio venga interpretato come concluso, quando invece non lo è, con il conseguente errore di CRC?

( ho eseguito i test sopra riportati a velocità di comunicazione diverse, ma con gli stessi risultati)

Per il momento l'unica cosa che mi viene in mente, avendo rilevato un errore di trasmissione, e' un errata interpretazione del CRC16, ma eventualmente non saprei come approcciare la risoluzione di un problema di questo tipo.

Qualcuno di voi ha avuto un problema simile o ha idea di quale potrebbe essere la causa che manda in errore lo slave quando connesso insieme agli altri sul bus?

Vi ringrazio anticipatamente per eventuali suggerimenti. 

 

 

 

Link al commento
Condividi su altri siti


Ciao **Morley.

Hai attivato solo letture o letture e scritture verso gli slaves ?

Gli ordini di comunicazione verso gli slaves con quale cadenza vengono richiamati ?

Hai provato a "pollare"  più lentamente ad es. esegui una interrogazione (lettura) ogni 500ms cioè leggi dai 5 slaves in 2,5s .

Se hai problemi anche così è possibile che il problema sia di tipo elettrico (impedenze dei cavi, connessione con l'Hub .....).

 

bigalex :blink:

 

Link al commento
Condividi su altri siti

Nicola Carlotto

gli slave modbus rispondono solo se sono interrogati , non e' che stai interrogando il termoregolatore e un inverter simultaneamente o con pochissimo tempo tra loro

rischiando di sovrapporre la loro risposta rendendola non interpretabile dal master ?

Hai verificato l'alimentazione del master quando si crea il problema ?

Nicola

Link al commento
Condividi su altri siti

Vengono inviate richieste di lettura e di scrittura ad ogni slave. Il polling viene fatto incrementando una variabile ogni volta che un'operazione di R/W e' conclusa correttamente ( utilizzo il bit di attività dell'istruzione read var/ write var) . Quando lo slave non risponde ho impostato un timeout che fa andare avanti il polling. Ogni operazione e' associata ad un numero e viene eseguita solo quando la variabile di polling corrisponde a quel numero.

Esempio:

quando la variabile di polling=1 leggo da Slave 1.

operazione conclusa correttamente, incremento di 1.

polling=2 scrivo su slave 1.

operazione conclusa correttamente, incremento di 1.

polling=3 leggo su slave 2.

operazione conclusa correttamente, incremento di 1.

polling=4 scrivo su slave 2.

......e così via in un loop infinito. 

Quando arriva il turno del regolatore, si nota come la variabile di polling si fermi (normalmente è velocissima) per riprendere allo scadere del timeout impostato.

Andando a controllare il debug della seriale si vede come in quell'istante vengano incrementati i contatori di "mancata risposta dello slave" e di "errore di comunicazione bus".

Ho provato anche ad eseguire il polling a tempo fisso, ogni 200ms, ma è uguale.:wallbash::wallbash::wallbash::wallbash::wallbash::wallbash::wallbash::wallbash::wallbash:

Quote
 
Hai verificato l'alimentazione del master quando si crea il problema ?

Cosa intendi Nicola? ... Una misura di tensione ai morsetti della seriale del master?... Non mi è chiaro, relativamente al mio problema, cosa possa stabilire misurando la tensione.

Grazie a tutti per l'interesse.

Link al commento
Condividi su altri siti

In modbus specialmente in seriale è maggiormente indicato eseguire la scrittura verso gli slaves solo ad evento e cioè solo quando c'è necessità di scrivere.

E' inutile impegnare la linea di comunicazione andando a scrivere sempre gli stessi dati.

Quindi :

- lettura ciclica dagli slaves ;

- interruzione della lettura al termine dell'ultima richiesta di lettura se è necessaria la scrittura ;

- scrittura verso lo slave che necessita di essere scritto ;

- riavviamento lettura ciclica .

Prova a fare quanto sopra ed aumenta il tempo di polling a 500ms , 200ms possono anche essere pochi in  questa configurazione.

Inoltre quanti registri leggi e scrivi con gli slaves ?

 

bigalex :blink:

 

Link al commento
Condividi su altri siti

Ok,domani proverò anche questa!!! :)...dopo mi rimane solo far fare la medicina contro il malocchio al PLC!!!!:superlol:  

Comunque una prova simile l'ho già fatta ; ho eliminato tutte le istruzioni in scrittura e lasciato solo le richieste di lettura x 2 slave ( vsd e regolatore) con polling a tempo fisso( 200ms), ma niente. Invece con solo vsd tutto ok.

E' il regolatore che crea problemi sul bus.

Per quanto riguarda i dati scambiati, ho ridotto al minimo indispensabile.

Dal regolatore leggo 3 word e ne scrivo 1, dai VSD ne leggo 10 e ne scrivo 1.

Domani ti faccio sapere. Grazie;)

 

P.S.: un'altra prova che vorrei fare, più che continuare ad andare a tentativi,  e' utilizzare il Pc come master, con un software di analisi del protocollo x vedere cosa succede. Ti capita di utilizzare qualcosa di simile? Sai consigliarmi qualcosa ?

Link al commento
Condividi su altri siti

Io di solito provo la comunicazione prima con il PC ed un software che emula un master modbus (con opportuno adattatore RS232-RS485). Il nome di questo programma è ModSim ma ce ne sono altri con funzionamento similare.

Poi se tutto fila liscio inserisco il plc e ne verifico la funzionalità.

Stai andando con 2 fili (half-duplex) ?

Lato termoregolatore prova a staccare il filo di massa del cavo di comunicazione , a volte la massa del cavo di comunicazione mi ha creato problemi.

Come settaggi standard utilizzo 19200 baud - 8 bit dato - 1 bit di stop - parità pari.

Prova a verificare se nel termoregolatore è possibile modificare il tempo di risposta.

 

bigalex :blink:

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...