Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Прием символа в Com порт

30K
14 января 2011 года
Saplex
12 / / 06.01.2008
Здравствуйте! Надеюсь на вашу помощь! Нужно по приходу определенного символа в COM порт запустить поток чтения символов. Вот мой код:
//заполняем dcb
dcb.BaudRate = CBR_9600;
dcb.fBinary = TRUE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fDtrControl = DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity = FALSE;
dcb.fNull = FALSE;
dcb.fRtsControl = RTS_CONTROL_DISABLE;
dcb.fAbortOnError = FALSE;
dcb.ByteSize = 8;
dcb.Parity = 0;
dcb.StopBits = 0;
dcb.EvtChar = 'E';// ожидаемый символ
//сам поток чтения
DWORD WINAPI ReadThread(LPVOID)
{
COMSTAT comstat;
DWORD btr, temp, mask, signal;

overlapped.hEvent = CreateEvent(NULL, true, true, NULL);
SetCommMask(ComPort, EV_RXCHAR);

while (1)
{
WaitCommEvent(ComPort, &mask, &overlapped);
signal = WaitForSingleObject(overlapped.hEvent, INFINITE);
if (signal == WAIT_OBJECT_0)
{
if (GetOverlappedResult(ComPort, &overlapped, &temp, true))
if ((mask & EV_RXCHAR) == EV_RXCHAR)//проверка символа из структуры dcb
{
ClearCommError(ComPort, &temp, &comstat);
btr = comstat.cbInQue;
if (btr)
{
ReadFile(ComPort, bufrd, btr, &temp, &overlapped);
counter+=btr;
int dlbufrd = strlen(bufrd);
unsigned char ks = crc8_buf(bufrd,dlbufrd-1);

ReadPrinting();
}
}
}
}
}
Проблема в том, что поток чтения активирует считывание информации с порта по приходу любого символа. Хотя я явно указал в структуре dcb символ 'E'. В чем может быть ошибка?
Заранее всем очень благодарен!!!!!
30K
14 января 2011 года
Saplex
12 / / 06.01.2008
Разобрался сам! вместо EV_RXCHAR нужно использовать EV_RXFLAG.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог