Eigene Programme für den Datenlogger DL410

Hier wird gezeigt, wie man das DL410 in Visual Basic und in C++ selbst ansteuern kann. Ausgangspunkt der Bemühungen war, dass Zellabor nicht alle Aufgaben löst. Vor allem beim Auslesen größerer Datenmengen kommt es auf einigen PCs unter Windows XP zu Lesefehlern. Außerdem verwendet Zellabor nur die Speichergröße 6 kB der alten Zelle, das DL410 hat aber wesentlich mehr Speicherplatz.

Programmieren mit Visual Basic

Das hier vorgestellte VB-Programm ermöglicht die freie Definition einer Messserie mit Datenmengen bis zu 60 KB. Man wählt zunächst die aktiven Analogeingänge K1 bis K4, die Anzahl der Messungen und die Zeit zwischen zwei Einzelmessungen. Diese Parameter werden dann an das Gerät übertragen. Die Messung beginnt entweder mit der Starttaste oder mit einem Startkommando über die Schaltfläche "Starten". Reset/Stop unterbricht eine laufende Messung. Mit der Auslesen-Schaltfläche überträgt man den Messdaten aus dem Gerät in eine Textdatei. Für besondere Aufgaben kann auch ein eigenes Simpel-Programm die Datenerfassung steuern, das man mit Zellabor entwickelt und in den Datenlogger übertragen hat. In diesem Fall wird die Messung mit der Programmstart-Schaltfläche gestartet.

Download des VB-Projekts mit Quelltexten und Exe-Datei: DL410vb.zip (40 KB)

Die Ausgabedatei enthält in der ersten Spalte die Nummer der Einzelmessung und in den folgenden Spalten die Roh-Messdaten als Zahlenwerte zwischen 0 und 255. Die Datei kann z.B. für die weitere Verarbeitung in Excel eingelesen werden.

 1       33      109     0       87
 2       34      109     0       88
 3       34      109     0       89
 4       33      109     0       89
 5       35      109     0       88
 6       33      109     0       88
 7       33      109     0       87
 8       34      109     0       86
 9       33      109     0       85
 10      35      109     0       84

Das Programm verwendet die ELEXS-DLL für die Kommunikation über die serielle Schnittstelle. Das Modul Elexs.bas enthält alle Deklarationen der vorhandenen DLL-Funktionen.

Declare Function OPENCOM Lib "ELEXS" (ByVal OpenString$) As Integer
Declare Sub TIMEOUTS Lib "ELEXS" (ByVal b%)
Declare Sub CLOSECOM Lib "ELEXS" ()
Declare Sub SENDBYTE Lib "ELEXS" (ByVal Dat%)
Declare Function READBYTE Lib "ELEXS" () As Integer
Declare Sub DTR Lib "ELEXS" (ByVal b%)
Declare Sub RTS Lib "ELEXS" (ByVal b%)
Declare Sub TXD Lib "ELEXS" (ByVal b%)
Declare Function GETCOM Lib "ELEXS" () As Integer
Declare Function CTS Lib "ELEXS" () As Integer
Declare Function DSR Lib "ELEXS" () As Integer
Declare Function RI Lib "ELEXS" () As Integer
Declare Function DCD Lib "ELEXS" () As Integer
Declare Function INPUTS Lib "ELEXS" () As Integer
Declare Sub TIMEINIT Lib "ELEXS" ()
Declare Function TIMEREAD Lib "ELEXS" () As Double
Declare Sub DELAY Lib "ELEXS" (ByVal ms As Double)
Declare Sub REALTIME Lib "ELEXS" ()
Declare Sub NORMALTIME Lib "ELEXS" ()

Das Modul Elexs.bas

Das Programm evrwendet die serielle Schnittstelle COM1. TIMEOUTS 300 ist wichtig für PCs, die sich in einem Netzwerk befinden. Dabei kann es zu Verzögerungen kommen, während die eigene Software auf den Empfang eines Bytes wartet. Erst nach 300 ms ohne Empfang wird der versuch abgebrochen. TIMEINIT sorgt für die korrekte Funktion der DELAY-Funktion.

Private Sub Form_Load()
  i = OPENCOM("COM1:9600,N,8,1")
  If i = 0 Then MsgBox ("COM Interface Error")
  TIMEOUTS 300
  TIMEINIT
End Sub

Die Definition einer Messserie startet mit dem Byte-Kommando 1. Es folgen Anzahl der Messungen (Highbyte, Lowbyte), die aktiven Kanäle und die Verzögerungszeit (Highbyte, Lowbyte). Das gesamte Protokoll ist im Systemhangbuch der Zelle beschreiben, das man im Software-Archiv in Elexs findet.

SENDBYTE 1
SENDBYTE (Anzahl \ 256)
SENDBYTE (Anzahl And 255)
SENDBYTE 1 * Check1.Value
SENDBYTE 2 * Check2.Value
SENDBYTE 3 * Check3.Value
SENDBYTE 4 * Check4.Value
SENDBYTE (Zeit \ 256)
SENDBYTE (Zeit And 255)

Start und Stopp einer Messung bestehen jeweils nur aus einem Steuerbyte:

Private Sub Programmstart_Click()
SENDBYTE 6
End Sub

Private Sub Reset_Click()
SENDBYTE 0
End Sub

Das Auslesen einer Messung wird mit einem Kommandobyte 2 eingeleitet. Danach wird jedes Datenbyte mit einem gesendeten Byte 1 angefordert und mit READBYTE empfangen. Der gesamte Datensatz enthält in den ersten acht Bytes die Parameter der Messung, wie sie beim Start der Messung festgelegt wurden. Daraus berechnet das Programm die Gesamtmenge der zu ladenden Daten und die Zuordnung zu den einzelnen Kanälen.

SENDBYTE 2
SENDBYTE 1
d1 = READBYTE
SENDBYTE 1
d2 = READBYTE
SENDBYTE 1
d3 = READBYTE
SENDBYTE 1
d4 = READBYTE
SENDBYTE 1
d5 = READBYTE
SENDBYTE 1
d6 = READBYTE
SENDBYTE 1
d7 = READBYTE
SENDBYTE 1
d8 = READBYTE


Ein Programmbeispiel in C++

Dieses Programmbeispiel von Fritz Günther zeigt, wie man direkte Abfragen der Analogeingänge in C++ programmiert. Der verwendete Compiler ist Visual C++ 6.0 von Microsoft. Der interessierte Anwender kann Klassenbibliotheken des Projekts auch für andere Aufgaben einsetzen. So lassen sich z.B. in ähnlicher Weise auch andere Interfaces ansprechen.

Download des kompletten Projekts mit Quelltexten und Exe-Datei: DL410cpp.zip (201 KB)


Zurück zur Startseite der MB-News
Zurück zur Startseite AK-Modul-Bus