Skip to content

Latest commit

 

History

History
120 lines (93 loc) · 11.5 KB

log14185.md

File metadata and controls

120 lines (93 loc) · 11.5 KB

HS ModbusTCP Writer

Dieser GIRA Homeserver Logikbaustein schreibt mittels Modbus TCP Werte in die Register der Geräte wie Wärmepumpen, Wallboxen, etc. Alle Mehrbit-Typen werden in HoldingRegister geschrieben. Hierbei wird für kleine Bit-Breiten automatisch FC06 verwendet. Für Multi-Byte Repräsentationen wird FC16 benutzt. Der Typ bool wird in ein coil-Register geschrieben ( FC05). (Falls das Gerät immer FC16 verwenden möchte, so bitte unter "Special Options" nachlesen!) Andere Typen gibt es beim Schreiben nicht. (Input- und Discrete Register kann man bei Modbus nicht beschreiben)

Unterstützt wird HS Firmware 4.12 - es könnte ab 4.7 funktionieren. Vorher / Älter wird es definitiv NICHT klappen!

Eingänge

Nummer Datentyp Default Beschreibung
1 Text 127.0.0.1 Die IP-Adresse für den Wechselrichter. Hostname aktuell nicht implementiert.
2 Zahl 502 Der TCP-Port für Modbus.
3 Zahl 1 Die Modbus Unit ID.
4 Zahl 0 Keep Alive aktivieren / deaktivieren. 1:an, 0:aus - Hilft, falls die Modbus-Schnittstelle die Anzahl der gleichzeitigen Zugriffe (pro IP) limitiert hat.
5 Zahl 0 Word Order bei Multi-Byte Elementen. Per default: LittleEndian. (0: LittleEndian, 1: BigEndian)
6 Zahl 1 Byte Order bei Multi-Byte Elementen. Per default: BigEndian. (0: LittleEndian, 1: BigEndian)
7 Zahl 0 Debug Modus aktiv (ACHTUNG: Bei Fehlern bricht der Baustein sofort ab. Produktion: auf 0 setzen!)
8 Zahl -1 Register 1: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert.
9 Text uint16 Register 1: Datentyp des Registers
10 Zahl 0 Register 1: Nummerischer Wert, der in das Register geschrieben werden soll
12 Text - Register 1: Text, der in das Register geschrieben werden soll (nur bei Type 'string')
13 Zahl -1 Register 2: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert.
13 Text uint16 Register 2: Datentyp des Registers
14 Zahl 0 Register 2: Nummerischer Wert, der in das Register geschrieben werden soll
15 Text - Register 2: Text, der in das Register geschrieben werden soll (nur bei Type 'string')
16 Zahl -1 Register 3: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert.
17 Text uint16 Register 3: Datentyp des Registers
18 Zahl 0 Register 3: Nummerischer Wert, der in das Register geschrieben werden soll
19 Text - Register 3: Text, der in das Register geschrieben werden soll (nur bei Type 'string')
20 Zahl -1 Register 4: Modbus-Register in dezimal Darstellung. -1: Abfrage wird deaktiviert.
21 Text uint16 Register 4: Datentyp des Registers
22 Zahl 0 Register 4: Nummerischer Wert, der in das Register geschrieben werden soll
23 Text - Register 4: Text, der in das Register geschrieben werden soll (nur bei Type 'string')

Änderungen von Eingängen die keine Werte darstellen werden beim nächsten Wert berücksichtigt - führen aber NICHT zu einem neu-senden der bestehenden Werte.

Ausgänge

Alle Ausgänge senden bei jedem Abruf den entsprechenden Wert -- unabhängig davon, ob dieser sich geändert hat oder nicht. Der Datentyp des KO, das mit dem Ausgang verbunden wird hängt vom Modbus-Register ab: Je nach Länge machen auch nur größere Genauigkeiten beim KO Sinn.

Nummer Beschreibung
1 Counter der erfolgreichen Schreibzugriffe insgesamt (muss verbunden werden. Kann ein internes Dummy-Objekt sein!)
2 Counter für fehlerhafte Schreibzugriffe insgesamt (Fehler werden nur ausgegeben (und ggf. dann abgebrochen) im Debug-Modus!)

Datentypen

Folgende Datentypen werden unterstützt. Unbekannte Typen werden übersprungen!

Typ Register-Anzahl Mehrbit Beschreibung
int8 1 Ja Vorzeichenbehafteten Wert aus: -128 - 127
uint8 1 Ja Vorzeichenlosen Wert aus: 0 - 255
int16 1 Ja Vorzeichenbehafteten Wert aus: -32.768 - 32.767
uint16 1 Ja Vorzeichenlosen Wert aus: 0 - 65.535
int32 2 Ja Vorzeichenbehafteten Wert aus: −2.147.483.648 - 2.147.483.647
uint32 2 Ja Vorzeichenlosen Wert aus: 0 - 4.294.967.295
int64 4 Ja Vorzeichenbehafteten Wert aus: −9.223.372.036.854.775.808 - 9.223.372.036.854.775.808
uint64 4 Ja Vorzeichenlosen Wert aus: 0 - 18.446.744.073.709.551.615
float32 2 Ja Gleitkommazahl mit einfacher Genauigkeit
float64 4 Ja Gleitkommazahl mit doppelter Genauigkeit
string n Ja ASCII-Text, Länge bestimmt Register
bool 1 Nein Boolean, der in ein coil-Register geschrieben wird (bei Input Registern bitte ein uint verwenden!)

Regulär werden alle typen in kleiner Schreibweise angegeben. Ab der Version 1.2 ist auch INT16 möglich.

Special Options

In der Regel wird bei Modbus bei alle Mehrbit-Register unterschieden, ob man ein Register schreibt oder nur eins. Eins wird mit Functioncode 06 (FC6) geschrieben, hingegen werden mehrere Register mit FC16 angewiesen. Manche Geräte weichen davon ab und wollen, dass auch einzelne Register mit Functioncode 16 geschrieben werden. Hierzu kann man diese Unterscheidung bei einzelnen Registern deaktivieren:

int16;fc16

Der umgekehrte Weg funktioniert nicht: int32;fc6 -- eine solche Verwendung bei Geräten wurde bisher auch noch nicht gesehen. Eine Angabe von fc16 bei Multi-Registern schadet nicht, führt aber zu keiner Funktionsveränderung! (int32;fc16)

Debug-Mode

Nur wenn Debug-Eingang gesetzt wurde - zur Vermeidung von Kollisionen bei mehrfacher Verwendung von Write-Bausteinen. Anders ausgedrückt: Nur einen Writer-Baustein in Debug setzen!

Der Logikbaustein zeigt auch die RAW-Werte und weitere interne Werte im Debug-Fenster des Homeservers an. Dort sind auch die letzten Fehler einzusehen:

  1. Homeserver hslist aufrufen: https://[HS IP]/hslist
  2. Listenschlüssel: debug, Username und Passwort von einem admin-User eingeben.
  3. Unter HSL2.0 oder hs_modbusTCP_writer14185 die Fehler suchen oder die Werte überprüfen.

Wichtig: Im Falle eines Fehlers wird der Fehler unter Debug oder HSL2.0 mist Stacktrace ausgegeben. Der HS muss dann neugestartet werden. Für den produktiven Einsatz sollte Debug daher abgschaltet werden: Der Baustein versucht dann von Fehlern selbst zu recovern.

Haftung / Gewährleistung

Es wird weder eine Haftung noch eine Gewährleistung übernommen. Für den Betrieb ist der Anlagenbetreiber bzw. Integrator verantwortlich.

Sourcecode / Weiterführende Doku

  • Der Sourcecode ist auf Github zu finden: hs_modbusTCP_writer
  • Der Baustein wird im KNX-Forum diskutiert: Forum
  • Download des Bausteins übers KNX-Forum möglich.

Lizenz & Faire Nutzung

  • Der Baustein wird unter der LGPL 2.1 frei für die private Nutzung zur Verfügung gestellt.
  • Die Nutzung des Logikbausteins ist für Endverbraucher frei, wenn sie diese selbst und selbstständig in Betrieb nehmen und konfigurieren. - Integratoren haben eine angemessene Aufwandsentschädigung zu leisten. Diese kann beim Autoren angefragt werden.
  • Freie Software heißt nicht freie Wartung & Support und geschieht auf freiwilliger Basis
  • Es wird keine Gewährleistung noch Haftung für Schäden aus der Nutzung des Bausteins übernommen
  • Er enthält folgende weiteren Libraries und Lizenzen