реклама на сайте
подробности

 
 
> Работа с СОМ портом, Win2000
uvw
сообщение Feb 3 2005, 09:12
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 3-02-05
Пользователь №: 2 395



Здравствуйте, уважаемые!
Если кто сталкивался, помогите плизз. Долбаюсь уже 2 недели, и ничего не получается. Ситуация следующая: Есть некий контроллер и общается он с компьютером через RS232, в Win98 все работает, а вот Операционка Win2000
блокирует прямое обращение к портам. Мне подсказали прогу WinDriver для обхода этой проблемы... но опять-же, для LPT порта там есть стандартная заготовка, которая прекрасно работает... а о СОМ порте ни слова. Сразу оговорюсь, я не являюсь системным программистом и с железом дел никогда не имел... а тут пришлось wink.gif Искренне надеюсь на Вашу помощь. Заранее спасибо.
З.Ы.
Я впервые на этом форуме, и вполне возможно что запостил тему не совсем в тот раздел куда следовало бы.
ЗЗ.ЫЫ
Работать с этой штукой через CreateFile/ReadFile/WriteFile тоже не получается,
в ReadFile постоянно нули возвращаются, хотя команда сформирована верно и контроллером принята...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lukomor
сообщение Mar 28 2005, 07:40
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



Подскажите пожалуйста! Есть проблема работы с СОМ из под W2K с прямым доступом. Пробовал различные драйвера giveio/userport/porttalk/totalio - безуспешно. Данные в порт (0х3F8) уходят, но на выходе не появляются (проверял осциллографом). При запуске из w98 все работает (хотя там драйвера эти не нужны). К сожалению не могу перейти на WINAPI - протокол обмена конечного устройства не позволяет (из-за временнЫх задержек). Может кто с такой ситуацией сталкивался?
Go to the top of the page
 
+Quote Post
_VM
сообщение Mar 28 2005, 09:19
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 58
Регистрация: 23-03-05
Из: Москва
Пользователь №: 3 625



Если протокол связи накладывает жесткие временные ограничения (самый жесткач это ответ PC по запросу внешнего устройства через маленькое время), то спасет только собственный драйвер. Если под 98 задача решается, то под 2к при помощи своего драйвера ее тоже можно решить. Самые быстрые варианты управления COM-портом, в порядке возрастания (по собственным ощущениям):
1) DOS на СИ или ASMе wink.gif
2) WinNT, 2k, XP с собственным драйвером
3) Win95/98 с дос программой
4) Win API
5) WinNT, 2k, XP с DOS программой (работа с портами напрямую)

5й вариант самый медленный из-за приема данных. Данные-то надо забирать из фифо по прерываниям, а они до VDM (VirtualDosMashine) могут долго доезжать. В виндовом приложении чтение можно организовать только полингом регистра статуса (LSR). Оно тебе надо? Это ж тормоза 100%, а на большой скорости данные теряться будут.

Если не переубедил - я бы выгрузил стандартный драйвер 2k, настроил порт как в дос, и молотил бы в 0х3F8. Только не понятно зачем это все нужно (запуск дос программ под 2к или в виндовых приложениях).

Если протокол опишешь(где какие минимальные задержки), может подскажу как на WinAPI задачку решить, если это вообще реально сделать.
Go to the top of the page
 
+Quote Post
Lukomor
сообщение Mar 29 2005, 05:36
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



Спасибо _VM за ответ.
Цитата(_VM @ Mar 28 2005, 12:19)
...
1) DOS на СИ или ASMе wink.gif
2) WinNT, 2k, XP с собственным драйвером
3) Win95/98 с дос программой
4) Win API
5) WinNT, 2k, XP с DOS программой (работа с портами напрямую)
...

Варианты 1, 3, к сожалению, не подходят.

2 вариант - немного не понял. Что значит "с собственным драйвером"? Если это с использованием недокументированных I/O функций WINAPI, то это уже имело место быть в giveio и т.д.

Вариант 4 пробовал. При реализации на С++ с WINAPI (CreateFile + DCB + ...)
- не успеваю по протоколу.

Насчет 5, из DOSa, (я так понимаю что из консоли) заморочка для меня будет большая, так как основное приложение WIN32.

Я пробую в виндовское оконное приложение воткнуть команды ассемблера для прямой работы с портом, а чтобы не "орала" защита гружу giveio. Причем конфигурирую порт таким же образом, как в ДОСе. Все что посылаю при этом в 0x3F8...0x3FE уходит "в пустоту" sad.gif
Чтение 0x3F8 возвращает ранее записанное туда слово (на выходе порта по прежнему ничего не появляется!), а чтение остальных 0x3F_ возвращает FF.

Цитата(_VM @ Mar 28 2005, 12:19)
... я бы выгрузил стандартный драйвер 2k, настроил порт как в дос, и молотил бы в 0х3F8...

Возможно, это как раз то, что нужно. Если можно расскажи подробнее.

Цитата(_VM @ Mar 28 2005, 12:19)
...
Если протокол опишешь(где какие минимальные задержки), может подскажу как на WinAPI задачку решить, если это вообще реально сделать.
...

В протоколе 2 "засады":
1) от передачи командного слова от PC до ответного слова устройства - 15...40 мкс.
2) от передачи командного слова от устройства до ответного слово от PC 11 мс.

Буду благодарен за помощь!
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 29 2005, 07:35
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Lukomor @ Mar 29 2005, 08:36)
В протоколе 2 "засады":
1) от передачи командного слова от PC до ответного слова устройства - 15...40 мкс.
2) от передачи командного слова от устройства до ответного слово от PC 11 мс.


Полагаю, с пунктом 1 "API вариант" точно должен справится - почему нет ?
Не помню такого, что бы драйвер COM порта у WIN не принял
правильно данные даже на самой большой скорости и на не очень
сильном компьютере.

Со вторым пунктом действительно могут быть проблемы.
Тут можно попытаться:
1. поднять приоритет потока приложения повыше . Как можно выше и
не запускать другие приложения.
2. отрихтовать вручную (это для win98 - для XP сам смотри как там..):
пуск-настройка-панель управления-система-устройства-последовательный порт (1?)-свойства-настройка порта-дополнительно-буфер приема =1-OK.

smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Lukomor
сообщение Mar 29 2005, 09:22
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



Цитата(-Tумблер- @ Mar 29 2005, 10:35)
1. поднять приоритет потока приложения повыше . Как можно выше и
не запускать другие приложения.
2. отрихтовать вручную (это для win98 - для XP сам смотри как там..):
пуск-настройка-панель управления-система-устройства-последовательный порт (1?)-свойства-настройка порта-дополнительно-буфер приема =1-OK.
*



Настройка вручную порта из виндов не помогает - все равно не успеваю.
Насчет приоритета потока, насколько я понял, все не так просто. Вот здесь есть переводная статья http://www.void.ru/?do=printable&id=701 ,правда по прямому доступу к порту, но основа там разложена хорошо.

Проблема в том, что у меня не работает (или я неправильно им пользуюсь) драйвер прямого доступа, хотя делал все по мануалу, включая ассемблерный код.
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Mar 30 2005, 11:52
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Lukomor @ Mar 29 2005, 12:22)
Настройка вручную порта из виндов не помогает - все равно не успеваю.


А в цифрах - это сколько получилось ?
Как я понял, нужно 10 ms.
И насколько большой выходит "перебор" ? blink.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Lukomor
сообщение Mar 31 2005, 06:38
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



Цитата(-Tумблер- @ Mar 30 2005, 14:52)
А в цифрах - это сколько получилось ?
Как я понял, нужно 10 ms.
И насколько большой выходит "перебор" ? blink.gif
*


По грубой оценке около 30-40 ms.
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Apr 13 2005, 16:22
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Lukomor @ Mar 31 2005, 09:38)
Цитата(-Tумблер- @ Mar 30 2005, 14:52)
А в цифрах - это сколько получилось ?
Как я понял, нужно 10 ms.
И насколько большой выходит "перебор" ? blink.gif
*


По грубой оценке около 30-40 ms.
*



Сегодня я ноконец померил - и вот что получилось:

При работе с одним потоком на прием и передачу - ~6 ms на ответ.
Если поток имеет приоритет NORMAL действительно, его прерывают
и иногда выходит ~30ms. Хотя и редко, это бывает.
Если поставить приоритет этому потоку Тайм_Критикал, то ему
никто особенно не мешает. smile.gif Кроме ~6ms других значений времени
не зафиксировано.
Система была WIN98, PII-300, VC6+API ONLY. smile.gif
Ничего особенно навороченного..
В качестве темплате использовалось готовое приложение
с двумя потоками - основной Нормал+2 и еще рабочий Нормал.
Под WIN-XP измерять буду завтра...
blush.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Apr 13 2005, 16:37
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(-Tумблер- @ Apr 13 2005, 19:22)
Под WIN-XP измерять буду завтра...
  blush.gif
*


Так вышло, что измерил сейчас.
Получилось то же самое ~6ms на ответ.
Все то же самое.

Вполне вероятно, можно обойтись без драйверов
и лазания в порты.
blush.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Lukomor
сообщение Apr 21 2005, 08:59
Сообщение #11


Участник
*

Группа: Новичок
Сообщений: 25
Регистрация: 28-03-05
Пользователь №: 3 734



Цитата(-Tумблер- @ Apr 13 2005, 19:37)
Цитата(-Tумблер- @ Apr 13 2005, 19:22)
Под WIN-XP измерять буду завтра...
  blush.gif
*


Так вышло, что измерил сейчас.
Получилось то же самое ~6ms на ответ.
Все то же самое.

Вполне вероятно, можно обойтись без драйверов
и лазания в порты.
blush.gif
*


2-Тумблер-
Спасибо, я действительно поигрался с приоритетами и потоками, вроде получилось, но проблема была в другом, "поймать" ответ устройства. Ответ приходит через ~11 мкс после запроса, при этом обмен идет через интерфесный девайс. От компьютера до девайса RS232 с управлением RTS, от девайса до устройства 485 интерфейс без управления потоком. Мне надо успеть вручную переключить RTS. Для работы с портом выставляю REALTIME_PRIORITY_CLASS и THREAD_PRIORITY_TIME_CRITICAL. С натягом, но все успеваю.
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Apr 21 2005, 13:29
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040



Цитата(Lukomor @ Apr 21 2005, 11:59)
Для работы с портом выставляю REALTIME_PRIORITY_CLASS и THREAD_PRIORITY_TIME_CRITICAL. С натягом, но все успеваю.


Извините, если скажу общеизвестное. smile.gif
Приоритет потока - вешь относительная.
Если посмотреть каким-либо процесс вьювером,
можно обнаружить, что абсолютный приоритет
потоков "обычного" приложения не может превысить ~15.
У Кернела - вдвое больше.
Так что резервы еще есть. blush.gif
Можно попытаться увеличить приоритет процесса.
Тогда "THREAD_PRIORITY_TIME_CRITICAL" станет еще выше..
biggrin.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- uvw   Работа с СОМ портом   Feb 3 2005, 09:12
- - IgorKossak   Попробуйте следуюшее в прикреплённом файле. У меня...   Feb 3 2005, 09:23
- - uvw   Спасибо, но эту статью я недавно читал (на сайте w...   Feb 3 2005, 10:11
- - IgorKossak   Зачем такие сложности с прямым доступом если и чер...   Feb 3 2005, 10:59
- - uvw   Могу привести исходник на паскале, присланный разр...   Feb 3 2005, 11:36
- - veter   а вы попробуйте RxD и TxD закоротить, и отправить ...   Feb 3 2005, 13:37
- - uvw   Фуухх, я уже окончательно запутался.... выкладываю...   Feb 3 2005, 15:39
|- - DPL   Цитата(uvw @ Feb 3 2005, 18:39)а вот что прои...   Feb 4 2005, 06:16
- - veter   Our_DCB.fDtrControl = DTR_CONTROL_ENABLE; этой на...   Feb 3 2005, 17:13
- - uvw   При установке DTR_CONTROL_DISABLE данные на контро...   Feb 3 2005, 17:37
- - veter   я бы отправил тебе свои исходники, да у меня как р...   Feb 3 2005, 17:46
- - uvw   veter, Давай, буду очень признателен присылай на ...   Feb 3 2005, 17:51
|- - khach   При порты в прикладной программе забудьте- это при...   Feb 4 2005, 10:52
- - Shedon   Здесь есть класс для работы с ком портом, у меня ч...   Feb 4 2005, 10:17
- - Shedon   [khach], естественно из прикладной программы с пор...   Feb 4 2005, 11:20
|- - khach   Цитата(Shedon @ Feb 4 2005, 13:20)[khach], ес...   Feb 4 2005, 11:38
- - andk   >Вопрос- есть жизненно необходимая прога, управ...   Feb 4 2005, 12:36
|- - khach   Цитата(andk @ Feb 4 2005, 14:36)Скорее всего ...   Feb 4 2005, 13:47
|- - -Tумблер-   Цитата(khach @ Feb 4 2005, 16:47)98-дает, Мил...   Feb 7 2005, 12:49
- - uvw   пожалуй, DPL прав! скорее всего так и происход...   Feb 4 2005, 21:09
- - andk   Цитата(khach @ Feb 4 2005, 19:47)Цитата(andk ...   Feb 5 2005, 04:40
- - one_man_show   Попробуйте скачать отсюда Torry компонент для Дель...   Feb 7 2005, 13:20
- - Dimonira   Как я понял из всего сказанного, у человека порт к...   Feb 9 2005, 06:15
- - _Sam_   ЦитатаПри установке DTR_CONTROL_DISABLE данные на ...   Feb 9 2005, 07:22
|- - SergM   Здравствуйте. Есть не плохая книга: П. Агуров ...   Feb 9 2005, 11:58
- - makc   GiveIo с некоторыми программами ведет себя очень с...   Feb 9 2005, 12:36
- - andk   Прикол всех этих псевдо драйверов в том, что они п...   Feb 9 2005, 13:18
|- - SergM   Цитата(andk @ Feb 9 2005, 16:18)Прикол всех э...   Feb 9 2005, 13:57
- - Dimonira   Мужики, вы, похоже так и не поняли. Дело не в умен...   Feb 15 2005, 08:33
|- - SergM   Цитата(Dimonira @ Feb 15 2005, 11:33)Мужики, ...   Feb 15 2005, 08:58
|- - khach   Как автор подтопика о программаторе, уточню. Не ра...   Feb 15 2005, 10:11
|- - -Tумблер-   Цитата(khach @ Feb 15 2005, 13:11)Не работает...   Feb 17 2005, 18:40
- - Dimonira   Я как-то пропустил слова о реверс-инжиниринге. Тог...   Feb 16 2005, 11:23
- - Serjio   Мы пользуемся CPORT под все Windows   Feb 17 2005, 08:01
- - Angel   может кому пригодиться h__p://www.rs232.ru/   Mar 3 2005, 11:54
- - PowerF1   Подскажите, у меня такая проблема. Когда собирал м...   Mar 18 2005, 15:59
|- - _VM   Программируй на C++Builder - меньше заморачиваться...   Mar 23 2005, 17:01
|- - -Tумблер-   Цитата(_VM @ Mar 23 2005, 20:01)заводишь пото...   Mar 28 2005, 11:05
|- - _VM   Цитата(-Tумблер- @ Mar 28 2005, 14:...   Mar 29 2005, 00:20
|- - -Tумблер-   Цитата(_VM @ Mar 29 2005, 03:20)А я что-то не...   Mar 29 2005, 06:04
|- - -Tумблер-   Цитата(_VM @ Mar 29 2005, 03:20)А я что-то не...   May 24 2005, 10:44
||- - Lukomor   Цитата(-Tумблер- @ Apr 21 2005, 16:...   Apr 22 2005, 07:34
||- - yuriyc   [/quote] Так REALTIME_PRIORITY_CLASS это вроде и...   May 25 2005, 05:52
||- - Lukomor   Цитата(yuriyc @ May 25 2005, 08:52)Обратимся ...   Jun 22 2005, 11:46
||- - yuriyc   [/quote] 2all: Кто нибудь знает, каким образом мо...   Jun 28 2005, 13:26
||- - vm1   Мне кажется из под Win управлять RTS дело безнадеж...   Jun 28 2005, 14:04
||- - Lukomor   Цитата(yuriyc @ Jun 28 2005, 16:26)Как вариан...   Jun 29 2005, 07:03
||- - vm1   а есть возможность передавайть последний байт тран...   Jul 4 2005, 13:11
|- - _VM   2Lukomor Цитата(Lukomor @ Mar 29 2005, 08:36)...   Mar 30 2005, 21:04
|- - _VM   2-Tумблер-&PowerF1&Lukomor Проблем с разны...   Mar 30 2005, 21:45
|- - Lukomor   2_VM Цитата(_VM @ Mar 31 2005, 00:04)Пуск-...   Mar 31 2005, 06:59
|- - _VM   Если владеешь C++ поищи Numega Driver Studio (софт...   Mar 31 2005, 08:47
- - SergM   А для отладки софта, работающего с СОМ под Windows...   Mar 28 2005, 13:44
- - PowerF1   _WM, боьшое спасибо за ценную информацию! Разо...   Mar 29 2005, 14:41
|- - -Tумблер-   Цитата(PowerF1 @ Mar 29 2005, 17:41)Как распр...   Mar 30 2005, 10:53
- - max123   Цитата(uvw @ Feb 3 2005, 14:12)Здравствуйте, ...   Apr 5 2005, 05:42
- - Krom   Вот примерчик для Borland C++ Builder из моей тест...   Jul 7 2005, 06:54
- - fluent   Помогите плиз. Взялся за курсовик.Для начала надо ...   Apr 2 2007, 00:55
|- - haker_fox   Цитата(fluent @ Apr 2 2007, 06:55) Помоги...   Apr 2 2007, 09:21
- - Djimmy   Запоздало, но тем не менее..   Jun 23 2007, 17:13
|- - dimka76   Цитата(Djimmy @ Jun 23 2007, 21:13) Запоз...   Aug 31 2009, 11:05
- - MaxPIC   Я делал так в Visual Studio 2005: Инициализация: ...   Jul 1 2007, 11:15
- - MMP   Подскажите как cport310 прицепить к Borland   Aug 8 2007, 06:58
- - badik   Судя по Вашей переписке - лето было боевое. Есть о...   Aug 28 2007, 13:25
- - Hmm   Цитата... классный класс. Да неплохой. Использовал...   Mar 28 2012, 19:34
- - dm37   в архиве cport310 есть файл readme.txt всё (правда...   Sep 26 2016, 18:45


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 17:48
Рейтинг@Mail.ru


Страница сгенерированна за 0.01575 секунд с 7
ELECTRONIX ©2004-2016