VC820 Software

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.

Das VC820 Multimeter
Das VC820 Multimeter

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

Screenshot der VC820-Software
Screenshot der VC820-Software

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

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 Basisklasse AbstractDispatcherTrigger zu erben.
Klassenstruktur
Klassenstruktur

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!

LinkedIn logo mail logo