Установить флаг DTR и RTS в активное состояние для определённого COM-порта

После открытия com-порта через CreateFile() необходимо с помощью GetCommState() и SetCommState() установить параметры порта (в частности убрать автоуправление RTS и DTR). Затем для установки соответствующих сигналов используется функция EscapeCommFunction().

Procedure ControlRTS;

Var

S: String;

lDCB: TDCB;

fHandle: THandle;

Begin

S:=’COM1′;

// open port

fHandle:=CreateFile( Pchar(S), GENERIC_READ Or GENERIC_WRITE, 0,

Nil, OPEN_EXISTING, 0, 0);

If fHandle=INVALID_HANDLE_VALUE Then

Begin

// can’t open….

Exit;

End;

// read settings

If Not GetCommState( fHandle, lDCB) Then

Begin

// can’t read

Exit;

End;

// Fill dcb

lDCB.BaudRate:=CBR_2400;

lDCB.ByteSize:=8;

lDCB.Parity:=NOPARITY;

lDCB.StopBits:=ONESTOPBIT;

// !!! we will manage RTS ourself !!!

ldcb.Flags:=(ldcb.Flags And $FFFFC0FF) Or $00000100;

// set comm state

SetCommState( fHandle, ldcb);

// Here we can manage

// Reset RTS

EscapeCommFunction( fHandle, CLRRTS);

// Set RTS

EscapeCommFunction( fHandle, SETRTS);

// Close port

CloseHandle(fHandle);

fHandle:=0;

End;

P.S. Надо заметить, что все выходы com-порта являются инверсными. А это значит, что активным сосотоянием порта является 0, а неактивным 1.

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