Порты - статьи


         

аут операции чтения. Аналогично существует


Это и есть общий тайм- аут операции чтения. Аналогично существует и общий тайм-аут операции записи.

Формула для вычисления общего тайм-аута операции, например, чтения, выглядит так:

NumOfChar x ReadTotalTimeoutMultiplier + ReadTotalTimeoutConstant

где NumOfChar — число символов, запрошенных для операции чтения.

В нашем случае тайм-ауты записи можно не использовать и установить их равными нулю.

После заполнения структуры COMMTIMEOUTS, необходимо вызвать функцию установки тайм-аутов:

BOOL SetCommTimeouts(

HANDLE hFile,

LPCOMMTIMEOUTS lpCommTimeouts

);

Поскольку операции передачи-приема ведутся на малой скорости, используется буферизация данных. Для задания размера буфера приема и передачи необходимо воспользоваться функцией:

BOOL SetupComm(

HANDLE hFile,

DWORD dwInQueue,

DWORD dwOutQueue

);

Допустим, вы обмениваетесь с внешним устройством пакетами информации размером 1024 байта, тогда разумным размером буферов будет значение 1200. Функция SetupComm интересна тем, что она может просто принять ваши размеры к сведению, внеся свои коррективы, либо вообще отвергнуть предложенные вами размеры буферов — в таком случае эта функция завершится ошибкой.

Приведу пример открытия и конфигурирования последовательного порта COM1. Для краткости — без определения ошибок. В данном примере порт открывается для работы со скоростью 9 600 бит/c, используется 1 стоповый бит, бит четности не используется:

#include

. . . . . . . . . .

HANDLE handle;

COMMTIMEOUTS CommTimeOuts;

DCB dcb;

handle = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, NULL, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);

SetupComm(handle, SizeBuffer, SizeBuffer);

GetCommState(handle, &dcb);

dcb.BaudRate = CBR_9600;

dcb.fBinary = TRUE;

dcb.fOutxCtsFlow = FALSE;

dcb.fOutxDsrFlow = FALSE;

dcb.fDtrControl = DTR_CONTROL_HANDSHAKE;

dcb.fDsrSensitivity = FALSE;

dcb.fNull = FALSE;

dcb.fRtsControl = RTS_CONTROL_DISABLE;

dcb.fAbortOnError = FALSE;

dcb.ByteSize = 8;

dcb.Parity = NOPARITY;


Содержание  Назад  Вперед