Читать и писать в последовательный порт

function OpenCOMPort: Boolean;

var

DeviceName: array[0..80] of Char;

ComFile: THandle;

begin

{ First step is to open the communications device for read/write.

This is achieved using the Win32 'CreateFile' function.

If it fails, the function returns false.

Wir versuchen, COM1 zu offnen.

Sollte dies fehlschlagen, gibt die Funktion false zuruck.

}


StrPCopy(DeviceName, 'COM1:');

ComFile := CreateFile(DeviceName,

GENERIC_READ or GENERIC_WRITE,

0,

nil,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

0);

if ComFile = INVALID_HANDLE_VALUE then

Result := False

else

Result := True;

end;

function SetupCOMPort: Boolean;

const

RxBufferSize = 256;

TxBufferSize = 256;

var

DCB: TDCB;

Config: string;

CommTimeouts: TCommTimeouts;

begin

{ We assume that the setup to configure the setup works fine.

Otherwise the function returns false.

wir gehen davon aus das das Einstellen des COM Ports funktioniert.

sollte dies fehlschlagen wird der Ruckgabewert auf "FALSE" gesetzt.

}


Result := True;

if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then

Result := False;

if not GetCommState(ComFile, DCB) then

Result := False;

// define the baudrate, parity,...

// hier die Baudrate, Paritat usw. konfigurieren

Config := 'baud=9600 parity=n data=8 stop=1';

if not BuildCommDCB(@Config[1], DCB) then

Result := False;

if not SetCommState(ComFile, DCB) then

Result := False;

with CommTimeouts do

begin

ReadIntervalTimeout := 0;

ReadTotalTimeoutMultiplier := 0;

ReadTotalTimeoutConstant := 1000;

WriteTotalTimeoutMultiplier := 0;

WriteTotalTimeoutConstant := 1000;

end;

if not SetCommTimeouts(ComFile, CommTimeouts) then

Result := False;

end;

{

The following is an example of using the 'WriteFile' function

to write data to the serial port.

Folgendes Beispiel verwendet die 'WriteFile' Funktion, um Daten

auf den seriellen Port zu schreiben.

}


procedure SendText(s: string);

var

BytesWritten: DWORD;

begin

{

Add a word-wrap (#13 #10) to the string

An den ubergebenen String einen Zeilenumbruch (#13 #10) hangen

}


s := s #13 #10;

WriteFile(ComFile, s[1], Length(s), BytesWritten, nil);

end;

{

The following is an example of using the 'ReadFile' function to read

data from the serial port.

Folgendes Beispiel verwendet die 'ReadFile' Funktion, um Daten

vom seriellen Port zu lesen.

}


procedure ReadText: string;

var

d: array[1..80] of Char;

s: string;

BytesRead, i: Integer;

begin

Result := '';

if not ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then

begin

{ Raise an exception }

end;

s := '';

for i := 1 to BytesRead do s := s d[I];

Result := s;

end;

procedure CloseCOMPort;

begin

// finally close the COM Port!

// nicht vergessen den COM Port wieder zu schliessen!

CloseHandle(ComFile);

end;

Добавить комментарий