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 der Stelle erst mal eine Lücke. An der Stelle sei auch noch mal erwähnt, dass den USB-Parallel-Adaptern aus Fernost kein weiterer Nutzen zu entlocken ist, als eine Schnittstelle für ältere Drucker per USB zu bieten. Als Schnittstelle für selbst gebastelte Steuer- und Regelelektronik sind diese Teile nicht zu gebrauchen. Ein Adapter könnte dazu eventuell in der Lage sein, der "UC100 USB zu LPT", aber dieser kostet um die 100 EUR und das war mir der Versuch noch nicht wert.

Als PC-Desktop-Besitzer hat man zurzeit noch die Möglichkeit eine PCI-I/O-Karte mit einem LPT-Port nachzurüsten, wenn man denn noch einen PCI-Steckplatz zur Verfügung hat. Als Notebook-Besitzer hat man eventuell die Chance per PCMCIA-LPT-Karte einen "echten" LPT-Port nachzurüsten aber die PCMCIA-Steckplätze sind am aussterben.
 
Eine recht preiswerte und zudem auch sicherere Alternative zum "echten" LPT-Port bietet hier 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');
 

   Download  K8055D.DLL

Für den Fall dass jemand das Board ohne CD ergattert hat, hier die benötigte DLL zum Herunterladen.

  K8055D.DLL

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

[letzte Aktualisierung 23.08.2009]