ModBus TCP Interface

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Hattermann
Beiträge: 128
Registriert: 14.12.2015, 19:58
Danksagung erhalten: 4 Mal

Re: ModBus TCP Interface

Beitrag von Hattermann » 29.03.2024, 19:09

Script zum umwandel der Flieskomma Zahlen, einfach per pipe '| focnf.sh' an den TCL-Scriptaufruf hängen (z.B. für Kostal Plenticore).
fconf.sh:

Code: Alles auswählen

#/bin/sh
data=$(cat)
wertl=${data%% *}
werth=${data#* }
Vorzeichen=1
if [ $wertl -lt 0 ]
then
  let "wertl = wertl + 65536"
fi
if [ $werth -lt 0 ]
then
  let "werth = werth + 32768"
  Vorzeichen=-1
fi
let "exponent = werth / 128"
let "werth = werth % 128"
echo "$Vorzeichen*(1+$werth/128+$wertl/65536/128)*2^($exponent-127)" | bc -l
viel Spass Thomas

Balisto
Beiträge: 50
Registriert: 14.03.2016, 08:11
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: ModBus TCP Interface

Beitrag von Balisto » 04.04.2024, 22:13

Guten Abend zusammen,

im Dezimalbereich funktioniert alles super. Jetzt müsste ich aber den PV Überschuss als16bit 2er-Komplement übertragen, ggf auch lesen.
Siehe die Werte Adresse 2201 oder 2010.
Bild_2024-04-04_220933736.png
Jemand eine Lösung wie ich das umwandel in dezimal oder dezimal in ein 16bit 2er komplement?
Google ja findet man genug. Aber das so zu programmieren im tcl oder ein modul in redmatic?

script von indi55 läuft bei mir oder auch über redmatic.

Gruß Thomas

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: ModBus TCP Interface

Beitrag von Henke » 04.04.2024, 22:38

Zeig mal die msg, die in RedMatic ankommt.
Bei den 16bit dürfte das ein Buffer/Array sein.

Code: Alles auswählen

msg.Ueberschuss = msg.xxx.buffer[0] + msg.xxx.buffer[1] * 256;

Balisto
Beiträge: 50
Registriert: 14.03.2016, 08:11
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: ModBus TCP Interface

Beitrag von Balisto » 05.04.2024, 19:57

Hier der Istwert als dezimal. Kommt als 470. Muss halt nur noch in eine Kommazahl. 47,7. Aber das ist hier nicht so wild.

Der Überschuss kommt als undefined zurück.
Bild_2024-04-05_195648535.png

Balisto
Beiträge: 50
Registriert: 14.03.2016, 08:11
Hat sich bedankt: 10 Mal
Danksagung erhalten: 1 Mal

Re: ModBus TCP Interface

Beitrag von Balisto » 09.04.2024, 19:57

Hier mein script zur Übergabe der Überschussleistung an die Warmwasserwärmepumpe (Ochsner genius 333)

Code: Alles auswählen

! Lesen der Systemvariablen
var sysvarname = "WWP_Überschussleistung";
var Wert = dom.GetObject(ID_SYSTEM_VARIABLES).Get(sysvarname).Value();
! ist Systemvariable schon als Zeichenkette sollte es so gehen
! falls Systemvariable  als Zahl angelegt - erst in einen String wandeln - ohne Nachkommastellen = ToString(0).
Wert = Wert.ToString(0);
! zur Kontrolle
WriteLine(Wert);


! **************** Schreiben mit system.Exec ****************
string lGetOut;
string lGetErr;

! Schreiben des Wertes
system.Exec("tclsh /usr/local/addons/modbus/modbus_interface.tcl 192.168.178.181 8899 01 06 2201 "#Wert,&lGetOut,&lGetErr);
In der Variable Wert steht das was ich übertragen will. Als Zeichenkette.
Übergeben will ich hier als Beispiel 600 W Überschussleistung.
Die WWP nimmt wie oben ersichtlich die Überschussleistung nur als 16bit 2er Komplement an. Oder gibt diese auch so wieder zurück.

600 ist im 2er Komplement 11111101 10101000.
Ich vermute das, dass so nicht übertragen wird in dem tcl.
Evtl weiß da einer weiter. hier bin ich mit meinem latain am ende.
Bild_2024-04-09_195453456.png
Gruß Thomas

Benutzeravatar
Henke
Beiträge: 1526
Registriert: 27.06.2022, 20:51
System: CCU
Hat sich bedankt: 141 Mal
Danksagung erhalten: 306 Mal

Re: ModBus TCP Interface

Beitrag von Henke » 09.04.2024, 20:42

Die msg als Code Tag und dir kann geholfen werden.
Nicht msg.payload als Bildschirmcopy.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“