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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2019, 15:44   #1
igorter
Пользователь
 
Регистрация: 11.11.2019
Сообщений: 10
Вопрос Полноценное управление LPT-портом в Delphi, как лучше?

Большая просьба помочь разобраться в вопросе, как лучше управлять из Delphi LPT портом, так чтобы программа была универсальна и работала под системами от Windows 98 до Windows 7. Очень давно интересуюсь этой темой, но однозначного решения так и не нашел. Есть вариант использовать драйвер inpout32.dll. Он вроде универсальный и работает под всеми вариантами Виндовс, даже 64-битными. Он только пишет в порты и читает из них, но не использует прерывания.
Как получить доступ к прерываниям LPT-порта? Можно это делать как-то через WinAPI? Если да, то как? Был такой компонент под Delphi, но он коммерческий и работает только под ХР. Может какой-то бесплатный драйвер прерываний есть с примерами под Delphi?
Можно ли через WinAPI полноценно работать с портом во всех режимах передачи данных: ECP, SPP, EPP? Я не силен в особенностях WinAPI, может есть готовые примеры, как это делать во всех режимах и как оно работает. Весь русскоязычный Интернет перерыл, нигде ничего нет, только краткие куски кода, но где-то встречал, что через API можно всё делать без сторонних драйверов и программа будет универсальной. Буду очень благодарен за любую помощь в этом вопросе.
igorter вне форума Ответить с цитированием
Старый 12.11.2019, 08:36   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Зачем именно LPT то?? его уже на современных компах не ставят даже.
связка FT + МК какой нибудь куда полезнее будет. Да и пинов больше. И через USB можно подключать без всяких драйверов.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 12.11.2019, 12:20   #3
igorter
Пользователь
 
Регистрация: 11.11.2019
Сообщений: 10
По умолчанию

А как FT в режиме паралельного порта управлять из Delphi, все сайты перерыл, полноценного примера такого модуля так и не нашел?? Например ft2232h перевести в паралельный режим и управлять им?

Но вопрос по LPT всеравно актуален для меня. Управлять портами на всех Виндовсах можно через inpout32.dll. А как в Delphi получить доступ к прерываниям порта, нигде не могу найти. Чтобы постоянно в цикле не проверять его регистры?
igorter вне форума Ответить с цитированием
Старый 12.11.2019, 12:29   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от igorter Посмотреть сообщение
А как FT в режиме паралельного порта управлять из Delphi
У вас задача то какая?? Что там за древнее устройство на LPT?? Сам FT это драйвер последовательного порта. На другой конец вешаете ему какой нибудь микроконтроллер который возьмет на себя взаимодейтвие с железом. Получил команду по COM порту типа двигай вперед и сам уже формирует пакеты на LPT и дергает стробом.
Потому что с ПК вы дергать стробом на частоте 10 мегагерц не сможете никаким спосбом, а с МК как два пальца.

Цитата:
Сообщение от igorter Посмотреть сообщение
А как в Delphi получить доступ к прерываниям порта, нигде не могу найти. Чтобы постоянно в цикле не проверять его регистры?
Какие прерывания то?? Типа когда данные чтоли приходят событие вызывать??
Так этого никто не сделает. Берете библиотеку и пишете свой обработчик. Который будет слушать данные и выкидывать нужные прерывания.

Да и вообще .. паралельный порт он же не умеет думать самостоятельно. Там не существует аппаратного протокола обмена. Для общения строб данных нужно дергать. Частота именно в софте и определяется. Причем портом управлять может только мастер. Не понятно какие именно вам прерывания оттуда должны приходить.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 12.11.2019, 21:45   #5
igorter
Пользователь
 
Регистрация: 11.11.2019
Сообщений: 10
По умолчанию

У меня задача создавать приборы с универсальным обменом данными с ПК. Для старых LPT, для новых FT2232H на USB. СОМ порт не очень люблю, но тоже приходилось использовать. Главное - универсальность хостовой программы на ПК, чтобы она под разными ОС нормально работала. Была еще с института хорошая затея универсального программатора-тестера различных микросхем, не только памяти, но и логики, процессоров. Даже диплом написал по этой тематике. Вот и думал сейчас ее развинуть, так как тогда уперся в технические проблемы, которых не мог решить, а сейчас уже есть мысли как это сделать.
Но перехват аппаратных прерываний нужен очень. Был такой компонент с собственным драйвером под Delphi, но он только под ХР работает, а мне нужна его универсальность. Как-то люди с прерываниями работают. В Delphi даже служебное слово есть interrupt. Но как его использовать нигде не нашел.
igorter вне форума Ответить с цитированием
Старый 12.11.2019, 22:18   #6
Viktor61
Пользователь
 
Регистрация: 05.05.2018
Сообщений: 92
По умолчанию

Цитата:
"...Был такой компонент с собственным драйвером под Delphi, но он только под ХР работает, а мне нужна его универсальность..."
Если есть исходный код этого компонента, м.б. соорудить какую-нибудь DLL-ку под XP с набором внешних ф-ций, в программе её подключать и пользоваться этими ф-циями? Способ, безусловно, не 100% надёжный... Но может и прокатить.
Viktor61 вне форума Ответить с цитированием
Старый 13.11.2019, 02:27   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от igorter Посмотреть сообщение
У меня задача создавать приборы с универсальным обменом данными с ПК. Для старых LPT, для новых FT2232H на USB. СОМ порт не очень люблю, но тоже приходилось использовать. Главное - универсальность хостовой программы на ПК, чтобы она под разными ОС нормально работала.
Тогда USB или СОМ. LPT лучше забыть.
northener вне форума Ответить с цитированием
Старый 13.11.2019, 09:41   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

igorter
Вы из мухи делаете слона.

Самое простое купить Arduino NANO оно стоит как один сэндвич. Подключить к ней по UART либо USB. А опрос ваших ножик один цикл.

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

Цитата:
Сообщение от igorter Посмотреть сообщение
Windows 98 до Windows 7
Вы бы ещё OS/2 вспомнили. Кому ваш win98 нужен? Это же такое старьё, как гуано мамонта.

Цитата:
Сообщение от igorter Посмотреть сообщение
В Delphi даже служебное слово есть interrupt. Но как его использовать нигде не нашел.
Дык, справку надо читать. В Delphi оно не поддерживается и оставлено для совместимости с BP7.

Так что для его замены пишите функцию на ассемблере с iret. Только в виндоусе вам все равно не понадобится, там архитектура ядра подразумевает что-вы цепляете обычную функцию в качестве обработчика.

Цитата:
Сообщение от igorter Посмотреть сообщение
универсальным обменом данными с ПК.
обменом данными с ПК.[/QUOTE]
Какую шину выбрать? Ethernet, COM, USB-COM, USB-HID, LPT.

Universal Asynchronous Receiver-Transmitter (сокращенно UART)
universal serial bus (сокращенно USB)
В самом название уже сказано что они универсальные.

Ethernet - требует установки wIP что весить много и для самых младших микроконтроллёров не годится. В остальном недостатков нету.

COM он же UART не требует практически ничего. Из недостатка маленькая скорость.

USB - из недостатка требует установку драйвера со стороны компьютера.

LPT - уже давно не ставится в компьютеры. ДА и если говорить открыто, то подводных камней там полно:
https://www.mouser.com/datasheet/2/2...10x-596295.pdf
Учесть что DMA работает из 1 МБ если за дейстовать доп адреса то из 16 МБ.

Цитата:
Сообщение от WorldMaster Посмотреть сообщение
Да и вообще .. паралельный порт он же не умеет думать самостоятельно. Там не существует аппаратного протокола обмена.
Ошибаетесь там их куча. IRQ вызывается на nACK при использование очереди при переполнении очереди. При использовании протокола IEEE 1284 nACK выставляется при приеме пакета, а не каждого байта. Так что как там работает FIFO и IRQ я вам не подскажу.

И плюс к тому же каждый производитель материнки ставит свой мультик. Так что программируется оно немного по разному.
Поэтому полноценной поддержки LPT нету даже в виндоусе!

----------------------
Цитата:
Сообщение от igorter Посмотреть сообщение
Главное - универсальность хостовой программы на ПК, чтобы она под разными ОС нормально работала.
Это достигается написания
if (OS=Win98) then ...
if (OS=WinXP) then ...
if (OS=Win7) then ...
if (OS=Win8) then ...
if (OS=Win10) then ...

И для каждой ОС нужен свой драйвер. Так как архитектура драйверов отличается. Но тут можно отделаться 3 штуками для Win98, WinNT_32, WinNT_64.
Но тестировать надо на всех.

Так что проще взять готовый USB-FT2232H и не мучится.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 13.11.2019, 10:38   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

........

Последний раз редактировалось digitalis; 13.11.2019 в 11:22. Причина: а, всё равно...
digitalis вне форума Ответить с цитированием
Старый 14.11.2019, 17:48   #10
igorter
Пользователь
 
Регистрация: 11.11.2019
Сообщений: 10
По умолчанию

Про FT2232H я знаю давно, но была идея именно LPT осилить. Есть еще такая идея. На основе FT2232H и AtMega128 сделать такой себе сетевой хаб одновременно между портами USB, COM и LPT, чтобы соединяясь по этим портам компьютеры всех поколений и всех версий ОС Майкрософта могли между собой свободно обмениваться информацией не завися от прихотей и ограничений TCP-сетевого протокола, да и не на всех старых компьютерах были LAN-платы. Идея оригинальная и вроде никто такого не делал. Скорость обмена по современным меркам конечно будет очень низкой, но теоретически работать должно начиная от 286 процессора и до I7.
igorter вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
управление LPT портом SAMOUCHKA Общие вопросы C/C++ 7 15.07.2012 13:13
Управление LPT портом под FreeBSD miguel_condie Общие вопросы C/C++ 2 14.08.2010 07:59
Управление LPT портом nikleb Паскаль, Turbo Pascal, PascalABC.NET 5 27.05.2010 19:40
Управление COM портом средствами Visual Basic 6. С.М.С Помощь студентам 2 05.04.2010 18:22
Управление LPT портом Kuzmichinishe Помощь студентам 3 28.09.2009 11:07