Stadi szoftver oldala

Click here for English version

Parallel Port Unit for Delphi

Az interneten rengeteg információ érhető el a párhuzamos port szoftveres kezeléséről, ám ezek szinte kivétel nélkül a hagyományos, port alapján történő címzést taglalják. Ezzel több gond is van: Windows NT-ben és utódaiban (2000, XP, Vista, Windows 7) a portokat nem érhetjük el közvetlenül, szükség van hozzá egy segédprogramra. Másrészt a mai alaplapokról már kezdik elhagyni a párhuzamos portot. Utóbbi esetben kézenfekvőnek látszik egy PCI vagy PCI Express foglalatba dugható párhuzamos port kártya használata, azonban ezek nem vezérelhetők a hagyományos módon, mivel más a felépítésük, emellett nem is a megszokott címekre reagálnak. A Windows ugyanakkor remekül elboldogul ezekkel a kártyákkal. Tehát lennie kell valami módnak arra, hogy egy (akár Delphi) fejlesztői környezetből is vezérelhessük e káryák portjait (is). A megoldás kézenfekvő: a Windows API-t kell használni. Sajnos azonban az interneten rendkívül kevés információt lehet találni erről. Az alábbiakban részletezett unit Andrey V. Lelikov OpenParPort projektjének delphis megfelelője.

A parport unit használata

Ez a unit lehetővé teszi a párhuzamos port használatát Delphiből, a Windows API használatával. Funkcióit az alábbi felületen keresztül érhetjük el:

type TParPortReg=(TPRData,TPRControl,TPRStatus);

A TParPortReg felsorolt típus segítségével egyszerűen hivatkozhatunk a párhuzamos port adat-, vezérlő- és állapotportjára.

function OpenParPort(PortNumber: Integer): THandle;

Az OpenParPort függvény megnyitja a PortNumber-ben megadott számú LPT portot. A port száma ugyanaz, mint amit a Windows Eszközkezelőjéből kiolvashatunk. A port handle-je a visszatérési érték.

procedure WriteParPort(Port: THandle; Reg: TParPortReg; Value: Byte);

A WriteParPort eljárás a Port-ban adott port Reg regiszterébe írja a Value értéket.

function ReadParPort(Port: THandle; Reg: TParPortReg): Byte;

A ReadParPort függvény a Port-ban adott port Reg regiszteréből kiolvasott értéket adja vissza.

procedure CloseParPort(Port: THandle);

A CloseParPort függvény lezárja a Port handle-t.

Hiányosságok

A WriteParPort csak a TPRData és TPRControl portokat tudja írni.
A ReadParPort csak a TPRStatus portot tudja olvasni.

Felhasználási feltételek

A parport unit ingyenes szoftver és a GNU LGPL 2.1 (vagy újabb) licenszfeltételei alapján használható, terjeszthető illetve módosítható. A licensz a Free Software Foundation honlapján olvasható.

Teszteredmények

A unit-ot Windows XP Professional x86 SP3 rendszeren teszteltem egy alaplapi LPT porttal és egy NM9835 chipes PCI kártyával. Kérem, hogy aki más bővítőkártyával és/vagy más operációs rendszerrel (különös tekintettel a Vistára, a Windows 7-re, valamint a 64-bites rendszerekre) próbálta a parport unit-ot, jelezze nekem a stadi kukac stadi pont hu e-mail címen.

Letöltés

parport.pas - a parport unit

Példák

A parport unit használatát bemutató demo konzolalkalmazást külön oldalon részletezem.

Ami ebben nincs benne, az a telepített és épp nem foglalt párhuzamos portok listázása. Erre használható az alábbi kódrészlet, amely a Form1 megjelenítésekor a ComboBox1-be tölti az elérhető portok listáját:

procedure TForm1.FormShow(Sender: TObject);
var
  h: THandle;
  i: Integer;
begin
  ComboBox1.Items.Clear;
  for i:=1 to 20 do
    begin
      h:=OpenParPort(i);
      if h<>INVALID_HANDLE_VALUE then
        begin
          CloseParPort(h);
          ComboBox1.Items.Add('LPT'+IntToStr(i));
        end;
    end;
  if ComboBox1.Items.Count>0 then ComboBox1.ItemIndex:=0;
end;

Felhasznált anyagok

Ez a unit Andrey V. Lelikov OpenParPort projektje alapján készült.

Kapcsolat

Észrevételeket, javaslatokat, köszönőleveleket :) az alábbi címre lehet küldeni:

stadi kukac stadi pont hu