Souliss, Domotica e IoT basata su Arduino ed Android

legacy:
Cosa intendi per sottoscrizione dei dati ? In che parti hai semplificato modbus?
Nella mia rete ho vari slave modbus che se interrogati accedono ai propri database o ai propri sensori e riportano al master quanto questo chiedo loro. Il tutto sftuttado la single regiser function code e la multi register function code. Ho 4 funzioni per fare tutto.

Con MaCaco ci sono diverse modalità per ricevere e/o inviare i dati, per convenzione indico con N1 il nodo che possiede i dati:

  • Sottoscrizione, il nodo ricevente N2 effettua una richiesta ad N1. Alla richiesta segue una risposta contenente i dati, a questo punto N1 invierà i dati solo se gli stessi varieranno. Il nodo sottoscrittore N2, valuta lo stato di salute del canale (un timer con valore di time-out variabile) ed eventualmente rinnova la sottoscrizione.

  • Polling, il nodo ricevente N2 effettua una richiesta ad N1. Alla richiesta segue una risposta. Per avere i dati periodicamente, il nodo N2 effettua richieste continue.

  • Pushing, il nodo N1 scrive nel nodo N2. L'invio dati può essere gestito da un timer (sconsigliato) o dagli eventi (i dati sono cambiati) a cura dell'utente.

La struttura del protocollo è più semplice, anche se concettualmente identica. Ad esempio, per non mantenere uno stato delle richieste, i functional code di richiesta e risposta sono diversi e legati da un fattore 0x10 (ad esempio 0x05 è la richiesta di sottoscrizione, 0x15 è la risposta) e nell'header del messaggio è contenuto il puntatore all'area dati in cui gli stessi andranno memorizzati quando giunti a destinazione.

Ulteriori semplificazioni:

  • Assenza della gestione errori, se viene richiesto di scrivere dove non consentito o leggere dati non presenti, non viene notificato nulla. Semplicemente il frame viene scartato.
  • Assenza di CRC, il tutto viene affidato ai CRC di livello MAC o IP in base al driver usato.

Tutto il resto è analogo, le richieste sono per gruppi di dati contigui.

Saluti,
Dario.