Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Работа с СОМ портом

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Дрейф



Зарегистрирован: 20.02.2003
Сообщения: 9

СообщениеДобавлено: Чт Фев 20 2003 11:19    Заголовок сообщения: Работа с СОМ портом Ответить с цитатой

Хотелось бы узнать работал ли кто-нибудь с СОМ портами? Интересует точное выдерживание интервалов времени (хотя бы до 1 мс) между отправкой запроса - приёмом ответа. Как этого добиться под Win98, W2K, WinNT. Если можете помочь - буду рад увидеть в аське.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Вячеслав
Гость





СообщениеДобавлено: Чт Фев 20 2003 11:39    Заголовок сообщения: Re: Работа с СОМ портом Ответить с цитатой

Какая связь между СОМ портом и точным выдерживанием интервалов времени?
Язык?
Вернуться к началу
Дрейф



Зарегистрирован: 20.02.2003
Сообщения: 9

СообщениеДобавлено: Чт Фев 20 2003 12:14    Заголовок сообщения: Re: Работа с СОМ портом Ответить с цитатой

Требуется точно выдержать интервал между запросом и ответом. Ответ раньше X мс и позже Y мс считается ошибкой. Язык VC++. Всё работает, но времена используются раз в 10 больше реальных. Т.е. если ответ всегда приходит через 2 мс, то для его стабильного приёма приходится ждать 20 мс. А ошибкой приходится считать не приход через 3 мс, а отсутствие ответа через 20 мс - т.е. физическое отсутствие ответа.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Вячеслав
Гость





СообщениеДобавлено: Чт Фев 20 2003 12:40    Заголовок сообщения: Re: Работа с СОМ портом Ответить с цитатой

Попробуй посмотри "winmm.dll"
timeBeginPeriod timeEndPeriod timeSetEvent

Хотя вариант на мой взгляд тупиковый
Лучшее решение взять чип PIC
и на нем сделать обеспечение протокола связи
иначе в случае разогнанного компа у заказчика
придется "весело ..."
Вернуться к началу
Дрейф



Зарегистрирован: 20.02.2003
Сообщения: 9

СообщениеДобавлено: Чт Фев 20 2003 13:48    Заголовок сообщения: Re: Работа с СОМ портом Ответить с цитатой

Кусок делающий обмен:

//Выставляем признак ожидания ответа
SetCommMask(open,EV_RXCHAR);

//Запись в буфер
WriteFile(open,bufOut,2*lenghtOut+1,&bw,&o);

//За прос результатов записи
GetOverlappedResult(open,&o,&err,true);
if (err != 2*lenghtOut+1)
{
GetCommModemStatus(open,&err);
if ((err&MS_CTS_ON)!=MS_CTS_ON) Global=5;
else Global=2;
goto ERR;
}

//Ждём прихода байта
WaitCommEvent(open,&b2,&w);
if (WaitForSingleObject(w.hEvent, delay2*5) != WAIT_OBJECT_0) //
{
//Если не пришёл
GetCommModemStatus(open,&br);
if ((br&MS_CTS_ON)!=MS_CTS_ON) Global=5;//проверка наличия устройства
else Global=4;
goto ERR;
}

//Чтение из буфера
ReadFile(open,bufIn,2*lenghtIn,&br,&o);

//Запрос результатов чтения
GetOverlappedResult(open,&o,&err,true);

В ожидании события прихода байта (WaitForSingleObject) приходится выставлять большой таймаут, иначе вообще ничего не ловится. Думал, что связано с буферизацией отсылки через порт. Событие отсылки последнего байта, не ловится вообще, потому что происходит сразу же после WriteFile. Вообщем все эти события происходят с большими флуктуациями по времени и сильно зависят от операционки. Указанные функции ИМХО не помогут, не вижу места их применения в указанных условиях.
Есть предположение что я, что-то делаю принципиально неправильно. Может кто-нибудь что-то вопиющее заметит?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dmitry.Karpov http://prof
Гость





СообщениеДобавлено: Чт Фев 20 2003 21:04    Заголовок сообщения: А какова длина сообщения? Ответить с цитатой

COM-порт может дать максимум 115 Kbpc, а т.к. данные передаются байтами со стоп-битами, то на байт нужно 0.075 ms. Сообщение из ста байт - и ты уже в три раза превышаешь заданный тобой параметр 2 ms.
Вернуться к началу
Вячеслав
Гость





СообщениеДобавлено: Пт Фев 21 2003 00:15    Заголовок сообщения: Re: Работа с СОМ портом Ответить с цитатой

(WriteFile...) Знакомые грабли
посмотри здесь
http://www.codeproject.com/system/serial.asp

на будущее четче формулируй вопрос -
проще будет ответить
Вернуться к началу
Valera
Гость





СообщениеДобавлено: Пт Фев 21 2003 06:43    Заголовок сообщения: Пиши свой драйвер serial.sys. MSDK поможет. (+) Ответить с цитатой

средствами ос не получится из-за переключения задач. Попробуй работу с портом запихнуть в отдельный поток и поднять его приоритет до почти realtime.
Сам я не пробовал.
Вернуться к началу
Дрейф



Зарегистрирован: 20.02.2003
Сообщения: 9

СообщениеДобавлено: Вт Фев 25 2003 18:47    Заголовок сообщения: Re: Пиши свой драйвер serial.sys. MSDK поможет. (+) Ответить с цитатой

Не почти, а в RealTime стоит, сделано отдельной задачей.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Дрейф



Зарегистрирован: 20.02.2003
Сообщения: 9

СообщениеДобавлено: Вт Фев 25 2003 18:57    Заголовок сообщения: Re: А какова длина сообщения? Ответить с цитатой

Проблема в определении интервала между уходом последнего байта запроса и приходом первого байта ответа. От размера посылки не зависит. А работаю на 19200.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dmitry.Karpov http://prof
Гость





СообщениеДобавлено: Ср Фев 26 2003 00:08    Заголовок сообщения: Все равно очень много получается Ответить с цитатой

Время на отправку байта = 8/19200=0.4e-3, т.к. 0.4 милисекунды. Байт отправить, байт принять, да еще накладные расходы - вот одна милисекунда и набегает...
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...