Thema: Delphi COM - Port Kommunikation

Einzelnen Beitrag anzeigen

Benutzerbild von mika
mika

Registriert seit: 25. Okt 2002
176 Beiträge
 
Delphi 6 Professional
 
#7

Re: COM - Port Kommunikation

  Alt 29. Jul 2003, 17:02
Normalerweise brauchst du keinen Treiber wenn du nur Zeichen über den
ComPort senden willst, das sollte auch so gehen!

Hier mal n paar Codeschnipseln, ich hoffe Sie helfen dir, hab die nur
grade aus einer meiner Units kopiert und nicht extra angepasst.
Beim Verständnis sollten die helfen ansonsten frag noch mal nach.

Delphi-Quellcode:

Const
  comport = 'com1';

FUNCTION OeffnePort():boolean;
VAR
  DCB : TDCB;
  TIMEO : TCommTimeouts;

BEGIN
  result := true;
  CommHandle:=CreateFile(pchar(comport), GENERIC_READ or GENERIC_WRITE,
                         0, nil, OPEN_EXISTING, 0, 0);
  if CommHandle <= 0 then
  begin
    result := false;
  end
  else
  begin
    DCB.DCBlength:=SizeOf(DCB);
    DCB.ByteSize:=8;
    DCB.Parity:=NoParity;
    DCB.StopBits:=TWOSTOPBITS;
    DCB.BaudRate:=9600;
    DCB.Flags:=5123; // Wenn 2 Pins belegt sind
    DCB.EofChar:=#0;
    DCB.ErrorChar:=#0;
    DCB.EvtChar:=#0;
    DCB.XoffChar:=#0;
    DCB.XoffLim:=0;
    DCB.XonChar:=#0;
    DCB.XonLim:=0;
    SetCommState(CommHandle, DCB);
    GetCommTimeOuts(CommHandle, TimeO);

    TimeO.ReadIntervalTimeOut:=100;
    TimeO.ReadTotalTimeoutMultiplier:=0;
    TimeO.ReadTotalTimeoutConstant:=250;

    TimeO.WriteTotalTimeoutMultiplier:=0;
    TimeO.WriteTotalTimeoutConstant:=200;
    SetCommTimeouts(CommHandle, TimeO);
  end;
END;

// .............................................................................

PROCEDURE SchliessePort;
BEGIN
  FileClose(CommHandle);
END;

// .............................................................................

FUNCTION SchreibePort (Text: string):boolean;
VAR
  i,x : integer;

BEGIN
(*
  // Einen String senden, jedes Zeichen einzeln
  result := true; x := 0;
  For i := 1 to length(text) do
  begin
    x := x + filewrite(CommHandle, Text[I], 1);
    sleep (1);
  end;
  IF X <> length (text) then result := false;
*)

  // String als ganzes senden

  result := true;
  i := filewrite(CommHandle, Text[1], Length(text));
  If i <> Length(text) then result := false;
END;

// #############################################################################

FUNCTION INBuffer():integer;
VAR
 l : TComStat;
 i : Cardinal;

BEGIN
  ClearCommError(CommHandle,i,@l);
  if i = ce_txfull then purgecomm (commhandle, purge_txclear);
  Result:=l.cbInQue;
END;

// .............................................................................

FUNCTION LoescheBuffer():boolean;
VAR
  temp : LongBool;
BEGIN
  temp := purgecomm(commhandle,purge_txabort OR purge_rxabort OR purge_txclear OR purge_rxclear);
  If temp = false then result := false else result := true;
END;

// .............................................................................

FUNCTION LeseBuffer():String;
VAR
  anzahl : integer;
  temp : string;

BEGIN
  anzahl := InBuffer;
  SetLength(Temp, Anzahl);
  If anzahl > 0 then
  begin
    FileRead(CommHandle, Temp[1], anzahl);
    result := temp;
  end
  else
    result := '';
END;
Hoffe das hilft dir, aber nicht beschweren über fehlende Variablen oder
so hab es wie gesagt nur schnell hier reingeworfen.



Gruß, Mika
:: don't Panic ::
  Mit Zitat antworten Zitat