Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Interfacciare OpenHab ad impianto domotico DUEMMEGI tramite ModBus


Messaggi consigliati

Inserita:

Per l'item di tipo String...

String pippo "bla bla bla [%s] bla" {...}

 

nella sitemap dovrebbe andare questo...

Text item=pippo label="[%s]"'


  • Risposte 141
  • Created
  • Ultima risposta

Top Posters In This Topic

  • smoothhands

    73

  • omar1971

    65

  • electricb

    2

  • Ivan Botta

    1

Inserita:

Ciao, buongiorno...

questa mattina avviato il tutto per controllare i dati del fotovoltaico ma brutta notizia, il campo rendimento giornaliero appare - KWh, anzichè 178 Wh..... 

l'unità di misura la modifico ..

Inserita:

Giustamente di giorno il rendimento non è nullo e quindi potrebbe cambiare

anche l'unità di misura (da Wh a kWh).

Quindi la regola che abbiamo usato ieri sera non va più bene perchè è adatta

a valori senza virgola.

 

Tra l'altro immagino che si riproponga il problema degli altri due valori che

sono espressi come 1,87 anzichè 1.87.

 

Ti tocca risolvere ricavando l'espressione come stringa di testo.

Poi magari un modo per convertire la stringa in numero si rimedia con le rules.

 

Inserita:

ciao, scusa ti faccio una domanda:

leggendo la documentazione della comparazione indirizzo modulo/word.. non mi torna qualcosa..

Abbiamo compilato il file config per la sonda di temperatura nel seguente modo:

#TEMPERATURA ESTERNA ID28
modbus:serial.I28.connection=COM2:19200:8:none:1:rtu
modbus:serial.I28.id=1
modbus:serial.I28.start=28
modbus:serial.I28.length=1
modbus:serial.I28.type=holding

quindi la scheda con ID28 risponde correttamente sulla word 28 (ciò è discordante da quanto spiega la documentazione di un videoterminale Profaces serie GP che dovrebbe essere word 29

--

Operazioni su bit
Le operazioni a livello di bit sono quelle di comando dei punti di uscita e di lettura dei punti di ingresso (reali e/o virtuali).
Queste operazioni vengono effettuate quando si posizionano sul videoterminale simboli tipo led e tasti.
L’indirizzo del bit su cui operare è così composto:
iORmmmmmbb
dove:
i è l'indirizzo assegnato alla DFTS
OR indica un'operazione su Word (attenzione: il primo carattere è la lettera O maiuscola e non il numero zero)
mmmmm equivale all’indirizzo (in decimale) della Word sulla quale si vuole operare incrementato di 1
bb è il bit sul quale si vuole operare (compreso tra 0 e 15); in pratica il punto di ingresso/uscita decrementato di 1
Per quanto riguarda l'elenco ed il significato delle Word dell'interfaccia DFTS, fare riferimento alla mappatura RAM
riportata in questa stessa nota applicativa.
Nota: nel caso in cui il videoterminale sia collegato ad una sola DFTS di indirizzo 1, la parte iniziale iOR può essere
sostituita dal numero 4. Il numero di zeri prima dell’indirizzo della word vengono aggiunti automaticamente dal
programma di supporto del videoterminale.
Esempio 1: per comandare il punto 3 del modulo di uscita 2 mediante un tasto sul videoterminale, ed avendo
assegnato all’interfaccia DFTS l’indirizzo 1, si deve specificare il seguente indirizzo:
1OR0025902

Inserita:

Ciao .. ho avuto risposta dalla Duemmegi:

per ingressi utilizzare la funzione 03

per le uscite la funzione 16 (ma questa non la trovo nel binding modbus rtu

Inserita:

Ciao omar1971.

No, dal wiki del binding non risulta ancora implementato.

 

Le soluzioni che mi vengono in mente a questo punto ricadono

tutte sul mettere mano al codice: modificare il binding già pronto

oppure realizzarne uno ex novo dedicato al tuo sistema.

Entrambe non mi sembrano praticabili nel breve periodo.

 

Mi spiace.

 

 

Inserita:

Noooooooo... ora sono proprio nella cacca....

ora che avevo capito qualcosa..... che sfiga........

grazie comunque.... per tutto il tuo prezioso aiuto..

e se nel caso ti venisse un idea... avvisami....

 

 

Inserita:

Sono andato a spulciare i sorgenti del binding.

Questo è la parte di openhab.cfg riferito al modbus:

############################### Modbus Binding ########################################
#
# sets refresh interval to Modbus polling service. 
# Value in milliseconds (optional, defaults to 200)
#modbus:poll=

# connection (mandatory)
#modbus:serial:slave1.connection=

# The data type, can be "coil" "discrete" "holding" "input"
#modbus:serial:slave1.type=

# The slave id (optional, defaults to '1')
#modbus:serial:slave1.id=

# The slave start address (optional, defaults to '0')
#modbus:serial:slave1.start=

# The number of data item to read
# (optional, defaults to '0' - but set it to something meaningful)
#modbus:serial:slave1.length=

# Value type, required for combined registers (details: http://www.simplymodbus.ca/FAQ.htm#Types)
# Can be "bit", "int8", "uint8", "int16", "uint16", "int32", "uint32", "float32"
# (optional, defaults to 'uint16')
#modbus:serial:slave1.valuetype=

 

Tra tutti i parametri ce n'è uno non documentato.

 

# Use write function 16 (optional, defaults to false)
#modbus:writemultipleregisters=true 

 

Il commento l'ho aggiunto io.

In pratica dovresti usare  type=holding e length=1.

In lettura usa la funzione 3 mentre in scrittura con il nuovo parametro la funzione 16.

Questa funzionalità non è stata aggiunta perchè "pare" non riesca a scrivere effettivamente più registri.

Quindi a prescindere utilizzala sempre con un solo registro (da uint16, che poi è quello di default).

 

Fai un tentativo. Può essere che funzioni :P

 

Inserita:

quindi nel cfg dovrei trovare:

modbus:writemultipleregisters=true 

e lo commento (#)

oppure trovo

modbus:writemultipleregisters=false

 

e devo impostare il valore a "true" ?

 

Grazie... se riesco questa sera ci provo...

Inserita:

no... non lo trovi nel file cfg.

Lo devi aggiungere tu nella sezione modbus subito sotto a

#modbus:poll=

 

e devi impostarlo a true.

 

Inserita:

ciao .. in pausa pranzo ho provato velocemente.. senza esito positivo...

poi ho pensato che avrei dovuto modificare anche 

modbus:serial:slave1.valuetype=bit

in

modbus:serial:slave1.valuetype=uint16

delle word di riferimento delle schede di uscita

.. riproverò stasera ...

 

Inserita:
Quote

modificare anche 

modbus:serial:slave1.valuetype=bit

in

modbus:serial:slave1.valuetype=uint16

visto che per default il valuetype è uint16 io proverei a commentare il parametro.

Quindi...

#modbus:serial:slave1.valuetype=uint16

 

Se ricordo bene quando abbiamo provato assieme, una delle scorse sere,

non è servito specificare che il valuetype fosse di tipo coil o bit.

Era poi il tipo di Items e il binding tra le {...} che determinava come interpretare

il registro da 16 bit restituito.

 

Nel caso di Switch Item il registro veniva utilizzato bit per bit.

Nel caso di Number Item il registro veniva preso interamente come valore.

 

Inserita:

Ciao .. penso proprio che il tuo ragionamento sia corretto.. proverò

speriamo in un esito positivo...

Grazie nuovamente per l'impegno

Inserita:

Ciao ... sconsolato ti devo deludere... non funziona

modbus:writemultipleregisters=true

 

#MODULO USCITE ID61
modbus:serial.O61.connection=COM2:19200:8:none:1:rtu
modbus:serial.O61.id=1
modbus:serial.O61.start=317
modbus:serial.O61.length=1
modbus:serial.O61.type=holding
modbus:serial.O61.valuetype=uint16

avvio il tutto e le uscite non comandano nulla.

mettendo: modbus:serial.O61.valuetype=bit visualizzo lo stato delle uscite

 

mi spiace...

Inserita:

se togli valuetype=bit non riesci a vedere lo stato delle uscite?

Mi ricopi anche le definizioni degli items per le uscite?

e anche la parte di sitemap... sempre per le uscite?

Inserita:

Items

/* COMANDO USCITE */
Switch    Comando_Uscita1    "Comando Uscita 1"    <switch>    (Prove)        { modbus="O61:0" }
Switch    Comando_Uscita2    "Comando Uscita 2"    <switch>    (Prove)        { modbus="O61:1" }
Switch    Comando_Uscita3    "Comando Uscita 3"    <switch>    (Prove)        { modbus="O61:2" }
Switch    Comando_Uscita4    "Comando Uscita 4"    <switch>    (Prove)        { modbus="O61:3" }

 

Sitemap

Nella sitemap non ho label dedicato alle uscite ma gli Item di uscita fanno parte del gruppo Prove

 

sitemap duemmegi label="La mia sitemap"
{
        Frame {
        Group item=gFF label="Primo Piano" icon="firstfloor"
        Group item=gGF label="Piano Rialzato" icon="groundfloor"
        Group item=gC label="Piano Terra" icon="cellar"    
        Group item=Outdoor label="Giardino" icon="garden" 
        Group item=Prove label="Prove" icon="keyring" 
        Group item=Statobus label="Stato Impianto BUS" icon="keyring" 
        Group item=dfcc label="Controllo carichi" icon="keyring" 
            }

 

Vorrei inoltrarti la documentazione che mi ha inviato per mail la DUEMMEGI ma supera la dimensione accettata, dovrei inviarti una mail

  • 3 years later...
Inserita:

Ciao a tutti, mi riallaccio a questo vecchio post per sapere se nel frattempo è nato qualcosa di standard per parlare con duemmegi o se bisogna ancora partire da zero con modbus RTU

Grazie!

Christian

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




×
×
  • Crea nuovo/a...