Первый шаг-открыть коммуникационное устройство для чтения и записи.

Это достигается с помощью функции Win32 'CreateFile'.

В случае сбоя функция возвращает значение false

 

Code:

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.

  }

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.

  }

 

Result := True;

 

if not SetupComm(ComFile, RxBufferSize, TxBufferSize) then

   Result := False;

 

if not GetCommState(ComFile, DCB) then

   Result := False;

 

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.

}

 

 

procedure SendText(s: string);

var

BytesWritten: DWORD;

begin

  {

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

  }

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.

}

 

 

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!

CloseHandle(ComFile);

end;

 

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

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить