[[configurazioni_schede]]

Installazione e Configurazione schede DL485 con esempi

Le schede hanno bisogno di una alimentazione (8-24Vcc, consigliato 12..24V) su due fili e altri due fili intrecciati per il bus.

Per semplicità si consiglia di utilizzare un cavo ethernet per collegare tutte le schede presenti nell'impianto. Un doppino collegherà i morsetti A e B del BUS RS485 e un altro doppino porterà l'alimentazione a tutte le schede. Le restanti 2 coppie possono essere usate per portare l'ethernet 10/100Mbit/sec o eventualmente essere collegate in parallelo al doppino di alimentazione per limitare la perdita di tensione dovuta alla distanza (resistenza) del cavo.

Ogni scheda dispone di un pulsante e 2 LED per impostare le configurazioni di base:

  • ID del nodo che dovrà essere univoco per ciascuna scheda (da 1 a 63)
  • Velocità del BUS 485 e seriale RS232
  • Abilitazione echo BUS485 in RS232
  • Reset programmazione I/O e set numero massimo di nodi (board) a 63

Di fabbrica le schede vengono fornite con la seguente configurazione:

  • ID Nodo non impostato, impostazione necessaria
  • Comunicazione su BUS 485 e seriale RS232 a 19200 BAUD
  • Max numero di board sul bus uguale a 10

Come funziona la programmazione tramite pulsante e 2 LED:

  1. Azionando il pulsante a bordo scheda si ha subito l'eco tramite il LED TX
  2. Premendo il pulsante a bordo scheda per circa 2 secondi si entra in modalità programmazione
  3. Il modo programmazione è segnalato dall'accensione del LED RX come descritto sotto
    1. se il LED RX è acceso fisso indica lo stato di programmazione in cui si può immettere la scelta di una voce di menu
    2. se il LED RX trilla velocemente indica lo stato di programmazione in cui si può immettere il valore per la voce scelta
  4. Entrando in modo programmazione il LED RX si accende con luce fissa, rilasciare il pulsante per poi scegliere una voce di menu.
  5. Se non si preme più il pulsante allora dopo circa 3 secondi si esce dalla programmazione altrimenti si sceglie una voce di menu
  6. Premere e rilasciare il tasto un numero di volte corrispondente alla voce (parametro) da impostare o visualizzare
  7. Dopo una breve pausa seguirà un numero di lampi del LED RX pari al valore presente nel parametro selezionato (10=0, 1=1, 2=2, 3=3…9=9)
  8. Finiti i lampeggi il LED RX trillerà velocemente per indicare che eventualmente è possibile impostare un nuovo valore premendo il pulsante il numero di volte corrispondente (10=0, 1=1, 2=2, ecc…), altrimenti aspettare il ritorno del LED RX a luce fissa
  9. Se è stato impostato un nuovo valore il LED RX lo replica con il corrispondente numero di lampi poi ritorna a luce fissa
  10. Con il ritorno a luce fisse del LED RX si puo ripetere la procedura dal punto 6 per visualizzare o impostare un nuovo parametro
  11. Trascorsi circa 3 secondi con il LED RX a luce fissa senza premere il pulsante, si esce dallo stato di programmazione e i due led riprenderanno ad indicare l'attività sul BUS, RX (ricezione) e TX (trasmissione).
  1. Unita ID nodo
  2. Decine ID nodo
  3. Centinaia ID nodo
  4. Velocità bus485 e seriale RS232
    • 1200 BAUD
    • 2400 BAUD
    • 4800 BAUD
    • 9600 BAUD
    • 14400 BAUD
    • 19200 BAUD (default)
    • 28800 BAUD
    • 38400 BAUD
    • 57600 BAUD
    • (10 lampi) 115200 BAUD
  5. Abilitazione echo BUS485 in RS232
  6. comando reset configurazione nodo

L'ID da inserire è composto da 3 cifre: le unità, le decine e centinaia.

  1. Premere il tasto per circa 2 secondi finché si entra in programmazione e il LED RX si accende fisso
  2. Premere il tasto per selezionare il campo da programmare o visualizzare, 1 volta per le unita, 2 volte per le decine, 3 volte per le centinaia, il numero di lampi del LED RX indicherà il valore attualmente in memoria (10 impulsi per il numero 0)
  3. attendere che il LED RX trilli velocemente
  4. Premere tante volte il tasto a seconda del numero da impostare, poi Il LED RX mostrerà con i lampeggi il valore inserito, oppure attendere che il LED RX torni a luce fissa.
  5. Ripetere eventualmente la procedura dal secondo punto oppure aspettare 5 secondi per l'uscita dalla programmazione con memorizzazione delle impostazioni.

Su Github all'indirizzo https://github.com/lucasub/DL485_BUS è possibile prelevare l'ultima versione del software di test da installare su RASPBERRY PI o su altro sistema LINUX.

Installare i seguenti pacchetti tramite linea di comando:

sudo apt update
sudo apt upgrade
sudo apt install git python3 python3-pip python3-serial

Prelevare il software da github tramite il comando:

git clone https://github.com/lucasub/DL485_BUS.git

Verrà creata la cartella DL485_BUS dove all'interno sono presenti i file neccessari:

config.json
dl485.py

dove arduinoserial.py si occuperà di ricevere e inviare i dati dalla seriale

config.json contiene tutta la configurazione dei nodi

dl485.py è la libreria per la gestione del BUS e NODI

PS: a destra del carattere # sono presenti i commenti alle varie voci

La sezione GENERAL_NET al primo livello contiene le informazioni generali del BUS:

"GENERAL_NET": {
    "bus_port": "/dev/ttyUSB0", # Porta seriale Raspberry PI
    "bus_baudrate": 9600, # Velocità per BUS e seriale impostata nel pc (deve corrispondere a quella dei nodi)
    "max_board_address": 24, # Numero massimo di Board presenti sul BUS (deve corrispondere a quella dei nodi)        
    "board_address": 2 # ID assegnato a Raspberry. Deve avere l'ID della scheda collegata alla seriale di Raspberry PI +1 e non devono esserci altri nodi con lo stesso ID
},

Troviamo poi la configurazione generale per ciascuna scheda DL485 (BOARDx) presente nella rete, dove x identifica l'ID della BOARD ed è un numero univoco, in ordine crescente anche non consecutivo col precedente che va impostato anche su ogni BOARD tramite pulsante e LED.

Ogni sezione “BOARDx” va seguita dall'elenco delle impostazioni dei relativi I/O, (esempio per id board numero 3):

"BOARD3": {
    "GENERAL_BOARD": # Configurazione generale della BOARD
    {
        "enable": 1 # Abilitazione della BOARD: 0=disabilitata, 1=abilitata
        "name": "Caldaia", # Nome della BOARD
        "boardtype": 2, # Tipo di Board: Vedi TYPEB
    },

Dopo la sezione “BOARDx” Seguono le configurazioni dei vari I/O:

Esempio di configurazione USCITA

"OUT1": # OUT1 è la stessa voce presente SUL PCB / etichetta e fa riferimento al PIN del micro che si vuole programmare
{
    "enable": 1,
    "io_logic": 7, # Valori interi. IO LOGICO associato a "OUT1" che deve essere UNIVOCO per ciascun IO della stessa BOARD per un MAX di 20 IO logici, questo numero serve ad indentificare numericamente il morsetto in fase di programmazione parametri e funzionamento
    "device_type": "DIGITAL_OUT", // Tipo di I/O
    "default_startup_value": 1, // Stato di partenza iniziale
    "inverted": 1, // Lo stato è invertito
    "time_refresh": 600, // Tempo in decimi di sec. di ripetizione del valore sul BUS
    "n_refresh_on": 1,
    "n_refresh_off": 1,
    "linked_board_id_io_logic": [ // Ingressi che influenzano l'uscita
        "3-3", // Board 3 - Io logico 3
        "3-4" // Board 3 - Io logico 4
    ],
    "linked_proc": "or", // Funzione PLC ** OR **
    "name": "RELE1", // Nome dell'I/O visibile su Domoticz
    "description": "Uscita rele1"  // Descrizione estesa dell'I/O visibile su Domoticz
},

enable

Abilitazione dell'I/O

  • 0: Disabilitato
  • 1: Abilitato

io_logic

Numero univoco e progressivo di ciascun I/O presente nella BOARDx

  • 1…20

Il numero massimo di io_logic disponibili dipende dalle funzionalità della BOARD. Ad esempio, con PLC a bordo, il numero massimo è limitato a 14.

device_type

Tipo di hardware assegnata all'IO. Disponivili i seguenti tipi:

  • DIGITAL_OUT : uscita digitale
  • DIGITAL_IN : ingresso digitale senza pullup
  • DIGITAL_IN_PULLUP : ingresso digitale con pullup interno al micro (circa 33KOhm)
  • TEMP_ATMEGA : sensore temperatura interno al micro ATMEGA
  • DS18B20 : sensore ONEWIRE temperatura DS18B20. È possibile collegare un sensore per ogni I/O senza specificare il numero seriale oppure più sensori specificando i numero seriali tramite il parametro device_address
  • AM2320 : sensore I2C temperatura + umidità + pressione
  • TSL2561 : sensore I2C luminosità
  • VINR1R2 : tensione ingresso (solo su PIN con ingresso analogico). Specificare il valore di rvcc e rgnd in OHM per mostrare il sirultato della tensione misurata
  • VINKMKA : misura di un valore analogico. Specificare kmul (moltiplicazione del valore misurato) e kadd (offset del valore misurato)
  • PSICROMETER : misura dell'umidità relativa tramite 2 sonde di temporatura di cui una con bulbo umido

time_refresh

Tempo in decimi di secondo dopo il quale viene ritrasmesso periodicamente il valore dell'IO sul BUS (rinfresco periodico), utile per comunicare i valori rilevati dei vari sensori

  • 0: Escluso, non c'è mai rinfresco periodico
  • 1…65535: Tempo di rinfresco periodico (decimi di secondo), attenzione valori bassi possono saturare la rete

rvcc

Solo per ingressi del tipo VINR1R2. Valore in OHM della resistenza in ingresso presente sul partitore di tensione

rgnd

Solo per ingressi di tipo VINR1R2. Valore in OHM della resistenza verso massa nel partitore di tensione

name

Nome breve dell'IO che potrà apparire nell'interfaccia del sistema domotico (es. Domoticz)

description

Descrizione estesa dell'IO che potrà apparire nell'interfaccia del sistema domotico (es. Domoticz)

dtype

Nome del dispositivo del sistema domotico. Di seguito i dispositivi disponibili su Domoticz

  • Air Quality
  • Alert
  • Barometer
  • Counter Incremental
  • Current/Ampere
  • Current
  • Custom
  • Distance
  • Gas
  • Humidity
  • Illumination
  • kWh
  • Leaf Wetness
  • Percentage
  • Pressure
  • Rain
  • Selector Switch
  • Soil Moisture
  • Solar Radiation
  • Sound Level
  • Switch: Utilizzato per IO difgitali
  • Temperature: Utilizzato per sensori di temperatura
  • Temp+Hum: Utilizzato per sensori di temperatura e unidità
  • Temp+Hum+Baro: Utilizzato per sensori di temperatura e unidità e pressione
  • Text
  • Usage
  • UV
  • Visibility
  • Voltage: Utilizzato per misurare la tensione tramite ingressi analogici
  • Waterflow
  • Wind
  • Wind+Temp+Chill

n_refresh_on

Numero di trasmissioni nel passaggio da OFF a ON di un I/O digitale

  • 0: Disabilitato
  • 1…7: Numero di trasmissioni dell'evento fronte ON

n_refresh_off

Numero di trasmissioni nel passaggio da ON a OFF di un I/O digitale

  • 0: Disabilitato
  • 1…7: Numero di trasmissioni dell'evento fronte ON

inverted

Inverte lo stato dell'I/O digitale

  • 0: Non invertito
  • 1…7: Invertito

La programmazione del nodo viene scritta sull'EEPROM presente nel microcontrollore

  • 0x0000..0x001F 32 byte riservati al nodo
  • 0x0020..0x003F 32 byte riservati a I/O logico 1
  • 0x0040..0x005F 32 byte riservati a I/O logico 2
  • 0x0060..0x007F 32 byte riservati a I/O logico 3
  • …….
  • 0x0300..0x031F 32 byte riservati a I/O logico 24
  • 0x0320..0x03FF riservati al nodo

Ogni I/O dispone di un'area per il SETUP in EEPROM di 32 Byte e l'indirizzo di partenza decimale di ogni I/O è: 32 * numero I/O.

Es. La configurazione dell'I/O n.5 parte dall'indirizzo in EEPROM di 5 * 32 = 160 decimale

A seguire i seguenti byte di configurazione I/O:

  • Offset 0: n° io fisico associato (vedere tabella IO FISICI)
  • Offset 1: Byte con tipo I/O e varie
    • b0: 0=IN, 1=OUT
    • b1: 0=Digitale / 1=Analogico
    • b2: 1=OneWire
    • b3: 1=I2C
    • b4: riservato al nodo
    • b5: riservato al nodo
    • b6: ENABLE I/O (se zero ignora lettura ingresso)
    • b7: riservato al nodo
  • Offset 2: 8 bit LS per il valore di default delle uscite Analogico/Digitale o PullUP per gli ingressi allo startup
    • b0: Valore di default per l'uscita DIGITALE o Pullup per ingresso DIGITALE
    • b1: Valore di preset per OUT filtro digitale ingresso/uscita allo startup (il contatore viene settato opportunamente)
    • b4..b7: Riservato al nodo, maschera per fare AND nel PWM (solo se direttiva PWMOUT attiva)
  • Offset 3: 2 bit MS di valore di default analogico, (valore di setup per PWM solo se direttiva PWMOUT attiva)
  • Offset 4: rinfreschi rete sui fronti e inversione fisica finale
    • b0…b2: 3 bit 0-7 Numero di ritrasmissioni in caso di variazione fronte ON del segnale
    • b3…b5: 3 bit 0-7 Numero di ritrasmissioni in caso di variazione fronte OFF del segnale
    • b7 1=inversione fisica finale i/o, per scrivere 1 logico si scrive in realta 0 e si leggerà zero ma verrà presentato come 1
  • Offset 5: 8 bit LS di tempo di rinfresco periodico in rete in decimi di secondo
  • Offset 6: 8 bit MS di tempo di rinfresco periodico in rete in decimi di secondo
  • Offset 7: 8 bit Filtro di lettura IN/OUT digitale
  • Offset 8: numero funzione per PLC se opzione attiva, (mettere 0 se non si vuole funzione associata)
  • Offset 9: non usato
  • Offset 10: inizio definizione istruzioni per programma di campionamento periodico per I/O ONEWIRE o I2C che verrà richiamato ed eseguito periodicamente; questo programma rappresenta una serie di istruzioni I/O per 1W o I2C ed ha lo stesso formato dei comandi di lettura e scrittura I/O nei quali però non serve specificare board id e numero I/O. Nel primo byte programma in b0..b3 si indica quanti byte seguenti sono occupati dal programma, (0=programma nullo); se b7=1 si concatena questo programma con il programma seguente, se b6=1 si interpreta il byte opzioni come comando di lettura, se b5=1 si indica che il byte seguente rappresenta in b0..b6 una pausa da fare in decine di microsecondi e se b7=1 indica di concatenare il valore a 7 bit del tempo con il valore a 8 bit seguente, il primo sarà LS e il secondo MS, per un massimo di 327670 us, poi seguiranno i dati per completare il comando di I/O.

Il byte seguente all'ultimo del programma (o alla serie di programmi concatenati) indica l'ingombro del programma di inizializzazione dispositivo che sarà eseguito all'avvio del nodo e sarà composto con le stesse regole degli altri programmi.

Quindi in caso di dispositivi 1W o I2C che non abbiano dei programmi associati bisognerà impostare il valore 0 all'offset 10 per indicare che non c'è programma di campionamento periodico, e valore 0 all'offset 11 per indicare che non c'è programma di inizializzazione

ESTENSIONE DEFINIZIONI SE PLC ATTIVO:

  • offset 8: numero funzione per PLC se opzione attiva, (mettere 0 se non si vuole funzione associata)

poi da offset 31 a scendere si impostano i parametri per le funzioni PLC, questo consente di scrivere i programmi di campionamento periodico per I2C e OneWire a salire e le funzioni di PLC a scendere per uno stesso I/O avendo gli inizi predefiniti in 10 e in 31.

Comandi che le schede possono interpretare quando ricevuto dalla seriale e/o dalla rete

  • 0x01 Non implementato
  • 0x02 Non implementato
  • 0x03 Leggi parametro IO
  • 0x04 L'indirizzo di lettura della EEPROM (formato da 2 BYTE)
  • 0x05 Scrivi parametro IO
  • 0x06 Scrivi EEPROM
  • 0x07 Leggi Ingresso
  • 0x08 Scrivi uscita
  • 0x09 Non implementato
  • 0x0A Init singolo IO
  • 0x0B Reboot
  • 0x0C Get Tipo Board
  • 0x0D Comando errore
  • 0xE Comunica IO
  • 0xF Comunica ACK I2C

164 person(s) visited this page until now.

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