UPOTREBA BIBLIOTEKE IO.DLL U DELPHI-U

 

Biblioteku VBIO.DLL moguće je koristiti samo na Windows98 i WindowsMe platforma, dok biblioteka IO.DLL može da se koristi na svim Windows operativnim sistemima. Kao primer upotrebe ove biblioteke daćemo primer programa elektronskog semafora koji koristi ovu biblioteku.Biblioteka IO.DLL sadrži sledeće funkcije i procedure:

procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';

procedure PortWordOut(Port : Word; Data : Word); stdcall; external 'io.dll';

procedure PortDWordOut(Port : Word; Data : DWord); stdcall; external 'io.dll';

function PortIn(Port : Word) : Byte; stdcall; external 'io.dll';

function PortWordIn(Port : Word) : Word; stdcall; external 'io.dll';

function PortDWordIn(Port : Word) : DWord; stdcall; external 'io.dll';

procedure SetPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';

procedure ClrPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';

procedure NotPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';

function GetPortBit(Port : Word; Bit : Byte) : WordBool; stdcall; external 'io.dll';

function RightPortShift(Port : Word; Val : WordBool) : WordBool; stdcall; external 'io.dll';

function LeftPortShift(Port : Word; Val : WordBool) : WordBool; stdcall; external 'io.dll';

function IsDriverInstalled : Boolean; stdcall; external 'io.dll';

Objasnićemo ukratko njihove značenje:

 

PortOut:

Šalje na specifirani port dati bajt. Npr. komandom PortOut(&378, 15) biće poslat broj 15 na Data port.

 

PortWordOut:

Šalje na specifirani port datu reč(16 bita).

 

PortDWordOut:

Šalje na specifirani port datu dvostruku reč(32 bita).

 

PortIn:

Čita sa navedene adrese 1 bajt.

 

PortWordIn:

Čita sa navedene adrese 1 reč(16 bita).

 

PortDWordIn:

Čita sa navedene adrese dvostruku reč(32 bita).

 

GetPortBit:

Ova funkcija ispituje status zadatog bita unutar bajta. Ako je postavljen na 1 vraća vrednost True inače vraća vrednost False.

 

SetPortBit:

Postavlja na datoj adresi, navedeni broj bita na 1. Npr. komandom SetPortBit(&378, 4) biće postavljen četvrti bit  Data porta na 1.

 

ClrPortBit:

Postavlja na datoj adresi, navedeni broj bita na 0. Npr. komandom ClrPortBit(&378, 3) biće postavljen treći bit  Data porta na 0.

 

NotPortBit:

Invertuje zadati bit na datoj adresi. Npr. komandom NotPortBit(&378, 4) biće promenjeno stanje četvrtog bita  Data porta.

 

RightPortShift:

Vrši pomeranje u desno sadržaja na datoj adresi. Ako je u funkciji drugi parametar postavljen na True na najvećoj poziciji biće postavljeno 1 inače ako je

False neće biće postavljeno 0.

 

LeftPortShift:

Vrši pomeranje u levo sadržaja na datoj adresi. Ako je u funkciji drugi parametar postavljen na True na najnižoj poziciji biće postavljeno 1 inače ako je

False neće biće postavljeno 0.

 

IsDriverInstalled:

Ova funkcija vraća vrednost True ako IO.DLL postoji inače vraća False.

 

 PROGRAM ELEKTRONSKOG SEMAFORA

 

Izgled ekrana ovog programa prikazan je na slici 1 (SEMAFORD).

 

 

Slika 1

 

          Klikom mišom na taster Ukljuci pocece sekvenca semafora u trajanju od 10 ciklusa tj. crvena, crveno-žuta, zelena, žuta, crvena itd.. Na našem trokanalnom interfejsu stanje releja biće upravo prema ovoj sekvenci.

          Sam program u Delphiu je:

 

 

unit semafor1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls, Buttons;

 

type

  TForm1 = class(TForm)

    Shape1: TShape;

    Shape2: TShape;

    Shape3: TShape;

    StaticText1: TStaticText;

    BitBtn1: TBitBtn;

    Label1: TLabel;

    GroupBox1: TGroupBox;

    RadioButton1: TRadioButton;

    RadioButton2: TRadioButton;

    RadioButton3: TRadioButton;

    procedure BitBtn1Click(Sender: TObject);

    procedure RadioButton1Click(Sender: TObject);

    procedure RadioButton2Click(Sender: TObject);

    procedure RadioButton3Click(Sender: TObject);

    procedure Adresa(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

  LPTAdresa : Integer;

implementation

 

{$R *.dfm}

 

procedure PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll';

function PortIn(Port: Word): Byte; stdcall; external 'io.dll';

 

procedure Sleep(MilliSecondsToWait: LongInt);

    var StartTime: LongInt;

    begin

      StartTime := GetTickCount;

      while (GetTickCount >= StartTime) and

            (GetTickCount < (StartTime + MilliSecondsToWait)) do

        Application.ProcessMessages

    end {Sleep};

 

procedure TForm1.BitBtn1Click(Sender: TObject);

Var i : byte;

begin

    For i := 1 to 10 do

      Begin

        Shape1.Brush.Color := clRed;

        Shape2.Brush.Color := clWhite;

        Shape3.Brush.Color := clWhite;

        PortOut(LPTAdresa, 1);

        Sleep(2000);

        Shape2.Brush.Color := clYellow;

        PortOut(LPTAdresa, 3);

        Sleep(500);

        Shape1.Brush.Color := clWhite;

        Shape2.Brush.Color := clWhite;

        Shape3.Brush.Color := clLime;

        PortOut(LPTAdresa, 4);

        Sleep(2000);

        Shape3.Brush.Color := clWhite;

        Shape2.Brush.Color := clYellow;

        PortOut(LPTAdresa, 2);

        Sleep(500);

      End;

        PortOut(LPTAdresa, 0);

        Shape1.Brush.Color := clWhite;

        Shape2.Brush.Color := clWhite;

        Shape3.Brush.Color := clWhite;

end;

 

procedure TForm1.RadioButton1Click(Sender: TObject);

begin

    LPTAdresa :=$378;

end;

 

procedure TForm1.RadioButton2Click(Sender: TObject);

begin

   LPTAdresa :=$278;

end;

 

procedure TForm1.RadioButton3Click(Sender: TObject);

begin

   LPTAdresa :=$3BC;

end;

 

procedure TForm1.Adresa(Sender: TObject);

begin

   LPTAdresa :=$378;

end;

 

end.

 

 

          Iz program se vidi da koristimo samo dve procedure Portout i funkciju Portin. Budući da delphi nema Sleep funkciju to je u program dodata najčešće upotrebljavana Sleep procedura koja zadržava program u milisekundama. Takođe je moguće promeniti i adresu paralelnog porta.

http://vojo.milanovic.org
© Copyright, 2004 Milanović Vojo

All Rights Reserved.