[[protocollo_danbus]]

Protocollo DanBus

DanBus è il protocollo di comunicazione usato nelle reti con i nodi della serie DL485x. Con DanBus si possono collegare fino a 63 schede DL485x per distribuire gli I/O di un sistema domotico per il controllo della casa ma anche per altri usi come la gestione di serre, cantine, latterie…

I nodi sono paritari e inviano a turno i loro pacchetti dati sulla rete, senza stallo, questi dati sono a disposizione di tutti i nodi connessi ed eventualmente anche ad un eventuale sistema generale di controllo quale Domoticz e/o altri sistemi domotici.

A rotazione ciascun nodo, se acceso e connesso, invia il suo pacchetto dati nel BUS, quando invece un nodo è spento, scollegato oppure occupato, non si inserirà in rete quando è il suo turno e il giro proseguirà con il successivo nodo pronto a trasmettere.

Se un nodo non ha informazioni da inviare si limita ad inviare un brevissimo pacchetto di ping.

Ciascun nodo può abbandonare la rete anche durante la trasmissione di un suo pacchetto, in questo caso i nodi restanti rileveranno un errore di pacchetto errato poi continueranno normalmente le comunicazioni.

Ci sono 2 tipi di pacchetto:

  • pacchetto PING (quando non ci sono informazioni da inviare in rete o richieste a cui rispondere)
  • pacchetto INFO (con informazioni)
  • ID Mittente
  • CRC con flag di fine pacchetto

I pacchetti che vengono trasmessi per la comunicazione dei dati hanno una lunghezza variabile.

Composizione:

  • ID Mittente
  • Tipo Pacchetto
  • ID destinatario (da 1 a 63)
  • Dati (opzionali, anche 0 byte)
  • CRC con flag di fine pacchetto
  • CRC aggiunto inviato come dato

Il secondo byte della trama indica il tipo di pacchetto trasmesso dal nodo. I comandi più utilizzati sono i seguenti:

  • 0x0E - - Comunica IO, quando periodicamente (a seconda dell'impostazione), o in seguito ad un evento, un nodo invia in rete il valore dell'I/O e/o dei vari sensori I2C e/o OneWire
  • 0x07 - Comando per richiedere a un nodo il valore di un suo ingresso
  • 0x08 - Comando per settare in un nodo il valore di una sua uscita
  • 0x0B - Comando di reboot per una specifica scheda (il comando diventa broadcast nel caso in cui l'ID di destinazione sia 0)
  • 0x0A - Comando di Inizializza IO con valore impostato su EEPROM, utile per rileggere la configurazione dopo averla cambiata
  • 0x03 - Comando di lettura configurazione dell'I/O presente su EEPROM
  • 0x04 - Comando di lettura della EEPROM (si deve dare l'indirizzo di partenza e il numero di byte da leggere)
  • 0x06 - Comando di scrttura della EEPROM (si deve dare l'indirizzo di partenza e il numero di byte da scrivere)
  • 0x0C - Comando di lettura del tipo di board e della versione del firmware
  • 0x0D - Comunicazione di un pacchetto con descrizione errore

Ciascun nodo effettua un controllo di correttezza dei pacchetti ricevuti e/o la fattibilità dei comandi ricevuti e può rilevare diversi casi di errore componendo di conseguenza un messaggio di errore che invierà in rete quando sarà il suo turno, il pacchetto inviato sarà composto come un pacchetto INFO in cui il byte tipo (secondo byte della trama) sarà 0x0D a cui seguirà un byte come da lista seguente e contenente il tipo di problema rilevato:

  • 0x00 - Errore inizializzazione / timeout I2C
  • 0x01 - Errore 3 zeri consecutivi in posizione non ammessa nei pacchetti
  • 0x02 - Errore 3 uni consecutivi in posizione non ammessa nei pacchetti
  • 0x03 - Errore CRC
  • 0x04 - Ricevuto pacchetto nullo
  • 0x05 - Indirizzo mittente fuori range
  • 0x06 - Manca indirizzo destinatario
  • 0x07 - Manca parametri
  • 0x08 - Troppi Byte pacchetto
  • 0x09 - Manca parametri
  • 0x0A - I2C occupata
  • 0x0B - Manca Byte con bit residui
  • 0x0C - Troppi Byte dati
  • 0x0D - Errore comando a zero parametri
  • 0x0E - Errore comando a 1 parametro sconosciuto
  • 0x0F - Errore comando a 2 parametri sconosciuto
  • 0x10 - Errore comando a 3 parametri sconosciuto
  • 0x11 - Errore comando a 4 parametri sconosciuto
  • 0x12 - Errore comando n parametri non previsto
  • 0x13 - Pacchetto ricevuto troppo lungo
  • 0x14 - I2C occupata
  • 0x15 - I2C Timeout
  • 0x16 - OneWire Occupata
  • 0x17 - Indirizzo ricevuto uguale a se stesso
  • 0x18 - OneWire Occupata
  • 0x19 - Lettura numero ingresso fuori range
  • 0x1A - Dimensione pacchetto non conforme
  • 0x1B - Lettura EE oltre limite indirizzo
  • 0x1C - Scrittura numero uscita fuori range
  • 0x1D - Numero parametro fuori range
  • 0x1E - Nodo occupato da ordine precedente
  • 0x1F - Accesso a EEPROM sotto lo spazio I/O
  • 0x20 - Errore secondo CRC
  • 0x21 - OneWire timeout
  • GENERAL_NET:
  • GENERAL_BOARD:
  • board_enable: Abilitazione BOARD
  • board_type: Tipo di Board utilizzata
  • default_startup_value: Valore logico uscita allo startup
  • description: Descrizione dettagliata dell'IO
  • device_address: Indirizzo dei sensori I2C o numero seriale OneWire DS18B20
  • device_type: Tipo di dispositivo che si vuole associare all'IO
  • direction: Direzione dell'IO: Input / Output
  • dtype: Tipo dispositivo da assegnare a Domoticz
  • enable: Abilitazione Board e IO
  • filter: Filtro anti rimbalzi da utilizzare sugli ingressi
  • fisic_io: indirizzo fisico degli IO del Micro (standard Arduino)
  • type_io: Tipo IO (non usare perché già definito su device_type)
  • inverted: Inversione logica dell'IO
  • kadd: Valore di offset per grandezze analogiche secondo la formula: valore=(misura*kmul)+kadd
  • kmul: Valore di moltiplicazione per grandezze analogiche secondo la formula: valore=(misura*kmul)+kadd
  • logic_io: IO logico identificativo degli IO e univoco per ogni BOARD
  • n_refresh_off: Numero di comunicazioni su BUS al variare di un ingresso digitale da ON a OFF
  • n_refresh_on: Numero di comunicazioni su BUS al variare di un ingresso digitale da OFF a ON
  • name: Nome sintetico dell'IO
  • offset_altitude: Offset altitudine per sensori di pressione e psychrometer
  • offset_pression: Offset pressione
  • offset_temperature: Offset temperatura
  • pullup: Aggiunge Pullup interno del micro all'ingresso digitale (già definito all'interno di device_type)
  • plc_time_unit: Impostazione dell'unità di tempo del contatore: 1→1 secondo - 2.5→2.5 secondi - 0.1→0.1 secondi - 0.01→0.01 secondi

212 person(s) visited this page until now.

Potresti lasciare un commento se ti fossi autenticato.
  • protocollo_danbus.txt
  • Ultima modifica: 09/08/2019 17:58
  • (modifica esterna)