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

Ваш аккаунт

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

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

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

вопрос про com порт

1.8K
13 апреля 2003 года
gerich
23 / / 22.11.2002
Народ, подскажите как узнать что в ком порт что-то записалось, точнее пришло от подключенного оборудования. Пробовал постоянно опрашивать порт но иногда программа как-будто бы не замечает пришеддших данных пока они повторно не придут. Программа пишется на VC++ 6.0 под winapi. Я хотел бы узнать можно ли перехватить само событие прихода данных что бы стопроцентно с первого раза прочитать что туда пришло.
319
15 апреля 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by gerich
Народ, подскажите как узнать что в ком порт что-то записалось, точнее пришло от подключенного оборудования. Пробовал постоянно опрашивать порт но иногда программа как-будто бы не замечает пришеддших данных пока они повторно не придут. Программа пишется на VC++ 6.0 под winapi. Я хотел бы узнать можно ли перехватить само событие прихода данных что бы стопроцентно с первого раза прочитать что туда пришло.



RS232 используется или сам все коммуникации делаешь? Вообще-то есть какое-то прерывание, которое генерируется на ДТР, вроде (не помню точно).

2.0K
16 апреля 2003 года
segev
67 / / 19.01.2003
gerich
Рекомендую использовать асинхронный ввод. Или явно использовать асинхронные операции ввода/вывода, либо просто вызывать ReadFile синхронно, но в параллельном потоке. Тайм-ауты можно отключить (SetCommTimeout или что-то типа того) и ждать пока что-либо не придет.
319
16 апреля 2003 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by segev
gerich
Рекомендую использовать асинхронный ввод. Или явно использовать асинхронные операции ввода/вывода, либо просто вызывать ReadFile синхронно, но в параллельном потоке. Тайм-ауты можно отключить (SetCommTimeout или что-то типа того) и ждать пока что-либо не придет.



Если не стандартный протокол RS232 используется, то такая штука не пройдет

1.8K
17 апреля 2003 года
gerich
23 / / 22.11.2002
Пробовал и асинхронный вывод и синхронный, и все это работает в параллельном потоке.
Устройство с компьютером связанно по трехпроводной схеме. Причем все напаянно своими ручками так как старый кабель предназначен для 25-ти контактного кома. Я хотел ещё узнать, существует ли ограничение на длинну такого кабеля? Может проблема в этом и какие-то данные просто теряются?
1.9K
04 мая 2003 года
Mazilla
12 / / 10.10.2002
Сразу после инициализации порта сделай
SetCommMask( m_PortHandle , EV_RXCHAR);

В потоке чтения сделай так:

COMSTAT Comstatus;
OVERLAPPED overlapped;

memset(&overlapped,0,sizeof(OVERLAPPED));
memset(&Comstatus ,0,sizeof(COMSTAT));

overlapped.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);


if(!WaitCommEvent(m_PortHandle, &dwEvtMask, &overlapped))
{
if(GetLastError()!=ERROR_IO_PENDING)
{
// ??????
}
WaitForSingleObject(overlapped.hEvent,INFINITE);
}
if (dwEvtMask & EV_RXCHAR)
{
ClearCommError(m_PortHandle,&dwError,&Comstatus);

if(!ResetEvent(overlapped.hEvent))
{
// ??????
}

if(!ReadFile(m_PortHandle,
&m_InBuffer[m_IndexForRead],
MAX_BUFFER_SIZE,//Comstatus.cbInQue,
&nBytesRead,
&overlapped))
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог