Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/46: Рейтинг темы: голосов - 46, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 2
Delphi 6-7

Полноценное управление LPT портом в Delphi, как лучше реализовать?

11.11.2019, 19:49. Показов 10944. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Большая просьба помочь разобраться в вопросе, как лучше управлять из Delphi LPT портом, так чтобы программа была универсальна и работала под системами от Windows 98 до Windows 7. Очень давно интересуюсь этой темой, но однозначного решения так и не нашел. Есть вариант использовать драйвер inpout32.dll. Он вроде универсальный и работает под всеми вариантами Виндовс, даже 64-битными. Он только пишет в порты и читает из них, но не использует прерывания.
Как получить доступ к прерываниям LPT-порта? Можно это делать как-то через WinAPI? Если да, то как? Был такой компонент под Delphi, но он коммерческий и работает только под ХР. Может какой-то бесплатный драйвер прерываний есть с примерами под Delphi?
Можно ли через WinAPI полноценно работать с портом во всех режимах передачи данных: ECP, SPP, EPP? Я не силен в особенностях WinAPI, может есть готовые примеры, как это делать во всех режимах и как оно работает. Весь русскоязычный Интернет перерыл, нигде ничего нет, только краткие куски кода, но где-то встречал, что через API можно всё делать без сторонних драйверов и программа будет универсальной. Буду очень благодарен за любую помощь в этом вопросе.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.11.2019, 19:49
Ответы с готовыми решениями:

Управление LPT портом
Хочу управлять портом LPT через уже установленный стандартный драйвер, отправляя ему управляющие IOCTRL. Как это сделать ? Где достать...

Управление Lpt портом
Подскажите, как управлять пинами lpt порта? Все, что нашел в интернете либо не работает, либо не компилится. Доп настроек на компьютере...

Управление LPT портом
Нужно управлять LPT портом в BORLAND C++ 3.1 Подскажите каким образом осуществлять ввод и запись в порт информации.

47
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
12.11.2019, 02:22
Цитата Сообщение от igorter Посмотреть сообщение
Можно ли через WinAPI полноценно работать с портом во всех режимах передачи данных: ECP, SPP, EPP?
Имхо, полноценно нельзя. В Win32 всю работу с аппаратными ресурсами предполагается выполнять в нулевом кольце защиты (а это системные драйверы). А WinAPI это пользовательский уровень (третье кольцо).
Все поделки Дельфийских (и не только) Кулибиных это не полноценная работа с портами, а лишь её эмуляция. Иногда помогающая в конкретном случае.
Так что у вас два пути. Либо берёте в зубы SDK и пишете полноценный драйвер для вашего устройства подключенного к LPT-порту (хотя какое к черту устройство, если LPT-порт уже давно днём с огнём не сыщещь), либо ограничьтесь в своих требованиях к работе с портом.
1
0 / 0 / 0
Регистрация: 11.11.2019
Сообщений: 2
12.11.2019, 11:47  [ТС]
LPT порт есть на многих современных материнских платах. Я сам собрал на основе сгоревшего ноутбука гибридный компьютер на I5 процессоре и на малогабаритной материнской плате со встроенными LPT и СОМ портами и LVDS портом матрицы, с которого сейчас и пишу здесь. Мощности этой машины мне будет достаточно еще на много лет и таких примеров есть много.

Также собрал USB-эмулятор LPT на основе платы на процессоре CY7C68013. Хочу еще попробовать ft2232h, но не могу найти примеров для работы этой микросхемы именно в режиме LPT и примеров как ею пользоваться для Delphi.
Сейчас все мои надежды на библиотеку inpout32.dll, которая имеет вариант исполнения для 64-разрядных систем. Нашел код модуля под нее для Delphi.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
(*
 *  InpOut32 1.5.0.1
 *
 *  Oleksandr Nazaruk <mail@freehand.com.ua>
 *
*)
 
unit inpout32;
 
interface
 
uses
  System.SysUtils,
  Winapi.Windows;
 
const
  {$IFDEF WIN32}
    LIB_INPOUT32 = 'inpout32.dll';
  {$ENDIF}
  {$IFDEF WIN64}
    LIB_INPOUT32 = 'inpoutx64.dll';
  {$ENDIF}
 
 
//Functions exported from DLL.
//For easy inclusion is user projects.
//Original InpOut32 function support
procedure Out32(PortAddress: SHORT; Data: SHORT);
    stdcall; external LIB_INPOUT32;
function Inp32(PortAddress: SHORT): SHORT;
    stdcall; external LIB_INPOUT32;
 
 
//My extra functions for making life easy
function IsInpOutDriverOpen(): BOOL;   //Returns TRUE if the InpOut driver was opened successfully
    stdcall; external LIB_INPOUT32;
function IsXP64Bit(): BOOL;               //Returns TRUE if the OS is 64bit (x64) Windows.
    stdcall; external LIB_INPOUT32;
 
//DLLPortIO function support
function DlPortReadPortUchar(port: USHORT): UCHAR;
    stdcall; external LIB_INPOUT32;
procedure DlPortWritePortUchar(port: USHORT; Value: UCHAR);
    stdcall; external LIB_INPOUT32;
 
function DlPortReadPortUshort(port: USHORT): USHORT;
    stdcall; external LIB_INPOUT32;
procedure DlPortWritePortUshort(port: USHORT; Value: USHORT);
    stdcall; external LIB_INPOUT32;
 
function DlPortReadPortUlong(port: ULONG): ULONG;
    stdcall; external LIB_INPOUT32;
procedure DlPortWritePortUlong(port: ULONG; Value: ULONG);
    stdcall; external LIB_INPOUT32;
 
//WinIO function support (Untested and probably does NOT work - esp. on x64!)
function MapPhysToLin(pbPhysAddr: PBYTE; dwPhysSize: DWORD; pPhysicalMemoryHandle: PHANDLE): PBYTE;
    stdcall; external LIB_INPOUT32;
function UnmapPhysicalMemory(PhysicalMemoryHandle: THANDLE; pbLinAddr: PBYTE): BOOL;
    stdcall; external LIB_INPOUT32;
function GetPhysLong(pbPhysAddr: PBYTE; pdwPhysVal: PDWORD): BOOL;
    stdcall; external LIB_INPOUT32;
function SetPhysLong(pbPhysAddr: PBYTE; dwPhysVal: DWORD): BOOL;
    stdcall; external LIB_INPOUT32;
 
 
implementation
 
end.
Может кому пригодится.
Сама библиотека последней на данный момент версии здесь: InpOutBinaries_1501.zip
Если бы мне еще найти готовый драйвер для перехвата прерываний порта, было бы вообще замечательно. Ну и как использовать выше описанную библиотеку для полноценной работы LPT в ECP режиме, чтобы контроллер порта сам управлял потоком данных, а я его только считывал и загружал в буфер.
0
42 / 318 / 4
Регистрация: 02.04.2009
Сообщений: 1,000
27.01.2023, 05:46
Здравствуйте. Передо мной сейчас поставили задачу подавать сигналы на LPT-порт через плату Плата расширения DEXP 2COM LPT из программы, написанной на Delphi. В данной модели используется интерфейс PCI-E x1. Внутренний разъем PCI, через него контроллер присоединяется к плате. Что можно почитать на эту тему?
0
 Аватар для krapotkin
6851 / 4677 / 1465
Регистрация: 14.04.2014
Сообщений: 20,674
Записей в блоге: 21
27.01.2023, 17:44
если здесь не ответят, рекомендую толкнуться еще в раздел микроконтроллеры
потому что нет универсального решения по низкоуровневому доступу из высокоуровневой программы на windows nt+
1
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
31.01.2023, 02:43
Цитата Сообщение от Rasool Посмотреть сообщение
Здравствуйте. Передо мной сейчас поставили задачу подавать сигналы на LPT-порт через плату Плата расширения DEXP 2COM LPT из программы, написанной на Delphi. В данной модели используется интерфейс PCI-E x1. Внутренний разъем PCI, через него контроллер присоединяется к плате. Что можно почитать на эту тему?
А ничего нового читать не нужно. Работайте с портами как обычно.

Добавлено через 3 минуты
Но и да. Низкоуровнего доступа к LPT порту уже давно нет. И не предвидится.
0
Эксперт .NET
 Аватар для Rius
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,577
Записей в блоге: 14
31.01.2023, 05:18
А зачем он нужен в наше время? В чём незаменимость?
0
42 / 318 / 4
Регистрация: 02.04.2009
Сообщений: 1,000
31.01.2023, 11:17
Цитата Сообщение от Rius Посмотреть сообщение
А зачем он нужен в наше время? В чём незаменимость?
С его помощью, например, легко организовать высокоскоростное управление шаговыми двигателями.
0
Эксперт .NET
 Аватар для Rius
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,577
Записей в блоге: 14
31.01.2023, 11:20
Лучший ответ Сообщение было отмечено northener как решение

Решение

А эту логику разве нельзя перенести в микроконтроллер?
Судя по проблеме с доступом к порту в винде, не так уж и легко.
0
42 / 318 / 4
Регистрация: 02.04.2009
Сообщений: 1,000
31.01.2023, 15:37
Цитата Сообщение от Rius Посмотреть сообщение
А эту логику разве нельзя перенести в микроконтроллер?
Судя по проблеме с доступом к порту в винде, не так уж и легко.
Если можно будет обращаться в LPT-порту с частотой порядка мегагерц, то, думаю, будет достаточно. Винда же работает на гигагерцах?
0
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,462
31.01.2023, 15:50
Rasool, windows - многозадачная ОС, и там нет непрерывной работы процесса, так что, будут большие перерывы в работе такой процедуры.
0
Эксперт .NET
 Аватар для Rius
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,577
Записей в блоге: 14
31.01.2023, 15:57
Rasool, там можно составить программу и отправить её работать в микроконтроллер. И вот там уже хоть сотни мегагерц, и никто не отвлекает.
Так работают 3D принтеры.
0
42 / 318 / 4
Регистрация: 02.04.2009
Сообщений: 1,000
31.01.2023, 19:30
Цитата Сообщение от Rius Посмотреть сообщение
Rasool, там можно составить программу и отправить её работать в микроконтроллер. И вот там уже хоть сотни мегагерц, и никто не отвлекает.
Так работают 3D принтеры.
А как в 3D принтерах осуществляется связь шаговых двигателей с датчиками перемещения и концевиками? Программно это можно сделать?
0
Эксперт .NET
 Аватар для Rius
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,577
Записей в блоге: 14
31.01.2023, 20:38
Конечно. В микроконтроллерах же работают программы.

Добавлено через 1 час 3 минуты
Примеры 3D принтеров на Ардуине. Собирать не рекомендую, просто посмотреть. Там есть и шаговики, и концевики.
Как сделать недорогой 3D принтер с помощью Arduino
Собираем 3D-принтер своими руками. Пошаговая инструкция. Часть 1....Часть 5.
0
42 / 318 / 4
Регистрация: 02.04.2009
Сообщений: 1,000
02.02.2023, 19:54
Цитата Сообщение от AzAtom Посмотреть сообщение
windows - многозадачная ОС, и там нет непрерывной работы процесса, так что, будут большие перерывы в работе такой процедуры.
Для наших задач (например, помигать светодиодами, подключенными к LPT-порту) нужно нечто подобное: Работа с LPT портом в Дельфи или компьютер в роли управляющего контроллера. Но эта статья написана еще в 2010-м году, тогда LPT-порт еще был встроен на многих материнках. Сейчас видимо аппаратный доступ к LPT-порту будет осуществляться через плату расширения DEXP 2COM LPT. Как его можно реализовать программно на Delphi?

Добавлено через 17 минут
Нашел что-то вроде драйвера LPT-порта: https://www.driverscape.com/do... allel-port. Но как с ним работать, не понятно.
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
03.02.2023, 02:39
Цитата Сообщение от Rasool Посмотреть сообщение
Для наших задач (например, помигать светодиодами, подключенными к LPT-порту)
Цитата Сообщение от Rasool Посмотреть сообщение
С его помощью, например, легко организовать высокоскоростное управление шаговыми двигателями.
Вы уж разберитесь с тем, какие задачи вам ну нужно решать.
0
42 / 318 / 4
Регистрация: 02.04.2009
Сообщений: 1,000
03.02.2023, 09:52
Цитата Сообщение от northener Посмотреть сообщение
Вы уж разберитесь с тем, какие задачи вам ну нужно решать.
Для начала нужно научиться работать с LPT-портом, то есть помигать светодиодами, подключенными к нему. Следующая задача - научиться управлять шаговыми двигателями (через контроллер, подключенный к LPT-порту).
0
03.02.2023, 09:54

Не по теме:

В 2023 году не этому надо учиться. Уже поздно. Эти порты вымерли.

0
42 / 318 / 4
Регистрация: 02.04.2009
Сообщений: 1,000
03.02.2023, 10:56
Цитата Сообщение от Rius Посмотреть сообщение
В 2023 году не этому надо учиться. Уже поздно. Эти порты вымерли.
У LPT есть хорошая особенность - у него большая скорость обмена данными.
0
Эксперт .NET
 Аватар для Rius
13205 / 7733 / 1681
Регистрация: 25.05.2015
Сообщений: 23,577
Записей в блоге: 14
03.02.2023, 11:03
Сколько? 1.7 Мбайт/с? 2.5 Мбайт/с?

У USB 3 - до 650 МБ/с.

Все его хорошие особенности канули в прошлое. И простой доступ, и высокая по тем временам скорость, и распространённость на компьютерах.
Сделаете вы это устройство, а подключить его будет некуда. Тогда можно будет просто взять и выкинуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.02.2023, 11:03
Помогаю со студенческими работами здесь

Управление LPT портом из Windows XP
Помогите решить проблему. Нужно чтобы например на рабочем столе было два значка один из которых включает 5 вольт на любом из выводов LPT, а...

Управление LPT портом под FreeBSD
Здравствуйте! Пытаюсь откомпилировать следующий код под FreeBSD: #include &lt;stdio.h&gt; #include &lt;fcntl.h&gt; #include...

Управление LPT портом, что нужно для работы
Как можно управлять LPT какие дрова нужны как ими пользоваться очень много перерыл ничего не работает хочу сделать программу которая будет...

Управление lpt портом, используя библиотеку inpout32.dll
Здравствуйте! Использую inpout32.dll Подскажите пожалуйста что писать в: PortAccess.Output(); что бы вывести в контакт 2-5 (выходы...

Как работать с портом LPT?
Народ подскажите как в VB .net работать с LPT plz...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru