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

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

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

;

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com