Thema: Delphi Parallelport abfragen

Einzelnen Beitrag anzeigen

Hagbart

Registriert seit: 9. Dez 2006
Ort: Alsfeld
35 Beiträge
 
Delphi 7 Personal
 
#15

Re: Parallelport abfragen

  Alt 26. Apr 2009, 14:15
Mittag,

habe doch noch eine andere Lösung gefunden. Ist zwar sehr Prozessorlasstig, daher die Freuqenz aber nur kurz gemesen werden muss, ist das akzeptabel (zumindest für mich ).

Hier mal der gesamte Quelltext, benötigt wird die Inpout32.dll

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, mmsystem, AppEvnts, ShellApi, ExtCtrls, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ProgressBar1: TProgressBar;
    Timer1: TTimer;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure OnIdle(Sender: TObject; var Done: Boolean);
    procedure OnTimer;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Zeit: int64;
    Counter: integer; //Variable zum Zählen der Timer durchläufe
  end;

var
  Form1: TForm1;
  gelesen, schreiben: Integer;
  STyp: String[3] = 'LPT';
  BasAdr: Integer = $378;
  ComHandle: THandle;
  before: boolean = true;

implementation

{$R *.dfm}

procedure Out32(Addresse:Integer; Wert:byte);stdcall;export;
external 'INPOUT32.DLL';
function Inp32(Addresse:Integer):Byte;stdcall;export;
external 'INPOUT32.DLL';

procedure TForm1.OnIdle(Sender: TObject; var Done: Boolean);
begin
  done:=false;
  OnTimer;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnIdle := OnIdle;
end;

procedure TForm1.OnTimer;
var
  adr: integer;
begin
  adr:=Inp32(BasAdr+1);//Lesen
  if (adr = 254) and (before = true) then
  begin
    inc(counter);//Zähler um 1 erhöhen
    before := false;
  end;
  if adr = 126 then
    before := true;
  if timegettime-Zeit>1000 then //Jeweil nach einer Sekunde Frequenz ausgeben
  begin
    Label1.Caption := IntToStr(counter); //Freuqenz ausgeben
    zeit:= timegettime; //neue Start Zeit ermitteln
    Counter := 0; //und Zähler wieder auf 0
  end;
end;

end.
Einzigster Haken ist, das die Freuqenz nur bis ca. 900 Hz. angezeigt wird, deswegen habe ich einen Freuqenzteiler (2:1) eingebaut. Die angezeigte Frequenz muss dann einfach nurnoch mal 2 genommen werden (ich weiß, ist zwar ungenau, aber meiner Meinung nach kommt es auf 1 Hertz meist sowieso nicht an).
  Mit Zitat antworten Zitat