14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102

Чтение из LPT порта

29.12.2014, 01:25. Показов 5396. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
LPT порт в режиме EPP. С некоторой частотой на него приходит последовательность импульсов, которые надо прочитать. Читать в бесконечном цикле (даже с задержкой) не безопасно (что-то пропускает, что-то читает 2 и более раз). Как организовать процесс, чтобы читать порт только тогда, когда на него пришли данные?
Гугл советует под линуксом юзать для этой цели select, но в винде это не работает. Больше ничего толкового пока не нашел.
Для доступа к порту использую готовый драйвер inpout32.dll, но при необходимости и через WinApi можно.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.12.2014, 01:25
Ответы с готовыми решениями:

Чтение из COM-порта
Здравствуйте! Никак не могу правильно прочитать данные из COM-порта. Мой процессор отправляет в компорт в бесконечном цикле (каждые...

Побайтовое чтение COM порта
Доброго времени суток. Обычно из COM порта читают передавая в функцию чтения указатель на буфер и сколько байтов прочитать. Как...

Определение паузы при чтение с COM порта
Пишу под OS Windows 7 visual studio c использованием MFC. Нужно добиться определения наличия паузы между принятием двух байт по COM...

18
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
01.01.2015, 23:23  [ТС]
актуально
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
02.01.2015, 06:41
Читать надо однозначно через WinAPI.
0
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
03.01.2015, 02:10  [ТС]
дело в том, что по умолчанию винда расценивает LPT как порт принтера. стандартный драйвер винды заточен под то, что к LPT подключено устройство "а-ля принтер", которое поддерживает соответствующий аппаратный протокол обмена (железка должна в состоянии обработать управляющие сигналы strobe/ack,и проинформировать об этом хост). для моего внешнего устройства это не реально - оно не принтер, не сканер и даже не программируемо. соответственно и работать с ним через стандартные средства WinAPI в полной мере невозможно. открыть порт (CreateFile), отправить в него что-то (WriteFile) - можно. а вот прочитать (ReadFile), да еще по прерыванию не получится.
по крайней мере у меня не выходит. да и в интернетах пишут тоже самое
0
Студент
 Аватар для MickeyBlueEyes
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
03.01.2015, 11:59
В boost::asio есть фича, но там вроде только для последовательного порта, почитайте об этом, может ошибаюсь.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.01.2015, 14:48
С некоторой частотой на него приходит последовательность импульсов
и с какой же частотой? Винда не реалтайм ОС. Сам LPT тоже имеет ограничение по скорости, тем паче, если не выпаяны емкости на DATA пинах на материнке, сглаживающие фронты.

Читать в бесконечном цикле (даже с задержкой) не безопасно (что-то пропускает, что-то читает 2 и более раз)
это зависит от того как вы читаете и что собой представляет последовательность импульсов, сферическая между прочим. Ни указания длительности одиночного импульса, ни частоты следования.

Читать надо в потоке, а отслеживать длительность можно микросекундным таймером http://msdn.microsoft.com/en-u... s.85).aspx, предварительно калибруя в зависимости от процессора.

P.S.: и вообще, имхо, рулить из LPT (движком, ЧПУ и прочими) некошерно на сегодняшний момент, даже если и аппелировать к старому ПК. Должен быть внешний контроллер, который всем занимается и принимает лишь управляющие общие команды, отсылая диагностическую информацию на верхний уровень.
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
03.01.2015, 18:08
Чтобы не читать в бесконечном цикле, нужно найти какую то dll или sys который отлавливает прерывания порта, и может их передать в заранее установленный обработчик. Ну или установить свой обработчик на прерывания порта, правда для этого нужно писать свой драйвер.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.01.2015, 19:18
inpout (winlpt, giveio, io и прочие сиси) и есть драйвер обхода системы в третье кольцо и прямого доступа к LPT-порту, другого способа нет.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.01.2015, 19:40
Нельзя серьёзный проект строить на штуках, типа, inpout, неизвестно как они себя поведут при длительном использовании. Там же общий контроллер для LPT, COM, Floppy и т. д. Конфликты могут быть.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.01.2015, 19:51
1- перечитайте мой посткриптум выше в посте #6. Нельзя вообще использовать бытовой ПК, тем паче с виндами на борту для промышленных целей. Должен быть внешний железный контроллер для реалтайм и автономности и не самопальщина. Или промПК с QNX-ом или WinCE аля RTX, как вариант.
2- конфликты с чем это там они могут быть? Область памяти известна, никто никуда не лезет куда не надо.
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.01.2015, 19:57
Если я правильно понял документацию, для программирования контроллера I/O используется один и тот же набор портов, поэтому драйверы должны как-то по очереди это делать. Inpout это обеспечивает?
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
03.01.2015, 20:01
Это вы можете узнать у разработчика http://www.logix4u.net/inpout32.htm
0
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
03.01.2015, 20:07
Вопрос больше риторический. Драйвер просто читает/записывает порты и всё.
0
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
04.01.2015, 04:07  [ТС]
Цитата Сообщение от raxp
это зависит от того как вы читаете и что собой представляет последовательность импульсов, сферическая между прочим. Ни указания длительности одиночного импульса, ни частоты следования.

Читать надо в потоке, а отслеживать длительность можно микросекундным таймером http://msdn.microsoft.com/en-u... s.85).aspx, предварительно калибруя в зависимости от процессора.
частота небольшая, далеко не реалтайм. чтение в отдельном потоке реализовано)
просто хотелось бы сделать по-нормальному: пришли новые данные - прочитали порт и никаких опасений, что какие-то импульсы не прочитает/прочитает несколько раз. заодно по возникновению прерывания можно было бы и время прихода нового импульса отследить.
в линуксе вот есть хотя бы select, которому можно скормить дескриптор порта. а в винде, похоже, надо писать свой драйвер с обработчиком прерываний

Цитата Сообщение от nmcf
Нельзя серьёзный проект строить на штуках, типа, inpout, неизвестно как они себя поведут при длительном использовании. Там же общий контроллер для LPT, COM, Floppy и т. д. Конфликты могут быть.
бесполезность и глупость этой затеи, стала понятна как только я этот inpout заюзал. как выяснилось он даже не предоставляет нужной функциональности. полезно было бы, разве что, посмотреть его код))
но стандартный виндовый драйвер для LPT в плане применимости в рамках моей задачи так же огорчает

Добавлено через 5 минут
Цитата Сообщение от maxillion Посмотреть сообщение
Чтобы не читать в бесконечном цикле, нужно найти какую то dll или sys который отлавливает прерывания порта, и может их передать в заранее установленный обработчик. Ну или установить свой обработчик на прерывания порта, правда для этого нужно писать свой драйвер.
пока такой библиотеки не нашел. а что толкового можно почитать про написание драйверов под винду?
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
04.01.2015, 04:21
fit, Программирование драйверов Windows, Солдатов В.П., 2004 вроде не плохая книжка, хотя сам толком не читал. Для создания драйвера воспользуйтесь DDK. А в обще драйвер имеет схожую с exe структуру, и его можно построить в Visual Studio.
0
Модератор
Эксперт по электронике
8963 / 6729 / 921
Регистрация: 14.02.2011
Сообщений: 23,762
04.01.2015, 04:33
Цитата Сообщение от fit Посмотреть сообщение
частота небольшая, далеко не реалтайм.
реалтайм это не обязательно быстро
Это обязательно конкретное время, хоть час, но всегда час, ни больше не меньше, т.е сигнал пришел и ровно через час получили ответ системы, ни винда ни дос ни линукс такого гарантировать не могут,
они могут отработать и 55 минут и 65, примерно час
Цитата Сообщение от fit Посмотреть сообщение
а что толкового можно почитать про написание драйверов под винду?
поиши здесь на форуме Убежденный, он пишет драйвера и может конкретно что то посоветовать
А пока с такой постановкой задачи
Цитата Сообщение от fit Посмотреть сообщение
LPT порт в режиме EPP. С некоторой частотой на него приходит последовательность импульсов, которые надо прочитать. Читать в бесконечном цикле (даже с задержкой) не безопасно
Могу предложить отдельный поток, и в нем DeviceIoControl
http://msdn.microsoft.com/ru-r... s.85).aspx
http://www.firststeps.ru/mfc/winapi/r.php?166
пускай считывает данные допустим каждую секунду, или десять раз в секунду, и складывает в буфер
а основная программа будет анализировать
насколько помню даже во времена ДОС параллельный порт не генерил прерывания по шине данных, также приходилось опрашивать, хотя столько лет прошло могу и ошибатся

Добавлено через 3 минуты
Цитата Сообщение от maxillion Посмотреть сообщение
А в обще драйвер имеет схожую с exe структуру, и его можно построить в Visual Studio.
особенно если учесть что он работает в 0 кольце, и с памятью там ой как нужно быть осторожным, а равно и с другими ресурсами
кстати функции для работы с памятью там совершенно другие
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
04.01.2015, 05:04
Цитата Сообщение от ValeryS Посмотреть сообщение
и с памятью там ой как нужно быть осторожным
Если драйвер работает на уровне PASSIVE_LEVEL то допускается исключения ACCESS_VIOLATION и их перехват, как в обычной программе.
Цитата Сообщение от ValeryS Посмотреть сообщение
кстати функции для работы с памятью там совершенно другие
Мне удалось прикрутить программу на С++ с STL map к драйверу путём подмены значений всего двух WinApi.
0
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
04.01.2015, 05:04
Удалите дубликат , толи инет заглючил толи браузер.
0
 Аватар для raxper
10236 / 6614 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
04.01.2015, 12:44
частота небольшая, далеко не реалтайм
ни о чем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.01.2015, 12:44
Помогаю со студенческими работами здесь

Непрерывное чтение и обработка с com порта (последовательный порт) в Visual C++
Здравствуйте, я задумал одну идею с GPS приемником, но для того чтобы реализовать это мне необходимо читать и обработать данные с com порта...

Тестирование LPT порта
Здравствуйте. нашел в интернете код программы который может включить светодиод и отключить его. вот код #include...

Обработка LPT порта
Вечер добрый! Если кто работал с LPT в Builder, подскажите. Как связаться с ним, обрабатывать и отправлять сигналы?

Программирования LPT-порта
Помогите пожалуйста! Программирования Lpt-порта, надо Builder, если есть на других средах, то тоже подойдет, только мне надо вся информация...

Программирование LPT порта
Мне нужно сделать недольшое устройство для компьютера, которое подключено к почту принтера. Как управлять этим портом? Я знаю, что там есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
Dispose и Finalize в C#
stackOverflow 12.06.2025
Работая с C# больше десяти лет, я снова и снова наблюдаю одну и ту же историю: разработчики наивно полагаются на сборщик мусора, как на волшебную палочку, которая решит все проблемы с памятью. Да,. . .
Повышаем производительность игры на Unity 6 с GPU Resident Drawer
GameUnited 11.06.2025
Недавно копался в новых фичах Unity 6 и наткнулся на GPU Resident Drawer - штуку, которая заставила меня присвистнуть от удивления. По сути, это внутренний механизм рендеринга, который автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru