Aggiornamento delle impostazioni sul dispositivo con sistemi embedded con comunicazioni non affidabili

1

Sto scrivendo un programma GUI JavaFX per la configurazione utente di un dispositivo di sistemi embedded. Il dispositivo sarà collegato tramite una connessione seriale cablata o wireless che non è affidabile al 100%. Pertanto, quando l'utente apporta modifiche alle impostazioni nella GUI, il programma invia un messaggio al dispositivo, quindi deve verificare che siano impostati.

La mia domanda è quali strutture del programma sono utili per questo scopo. Il mio approccio attuale è

  • Una classe chiamata Sync che contiene due variabili correlate alla particolare impostazione. Uno è legato all'impostazione come appare nella GUI e un'altra all'impostazione così come è stata ricevuta dal dispositivo.

  • Una proprietà in Sync che descrive se le due impostazioni sono uguali, se il dispositivo sta impostando è più recente o se l'impostazione della GUI è più recente. Le decorazioni sul campo si legano quindi a questa impostazione.

  • Un pulsante chiamato set che invia un messaggio impostato al dispositivo

  • Un ciclo che esegue continuamente il polling del dispositivo per le sue impostazioni (che sono memorizzate nella classe Sync). I decoratori danno quindi un feedback all'utente se le impostazioni sono state sincronizzate.

Mi piacerebbe fare qualcosa di un po 'più elegante dove la classe Sync si occupa di inviare messaggi e verificare se le impostazioni sono state impostate.

Alcune domande specifiche:

  • Devo rimuovere il pulsante "set" e far sì che la classe Sync aggiorni il dispositivo ogni volta che ha impostazioni valide?

  • Una decorazione è sufficiente per indicare se l'impostazione è stata impostata o meno? Sarebbe meglio una finestra di dialogo?

Alcune domande generali:

  • Esiste un approccio migliore a questo problema?

  • Ci sono classi comuni che potrebbero essere utili?

  • Altri progetti alternativi?

Modifica:

Un vincolo: mi piacerebbe mantenere il dispositivo il più stupido possibile. Ho implementato protocolli personalizzati con CRC, ack / nack, tentativi, buffer dei messaggi, ecc. Prima, anche se tra due sistemi embedded. Il software verrà modificato per diversi progetti Arduino per principianti e voglio mantenere la maggior parte della logica (anche la validazione) sul lato GUI.

    
posta geometrikal 10.08.2014 - 06:46
fonte

1 risposta

1

Il solito approccio per comunicare su un protocollo che può introdurre errori nei messaggi o trascinare messaggi del tutto implica

  • Aggiunta di checksum ai messaggi per consentire all'input ricevuto di verificare l'integrità del messaggio
  • L'invio di messaggi di riconoscimento positivi o negativi per informare il mittente che un messaggio è stato rispettivamente ricevuto o è stato perso. Il riconoscimento positivo è solitamente più facile da implementare.
  • Un meccanismo per riprovare i messaggi che non sono stati confermati entro un tempo ragionevole.

Con queste funzionalità nel protocollo di comunicazione, i componenti di livello superiore su entrambi i lati possono considerare affidabile la comunicazione e non devono prendere misure speciali per garantire che il messaggio sia stato ricevuto.

    
risposta data 10.08.2014 - 08:42
fonte

Leggi altre domande sui tag