Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

(com-порты) Кто тормозит - я или винда?


Palex ©   (2003-07-11 01:01:00) 

Здравствуйте, товарищ ALL!
Есть такой вопрос – может кто поможет разобраться?..
Пишу программу для работы через COM с внешним устройством. Специфика его работы такова, что для работы с ним требуется постоянное поддержание коннекта (пакеты данных типа запрос (COM -> Device) – ответ (Device -> COM)) посылками через каждые 0.5 секунды. Внутри пакетов между байтами задержки по 1 милисекунде.
Но это так – для общего понимания вопроса! ;)
Так вот – во время работы если не дергаться мышкой – то все нормально. Но как только начинаешь клацать по менюшкам внутри программы – коннект срывается с 80% вероятностью. То есть, я понимаю, при нажатиях на кнопки/менюшки происходят события, и если оно попало при посылке пакета, то пауза между посылками отдельных байт превышает заданное время – и п…а коннекту ;)
Может, у кого-нить есть соображения по этому поводу?

З.Ы.: Посылку в порт всего пакета сразу не предлагать, т.к. на каждый принятый/отправленный байт получатель оного должен отправить подтверждение назад.

З.З.Ы.: Если по тексту встретились ламерские изречения – просьба не мате...ся – я только учусь ;)


Palex   (2003-07-12 23:13:00) [1]

Обьясняю на пальцах:
Пакеты с подтверждением принятия каждого байта.
Компьютер . Tx: SS ww SS ww SS
Устройство. Rx: -- AA -- AA -- AA
Посылаю байт, жду ответа от девайса, посылаю следующий, жду ответа ...
Все байты высланы, жду пол секунды, посылаю следующий пакет.
Понятнее некуда. ;)


Германн   (2003-07-12 01:39:00) [2]

2 Palex (11.07.03 20:50)
2 Германн: Этот протокол придуман не мной, и девайс паял не я!

Это я понимаю. Я не понимаюкак можно объединить:
З.Ы.: Посылку в порт всего пакета сразу не предлагать
и
( пакеты данных типа запрос (COM -> Device)

2 Palex (11.07.03 20:50)
2 Германн: Этот протокол придуман не мной, и девайс паял не я!

Это я понимаю. Я не понимаюкак можно объединить:
З.Ы.: Посылку в порт всего пакета сразу не предлагать
и
(пакеты данных типа запрос (COM -> Device) – ответ (Device -> COM)) посылками через каждые 0.5 секунды


Palex   (2003-07-11 20:50:00) [3]

2 Германн: Этот протокол придуман не мной, и девайс паял не я! А такой монстр, как корпорация "VAG" ;)

2 Крот: Может посоветуешь какую-нибудь доку по вопросу, бо в потоках я не силен (мягко сказано...)?

2 Крот, 2 Nucl, 2 pasha : Спасибо, сейчас покопаюсь - посмотрю


pasha676   (2003-07-11 09:59:00) [4]

Иногда винда сбивает порт, если порты мыши и порт рабочий идут на одном прерывании. Но так как мышь ПС делить на 2 у тебя скорее всего, то проблемма решается как сказал Nucl.

Почитай тут. Модифицированнй код у меня работал и в системе "запрос-квитанция" для управления видаком JVC.
http://www.delphimaster.ru/articles/comport2/index.html


Nucl   (2003-07-11 09:54:00) [5]

вот пример класса, для асинхронной работы с портом, все рулится в потоке, бошку нигде не срывает.
http://soft.bel.ru/files/Source.zip


Крот   (2003-07-11 05:59:00) [6]

Попробуй выделить опрос устройства в отдельный поток.


Германн   (2003-07-11 01:58:00) [7]

В первую очередь "тормозишь" ты.
Поскольку как тогда понимать твое - З.Ы.: Посылку в порт всего пакета сразу не предлагать, т.к. на каждый принятый/отправленный байт получатель оного должен отправить подтверждение назад.


Наверх

Титульная страница Поиск, карта сайта Написать письмо