Eine DLL für das CompuLAB-USB

(28.7.03)

Eine DLL kann die Entwicklung eigener Programme vereinfachen, weil sie fertige Funktionen zur Verfügung stellt. So unterstützt die RSAPI-DLL z.B. das CompuLAB und andere Interfaces von AK-Modul-Bus. Die Verwendung mit Visual Basic ist einfach. Auch mit Logo wird der Zugang auf Interfaces mit serieller Schnittstelle ermöglicht. Damit der USB nicht ausgeschlossen bleibt, wurde nun auch eine spezielle DLL für das CompuLAB-USB entwickelt. Sie hilft nicht nur Logo-Anwendern, sondern vereinfacht auch die Arbeit mit Visual Basic oder Delphi. Die CLUSB.DLL wurde in Delphi 4 geschrieben und steht zum freien Download bereit. Der Quelltext wird hier ebenfalls frei zur Verfügung gestellt, damit jeder Anwender sich individuelle Erweiterungen schreiben kann.

Download der DLL incl. Quelltext und VB-Anwendungsbeispiel (clusb.zip, 35 KB)

Verwendung der DLL mit Visual Basic

Die CLUSB.DLL ermöglicht Zugriffe auf die digitalen Eingänge, die digitalen Ausgänge und die Analogeingänge des CompuLAB-USB. Das folgende Programm in VB5/6 demonstriert die Anwendung der Grundfunktionen. Es entspricht dem bereits vorgestellten Anwendungsbeispiel der RSAPI.DLL (vgl. CompaS 26). Als einziger Unterschied fällt auf, dass die Analogeingänge nun mit einer Auflösung von 10 Bit gelesen werden und Werte bis 1023 liefern.

Die DLL muss vor dem ersten Einsatz in das Windows-Verzeichnis oder in das Verzeichnis Windows/System kopiert werden. Damit Visual Basic die einzelnen DLL-Funktionen nutzen kann, müssen sie in einem getrennten Modul CLUSB.BAS deklariert werden.

Declare Sub INIT Lib "CLUSB" ()

Declare Sub DOUT Lib "CLUSB" (ByVal Wert%)

Declare Function DIN Lib "CLUSB" () As Integer

Declare Function AIN Lib "CLUSB" (ByVal Eingang%) As Integer

Die Deklarationen in CLUSB.BAS

Die einzelnen Aufrufe unterscheiden sich kaum von den schon gewohnten Aufrufen der RSAPI.DLL. Die Initialisierung des Geräts mit INIT stellt den Grundzustand her legt damit fest, welche Eingange als Analogeingänge verwendet werden. Da die Initialisierung beim Laden der DLL automatisch erfolgt, muss INIT im Programm nicht unbedingt aufgerufen werden.

Private Sub Form_Load()

    'INIT

End Sub



Private Sub Timer1_Timer()

  Ausgabe = HScroll1.Value

  Text1.Text = Str$(Ausgabe)

  DOUT Ausgabe

  Text2.Text = Str$(DIN())

  Text3.Text = Str$(AIN(1))

  Text4.Text = Str$(AIN(2))

End Sub

Aufrufe der DLL-Funktionen DIN, DOUT und AIN

Entwicklung der DLL in Delphi

Die CLUSB.DLL wurde in Delphi 4 geschrieben. Der Quelltext soll hier in kurzer Form erläutert werden, damit Anwender ihre eigenen Erweiterungen und Verbesserungen programmieren können. Erklärungen zu den USB-Zugriffe mit Delphi findet man in [1], der Aufbau einer DLL wird in [1] erläutert. In der DLL wurde bereits kleine Änderungen gegenüber der ursprünglich für Windows98 entwickelten Software berücksichtigt, die vor allem die Zuverlässigkeit unter Windows XP verbessern.

library CLUSB;



...

...



procedure InOut;

var DeviceHandle: THandle;

    nBytes: DWord;

    bResult: Boolean;

    lIn: _lIn;

    lOut: _lOut;

begin

  lIn.bFunction := 6;

  lIn.bValue1 := DigOut;

  DeviceHandle := CreateFile ('\\.\CompuLABusb_0',Generic_write,File_Share_write,nil,open_existing,0,0);

  bResult := false;

  if (DeviceHandle <> INVALID_HANDLE_VALUE) then begin

     bResult := DeviceIoControl(DeviceHandle,$08,@lIn,sizeof(lIn),@lOut,sizeof (lOut),nBytes,nil);

     CloseHandle (DeviceHandle);

  end;

  if bResult then begin

    DigIn := lOut.bValue1;

    ADCA := (4*lOut.bValue2+ (lOut.bValue4 and 15));

    ADCB := (4*lOut.bValue3+ (lOut.bValue4 div 15));

  end;

end;



procedure DOUT (Value: Integer); stdcall;

begin

  DigOut := Value;

  InOut;

end;



function DIN: Integer; stdcall;

begin

  InOut;

  result := DigIn;

end;



function AIN (Kanal: Integer): Integer; stdcall;

begin

  InOut;

  if Kanal = 1 then result := ADCA else result := ADCB;

end;



...

...



exports

  DIN index 1,

  DOUT index 2,

  AIN index 3,

  INIT index 4;



...

...

Auszüge aus dem Quelltext

Die DLL exportiert vier Prozeduren bzw. Funktionen. Alle Zugriffe auf das Interface laufen über die Prozedur InOut, die gegenüber bisherigen Versionen eine verbesserte Fehlerbehandlung hat.

Bei Bedarf kann jeder die DLL erweitern und verbessern. Die Liste möglicher Erweiterungen ist lang: Man könnte die gleichzeitige Verwendung mehrerer Geräte zulassen. Die Digitaleingänge lassen sich als zusätzliche Analogeingänge nutzen. Denkbar ist auch ein kombinierter und schnellerer Zugriff auf alle Ein- und Ausgänge, um mit einem einzigen Aufruf von InOut alle Daten gemeinsam zu übertragen.

Literatur:
B. Kainka, Messen, Steuern und Regeln mit USB, Franzis-Verlag 2000 (Inhalt)
B. Kainka, Handbuch der PC-Mess- und Steuertechnik, Franzis-Verlag 2001 (Inhalt)

Siehe auch:
Technische Daten des CompuLAB-USB und aktueller Treiber: www.ak-modul-bus.de/technik


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