Ich schrieb ja letztens, dass ich mit dem Home-Server die Messwerte der Heizungsanlage auslesen wollte. Durch den Umzug des Rechners in den Heizungsraum ist sämtliches Gebastel mit RS232-nach-USB- und USB-over-Ethernet-Adaptern überflüssig geworden und ich konnte ein good old Nullmodem-Kabel nehmen (gibts tatsächlich noch direkt von Amazon). Da ich mangels passendem Betriebssystem nicht die
Originalsoftware vom
Hersteller nehmen kann, hab ich mit Olivers
Java-Implementierung gebastelt. Beim Mitschneiden der Daten vom original Serviceprogramm hab ich aber festgestellt, dass das bei mir verbaute Steuergerät "WPCU.C" eine völlig andere Sprache spricht, als das "Resümat CD4" von Oliver. Mist.
Also hab ich die Config- und Programmdateien des Serviceprogramms nach Informationen zum Schnittstellen-Protokoll durchwühlt. "modbus/app.xml" brachte mich der Lösung näher. Dort sind alle abfragbaren Parameter mit Typ, Offset, Länge (Anzahl der Bytes) und Bezeichnung aufgelistet. Leider kann ich mit den Offset-Angaben bisher noch nichts anfangen - die Werte sind für Byte-Counts einfach viel zu groß.
Der Begriff "modbus" brachte den erhofften Knick in der Lernkurve. Das ist ein
offenes Protokoll - und der Quasi-Standard bei der Kommunikation mit Mess- und Regelsystemen. Cool. Ich mag offene Standards.

Ein paar Goggle-Treffer später fand ich mit
QModBus sogar eine QT-GUI dafür. Mit dessen Comboboxen kann ich bequem genau den Request zusammenklicken, den auch die Original-Software geschickt hat. Scheint also richtig zu sein. Der Function-Code lautet "Read Holding Registers (0x03)". Klick auf "Send". Es kommen tatsächlich Werte zurück. In den ersten 6 Registern kann man prima Uhrzeit und Datum (58:16:11 31.06.109 5 = 31.07.2009 11:16:58, 5. Tag der Woche) erkennen. Mich packt der Ehrgeiz, ich klick in dem Tool rum und sende hektisch das Kommando "Write Multiple Registers" mit start-address=1 und num-of-coils=100 an die Anlage. 1 Sekunde später: Scheisse! Nicht Write! Hab ich jetzt die komplette Anlagen-Config mit Nullen überschrieben? Ich renne in den Heizraum. Die Uhrzeit am Display steht auf 00:00:45. Mir läuft kalte Panik den Rücken runter. Ich klicke mit den Softkeys alle Parameter durch. Mhh. Datum ist noch korrekt. Und auch alle anderen Parameter scheinen noch richtig zu sein. Habe sie inzwischen mit den Werksvorgaben aus dem Handbuch verglichen. Alles richtig. Das Write-Kommando werde ich auf jeden Fall nie wieder verwenden.
Mit
jamod habe ich nun auch eine 100%-Java-Implementierung gefunden. Die
API sieht sehr komfortabel aus. Prima - keine Bit-Schieberei nötig. Wenn ich jetzt noch rausfinde, wie die Offset-Angaben in app.xml zu verstehen sind, kann ich mir eine Anwendung bauen, die alle Register einfach aus der XML-Datei liest. Ein prima Projekt für die Wintermonate. Dumm nur, dass gerade Sommer ist ;)