|
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
|
|
Чтение из LPT порта29.12.2014, 01:25. Показов 5659. Ответов 18
Метки нет (Все метки)
LPT порт в режиме EPP. С некоторой частотой на него приходит последовательность импульсов, которые надо прочитать. Читать в бесконечном цикле (даже с задержкой) не безопасно (что-то пропускает, что-то читает 2 и более раз). Как организовать процесс, чтобы читать порт только тогда, когда на него пришли данные?
Гугл советует под линуксом юзать для этой цели select, но в винде это не работает. Больше ничего толкового пока не нашел. Для доступа к порту использую готовый драйвер inpout32.dll, но при необходимости и через WinApi можно.
0
|
|
| 29.12.2014, 01:25 | |
|
Ответы с готовыми решениями:
18
Чтение из COM-порта Побайтовое чтение COM порта Определение паузы при чтение с COM порта |
|
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
|
|
| 01.01.2015, 23:23 [ТС] | |
|
актуально
0
|
|
|
7804 / 6568 / 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
|
|
|
Студент
121 / 132 / 39
Регистрация: 07.04.2011
Сообщений: 503
|
|
| 03.01.2015, 11:59 | |
|
В boost::asio есть фича, но там вроде только для последовательного порта, почитайте об этом, может ошибаюсь.
0
|
|
|
|
|||
| 03.01.2015, 14:48 | |||
Читать надо в потоке, а отслеживать длительность можно микросекундным таймером 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
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 03.01.2015, 19:40 | |
|
Нельзя серьёзный проект строить на штуках, типа, inpout, неизвестно как они себя поведут при длительном использовании. Там же общий контроллер для LPT, COM, Floppy и т. д. Конфликты могут быть.
0
|
|
|
|
|
| 03.01.2015, 19:51 | |
|
1- перечитайте мой посткриптум выше в посте #6. Нельзя вообще использовать бытовой ПК, тем паче с виндами на борту для промышленных целей. Должен быть внешний железный контроллер для реалтайм и автономности и не самопальщина. Или промПК с QNX-ом или WinCE аля RTX, как вариант.
2- конфликты с чем это там они могут быть? Область памяти известна, никто никуда не лезет куда не надо.
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 03.01.2015, 19:57 | |
|
Если я правильно понял документацию, для программирования контроллера I/O используется один и тот же набор портов, поэтому драйверы должны как-то по очереди это делать. Inpout это обеспечивает?
0
|
|
|
|
|
| 03.01.2015, 20:01 | |
|
Это вы можете узнать у разработчика http://www.logix4u.net/inpout32.htm
0
|
|
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 03.01.2015, 20:07 | |
|
Вопрос больше риторический. Драйвер просто читает/записывает порты и всё.
0
|
|
|
14 / 14 / 1
Регистрация: 20.04.2010
Сообщений: 102
|
||||
| 04.01.2015, 04:07 [ТС] | ||||
просто хотелось бы сделать по-нормальному: пришли новые данные - прочитали порт и никаких опасений, что какие-то импульсы не прочитает/прочитает несколько раз. заодно по возникновению прерывания можно было бы и время прихода нового импульса отследить. в линуксе вот есть хотя бы select, которому можно скормить дескриптор порта. а в винде, похоже, надо писать свой драйвер с обработчиком прерываний ![]()
но стандартный виндовый драйвер для LPT в плане применимости в рамках моей задачи так же огорчает Добавлено через 5 минут
0
|
||||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
|
| 04.01.2015, 04:21 | |
|
fit, Программирование драйверов Windows, Солдатов В.П., 2004 вроде не плохая книжка, хотя сам толком не читал. Для создания драйвера воспользуйтесь DDK. А в обще драйвер имеет схожую с exe структуру, и его можно построить в Visual Studio.
0
|
|
|
Модератор
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,870
|
|||||
| 04.01.2015, 04:33 | |||||
|
Это обязательно конкретное время, хоть час, но всегда час, ни больше не меньше, т.е сигнал пришел и ровно через час получили ответ системы, ни винда ни дос ни линукс такого гарантировать не могут, они могут отработать и 55 минут и 65, примерно час ![]() А пока с такой постановкой задачи http://msdn.microsoft.com/ru-r... s.85).aspx http://www.firststeps.ru/mfc/winapi/r.php?166 пускай считывает данные допустим каждую секунду, или десять раз в секунду, и складывает в буфер а основная программа будет анализировать насколько помню даже во времена ДОС параллельный порт не генерил прерывания по шине данных, также приходилось опрашивать, хотя столько лет прошло могу и ошибатся Добавлено через 3 минуты кстати функции для работы с памятью там совершенно другие
0
|
|||||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
|||
| 04.01.2015, 05:04 | |||
|
0
|
|||
|
286 / 192 / 56
Регистрация: 25.12.2012
Сообщений: 640
|
|
| 04.01.2015, 05:04 | |
|
Удалите дубликат , толи инет заглючил толи браузер.
0
|
|
|
|
||
| 04.01.2015, 12:44 | ||
0
|
||
| 04.01.2015, 12:44 | |
|
Помогаю со студенческими работами здесь
19
Непрерывное чтение и обработка с com порта (последовательный порт) в Visual C++ Тестирование LPT порта Обработка LPT порта Программирования LPT-порта Программирование LPT порта Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|