Domanda

Sto scrivendo un semplice protocollo RS485 multi-drop per le comunicazioni seriali all'interno di un sistema distribuito. Sto usando un modello in cui indirizzabile schiavi dispositivi sono date una finestra di 20ms per rispondere. Il maestro uC sondaggi i dispositivi collegati per gli aggiornamenti e rispondono di conseguenza. Ho impiegato checksum e prendere le precauzioni superamento necessarie per garantire che i dispositivi collegati non risponderà ai messaggi malformati. Questo metodo si è rivelato efficace in circa il 99% delle situazioni, ma ho perso il pacchetto se un nuovo dispositivo viene introdotto nel corso di una sessione di comunicazione. Collegare un nuovo dispositivo "caldo" avrà effetti negativi sul segnale monitorato dai dispositivi slave, anche se solo per un tempo estremamente breve. Sono dalla parte di software di ingegneria, ma come posso attenuare questa situazione senza cercare di ricreare il protocollo TCP? Usiamo un modello di polling perché è veloce e fa bene il lavoro per la nostra applicazione, senza bisogno di funzionalità RTOS. Ho una grande varietà di cicli su ogni CPU, pensare in termini di base.

È stato utile?

Soluzione

L'invio di pacchetti sulla RS485 non è una comunicazione affidabile. Si dovrà gestire la perdita di pacchetti in ogni caso. Naturalmente, non si dovrà reinventare TCP. Ma si dovrà rilevare pacchetti persi tramite il controllo del timeout e numeri di sequenza. Nelle applicazioni semplici questo può essere fatto a livello di applicazione, quello che ti tiene lontani dalla complessità del protocollo TCP. Quando i vostri sondaggi modello scarta tutti i pacchetti con checksum non valido questo potrebbero essere integrate con meno sforzo.

Se si desidera verificare per le collisioni, che possono essere causati da tappi caldi o comportamento anomalo dispositivi ci sono probabilmente alcuni miglioramenti. Alcuni hardware permette di leggere indietro il proprio transmissing. Se si trova una differenza tra i dati inviati e ricevere dati, si può assumere una collisione e ripetere il pacchetto. Ciò richiederà anche una sorta di sequenza di numerazione.

Altri suggerimenti

Forse ho perso qualcosa nella tua domanda, ma non posso solo scrivere il master in modo che se una risposta non è visto da un dispositivo entro i termini previsti, si ri-sondaggi quel dispositivo?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top