Reinhard Weiß
METEX Digitalmultimeter M4650CR

Ansteuerung der Schnittstelle

M4650CR

Das Multimeter METEX M4650CR gehört nicht gerade zu den modernsten Digitalmultimetern (DMM), aber es leistet mir schon seit vielen Jahren gute Dienste. Seine für mich beste Eigenschaft ist die Möglichkeit, seine Anzeige über eine RS232-Schnittstelle in den PC zu übertragen. Damals wurden auch einfache PC-Programme (für DOS) mitgeliefert und auch Windows-Programme sind/waren für das Gerät und baugleiche verfügbar. Von Vorteil ist, dass die Schnittstelle sehr einfach über DOS-Basic (etwa QuickBasic), VisualBasic oder VBA (MS Word, Excel, Access etc.) und beliebig andere Programmiersprachen bedienbar ist. Anders als bei heute üblichen USB-Schnittstellen ist kein Geräte-spezifischer Treiber passend zum Betriebssystem erforderlich. So lässt sich das Gerät nicht nur mit alten DOS-Computern sondern auch unter etwa Windows-XP, Vista oder Linux nutzen.

Ich habe meine DOS-Programme für das DMM inzwischen auf Windows umgestellt und mich dabei entschieden, eine Einbindung in Microsoft Excel vorzunehmen. Das erleichtert spätere Auswertungen und eine Weiterverarbeitung, etwa mit Formeln und Diagrammen. Als Programmiersprache ist dabei Visual Basic for Applications (VBA) erforderlich. Innerhalb der Microsoft Office Familie ist diese Basic-Variante mit nur geringen Anpassungen in anderen Applikationen einsetzbar, genauso wie unter Visual Basic oder dem kostenlosen Visual Basic 2005 Express Edition bzw. Edition 2008.

Bei den DMM mit serieller Schnittstelle gibt es keinen einheitlichen Übertragungsstandard (Übersicht). Das M4650CR verwendet als Parameter der COM-Schnittstelle 1200 Baud, No Parity, 7 Datenbits, 2 Stopbits. Als Aufruf- bzw. Aktionsparameter in Richtung DMM wird nur 1 Zeichen benötigt ("D", "C" oder "M"), als Antwort auf die Datenanforderung kommen immer 14 Bytes mit CR (ASCII 13) als Endekennung.

Beschaltung der Schnittstelle

Die Schnittstelle im M4650CR besteht aus Optokopplern, die eine Potentialtrennung ermöglichen (wichtig für Messungen an Netzspannung). Der Empfänger besteht aus einer Opto-LED mit Vorwiderstand, der Sender ist ein Optotransistor, für den allerdings noch eine Hilfsspannung benötigt wird. Im nachfolgenden Bild ist die Innenschaltung und die Zusammenschaltung mit dem PC dargestellt. Es wird das original METEX Adapterkabel und ein 9/25-poliger Adapter benötigt (wenn der COM-Stecker am PC wie üblich 9-polig ist).

Anschaltung original

Bild 1: Grundbeschaltung des M4650CR mit dem PC

In den Bedienungsanleitungen zum M4650CR sind bei den Signalbezeichnungen teilweise Fehler enthalten. Im obigen Bild ist es korrekt. Pin 5 vom METEX-Adapterkabel auf der Geräteseite ist der dem Abgang des Kabels benachbarte Stift bzw. Pin 1 ist ganz am Ende (siehe Bild rechts). Stecker am Metex

Der Empfänger im DMM liegt mit einem Anschluss an Masse (GND), der andere (TxD) wird vom RS232-Signal TxD des PC angesteuert. Im Ruhezustand hat TxD einen negativen Wert (ca. -9 V), der Optokoppler ist gesperrt. Beim Senden eines Zeichens wechselt die Spannung zwischen diesem Wert und einer positiven Spannung (ca. + 9 V), womit der Optokoppler leitend wird im Takt der gesendeten Bits.

Der Sender im DMM besteht aus einem Optotransistor, der im Ruhezustand gesperrt ist und beim Senden eines Zeichens abwechselnd leitend wird. Um ein geeignetes Potential für den RS232-Empfänger im PC zu erzeugen, wird das DTR-Signal als positive Hilfsspannung (ca. + 9 V) und RTS als negative (ca. -9 V) benutzt. Im Ruhezustand (Transistor gesperrt) zieht R2 RxD auf ein negatives Potential, wenn der Transistor leitend wird, wird es positiv. Auf diese Weise kann RxD bipolar angesteuert werden, wie es der RS232-Standard eigentlich erfordert. "Eigentlich" deshalb, weil in manchen Fällen auch die negative Vorspannung entfallen kann und RTS am DMM auf Masse liegen darf. Das funktioniert dann, wenn im PC entsprechende RS232-Konverter verwendet werden, bei denen die Umschaltschwelle bei einer positiven Spannung liegt. Man muss das ggf. ausprobieren.

Übrigens sind die Spannungsangaben (+/- 9 V) auch nur grob, insbesondere bei Laptops kann die Spannung auch niedriger sein. Die RS232-Norm verlangt nur mind. +/- 5 V Treiberspannung unter Belastung mit 3 kOhm. Der Empfänger im 4560CR hat eine Ansprechschwelle von ca. 4 V. Ein RS232-Empfänger darf eine maximale Ansprechschwelle von +/- 3 V haben (der Bereich -3...+3 V ist undefiniert). In vielen Fällen liegt die Schwelle aber bei ca. +1,5 V mit geringer Hysterese, so dass keine negative Spannung benötigt wird.

Um die Hilfsspannungen nutzen zu können, muss die Schnittstelle vom PC so initialisiert werden, dass DTR positiv und RTS negativ wird. Ein Hardware-Handshake wird nicht benötigt, daher sind DTR und RTS frei verwendbar.

Duale Beschaltung der Schnittstelle

Wenn man 2 Multimeter am PC betreiben will, muss man normalerweise auch eine zweite COM-Schnittstelle benutzen. Es geht aber auch eleganter. Man kann an einer COM auch 2 METEX DMM anschließen, die über DTR/RTS umgeschaltet werden. Das geht dann zwar nur im abwechselnden Betrieb, aber da man die Ausgaben der DMM gezielt abfragen kann, ist das normalerweise kein Problem. Die Abfragen werden einfach abwechselnd gemacht.

Im Buch von H.J. Berndt [1] ist eine einfache Lösung für diese Aufgabe beschrieben. Dabei wird bei den beiden DMM der Eingang RTS jeweils auf Masse gelegt, und das PC-Signal DTR geht an den Eingang DTR des DMM1, RTS an den Eingang DTR des DMM2. Wenn PC-DTR positiv ist, wird der Optotransistor von DMM1 versorgt, wenn PC-RTS positiv ist, der von DMM2. Alle anderen Signale der DMM werden parallel geschaltet (RxD, TxD, GND). Die Auswahl des DMM geschieht wechselweise durch Umschalten von PC-DTR/RTS.

Diese Beschaltung hat mehrere Nachteile. Da der Optotransistor im DMM nur eine positive Spannung liefern kann (Eingang RTS liegt ja auf Masse), muss der Schnittstellenbaustein im PC diese unipolare Ansteuerung des RxD auch erlauben. Beide DMM werden beim Senden vom PC (Abfragebefehl) gleichzeitig angesprochen, mit PC-DTR/RTS kann nur ausgewählt werden, welches DMM man empfangen möchte. Das kann Probleme machen, wenn die Antworten beider DMM unterschiedlich lang verzögert sind und die Umschaltung auf das andere Gerät zur "falschen" Zeit erfolgt, weil dieses mit seiner Antwort noch nicht fertig ist.

Es gibt aber eine Beschaltungsmöglichkeit, die diese Nachteile nicht hat. Dabei wird nur das jeweils benötigte DMM mit der Abfrage angesprochen, das jeweils andere DMM bekommt davon nichts mit und gibt damit auch keine störende Antwort. Die Auswahl der beiden DMM geschieht hierbei durch Umpolung der PC-DTR bzw. PC-RTS-Signale:

Dualbetrieb zweier DMM

Bild 2: Dualbetrieb zweier DMM an einer COM

Um DTM1 anzusprechen, wird PC-DTR auf positiv (DTR+), PC-RTS auf negativ (RTS-) gesetzt. D6 sperrt dann den Eingang von DMM2, D4 und D5 sperren den Sender im DMM2. Beim Empfänger liegt der Eingang GND nicht mehr auf Masse, sondern wird ebenfalls mit RTS bzw. DTR umgeschaltet. Das bedeutet gegenüber der normalen Beschaltung eine Verdopplung des Spannungshubs. Daher wurden R5/R6 eingefügt, die den Eingangsstrom auf den normalen Wert reduzieren.

Um DTM2 anzusprechen, wird PC-DTR auf negativ (DTR-), PC-RTS auf positiv (RTS+) gesetzt. D3 sperrt dann den Eingang von DMM1, D1 und D2 sperren den Sender im DMM1.

Auswahl des DMM nach Bild 2
Zustand PC-DTR PC-RTS
Ruhezustand
- (neg.) = DTR-
- (neg.) = RTS-
DMM1
+ (pos.) = DTR+
- (neg.) = RTS-
DMM2
- (neg.) = DTR-
+ (pos.) = RTS+

Da die Empfänger (Opto-LED) nicht mehr bipolar angesteuert werden, sind die Ansteuerbedingungen etwas kritisch. Zum Sperren von DMM1 muss nämlich die Spannung RTS+ >= TxD+ sein. Damit andererseits der Eingang im aktivierten Zustand (RTS-) stromlos werden kann, muss RTS- >= TxD- sein können (vorzeichenrichtig, d.h. betragsmäßig muss RTS <= TxD sein). Entsprechend gilt für DMM2, dass zum Sperren DTR+ >= TxD+ sein muss, zum Stromlosmachen bei aktiviert DTR- >= TxD- (vorzeichenrichtig, d.h. betragsmäßig muss DTR <= TxD sein). Diese Bedingungen sind (ausreichend) erfüllt, wenn alle Ausgangs-Spannungen der PC-Schnittstelle etwa gleich groß sind (+/- 1 V). Falls sie aber aus irgendwelchen Gründen stärker abweichen, arbeitet die Schaltung möglicherweise nicht mehr richtig. Man könnte das Verhalten verbessern, wenn man anstelle R5/R6 Z-Dioden einsetzt (ca. 7...10 V), die eine definiertere Umschaltschwelle erzeugen. Im Idealfall sollte der Zenerwert etwa so groß sein, wie die Ausgangsspannung des RTS/DTR, dann liegt die Umschaltschwelle für TxD etwa so wie in der Originalbeschaltung (um 4 V). Im Zweifelsfall sollte man die Schaltzustände nachprüfen. Dazu müssen die folgenden Fälle geprüft werden (vorzeichenrichtig gemessen):

Fall TxD PC-DTR PC-RTS Messen am DMM
DMM1 gesperrt
+
 
+
TxD1 - GND1 <= +1 V
DMM1 aktiv, stromlos
-
 
-
TxD1 - GND1 <= +1 V
DMM2 gesperrt
+
+
 
TxD2 - GND2 <= +1 V
DMM2 aktiv, stromlos
-
-
 
TxD2 - GND2 <= +1 V

Die notwendigen Signalzustände für TxD, DTR, RTS für den Test kann man einfach über ein kurzes Testprogramm erzeugen. Und das Gerät kann die Spannungswerte dann auch gleich selber messen.

Automatischer Betrieb (COMM)

Beide Schaltungsvarianten für dualen Betrieb haben die Einschränkung, dass natürlich immer nur 1 DMM senden darf, das andere wird in dieser Zeit nicht beachtet. Bei der zweiten Schaltung ist das automatisch der Fall, weil ja auch nur das passende DMM angefragt wird. Allerdings gibt es beim M4650CR optional noch den automatischen Betrieb mit der Taste COMM, bei dem die Sendungen der DMM regelmäßig (etwa 1 pro sec) und ohne Anforderung kommen. Da die Sendungen von 2 derart betriebenen DMM asynchron sind, kann es Überlappungen geben, so dass beim Umschalten auf das andere DMM dessen Sendung gerade noch läuft, also nur zerstückelt empfangen werden kann. Dieser Nachteil lässt sich aber problemlos per Software abfangen, indem bei jedem Empfangstelegramm die Vollständigkeit geprüft wird. Wurden nicht alle Zeichen empfangen, wartet die Software auf eine weitere Sendung, bevor zum anderen DMM zurück geschaltet wird.

Nun könnte man der Einfachheit halber auch auf den automatischen Betrieb verzichten und immer nur mit dem Abfragebefehl arbeiten, aber einerseits haben nicht alle DMM solch einen abfragegesteuerten Betrieb, andererseits hat das M4650CR eine Macke, die den automatischen Betrieb verlangt. Das M4650CR schaltet sich nämlich zur Stromersparnis nach wenigen Minuten aus. Eigentlich sollte das aber nicht erfolgen, wenn man in kurzen Abständen die Messwertabfrage über die serielle Schnittstelle vornimmt. Das macht schließlich keinen Sinn. Leider funktioniert das aber nicht bzw. nicht immer. Wenn nämlich der Messwert längere Zeit unverändert bleibt (etwa, weil lange Zeit 0,0 V gemessen wird), schaltet sich das Gerät trotzdem ab. Das ist besonders dann unangenehm bzw. unbrauchbar, wenn man automatische Langzeitmessungen machen will, etwa um die Spannung eines Solarpanels über Tage aufzuzeichnen, wo nachts (meistens) keine Spannung rauskommt. Für solche Fälle muss der automatische Betrieb mit COMM gewählt werden.

Softwaresteuerung

Es gibt fertige Programme, die mit unterschiedlichen DMM arbeiten können. Sie sind relativ komfortabel, erlauben listenmäßige Ausgaben, die auch speicherbar sind und stellen Messwerte in Diagrammen dar. Aber für spezielle Zwecke wird man vielleicht eine eigene Software-Lösung haben wollen. Es bietet sich an, solch ein Programm in MS VisualBasic (VB) oder in der MS Office Makrosprache Visual Basic for Applications (VBA) zu schreiben, wenn man die Daten etwa in Excel nutzen möchte. Man kann dann die Messwerte gleich in ein Tabellenblatt eintragen lassen, ohne den Umweg einer Protokolldatei mit Datenimport.

In VB/VBA gibt es verschiedene Möglichkeiten, die serielle Schnittstelle unter Windows zu bedienen. Relativ einfach in der Handhabung ist das OCX-Control MSCOMM32.ocx, das jedoch nicht auf jedem PC vorhanden ist. Die universellste, aber auch komplizierteste Lösung sind die API-Funktionen aus der WIN16API in user.dll (OpenComm etc.) bzw. WIN32API in kernel32.dll (CreateFile, WriteFile etc.). Beispiele für WIN32 findet man etwa bei T.Torii (IWATSU) und Darren Richards bzw. bei Varianten davon. Daneben gibt es verschiedene kostenpflichtige oder auch - für nicht kommerzielle Anwendungen - kostenlose DLL-Bibliotheken. Ich habe mich mit mehreren Möglichkeiten beschäftigt, aber die RSAPI.dll von H.J. Berndt [1] ist zumindest eine recht einfach handhabbare Lösung.

Es gibt von der RSAPI.dll verschiedene Versionen, zuletzt V1.22 (wie in seinem Buch in der 3. Auflage/2005 verbreitet [1]). Beim Einsatz unter Win2000/XP gibt es aber ein Problem, weil möglicherweise bei Dauerbetrieb nach kurzer Zeit die Schnittstelle "taub" wird und neu gestartet werden muss. Berndt bietet daher auf seiner WebSite noch eine mit Delphi compilierte Testversion an, die diesbezüglich funktioniert. Allerdings ist diese Version noch fehlerhaft bzw. funktioniert teilweise anders als die Standardversion: Der Timeout entspricht bei V1.22 der Wartezeit in ms auf ein zu empfangendes Zeichen. Kommt keines in dieser Zeit, bricht der Read-Befehl ab. Bei V1.7 startet die Wartezeit jedoch für jedes zu empfangende Zeichen neu und ist damit abhängig von der Anzahl der zu empfangenden Zeichen. Möchte man z.B. 14 Zeichen empfangen und übergibt als Timeout 2000, endet die Wartezeit bei V1.22 nach 2 sec, bei V1.7 hingegen nach 30 sec. Außerdem wird beim Öffnen der Schnittstelle RTS auf positiv gesetzt, bei V1.22 blieb RTS auf negativ (DTR geht in beiden Fällen auf positiv). Das lässt sich aber bei der Verwendung berücksichtigen.

RSAPI32
Eigenschaft Buch 1999 (2.) Online Buch 2005 (3.) Testversion
Dateiname RSAPI32.exe zur Installation RSAPI.DLL RSAPI.DLL RSAPI.DLL
Dateiversion 1.10 1.20 1.22 (1.2.2.0) 1.7.01
Beschreibung   32 Bit DLL 32 Bit DLL Testversion
Produktversion       1.0.0.0
Dateigröße 62.053 59.301 (57,9 kB) 60.491 (59,0 kB) 54.784 (53,5 kB)
Dateidatum 09.09.1998   14.04.2001 31.10.2007
interner Name   RSAPI32 RSAPI32  
Copyright   Berndt 2000 Berndt 2001 Berndt 2007
System Win 95/98 Win 95/98/NT4 Win 95/98/Me/ NT/2000 Win2000/XP
Quelle faustweb,
Buch [2]
Berndt Online (eMail) Buch [1] Berndt Online (Download)
Hinweis   Infos   Infos (siehe dort unter "Probleme mit TIMEOUT...")

Übrigens verwendet Kettler die RSAPI.dll in Version 1.20 für seine Ergometer-Excel-Mappen, mit denen man u.a. die Belastungsprofile in den Ergometern modifizieren kann. Die Mappen gibt es allerdings leider nicht mehr direkt bei Kettler, es sind nur noch ältere Varianten bei sportolino.de zum Download verfügbar. Bei der Installation wird die RSAPI.dll mit installiert. Die Anwendung der RSAPI.dll ist in dem Buch [1] ausführlich und verständlich beschrieben, mit vielen Beispielen (die auch noch die vielfältigen zusätzlichen Funktionen in der Bibliothek betreffen), zusätzlich gibt es auch noch eine RSAPI.hlp-Hilfedatei.

Beispiel mit RSAPI.dll

in nachfolgendem Beispiel wird die Ansteuerung des M4650CR und ähnlicher DMM mit serieller Schnittstelle unter Verwendung der RSAPI.dll mit Excel 2000 VBA demonstriert. Das Programm kann leicht auf eigene Bedürfnisse erweitert werden.

Option Explicit

Declare Function OPENCOM Lib "RSAPI.DLL" (ByVal Parameter As String) As Integer
Declare Function CLOSECOM Lib "RSAPI.DLL" () As Integer
Declare Function SENDSTRING Lib "RSAPI.DLL" (ByVal S As String) As Integer
Declare Function TIMEOUT Lib "RSAPI.DLL" (ByVal ms As Integer) As Integer
Declare Function READSTRING Lib "RSAPI.DLL" (ByVal S As String) As Integer
Declare Sub RTS Lib "RSAPI.DLL" (ByVal EinsNull As Integer)
Declare Sub DTR Lib "RSAPI.DLL" (ByVal EinsNull As Integer)

Sub Test_RSAPI()
'Grundfunktion mit M4650CR testen

Dim strData As String
Dim cbRead As Long
Dim x

'Schnittstelle COM1 öffnen
x = OPENCOM("COM1:1200,N,7,2")

'DMM1 aktivieren (bei "alter" API nicht unbedingt nötig)
DTR 1 'pos.
RTS 0 'neg.

'Timout stellen für fehlende Antwort (2 sec bei V1.2x, 30 sec bei Testversion)
x = TIMEOUT(2000)

'Anfrage senden
x = SENDSTRING("D")

'Antwort abrufen aus Puffer (ggf. bis Timeout warten)
strData = String(14, "*")
cbRead = READSTRING(strData)

'Ergebnis anzeigen (wenn nichts empfangen, bleiben * enthalten)
Debug.Print cbRead, strData

'COM schließen
x = CLOSECOM()

End Sub

Wenn man das zweite DMM ansteuern möchte (nach Bild 2), muss man lediglich vor dem Senden des "D"-Kommandos die Schnittstellen-Signale DTR auf 0 (neg.) und RTS auf 1 (pos.) setzen. Beim Timeout-Befehl ist zu beachten, dass mit RSAPI V1.2x beispielsweise der Wert 2000 eine Wartezeit von 2 sec bedeutet, bei der Testversion für WinXP V1.7 jedoch 30 sec (bei 14 zu empfangenden Zeichen).

Quellen und Links

[1] Buch: H.J. Berndt / B. Kainka, Messen Steuern und Regeln mit Word & Excel, VBA-Makros für die serielle Schnittstelle (3. Auflage, 2005), mit CD, ISBN 3-7723-4094-6,
[2] dgl. Vorausgabe (2. Auflage, 1999), ISBN 3-7723-4093-8

[3] Software und Tipps zur seriellen Ansteuerung von DMM http://home.arcor.de/bernd_kunze/selfprog.htm

[4] Schnittstelleneigenschaften vieler DMM http://www.mtoussaint.de/cdmm/doc/index.html

[5] METEX DMM sind kaum noch lieferbar, es gab mal das M-3640D bei Westfalia unter Artikel-Nummer 441196, jetzt nicht mehr

[6] (entf.)

[7] Eigenschaften der RS232-Schnittstellen http://www.lookrs232.com/

[ Übersicht | SiteMap & Links | Verkäufe Akt. | Verkäufe Hist. | EURACOM | GPS Navigation | M4650CR | M9803R | Back-UPS | Oki C5400 | GS9000 | Impressum & Kontakt ]

nach oben Menü Home

© Reinhard Weiß 2013, letzte Änderung: 19.03.2015 12:43 / 2