|
Работа с СОМ портом, Win2000 |
|
|
|
Feb 3 2005, 09:12
|
Группа: Новичок
Сообщений: 7
Регистрация: 3-02-05
Пользователь №: 2 395

|
Здравствуйте, уважаемые! Если кто сталкивался, помогите плизз. Долбаюсь уже 2 недели, и ничего не получается. Ситуация следующая: Есть некий контроллер и общается он с компьютером через RS232, в Win98 все работает, а вот Операционка Win2000 блокирует прямое обращение к портам. Мне подсказали прогу WinDriver для обхода этой проблемы... но опять-же, для LPT порта там есть стандартная заготовка, которая прекрасно работает... а о СОМ порте ни слова. Сразу оговорюсь, я не являюсь системным программистом и с железом дел никогда не имел... а тут пришлось  Искренне надеюсь на Вашу помощь. Заранее спасибо. З.Ы. Я впервые на этом форуме, и вполне возможно что запостил тему не совсем в тот раздел куда следовало бы. ЗЗ.ЫЫ Работать с этой штукой через CreateFile/ReadFile/WriteFile тоже не получается, в ReadFile постоянно нули возвращаются, хотя команда сформирована верно и контроллером принята...
|
|
|
|
|
 |
Ответов
|
Mar 28 2005, 09:19
|
Участник

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

|
Если протокол связи накладывает жесткие временные ограничения (самый жесткач это ответ PC по запросу внешнего устройства через маленькое время), то спасет только собственный драйвер. Если под 98 задача решается, то под 2к при помощи своего драйвера ее тоже можно решить. Самые быстрые варианты управления COM-портом, в порядке возрастания (по собственным ощущениям): 1) DOS на СИ или ASMе  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 задачку решить, если это вообще реально сделать.
|
|
|
|
|
Mar 29 2005, 05:36
|

Участник

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

|
Спасибо _VM за ответ. Цитата(_VM @ Mar 28 2005, 12:19) ... 1) DOS на СИ или ASMе  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 уходит "в пустоту" Чтение 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 мс. Буду благодарен за помощь!
|
|
|
|
|
Mar 29 2005, 07:35
|

Частый гость
 
Группа: Свой
Сообщений: 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.
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Mar 29 2005, 09:22
|

Участник

Группа: Новичок
Сообщений: 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 ,правда по прямому доступу к порту, но основа там разложена хорошо. Проблема в том, что у меня не работает (или я неправильно им пользуюсь) драйвер прямого доступа, хотя делал все по мануалу, включая ассемблерный код.
|
|
|
|
|
Mar 30 2005, 11:52
|

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

|
Цитата(Lukomor @ Mar 29 2005, 12:22) Настройка вручную порта из виндов не помогает - все равно не успеваю. А в цифрах - это сколько получилось ? Как я понял, нужно 10 ms. И насколько большой выходит "перебор" ?
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Mar 31 2005, 06:38
|

Участник

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

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

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

|
Цитата(Lukomor @ Mar 31 2005, 09:38) Цитата(-Tумблер- @ Mar 30 2005, 14:52) А в цифрах - это сколько получилось ? Как я понял, нужно 10 ms. И насколько большой выходит "перебор" ?  По грубой оценке около 30-40 ms. Сегодня я ноконец померил - и вот что получилось: При работе с одним потоком на прием и передачу - ~6 ms на ответ. Если поток имеет приоритет NORMAL действительно, его прерывают и иногда выходит ~30ms. Хотя и редко, это бывает. Если поставить приоритет этому потоку Тайм_Критикал, то ему никто особенно не мешает.  Кроме ~6ms других значений времени не зафиксировано. Система была WIN98, PII-300, VC6+API ONLY. Ничего особенно навороченного.. В качестве темплате использовалось готовое приложение с двумя потоками - основной Нормал+2 и еще рабочий Нормал. Под WIN-XP измерять буду завтра...
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Apr 13 2005, 16:37
|

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

|
Цитата(-Tумблер- @ Apr 13 2005, 19:22) Под WIN-XP измерять буду завтра...  Так вышло, что измерил сейчас. Получилось то же самое ~6ms на ответ. Все то же самое. Вполне вероятно, можно обойтись без драйверов и лазания в порты.
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Apr 21 2005, 08:59
|

Участник

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

|
Цитата(-Tумблер- @ Apr 13 2005, 19:37) Цитата(-Tумблер- @ Apr 13 2005, 19:22) Под WIN-XP измерять буду завтра...  Так вышло, что измерил сейчас. Получилось то же самое ~6ms на ответ. Все то же самое. Вполне вероятно, можно обойтись без драйверов и лазания в порты.  2-Тумблер- Спасибо, я действительно поигрался с приоритетами и потоками, вроде получилось, но проблема была в другом, "поймать" ответ устройства. Ответ приходит через ~11 мкс после запроса, при этом обмен идет через интерфесный девайс. От компьютера до девайса RS232 с управлением RTS, от девайса до устройства 485 интерфейс без управления потоком. Мне надо успеть вручную переключить RTS. Для работы с портом выставляю REALTIME_PRIORITY_CLASS и THREAD_PRIORITY_TIME_CRITICAL. С натягом, но все успеваю.
|
|
|
|
|
Apr 21 2005, 13:29
|

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

|
Цитата(Lukomor @ Apr 21 2005, 11:59) Для работы с портом выставляю REALTIME_PRIORITY_CLASS и THREAD_PRIORITY_TIME_CRITICAL. С натягом, но все успеваю. Извините, если скажу общеизвестное. Приоритет потока - вешь относительная. Если посмотреть каким-либо процесс вьювером, можно обнаружить, что абсолютный приоритет потоков "обычного" приложения не может превысить ~15. У Кернела - вдвое больше. Так что резервы еще есть. Можно попытаться увеличить приоритет процесса. Тогда "THREAD_PRIORITY_TIME_CRITICAL" станет еще выше..
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
Сообщений в этой теме
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
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|