Ich habe vor einiger Zeit das Multimeter VC820 von Voltcraft gekauft (zum Beispiel bei Conrad zu bekommen). Mit dem Gerät bin ich sehr zufrieden, nur die beliegende Software gefällt mit nicht. Da ich keine andere frei verfügbare bzw. Open-Source-Software finden konnte, habe ich diese Software geschrieben.
Die Software befindet sich zur Zeit noch in einer frühen Entwicklungsphase und könnte daher noch einige Fehler enthalten. Für jeden gefundenen und mir mitgeteilten Fehler bin ich daher sehr dankbar!
Screenshot
Features
- Verarbeitung der Messwerte parallel in mehreren Modulen (Anzeige, Graph, Statistik)
- Auswählbare Daten-Quelle
- Einfache Erweiterbarkeit der Software durch eigene Module zur Messwert- Verarbeitung
- Übertragung der Messwerte über UDP (User Datagram Protocol), um sie auf einem anderen Rechner mit der gleichen Software weiter zu verarbeiten
Lizenz
Diese Software steht unter der GNU General Public License in ihrer aktuellen Version, einzusehen auf der GNU website. Es steht damit jedem frei, die Software nicht nur zu verwenden, sondern auch zu verändern und weiterzuentwickeln.
Benötigte Komponenten
Da die Software mit dem Microsoft.Net Framework geschrieben ist, braucht man die entsprechende .Net-Laufzeitumgebung. Diese ist kostenlos bei Microsoft zu bekommen. Alles weitere liegt dem Programm-Archiv bei.
Installation
Zunächst muss das DotNet-Framework installiert sein. Dann einfach das Archiv in ein beliebiges Verzeichnis entpacken und die exe-Datei aufrufen. Beim ersten Starten wird automatisch eine Konfigurations-Datei im Arbeitsverzeichnis erstellt. Bei Bedarf nun noch ein Programm-Icon anlegen und schon ist die Software einsatzbereit.
Download
- Sourcecode (Visual Studio Projekt): vc820tool_0_22_src.zip
- Ausführbares Programm: vc820tool_0_22_bin.zip
Code für Java
Ein freundlicher Entwickler hat mich gebeten, seinen Code zur Abfrage des VC820 unter Java hier zur Verfügung zu stellen: vc820-java.zip
Erweiterung der Software
Die Software ist dafür ausgelegt, dass sie einfach um neue Module erweitert werden kann. Es gibt folgende Typen von Modulen:
- Datagram Source (DS): Quelle für Messwerte. Bisher gibt es eine Quelle zum
Auslesen von Messwerten eines VC820-Messgerätes, eine Dummy-Quelle zum
Testen und eine Quelle, die über UDP/IP empfangene Messwerte ausgibt. Jede
DS muss das Interface
IDatagramSource
implementieren. - Datagram Processor (DP): Ein Datagram Processor ist eine Klasse, die einen
aufgenommenen Messwert in irgendeiner Art verarbeitet. Eingebaut sind bisher
eine Anzeige, die den Messwert als Zahl darstellt, ein Plotter zum Zeichnen
des Verlaufs einer Messwertfolge, ein Statistikmodul (Durchschnittsbildung,
etc.) und ein Sender, der die Messwerte per UDP/IP verschickt. Jeder DP muss
das Interface
IDatagramProcessor
implementieren. - ValueDispatcherTrigger (VDT): Hierbei handelt es sich um eine Komponente,
die dafür sorgt, dass nicht jeder von einer Datagram Source empfangene
Messwert sofort an alle Prozessoren weitergegeben wird. Bisher gibt es einen
Timer-VDT, der zeitgesteuert einen Messwert an die Datagram Processors
weitergibt (zum Beispiel alle 15 Minuten ein Messwert), einen
SingleShot-VDT, der nur bei einem Mausclick einen Messwert weitergibt und
einen Instrument-VDT, der jeden empfangenenen Messwert weitergibt. Jeder VDT
muss das Interface
IDispatcherTrigger
implementieren. Besser ist es aber, von der abstrakten BasisklasseAbstractDispatcherTrigger
zu erben.
Die Software kann einfach um jede Art von Modul leicht erweitert werden, indem
eine Klasse erstellt wird, die das ensprechende Interface implementiert bzw. von
der passenden Basisklasse erbt. Diese Klasse muss dann in der Klasse MainForm
mit einer der Methoden RegisterDatagramProcessor()
,
RegisterDispatcherTrigger()
oder RegisterSource()
registriert werden. Den
dafür benötigten Code schreibt man am besten in eine der
Initialize...()
-Methoden. Damit sollte das Modul in der GUI erscheinen und
benutzt werden können.
Das Protokoll
Die Übertragung der Werte vom Messgerät zum Computer läuft über eine serielle
Schnittstelle. Die Verbindung ist galvanisch getrennt und funktioniert mithilfe
von Optokopplern. Diese werden über die Statusleitungen DTR
und RTS
mit
Strom versorgt. Es muss DTR
auf high und RTS
auf low gesetzt werden, damit
Daten empfangen werden können. Die Übertragung läuft dann mit 2400 Baud.
Das Protokoll ist sehr simpel aufgebaut. Es überträgt einfach 1-zu-1 den Zustand jedes LCD-Segments des Messgeräts in einem Bit. Dazu wird ungefähr einmal pro Sekunde ein Datenpaket mit 14 Bytes gesendet. Die Bedeutung der Bits ist in der folgenden Tabelle angegeben. Die Zahl vor dem Komma ist das entsprechende Byte, die hinter dem Komma das Bit innerhalb des Byte. Die Angabe 4,3 bedeutet also "Bit Nummer 3 im Byte Nummer 4".
Symbole
RS232 0, 0
Auto 0, 1
TrueRMS 0, 2
AC 0, 3
Diode 9, 0
Beep 10, 0
Hold 11, 0
Delta 11, 1
Einheiten
Volt 10, 2
Prozent 11, 1
Ohm 11, 2
Farad 11, 3
Ampere 12, 1
Hertz 12, 2
Präfixe
Nano 11, 1
Micro 9, 3
Milli 10, 3
Kilo 9, 1
Mega 10, 1
Ziffern
1. Ziffer (10**0) 7,4 - 8,3
2. Ziffer (10**1) 5,4 - 6,3
3. Ziffer (10**2) 3,4 - 4,3
4. Ziffer (10**3) 1,4 - 2,3
Die Bits für die Ziffern sind hierbei als 7-Segment-Codes zu verstehen. Jedes Bit entspricht also auch hier einem Segment. Zu beachten ist, dass die erste 4. Ziffer - also die höchstwertigste bzw. am weitesten links stehende - auch das Minus anzeigt. Die Segmente können wie folgt interpretiert werden:
number &= 0x7f;
switch(number)
{
case 0x7d:
return 0;
case 0x05:
return 1;
case 0x5b:
return 2;
case 0x1f:
return 3;
case 0x27:
return 4;
case 0x3e:
return 5;
case 0x7e:
return 6;
case 0x15:
return 7;
case 0x7f:
return 8;
case 0x3f:
return 9;
}
Die Variable number
enthält die Bits wie in der Tabelle angegeben. Das
höchstwertige, hier mit 0x7f maskierte Bit entspricht dem Dezimalpunkt neben
jeder Ziffer. Bei Unklarheiten zur Dekodierung der Daten ist ein Blick in die
Datei Datagram.cs
im Quelltextarchiv empfohlen!
Was kommt als nächstes
Zunächst einmal sollte der Quellcode weiter kommentiert werden. Als echte Erweiterung der Software plane ich einen Datagram Processor, der die Messwerte in eine Datenbank schreibt. Für weitere Ideen bzw. auch für Hinweise auf bereits fertige Erweiterungen der Software bin ich jederzeit dankbar!