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