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