Anbindung mittels Modbus an Loxone. Im Beispiel durch einen ModbusTCP Server: Konverter von Ethernet auf Modbus RTU.
Anbindungsmöglichkeiten
In den meisten Fällen wird der Ethernetport des Controllers bereits belegt sein, weil die Fernwärmeanbieter diesen gerne für die Fernauslesung verwenden. Alle deren Werte können aber über Modbus RTU ebenfalls abgefragt werden. Welcher seinerseits bereits mit Loxone kompatibel wäre aber ebenfalls zu Modbus TCP konvertiert und mittels Ethernet weitertransportiert werden kann. Es bieten sich somit folgende beiden Möglichkeiten.
"Danfoss ECL Comfort 210 / 310" → Modbus Extension → Loxone Link → Miniserver.
oder
"Danfoss ECL Comfort 210 / 310" → Modbus TCP Server (Konverter von RTU auf TCP) → Ethernet → Miniserver.
Im nachfolgenden wird letztere Methode beschreiben, große Teile davon sind jedoch auch für die erste Möglichkeit passend.
ModbusTCP Server: Hardware
Da im gegebenen Fall keine Loxone Link Verbindung in den Heizraum vorhanden ist, wurde als Workaround ein ModbusTCP Server verwendet. Der Controller bietet so einen ModbusTCP-Server bereits an. Dieser wird in diesem Fall jedoch von der Fernwärmegegesellschaft bereits zum Auslesen verwendet und kann deshalb nicht verwendet werden. Als Anternative wird deshalb dieser Konverter von Modbus RTU auf ModbusTCP verwendet. Jegliche entsprechende Hardware kann dafür verwendet werden, solange sie sich an den Standard hält. Im Beispiel wird folgendes Gerät verwendet: USR-TCP232-410S. (Siehe dazu als Alternative auch: Modbus TCP zu Modbus RTU Gateway im Eigenbau) Das Gerät übernimmt die Übersetzung der Befehle von TCP/IP auf Modbus RTU. So kann für die Steuerung von Modbus Slaves ein Netzwerkkabel in den Heizraum verlegt werden und sogar die Kosten für die Modbus Extension und den Verkabelungsaufwand gespart werden.
Modbus(TCP Server): Konfiguration
Die folgenden Einstellungen wurden am ModbusTCP-Server eingestellt sind aber auch für den Einsatz ohne den ModbusTCP-Server geeignet.
Baud Rate: Dieser Wert ist variabel und muss mit dem Wert auf dem ECL Comfort übereinstimmen.
ECL Comfort Controller: Einstellungen
Die Modbus Einstellungen sind etwas verborgen, müssen aber auch nur einmalig richtig einstellt werden.
- Mit dem Rad nach links unten auf Menü navigieren.
- Im Menü mit dem Rad rechts oben auf die Heizkreise navigieren. Mit einem Druck den Punkt auswählen.
- Solange nach rechts drehen bis das Controllersymbol angezeigt wird. Anschließend mit einem Druck bestätigen.
- System
- Kommunikation. Folgendes Menü erscheint (komplette Liste):
Hier kann die Baudrate (Baud) eingestellt werden. Diese muss dieselbe sein, wie sie auf dem Bus und/oder auf dem Modbus TCP-Server/Loxone Modbus-Extension verwendet wird.
Als "Modbus Adresse" kann eine Zahl zwischen 1 und 255 eingestellt werden. Diese muss auf dem Bus eindeutig sein, also kein anderes Gerät darf dieselbe Adresse besitzen. Wo möglich empfiehlt es sich den voreingestellten Wert beizubehalten (zwecks Fernauslesung des Fernwäremanbieters).
Service Pin und Ext. Reset: dazu kann ich nicht sagen was damit gemeint ist. War im Beispiel 0 und kann 1 oder 0 (bool) sein. Weiß aber nicht was das macht und ob es eine Auswirkung auf Modbus hat oder sich dies nur auf ECL485 bezieht.
Der Wert ECL 485 addr. ist für die Auslesung mittels Modbus uninteressant.
ECL Comfort Controller: Verkabelung
In der Bedienungsanleitung sind die Pins für die Modbus Verkabelung aufgeführt. (nicht zu verwechseln mit M-Bus). Zu beachten ist dabei der Punkt "RS-485 Bias/polarization" in der Bedienungsanleitung. Irgendwie sind die Pins für A und B vertauscht, d.h. Bus Draht für A muss an B am Controller und Bus Draht B am Controller bei A angeschlossen werden. Wenn der Controller das letzte Gerät auf dem Bus ist (wenn nur der Controller auf dem Bus angeschlossen ist immer der Fall), dann muss ein Widerstand zwischen Pin A und B eingebaut werden. Loxone schlägt dafür vor einen 100 Ohm Widerstand. Man ließt, dass es auch ohne funktionieren soll. Im Beispiel wurde ein 680 Ohm Widerstand eingebaut, sogar das funktionierte.
Pin Name | Pin Nummer auf Controller | Bedienungsanleitung | Wirklichkeit |
---|---|---|---|
GND | 36 | GND | GND |
A | 35 | A | B |
B | 34 | B | A |
Öffnen der Controllers
Zum zugänglich machen der Pins muss der Controller geöffnet werden. Dabei einfach den Strom vom Gerät nehmen und mit einem kleinen Schraubendreher den dunkelgrauen Pin auf der Hinterseite etwas nach außen ziehen. Gleichzeitig mit leichtem Druck den Controller etwas anheben. So lässt er sich von seinem Sockel entfernen. Bilder dazu stehen in der Bedienungsanleitung auf der letzten Seite.
Dann sieht man folgende Pins offenliegen:
Loxone: Einbindung in die Programmierung
Im Beispiel wird die Programmierung in Loxone mittels Modbus TCP gemacht, weil ein Modbus TCP-Server eingesetzt wird. Wir der Bus direkt auf einer Modbus Extension aufgebaut ist die Programmierung ähnlich und eigentlich selbsterklärend.
- Peripheriepunkt "Miniserverkommunikation" anklicken.
- Menüpunkt "Modbusserver" anklicken.
- Neu erstellten Mudbusserver anklicken und Werte richtig einstellen.
- Adresse: IP-Adresse des Modbus-Servers gefolgt von einem Doppelpunkt und dem verwendeten Port.
Bspw. 10.0.0.1:502 - Über die Parameter Wartezeit und Timeout kann ich leider keine verlässliche Aussage treffen. Habe 5 Sekunden als Wartezeit und 100ms als Timeout eingestellt.
- Adresse: IP-Adresse des Modbus-Servers gefolgt von einem Doppelpunkt und dem verwendeten Port.
- "Sensoren und Aktoren"/"Modbus Gerät" anklicken. Ein Gerät wird erstellt.
- Gerät anklicken und die Parameter richtig einstellen:
Modbus-Adresse: Das ist jene Zahl welche auf dem Controller zuvor beim Punkt "ECL Comfort Controller: Einstellungen" für "Modbus Adresse" eingestellt wurde.
Loxone: Sensoren und Aktoren
Alle Register (das sind die einzelnen Werte die gelesen und geschrieben werden könne) die zur Verfügung stehen sind im offiziellen Dokument von Danfoss aufgelistet und größtenteils auch erklärt. Dabei ist jedoch folgendes zu beachten:
Registerverschiebung
Die Register im offiziellen Dokument sind im Vergleich zu Loxone um eins (1) verschoben. D.h. aus 4201 (Mode circuit 1) im offiziellen Dokument wird in Loxone 4200.
Lesen von Werten
Gelesen werden kann mit
- 4 - Read input register (3x)
- 3 - Read holding register (4x)
Im Falle von Loxone ist es eigentlich egal welcher Befehl von beiden verwendet wird. Der Datentyp ist jeweils 16-bit unsigned integer. [
Schreiben von Werten
Geschrieben werden kann ausschließlich mit:
- 6 - Preset single register (0x06)
Der Datentyp ist jeweils "16-bit unsigned integer".
Eventuell macht es noch Sinn die Werte zyklisch zu senden, dass der Status nach einem Stromausfall nach ein paar Sekunden erneut geschrieben wird.
Auslesen des Verbrauchs in Loxone
Im konkreten Beispiel konnte die Verbrauchsmessung des Fernwärmelieferanten ohne zusätzliche Hardware umgesetzt werden. Der Lieferant nutzt auf dem Controller einen M-Bus (nicht Modbus) Verbrauchszähler, welcher die Daten dem Controller zur Verfügung stellt. Letzterer hält diese Daten als Modbus Register vorrätig und zwar im Modbus-Registerblock für verbundene M-Bus-Geräte ab Register 6000. Jeder M-Bus-Zähler bekommt 50 Adressen. Im konkreten Beispiel verwendet der Verbrauchszähler den ersten 50er Block. Im Handbuch (siehe Link im Eingang dieses Artikels) sind diese Register jeweils genau erklärt: Übersicht auf Seite 40 und detaillierter auf Seite 32.
Die Übersicht ist gültig für den ersten Sensor:
Alle werte können als Standard 16 bit unsinged integer gelesen werden. Zu beachten ist wieder die Verschiebung - siehe Hinweis weiter oben. Eine Außnahme bilden jene Werte, welche zwei Register verwenden. Das sind jene, bei denen in der darauffolgenden Zeile steht "- low part". Da ist folgende Einstellung zu verwenden:
Hier am Beispiel ist das Register 6014 (Acc. Energy) gezeigt, welches auch das nachfolgende Register 6015 verwendet. Also einfach einen analogen Sensor mit der Adresse der ersten Registers erstellen und die Häckchen für "2 Register für 32-bit" und "Registerreihenfolge" und Datentyp "32-bit unsingned integer" setzen. Dies gilt wie gesagt nur für die Werte die 2 Register verwenden. Dieses Vorgehen gilt auch für den Momentanverbrauch ("Power"), "Flow", "Accumulated Volume", ...
Im konrekten Anwendungsfall war der Wert unter "Accumulated Energy" exakt der Wert, welcher für die Verrechnung verwendet wird und auf die Rechnung drauf kommt. Der Lieferant nimmt also einfach diesen Wert her, bildet die Differenz zum Wert der letzen Rechnung und verrechnet diese Differenz.
Auslesen der Sensorwerte
Die einzelnen Sensoren (S1-S12) und deren Werte kann man ab dem Register 10201 finden. Dort steht bei Scale -2, der Wert muss aber einfach durch 10 dividiert (in Loxone korrigiert) werden. Die eigentlich für die Sensoren vorgesehenen Register haben bei mir nicht funktioniert. Bspw. gibt der Controller auf das Register 11206 (S6 sensor) keine Antwort. Hingegen im Register raw sensor value bekommt man eine Antwort.
Dokumente
Offizielle Modbus Referenz von Danfoss
Mirror:
Bedienungsanleitung
Mirror:
Ähnlicher Artikel (russisch)