Vcontrold / CSV-Viewer
In den kommenden Tagen möchte ich an dieser Stelle einen detaillierten Weg für den ambitionierten Laien beschreiben, wie Werte mittels vcontrold ausgelesen, in eine CSV geschrieben und einfach graphisch dargestellt werden können - eigentlich steht hier nicht wirklich viel Neues - ich möchte lediglich die vielen unterschiedlichen Quellen auf eine Seite zusammenführen!

Am Ende dieses Artikels wird auf einem Notebook alle 2 Minuten ein Graph fortgeschrieben:

Schnappschuss_(2012-01-29_21.06.35).jpg

Basis für die nachstehende Anleitung ist ein
- Windows XP (SP3) Notebook
- Vitocal 300 mit [KW-Protokoll]
- USB-Optolink-Adapter Nachbau

Verwendete Software
  1. cygwin
  2. vcontrold
  3. diverese CMD-Skripte zum auslesen
  4. Zur Visualisierung verwende ich das Tool csv-viewer von Ingo Wender

Installation von vcontrold unter Windows


Erstmal vorneweg:
Ich als ambitionierter Laie habe ich mich lange schwer mit der Anschaffung des Adapters getan, weil ich Bedenken hatte etwas an meiner Heizung zu verstellen oder zu beschädigen.
Hierzu muss ich nach den gemachten Erfahrungen Entwarnung geben, da die Schnittstelle optisch getrennt ist und solange nur gelesen wird (also mit Type F7 gearbeitet wird) kein Werte zurückgeschrieben werden.

1. Optolink-Installation
Nach dem Verbinden mit dem USB-Port wird die Hardware automatisch erkannt. Es wird kein Treiber gefunden, deshalb auf manuelles Suchen gehen und als Verzeichnis den Standort des Treibers angeben. Genauere Infos zur Treiberinstallation (eigentlich nicht erforderlich) stehen im Installations-PDF.
Nach der Installation wird im Gerätemanager (Start/Systemsteuerung/System/Gerätemanager] ein neuer COM-Port angezeigt. Mittels rechte Maustaste/Eigenschaften kann an dieser Stelle die COM-Portbelegung auf einen anderen, freien Port umgelegt werden. Die Einstellungen des Ports (Übertragungsrate, Paritybit, ...) sind hier flüchtig, d.h. nach jedem anstecken sind dieser wieder auf dem Standardwert, daher muss hier nichts geändert werden.

2. Erster Test
Als erstes muss der Optolink-Adapter mit der PC und der Anlage verbunden werden. Man verwendet dann das Tool voIdent. Nach dem Starten muss hier nur der korrekte (unter Punkt 1 eingestellte) COM-Port ausgewählt werden. Nach dem Drücken auf den Play-Button vergehen 2-3 Sekunden und die Kennung der Viessmann-Anlage wird angezeigt.

Um erste "Gespräche" mit der Anlage zu führen ist das Tool RS232Test sehr hilfreich. Hier muss der Com-Port ausgewählt werden. Zusätzlich noch die Port-Einstellungen (4800 8 2 E ohne) angeben. Nach dem Drücken auf "OPEN" sieht man im Ausgabefenster (Hex-Modus aktivieren) zyklisch ein 05 erscheinen. Im Senden-Feld F7 00 F8 02 eingeben und gleich nach dem erscheinen einer 05 auf SENDEN drücken. Als Antwort erhält man die 4stellige Gerätekennung der Anlage (Also für´s erste die gleich Kennung wie bei voIdent)

3. Installation cygwin
Da vcontrold ein Unix-Tool ist muss als erstes eine Unix-Umgebung installiert werden. Das Tool hierfür heißt cygwin. Die Installation ist denkbar einfach. Ich habe die 26MB komplett-Version gewählt und alle im Installer alle Pakete angewählt. Wenn man das macht muss man sich nicht mit dem Auswahlmenü beschäftigen. Wer das möchte wählt die Pakete "cygrunsrv" und "libxml2" aus.

Nach der Installation erscheint auf dem Desktop ein neues Icon CYGWIN-Terminal. Dies Starten und dort cygserver-config starten. Alle Fragen mit "yes" beantworten.
Hierdurch wird der cygwin-Dienst installiert und auch gleich gestartet.
Die Einstellung ist auch so, dass bei jedem Systemstart der Dienst automatisch startet. Wer dies ändern möchte kann unter Start/Systemsteuerung/Dienst beim Dienst "cygserver" die Einstellung auf manuell stellen.

Test:
Ob soweit alles sauber gelaufen ist kann über den Terminal-Befehl cat /dev/ttyS1 ermittlet werden die 1 steht hierbei für COM2 - die Zählung des COM-Ports beginnt also unter Unix bei 0. Nach dem Drücken der "Enter"-Taste sollte nun zyklisch eine "~" erscheinen. Den Test kann man mit STRG-C abbrechen.

Das Terminal-Fenster kann nun geschlossen werden.
Alle weiteren Aktionen werden in der Windows-CMD-Shell durchgeführt.

Zum Abschluss muss noch der CYGWIN Pfad in die Umgebungsvariable eingetragen werden. Hierzu einfach unter START/Einstellungen/Systemsteuerung/System/Erweitert/Umgebungsvariable/Systemvariable, Variable "Path" um ;c:\cygwin\bin erweitern.

4. Konfiguration vcontrold
4.1. Grundsätzliches
Das Programm vcontrold besteht aus 2 Komponenten.

vcontrold
Der Server-Teil (der in den Speiche geladen wird) heißt vcontrold.exe. Beim starten des Programms findet die Initialisierung mittels der beiden Dateien vcontrold.xml und vito.xml statt. Grundsätzlich werden in der vcontrold.xml die allgemeinen Initialisierungen durchgeführt (SENDEN, SYNC und Umrechnung für die Ergebnisse) definiert.In der vito.xml hingegen werden die gerätespezifischen Adressen für diese Befehle hinterlegt.
Da diese beiden Dateien grundlegend für die Funktion sind, sollte man sich die Zeit nehmen das Zusammenspiel zu verstehen: vito / vcontrold

Für jeden Test gilt also: Vcontrold muss beendet und neu gestartet werden damit die Änderungen in den XMLs aktiv werden.

Das Beenden funktioniert auf Command-Line-Ebene mit dem Kommando: taskkill /F /IM "vcontrold.exe". Alternativ besteht auch die Möglichkeit über <STRG>-<ALT>-<ENTF>/Taskmanager/Prozesse den Prozess zu beenden.

vclient
Der Client-Teil heißt vclient.exe und führt die eigentlich Abfragen aus: Der Aufruf steht unter vclient

4.2. Programm "installieren"
Als erstes das Programm runter laden und in das Verzeichnis c:\vcontrold entpacken - eigentlich geht auch jedes andere Verzeichnis - dann müssen im nachfolgenden halt die Verzeichnisse entsprechend eingestellt werden.

Die Datei hat mir Bernhard zukommen lassen, da wir die gleiche Anlage haben. Im wesentlichen sind es die gleichen wie 14112011vito.zip. Hier wurden nur nicht benötigte Teile entfernt und die Adressen passend zur Vitocal 300 eingetragen. Die runter geladenen Dateien auch in das Verzeichnis c:\vcontrold entpacken.

Nun ein Dos-Fenster öffnen und vcontrold starten. Hierdurch werden (bei der Nutzung meiner XMLs) folgende Aufrufe initialisiert:

getTempSTS1ist
getTempWWist
getTempLuftVL
getTempLuftRL
getTempSekVL
getTempSekRL
getTempVerdampfer
getSpeicherladepumpe
getTempA
getStatusVerdichter
getTempHKVL
getBetrVerdichter
getEinschaltungen
getBetrSpeicherLP

Desweiteren wird über die vcontrold.xml die IP-Adresse 127.0.0.1 (also Localhost, sprich mein eigener PC) auf dem Port 1234 eingestellt.
Nun kann es also mit den Aufrufen losgehen - vclient -h (IP):(Port) -c (initialisertes Kommando)
bspw: vclient -h 127.0.0.1:1234 -c getTempA
Wichtig ist auf die Groß-/Kleinschreibung der Befehle zu achten! Desweiteren kommt es auf meinem Notebook dazu, dass bei jedem ersten Anstecken der Schnittstelle erstmal ein Init durchgeführt werden muss. Auch wenn sich das der Brainhunter nicht erklären kann. Ich muss als erstes den Befehl stty -F /dev/ttyS1 4800 absetzten!

5. Die Skripte
Alle nachstehend aufgeführten Dateien sind im enthalten.
Um nun die Abfragen zu automatisieren habe ich den Schedular JIT verwendet. Grundsätzlich geht auch das mit allen anderen Schedularen oder aber man erstellt sich in einem Skript einfach eine Schleife:

Basis für das eingesetzte Tool csv-viewer ist eine Semikolon getrennte Textdatei. Diese Datei wird mittels eines vcontrold-Aufruf erstellt.

Hierzu werden alle benötigten Aufrufe in eine Kommando-Datei vclient_perid.cmd geschrieben.
Der zyklische Aufruf, der mittels Jet oder einem anderen Schedular abgesetzt werden kann lautet dann

vclient -h 127.0.0.1:1234 -f vclient_perid.cmd -s output.txt

Hierdurch werden nun alle Aufrufe in die Datei output.txt geschrieben. Da in dieser Datei nun noch Datum und Uhrzeit fehlen, muss jede Zeile hierum ergänzt werden. Dies geschieht durch:

set /p viesswert=<output.txt
echo %date%;%time:~0,5%;%viesswert% >> output.csv
del output.txt

Im Ergebnis steht nun die Datei Output.csv, in die bei jedem Aufruf eine Statuszeile mit Datum und Uhrzeit geschrieben wird. Das ganze Skript hierzu steckt in der Batch viess_abfrage.cmd
Desweiteren habe ich noch folgende Batches beigefügt:
- viess_init ==> enthält die bei mir notwendige Initialisierung mit stty
- viess_start ==> Führt einen Start des cygserver und vcontrold durch. Desweiteren wird die die alte Ouput_csv mit Timestamp versehen und eine neue mit einer Überschriftenzeile angelegt.
- viess_stop ==> beendet cygserver und vcontrold

Da es Werte gibt, die nicht sinnvoll minütlich abgefragt werden müssen bspw. (getBetrVerdichter, getEinschaltungen oder getBetrSpeicherLP) können nun noch weitere Batches mit (bspw. tgl. Aufrufen) in Jet integriert werden. Um eine Synchronisation der einzelnen vclient-Aufrufe zu erreichen sollte die Batch um so erweitert werden, dass nur ein vclient je Lauf aktiv ist:

:start
tasklist | find /i "vclient.exe">nul && goto warten
(… vclient-Aufruf hier einfügen)
:goto ende

:warten
sleep 15
goto start

:ende

Die Konfig in jit könnte dann so aussehen:

jit.jpg

6. Der Viewer
Der letzte Schritt ist auch gleichzeitig der Einfachste! Die output.csv muss nun nur noch mit dem CSV-Viewer aufgerufen werden.
Unter Extras/Einstellungen kann nun noch die Refresh-Zeit eingestellt werden …. fertig