IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Проблема с Rs-232 связью, тормозит COM-порт
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 160
Пол: Мужской
Реальное имя: Серый

Репутация: -  0  +


В общем, уважаемые, такая проблема: я пишу прогу, которая контролирует некий прибор через COM-порт. Прибор принимает команды, делает то, что от него требуется и в случае команды "передать данные" возвращает результат.
Все это хорошо и красиво, только вот заметил я странную вещь: во время работы прибора комп жутко тормозит, даже мышь по экрану еле ползает, но это еще не все: по каким-то неизвестным мне причинам, начинают отставать системные часы (вообще-то, я считал что это невозможно, ведь за них отвечает отдельная микросхема со своим питанием, а контроллер системного таймера я ес-но не трогал). Теперь о программе: т.к. прибор воспринимает только команды низкого уровния (типа: повернуть двигатель N на M градусов, зажечь лампу P раз, снять показания флуориметра, повернуть еще на M градусов и т.д.), в связи ч чем, все это у меня выведено в цикле:

Repeat
Повернуть;
Зажечь;
Считать;
Until CurPos>=MoveTo;

Перед каждой очередной командой, я должен быть уверен, что прибор в данный момент завершил предыдущую; для этого есть команда: "текущее действие", я вызываю ее после каждого действия и проверяю на ноль (если ноль - то "свободен"). Далее - задержка в 100 мс (это нужно для контроллера прибора) и след. команда. Так вот, задержки я делаю через Sleep(100), сразу после Sleep ставлю Application.ProcessMessages; не фига - тормоза жуткие...
Я уже вывел операции с COM-портом в отдельный поток, та же самая ситуация! В общем, я в ауте... Че делать дальше - не знаю (в таком виде прогу сдавать стыдно, она на 1700 Селероне тормозит, да еще и время замедляет...). Да, насчет таймера, на всякий случай: указатели я в проге практически не использую, дин. массивы - тоже, т.е. вероятность того, что я влезаю в системную память и там что-либо меняю - мин.
В общем, если у кого есть идеи и предложения, я с радостью бы выслушал...


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Нефиг опрос использовать... Я уже говорил - WaitCommEvent и дополнительный поток (нить). Ты грузишь систему слишком плотным потоком коротких сообщений через COM-порт. Пути решения: обратная связь (синхронизация по целевому устройству, желательно с разумной скоростью - т. е. агрегат должен сообщать о завершении текущей операции), буферизация на стороне целевого устройства (с целю увеличения длины сообщений и уменьшения их удельного количества).


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 160
Пол: Мужской
Реальное имя: Серый

Репутация: -  0  +


Цитата
агрегат должен сообщать о завершении текущей операции...


Блин, ну мне это нравится! Если бы я мог что-либо изменить в программе агрегата, то ес-но я бы это сделал! Я был бы счастлив, если бы он посылал мне команду "я мол, закончил операцию и жду команды", но он этого не делает, я ж его не создавал, я ж под него прогу пишу... Будь моя воля я бы там такого наворотил...


--------------------
Все в жизни ботва... Кроме пчел!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 10.06.2024 21:19
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name