Tech-Ecke / Delphi Inhalt / Velleman USB-Board und die K8055D.DLL

 

     Velleman USB-Board und die K8055D.DLL

 

Der LPT-Port wird von Bastlern immer wieder gerne als Schnittstelle für eigene Schalt/Steuerprojekte benutzt. Leider verschwindet der LPT-Port mehr und mehr von der Bildfläche und hinterlässt an dieser Stelle erst mal eine Lücke, die mit PC-Bordmitteln so nicht zu stopfen ist. Zwar hat man als PC-Desktop-Besitzer zurzeit noch die Möglichkeit eine PCI-I/O-Karte mit einem LPT-Port nachzurüsten, jedoch schwindet auch die Anzahl der zur Verfügung stehenden PCI-Steckplatze mehr und mehr... An dieser Stelle sei auch nochmals angemerkt, dass den USB-Parallel-Adapter kein weiterer Nutzen zu entlocken ist, als eine Schnittstelle für ältere Drucker über USB zu bieten. Mehr geht damit in aller Regel nicht! Eine recht preiswerte und zudem auch sicherere Alternative zum "echten" LPT-Port bietet hier z.B. das "USB Experiment Interface Board" von der Fa. Velleman.

Neben acht digitalen Aus- und fünf Eingängen, bietet das Board zusätzlich noch zwei analoge (8-Bit) Ein - und Ausgänge, sowie zwei analoge Ausgänge mit PWM (Pulsweitenmodulation). Mittels der mitgelieferten K8055D.DLL kann man das Board recht einfach aus seinem eigenen Delphiprogramm heraus ansteuern. Einziger, aber auch sehr schmerzhafter Nachteil ist die Geschwindigkeit. Die Befehlszeit beträgt 20ms und die Eingänge werden sogar nur alle 100ms Sekunden Abgefragt. Da ist selbst unter Windows der LPT-Port noch um einiges Schneller :-(

   Grundlegendes zu DLL's

Eine DLL Datei (Dynamic Link Library ) ist eine Library welche Programmroutinen enthält, die man für sein eigenes Programm nutzen kann. Zum Einbinden der DLL fügt man die unten aufgeführten Zeilen, direkt hinter implementation, im eigenen Programm ein. Jeder "Befehl" den man aus der DLL nutzen möchte muss hier zusammen mit der DLL separat angegeben werden. Die Angabe des DLL-Pfades ist dann nicht nötig, wenn die DLL im Pfad der Anwendung oder im Windows-Systemverzeichnis liegt. Die K8055D bietet und folgenden Befehlssatz zur Ansteuerung des Boards:

Befehler mit Rückgabewert:
OpenDevice, ReadDigitalChannel, ReadAnalogChannel, ReadAllDigital, ReadCounter

Befehle ohne Rückgabewert:
CloseDevice, SetDigitalChannel, ClearDigitalChannel, ClearAllDigital, OutputAnalogChannel, OutputAllAnalog, ClearAnalogChannel, ClearAllAnalog, SetAnalogChannel, SetAllAnalog, WriteAllDigital, SetAllDigital, ResetCounter, SetCounterDebounceTime

 

  implementation

{$R *.dfm}

procedure CloseDevice; stdcall; external 'K8055d.dll';
procedure SetDigitalChannel(Channel: Longint); stdcall; external 'K8055d.dll' ;
procedure ClearDigitalChannel(Channel: Longint); stdcall; external 'K8055d.dll';
procedure ClearAllDigital; stdcall; external 'K8055d.dll';
procedure OutputAnalogChannel(Channel: Longint; Data: Longint); stdcall; external 'K8055d.dll';
procedure OutputAllAnalog(Data1: Longint; Data2: Longint); stdcall; external 'K8055d.dll';
procedure ClearAnalogChannel(Channel: Longint); stdcall ; external 'K8055d.dll';
procedure ClearAllAnalog; stdcall; external 'K8055d.dll';
procedure SetAnalogChannel(Channel: Longint); stdcall; external 'K8055d.dll';
procedure SetAllAnalog; stdcall ; external 'K8055d.dll';
procedure WriteAllDigital(Data: Longint);stdcall; external 'K8055d.dll' ;
procedure SetAllDigital; stdcall; external 'K8055d.dll';
procedure ResetCounter(CounterNr: Longint); stdcall; external 'K8055d.dll';
procedure SetCounterDebounceTime(CounterNr, DebounceTime:Longint); stdcall; external 'K8055d.dll';
function OpenDevice(CardAdress:Longint):Longint; stdcall; external 'K8055d.dll';
function ReadDigitalChannel(Channel: Longint): Boolean; stdcall ; external 'K8055d.dll';
function ReadAnalogChannel(Channel: Longint):Longint; stdcall; external 'K8055d.dll';
function ReadAllDigital: Longint; stdcall; external 'K8055d.dll';
function ReadCounter(CounterNr: Longint): Longint; stdcall; external 'K8055d.dll';

 

 

   Die wichtigsten Befehle

 

An- und Abmelden vom Board:

Bevor man auf das Board zugreifen kann muss es zunächst angemeldet werden, dies geschieht im Programm mit:

  OpenDevice(0)
 

Es ist möglich bis zu 4 Boards gleichzeitig an einem PC zu betreiben. Da OpenDevice(x) einen Rückgabewert liefert und zwar die Nummer (als Integer) des angemeldeten Boards bzw. ob überhaupt ein Board vorhanden ist (wenn nicht -> -1) , sollte man dies auch gleich bei der Anmeldung mit Abfragen:

  if OpenDevice(0) = -1 then
     Application.MessageBox ('Es wurde kein Board gefunden!','Hinweis!',MB_OK +MB_IconExclamation);
 

Das Abmelden vom Board geschieht mittels:

  CloseDevice(0)
 


Digitale Ausgänge schalten:

Setzen eines Ausgangs: Setzen aller digitalen Ausgänge
  SetDigitalChannel(3);     // Schaltet den 3. Ausgang ein
  SetAllDigital;     // Schaltet alle digitalen Ausgänge ein
 
Zurücksetzen eines Ausgangs: Zurücksetzen aller digitalen Ausgänge:
  ClearDigitalChannel(3);     // Schaltet den 3. Ausgang aus
  ClearAllDigital;     // Schaltet alle digitalen Ausgänge aus
 


Digitale Eingänge auslesen:

Zum Auslesen der digitalen Eingänge dient ReadDigitalChannel(x). Der Befehl liefert ein Boolean-Rückgabewert true oder false.

  if ReadDigitalChannel(5) = true then ShowMessage('Eingang 5 ist beanschlagt');
 

"Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !"

[letzte Aktualisierung 23.08.2009]