Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2013, 01:50   #1
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию Виртуальный СОМ порт, нюансы

Здравствуйте. Столкнулся с проблемой такого характера. Есть программа на Delphi, которая 10 раз в секунду отправляет данные через СОМ порт. Для работы с СОМ портом используется компонент Borland Delphi 7 - BComPort. В качестве аппаратного СОМ порта - виртуальный USB-COM порт. В штатном режиме все ОК. Напрягает один нюанс, если в момент выполнения программы выдернуть USB - СОМ шнур из гнезда, программа зависает, и что самое неприятное закрыть ее нормально не получается. Жмем на крестик, в ответ сообщение Windows типа: "Программа не отвечает и будет закрыта" жмем ОК, окно программы закрывается и выскакивает несчетное множество окошек типа: "обнаружена ошибка в программе... В общем прекратить это безобразие можно только через диспетчер задач. Моя задача сделать так, чтобы после выдергивания USB шнура программу, можно было спокойно закрыть, а еще лучше чтобы программа после таких ошибок продолжала функционировать. Перехват ошибок try - except не залезая в код компонента BComPort не помогает. Поначалу думал, что без вариантов так должно быть и ничего сделать нельзя. Но проанализировал несколько похожих программ и понял, что все решаемо - выдергиваем шнурок - выскакивает окошко: "Ошибка порта", жмем ОК и программа предлагает выбрать СОМ порт, то есть полностью работоспособна... Если есть мысли помогите пожалуйста.
Vlad9999 вне форума Ответить с цитированием
Старый 23.06.2013, 11:32   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

1- можно тупо открыть порт-послать 1 раз-закрыть порт, на этапе следующего открытия порта отслеживать его доступность
2- отслеживать перед каждой посылкой наличие виртуального порта через SetupAPI
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.06.2013, 11:45   #3
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

1. Пробовал - по скорости не проходит, не успевает порт закрыться и открыться между передачами.
2. Вот это буду пробовать, спасибо (пробовал проверку методами компонента, безрезультатно).
Vlad9999 вне форума Ответить с цитированием
Старый 23.06.2013, 11:54   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
1. Пробовал - по скорости не проходит, не успевает порт закрыться и открыться между передачами.
снизьте количество пакетов в единицу времени. Зачем такая скорость?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.06.2013, 12:22   #5
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

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

Последний раз редактировалось Vlad9999; 23.06.2013 в 12:35.
Vlad9999 вне форума Ответить с цитированием
Старый 23.06.2013, 13:06   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Настройки порта редактировать нет возможности
это еще почему?

Цитата:
мне кажется процесс закрытия-открытия порта (особенно у китайских переходников) сам по себе небыстрый.
на самом деле инициализация драйвера виртуального порта процесс длительный.

Цитата:
потом наобум убрал открытие-закрытие порта и все заработало
таймауты соблюдать надо.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.06.2013, 13:28   #7
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

Цитата:
это еще почему?
Это одно из требований владельцев-разработчиков устройств на другом конце СОМ - порта.

Цитата:
таймауты соблюдать надо.
Все манипуляции с СОМ-портом (открытие, закрытие, передачу) я произвожу через компонент BComPort, разве он не должен сам заботиться о таймаутах? А с другой стороны Вы же сами написали:

Цитата:
на самом деле инициализация драйвера виртуального порта процесс длительный.
Vlad9999 вне форума Ответить с цитированием
Старый 23.06.2013, 13:56   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
разве он не должен сам заботиться о таймаутах?
это вы должны в нем настроить для начала, это лишь обертка.

Цитата:
А с другой стороны Вы же сами написали
а это да.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.06.2013, 15:42   #9
Vlad9999
Пользователь
 
Регистрация: 14.01.2013
Сообщений: 33
По умолчанию

Если не сложно подскажите, какие таймауты мне подправить. У меня все по умолчанию (WriteTotalConstant=1000, WriteTotalMultipilier=100)

Последний раз редактировалось Vlad9999; 23.06.2013 в 16:11.
Vlad9999 вне форума Ответить с цитированием
Старый 23.06.2013, 17:40   #10
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Lazarus, СОМ порт gusluk Lazarus, Free Pascal, CodeTyphon 10 22.07.2011 04:12
сом порт , БД olegd Помощь студентам 7 05.07.2010 10:34
СОМ порт JUDAS Win Api 0 10.01.2009 21:27
Виртуальный порт Dj_smart Win Api 0 13.07.2008 19:19
СОМ порт SERG1980 Общие вопросы Delphi 3 17.05.2007 08:06