Лет 10-15 назад параллельный порт был довольно востребованным интерфейсом для связи между устройствами. Сегодня производители различных устройств отдают предпочтение последовательным интерфейсам. Тем не менее, и сегодня LPT порт всё ещё можно встретить. А некоторые разработчики ещё пишут под него программы (или поддерживают написанные во времена расцвета параллельных интерфейсов). Но в компьютерах сейчас LPT порт – достаточно большая редкость. Существуют, конечно, платы расширения для компьютера, которые реализуют интерфейс LPT. Они в основном представляют собой платы на шине PCI. К сожалению, далеко не весь софт, который был написан для интегрированных в материнскую плату LPT портов, будет работать с LPT-PCI-платами.
Предлагается решение этой проблемы: программный класс, написанный под .NET, и динамическую библиотеку, которая работает с LPT. Данная реализация проверена на 32- и 64-разрядных Windows XP, Windows 7, 8 и 10 как со встроенными LPT портами, так и реализованными в виде плат расширения на шине PCI или PCI-Express. Скачать драйвер для LPT порта можно по ссылке внизу после статьи.
1Установка драйвера для работы с LPT портом
В приложенном архиве находятся две папки – для 32-разрядной и для 64-разрядной версий Windows. В одной из папок лежит файл InstallDriver.exe. Сначала запустите этот файл, он установит динамические библиотеки в систему. После этого компьютер следует перезагрузить.
Чтобы использовать предлагаемый драйвер, файлы inpout32.dll и inpoutx64.dll должны располагаться в одной директории с исполняемым файлом вашей программы.
2Программный класс использования библиотек работы с LPT портом
Мной был написан класс для .NET, который использует динамические библиотеки inpout32.dll и inpoutx64.dll и позволяет считывать из параллельного порта и записывать в его регистры данные.
Упомянутые библиотеки написаны не мной. Я предлагаю удобный класс-оболочку, упрощающий работу с данными библиотеками. Кроме того, автор библиотек в файле readme.txt сообщает, что его драйвер не поддерживает PCI устройства. Мне удалось его запустить для работы как с интегрированным параллельным портом, так и LPT портом, реализованном в виде платы расширения на шине PCI-Express. Причём порт отлично работает и на современной Windows10 x64, и на более старых системах.
Вот код класса LPT на языке VB.NET:
Код класса LPT на языке VB.NET (разворачивается)
Imports System.Runtime.InteropServices ''' <summary> ''' Работа с LPT портом. При создании определяет наличие драйвера и выбирает подходящую библиотеку. ''' </summary> Public NotInheritable Class LPT #Region "CONST" Public Const DLL32 As String = "c:\temp\inpout32.dll" Public Const DLL64 As String = "c:\temp\inpoutx64.dll" Public Const DLL32DRV As String = "c:\temp\inpoutx32drv.dll" ''' <summary> ''' Регистры параллельного порта. ''' </summary> Public Enum Register As Integer ''' <summary> ''' Регистр данных SPP/EPP. ''' </summary> DATA = 0 ''' <summary> ''' Регистр состояния SPP/EPP. ''' </summary> STATUS = DATA + 1 ''' <summary> ''' Регистр управления SPP/EPP. ''' </summary> CONTROL = DATA + 2 ''' <summary> ''' Регистр адреса EPP. Чтение или запись в него генерирует свзяанный цикл чтения или записи адреса EPP. ''' </summary> EPP_ADDRESS = DATA + 3 ''' <summary> ''' Регистр данных EPP. Чтение (запись) генерирует связанный цикл чтения (записи) данных EPP. ''' </summary> EPP_DATA = DATA + 4 ''' <summary> ''' Регистр активации режима EPP. ''' </summary> ''' <remarks> ''' Если только смешанный "ECP+EPP" или "Extended" - скорее всего потребуется еще выполнить запись в порт ECR байта 0x80 ''' (ECR - это регистр ECP-режима, ECR=BASE_ADDR+0x402, BASE_ADDR - базовый адрес LPT-порта ''' </remarks> ECR = DATA + &H402 End Enum #End Region '/CONST #Region "DllImport" <DllImport(DLL32, CharSet:=CharSet.Auto, EntryPoint:="IsInpOutDriverOpen")> Private Shared Function IsInpOutDriverOpen() As Byte End Function <DllImport(DLL64, CharSet:=CharSet.Auto, EntryPoint:="IsInpOutDriverOpen")> Private Shared Function IsInpOutDriverOpen_x64() As UInt64 End Function <DllImport(DLL32, CharSet:=CharSet.Auto, EntryPoint:="Inp32")> Private Shared Function Inp32(PortAddress As UInt32) As Byte End Function <DllImport(DLL32, CharSet:=CharSet.Auto, EntryPoint:="Out32")> Private Shared Sub Out32(portAddress As UInt32, data As UInt32) End Sub <DllImport(DLL64, CharSet:=CharSet.Auto, EntryPoint:="Inp32")> Private Shared Function Inp64(PortAddress As UInt64) As Byte End Function <DllImport(DLL64, CharSet:=CharSet.Auto, EntryPoint:="Out32")> Private Shared Sub Out64(PortAddress As UInt64, Data As UInt64) End Sub #End Region '/DllImport #Region "CTOR" ''' <summary> ''' Проверяет возможность использования x86 или x64 драйвера. В случае невозможности выбрасывает исключение "драйвер не установлен". ''' </summary> Shared Sub New() Dim x86 As Boolean = CheckIsDriverX86() Dim x64 As Boolean = CheckIsDriverX64() If x64 Then _IsX64DriverUsed = True ElseIf x86 Then _IsX64DriverUsed = False Else Throw New SystemException("Драйвер для LPT порта не установлен.") End If End Sub ''' <summary> ''' Инициализация порта - выставление XXXX0100'b в регистре контроля. ''' </summary> Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, &H80) Write(port, Register.CONTROL, &H4) End Sub #End Region '/CTOR #Region "PROPS" ''' <summary> ''' Используется ли 64-разрядная версия драйвера. ''' Если драйвер не установлен, возвращается NULL. ''' </summary> Public Shared ReadOnly Property IsX64DriverUsed As Boolean? Get Return _IsX64DriverUsed End Get End Property Private Shared ReadOnly _IsX64DriverUsed As Boolean? = Nothing #End Region '/PROPS #Region "METHODS" ''' <summary> ''' Определяет, является ли драйвер 32-разрядным. ''' </summary> Private Shared Function CheckIsDriverX86() As Boolean Try Dim res As Byte = IsInpOutDriverOpen() Return True Catch ex As Exception Return False End Try End Function ''' <summary> ''' Определяет, является ли драйвер 64-разрядным. ''' </summary> Private Shared Function CheckIsDriverX64() As Boolean Try Dim nResult As ULong = IsInpOutDriverOpen_x64() Return (nResult <> 0) Catch ex As Exception Return False End Try End Function #End Region '/METHODS #Region "Read / Write LPT Port" ''' <summary> ''' Читает из заданного регистра LPT порта 1 байт данных. ''' </summary> ''' <param name="port">Номер порта.</param> ''' <param name="reg">Регистр порта.</param> Public Shared Function Read(port As ULong, Optional reg As Register = Register.DATA) As Byte Dim data As Byte = 0 If IsX64DriverUsed Then data = Inp64(CULng(port + reg)) Else data = Inp32(CUInt(port + reg)) End If Return data End Function ''' <summary> ''' Записывает в заданный регистр LPT порта число. ''' </summary> ''' <param name="port">Адрес порта.</param> ''' <param name="reg">Регистр порта.</param> ''' <param name="data">Число для записи. В 32-разрядных системах аргумент должен быть не более, чем максимальное значение для типа UInt32.</param> Public Shared Sub Write(port As ULong, reg As Register, data As ULong) If IsX64DriverUsed Then Out64(port + CULng(reg), data) Else If (data <= UInteger.MaxValue) Then Out32(CUInt(port + reg), CUInt(data)) Else Throw New ArgumentException("В 32-разрядных системах аргумент должен быть 32-разрядным (тип UInt32).", "data") End If End If End Sub #End Region '/Read / Write LPT Port ''' <summary> ''' Тестирует наличие LPT порта по заданному адресу. ''' </summary> ''' <param name="lptAddress">Адрес параллельного порта.</param> Public Shared Function CheckPortPresent(lptAddress As ULong) As Boolean Dim portPresent As Boolean = False Try InitLpt(lptAddress) Dim data As ULong = Read(lptAddress, Register.DATA) 'сохраняем текущее значение регистра данных 'Проверим: что записали, то и прочитали? Write(lptAddress, Register.DATA, &H0) portPresent = portPresent And (&H0 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &H55) portPresent = portPresent And (&H55 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, &HAA) portPresent = portPresent And (&HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, data) 'восстанавливаем прежнее значение регистра данных 'Проверим наличие регистров управления и данных, если порт не обнаружен (в случае однонаправленного порта) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data <> 0) AndAlso (data <> &HFF)) 'Не пустое значение? => Порт присутствует. If (Not portPresent) Then data = Read(lptAddress, Register.STATUS) portPresent = ((data <> 0) AndAlso (data <> &HFF)) End If End If Catch ex As Exception Return False End Try Return portPresent End Function End Class '/LPT
Код класса LPT на языке C#:
Код класса LPT на языке C# (разворачивается)
using System; using System.Diagnostics; using System.Runtime.InteropServices; namespace LPTIO { /// Класс для работы LPT портом. При создании определяет наличие драйвера и его разрядность. public sealed class LPT { private const string DLL32 = "inpout32.dll"; private const string DLL64 = "inpoutx64.dll"; private static bool _IsX64DriverUsed; /// Используется ли 64-разрядная версия драйвера. public static bool IsX64DriverUsed { get { return LPT._IsX64DriverUsed; } } static LPT() { if (LPT.getIsDriverX86()) { LPT._IsX64DriverUsed = false; } else { if (!LPT.getIsDriverX64()) throw new SystemException("Драйвер для LPT порта не установлен."); LPT._IsX64DriverUsed = true; } } [DebuggerNonUserCode] public LPT() { } [DllImport("inpout32.dll", CharSet = CharSet.Auto)] private static extern byte IsInpOutDriverOpen(); [DllImport("inpoutx64.dll", EntryPoint = "IsInpOutDriverOpen", CharSet = CharSet.Auto)] private static extern ulong IsInpOutDriverOpen_x64(); [DllImport("inpout32.dll", CharSet = CharSet.Auto)] private static extern byte Inp32(uint PortAddress); [DllImport("inpout32.dll", CharSet = CharSet.Auto)] private static extern void Out32(uint portAddress, uint data); [DllImport("inpoutx64.dll", EntryPoint = "Inp32", CharSet = CharSet.Auto)] private static extern byte Inp64(ulong PortAddress); [DllImport("inpoutx64.dll", EntryPoint = "Out32", CharSet = CharSet.Auto)] private static extern void Out64(ulong PortAddress, ulong Data); /// Определяет, является ли драйвер для 32-разрядной версии Windows. private static bool getIsDriverX86() { bool flag; try { LPT.IsInpOutDriverOpen(); flag = true; } catch (Exception ex) { ProjectData.SetProjectError(ex); flag = false; ProjectData.ClearProjectError(); } return flag; } /// Определяет, является ли драйвер для 64-разрядной версии Windows. private static bool getIsDriverX64() { bool flag; try { flag = Decimal.Compare(new Decimal(LPT.IsInpOutDriverOpen_x64()), Decimal.Zero) != 0; } catch (Exception ex) { ProjectData.SetProjectError(ex); flag = false; ProjectData.ClearProjectError(); } return flag; } /// <summary>Читает из LPT порта 1 байт данных.</summary> /// <param name="port">Номер порта.</param> /// <param name="reg">Регистр порта.</param> public static byte Read(ulong port, LPT.Register reg = LPT.Register.DATA) { return !LPT.IsX64DriverUsed ? LPT.Inp32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg)))) : LPT.Inp64(Convert.ToUInt64(Decimal.Add(new Decimal(port), new Decimal((int) reg)))); } /// <summary>Записывает в LPT порт число.</summary> /// <param name="port">Адрес порта.</param> /// <param name="reg">Регистр порта.</param> /// <param name="data">Число для записи. В 32-разрядных системах аргумент должен быть не более, чем максимальное значение для типа UInt32.</param> public static void Write(ulong port, LPT.Register reg, ulong data) { if (LPT.IsX64DriverUsed) { LPT.Out64(checked (port + (ulong) (uint) reg), data); } else { if (data > (ulong) uint.MaxValue) throw new ArgumentException("В 32-разрядных системах аргумент должен быть 32-разрядным (тип UInt32).", "data"); LPT.Out32(Convert.ToUInt32(Decimal.Add(new Decimal(port), new Decimal((int) reg))), checked ((uint) data)); } } /// <summary>Регистры порта LPT.</summary> public enum Register { DATA, STATUS, CONTROL, } } }
3Применение класса .NET для работы с LPT портом
Если мы посмотрим на список экспортируемых функций библиотеки inpout32.dll с помощью замечательного инструмента DLL Export Viewer от NirSoft, то увидим следующую картину:
Это список функций, которые мы можем использовать. Фактически все они используются в классе LPT, но реализация скрыта, и из публичных методов пользователю доступны только два метода и одно свойство (они рассматриваются чуть далее).
При инстанцировании класс сам определит, библиотеку какой разрядности ему использовать – inpout32.dll или inpoutx64.dll. Поэтому от пользователя не требуется никаких действий по инициализации или определения разрядности используемой dll. Вы можете сразу записывать или читать из LPT порта. Одно «Но»: если драйвер не установлен, обращение к любому из методов динамической библиотеки вызовет исключение, поэтому рекомендую использовать блоки Try…Catch для перехвата и обработки исключений.
Несколько примеров использования класса LPT.
Для определения, используется ли 64-разрядная версия драйвера (inpoutx64.dll при True) или 32-разрядная (inpout32.dll при False) (на самом деле, это знать не обязательно, класс использует именно ту библиотеку, которая нужна, но вдруг вам для чего-то понадобится это узнать из своей программы):
bool is64bitDriver = LPT.IsX64DriverUsed;
Для записи числа «123» в регистр контроля LPT порта вызовите из своего класса:
LPT.Write(currentPort, LPT.Register.CONTROL, 123);
Для чтения одного байта из регистра данных LPT порта и чтения регистра статуса:
byte b = LPT.Read(currentPort, LPT.Register.DATA); byte s = LPT.Read(currentPort, LPT.Register.STATUS);
Здесь currentPort – адрес LPT порта. Причём, если у вас интегрированный LPT порт, то его адрес будет, скорее всего, 378h. А если у вас LPT порт на плате расширения, то адрес будет другой, например, D100h или C100h.
Чтобы узнать адрес LPT порта, зайдите в диспетчер устройств Windows, найдите раздел Порты COM и LPT, выберите используемый параллельный порт, и в окне свойств (щёлкнув по нему правой кнопкой мыши) посмотрите, какие ресурсы использует выбранный порт (необходимо брать первое значение из диапазона).
Например, в данном случае необходимо использовать номер порта C100.
|
5708 / 2299 / 466 Регистрация: 20.11.2009 Сообщений: 7,721 Записей в блоге: 1 |
|
05.07.2011, 14:09. Показов 53937. Ответов 12 Привет всем. Столкнулся с проблемой, не могу заставить работать LPT порт в Windows 7 64 Bit, до это работал на WindowsXP все работало отлично, тут же просто не хочет включаться порт, компьютер его видит и говорит что могу работать с портом, на самом деле это не так. Ему все равно, он ни на что не реагирует если с него попытаться что-то прочитать или записать, с подключенным устройством. Взял я даже драйвер от WindowsXP, все равно никак не хочет, не знаю что делать. Помогите кто чем может, очень нужно! Если тему не там создал, прошу перенести туда, где ей было бы место Заранее спасибо
1 |
cpp_developer Эксперт 20123 / 5690 / 1417 Регистрация: 09.04.2010 Сообщений: 22,546 Блог |
05.07.2011, 14:09 |
12 |
22195 / 12116 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
05.07.2011, 16:17 |
|
Я не уверен, но где-то читал, что в биосе нужно сменить режим LPT… попробуйте, хуже не станет, там их всего вроде бы три режима… И в диспетчере устройств посмотрите, не конфликтует ли порт с другими устройствами… Добавлено через 1 минуту
0 |
5708 / 2299 / 466 Регистрация: 20.11.2009 Сообщений: 7,721 Записей в блоге: 1 |
|
05.07.2011, 18:30 [ТС] |
|
Ну это я конечно перепробовал уже, ни к чему путевому не привело тоже… вот что-то майкрософт творит в виндами, что у одних одно не идет у других другое… Добавлено через 13 минут
1 |
22195 / 12116 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
06.07.2011, 09:34 |
|
Arcor, ну что вам посоветовать… WMVare… не знаю правда поможет или нет… или вторую ось установите и с нее печатайте, более ничего в голову не приходит
0 |
5708 / 2299 / 466 Регистрация: 20.11.2009 Сообщений: 7,721 Записей в блоге: 1 |
|
13.07.2011, 02:23 [ТС] |
|
Сообщение было отмечено как решение РешениеРебят, кто не в курсе еще, я надыбал сегодня в интернете отличную библиотеку для работы с LPT портом, I/O. Дада, знаю вы сейчас будете все смеяться, что я не знал про Inpout32.dll, я про нее знал !!! Но она, эта версия которых полный интернет, не рабочие под Windows Vista и Windows 7 x64… Залез сегодня в немецкий гугл, с первой темы нашел что нужно Inpout32 с поддержкой 64 битных приложений !!! На наших русских сайтах валяется только версия этой dll 1.0.0.1, вышла новая, не знаю когда 1.2.0.0, так что ищите ее ну если кому-то нужна она !!!, я уж думал не видать мне порта под новыми версиями виндовс, ну как видно люди есть которые пишут для нас такое, респект им
3 |
22195 / 12116 / 653 Регистрация: 11.04.2010 Сообщений: 53,466 |
|
13.07.2011, 11:26 |
|
Очередной костыль для семерки… печально
0 |
5708 / 2299 / 466 Регистрация: 20.11.2009 Сообщений: 7,721 Записей в блоге: 1 |
|
13.07.2011, 12:43 [ТС] |
|
Сообщение было отмечено как решение РешениеВот архивчик, там описание небольшое есть, и названия функций и процедур, еще инсталлятор драйвера, кто не разберется можете в личку написать, я разобрался уже, только я программирую только в Delphi про другие языки не спрашивать, как использовать то или иное
4 |
0 / 0 / 0 Регистрация: 23.10.2011 Сообщений: 3 |
|
23.10.2011, 14:26 |
|
Подскажи, как инсталлировать на Win 7х64. В твоем архиве есть инсталятор inpaut на 32-разрядную систему, а на 64-х нет (только inpout32.h; inpoutx64.dll; inpoutx64.lib) У меня та же проблема — не могу задействовать LPT планку на Windows 7х64. Заранее спасибо.
0 |
13 / 13 / 0 Регистрация: 10.04.2011 Сообщений: 213 |
|
23.10.2011, 14:38 |
|
Ну… Проблемы у меня такой не было)
0 |
0 / 0 / 0 Регистрация: 23.10.2011 Сообщений: 3 |
|
23.10.2011, 14:51 |
|
Жаль было расставаться со старым сканером Genius vivid pro 2, который имеет разъем lpt, а тут кстати ASRock выпустила материнку на чипсете Z68 (Pro3-M) с поддержкой устаревших интерфейсов, вот и решил использовать её со своим сканером и Windows 7х64. Да не тут то было. Не хочет обнаруживать система LPT порт…
0 |
Arcor 5708 / 2299 / 466 Регистрация: 20.11.2009 Сообщений: 7,721 Записей в блоге: 1 |
||||||||
23.10.2011, 14:58 [ТС] |
||||||||
inpout32.dll использовать как и обычную 32 битную, список функций можно глянуть в inpout32.h ну еще и запустить эксешник InstallDriver.exe, он установит сам все что нужно и куда нужно Добавлено через 6 минут
ну вот к примеру таже самая процедура как и в обычной 32 битной
вот так же использовать, остальные все можно найти ка к и писал уже тут inpout32.h
2 |
0 / 0 / 0 Регистрация: 23.10.2011 Сообщений: 3 |
|
23.10.2011, 15:22 |
|
Сообщение от Arcor ну еще и запустить эксешник InstallDriver.exe, он установит сам все что нужно и куда нужно Запускал, устанавливал, но сканер так и не определился. Жаль. Придется Win XP устанавливать второй системой (а лучше Windows 98 )
0 |
5708 / 2299 / 466 Регистрация: 20.11.2009 Сообщений: 7,721 Записей в блоге: 1 |
|
23.10.2011, 15:50 [ТС] |
|
Сообщение от gleb1556 а лучше Windows 98 я тоже так подумал, для робота приобрел старый ноутбук, поставил 98 туда, чтобы проще было работать с портом, но появилась другая проблема, драйверов не могу найти на этот ноутбук практически ни на что, тот же звук даже не идет, не говоря о видюхе .
1 |
Новые блоги и статьи
Все статьи Все блоги / |
||||
Распознавание голоса и речи на C#
UnmanagedCoder 05.05.2025 Интеграция голосового управления в приложения на C# стала намного доступнее благодаря развитию специализированных библиотек и API. При этом многие разработчики до сих пор считают голосовое управление. . . |
Реализация своих итераторов в C++
NullReferenced 05.05.2025 Итераторы в C++ — это абстракция, которая связывает весь экосистему Стандартной Библиотеки Шаблонов (STL) в единое целое, позволяя алгоритмам работать с разнородными структурами данных без знания их. . . |
Разработка собственного фреймворка для тестирования в C#
UnmanagedCoder 04.05.2025 C# довольно богат готовыми решениями – NUnit, xUnit, MSTest уже давно стали своеобразными динозаврами индустрии. Однако, как и любой динозавр, они не всегда могут протиснуться в узкие коридоры. . . |
Распределенная трассировка в Java с помощью OpenTelemetry
Javaican 04.05.2025 Микросервисная архитектура стала краеугольным камнем современной разработки, но вместе с ней пришла и головная боль, знакомая многим — отслеживание прохождения запросов через лабиринт взаимосвязанных. . . |
Шаблоны обнаружения сервисов в Kubernetes
Mr. Docker 04.05.2025 Современные Kubernetes-инфраструктуры сталкиваются с серьёзными вызовами. Развертывание в нескольких регионах и облаках одновременно, необходимость обеспечения низкой задержки для глобально. . . |
Создаем SPA на C# и Blazor
stackOverflow 04.05.2025 Мир веб-разработки за последние десять лет претерпел коллосальные изменения. Переход от традиционных многостраничных сайтов к одностраничным приложениям (Single Page Applications, SPA) — это. . . |
Реализация шаблонов проектирования GoF на C++
NullReferenced 04.05.2025 «Банда четырёх» (Gang of Four или GoF) — Эрих Гамма, Ричард Хелм, Ральф Джонсон и Джон Влиссидес — в 1994 году сформировали канон шаблонов, который выдержал проверку временем. И хотя C++ претерпел. . . |
C# и сети: Сокеты, gRPC и SignalR
UnmanagedCoder 04.05.2025 Сетевые технологии не стоят на месте, а вместе с ними эволюционируют и инструменты разработки. В . NET появилось множество решений — от низкоуровневых сокетов, позволяющих управлять каждым байтом. . . |
Создание микросервисов с Domain-Driven Design
ArchitectMsa 04.05.2025 Архитектура микросервисов за последние годы превратилась в мощный архитектурный подход, который позволяет разрабатывать гибкие, масштабируемые и устойчивые системы. А если добавить сюда ещё и. . . |
Многопоточность в C++: Современные техники C++26
bytestream 04.05.2025 C++ долго жил по принципу «один поток — одна задача» — как старательный солдатик, выполняющий команды одну за другой. В то время, когда процессоры уже обзавелись несколькими ядрами, этот подход стал. . . |
Наверх
Диагностика LPT порта на WinXP /Win7.
При возникновении проблем с подключением контроллеров для управления приводами с ЧПУ через LPT порт, необходимо произвести диагностику всех пинов порта. В зависимости от того, какая операционная система установлена на ПК – выбираем программу:
Для Windows XP — программа XPlpt (работает без установки);
Для Windows 7 — программа Wndlpt (требует установку).
Приготовьте мультиметр и установите режим измерения напряжения до 20 В. Также потребуется два отрезка провода с зачищенными от изоляции концами (подойдут проводники от витой пары).
В системном блоке ПК оставляем подключенным LPT кабель и перезагружаем ПК. После перезагрузки запускаем программу для проверки LPT порта. Ниже приведена распиновка LPT по сигналам для контроллеров систем с ЧПУ.
Будем проверять пины с 1 по 17 (это будут плюсовые контакты). Минусовые контакты с 18 по 25 (соединены между собой).
Для XP, в программе xplpt нажимая кнопочки с 1 по 17, соответствующие пинам порта, проверяем появление питания на контактах LPT кабеля. Когда в программе напротив пина установлено значение 0, то питание на данном пине должно быть в пределах +0…+1 вольт. При установке значения 1 – на контакте соответствующего пина должно появиться напряжение в пределах +3…+ 5 вольт. Если этого не происходит, то проверьте, правильно ли выставлен порт в программе. В данном примере это порт $3BC. Учтите, что пины 10, 11, 12, 13, 15 всегда находятся под напряжением + 3…+ 5 вольт.
Для Windows 7 в программе winlpt перейдите во вкладку «сигналы» и поочередно устанавливая галочки у каждого пина проверяем наличие напряжения +3…+5 вольт на контактах LPT кабеля, как по инструкции выше для Windows XP.
Ссылка на программу XPlpt
Ссылка на программу Wndlpt
Страница 1 из 2
-
Простите, что засоряю моск. В принципе, если желания нет, можно дальше не читать, так как одно решение я уже нашёл.
Однако для тех, кому в принципе не впадлу:
Есть старый принтер Canon BJ-200 для LPT. В Win7 штатных дров на него нет, даже после нажатия кнопки WinUpdate в диалоге установки принтера. А принтер очень-ма нужен, потому что денег нет, а чернила в нём ещё есть Однако старую ось (XP) ставить не хочется.
Собственно, последние драйвера для него на офф. сайте — для winme (а при внутреннем исследовании оказалось, что это вообще дрова для «win16»). Понятно, при Have disk я выбираю нужный инф, выбираю из него модель, дрова пытаются поставиться и вылетает окошко с ошибкой 000000x70c, по-моему, что типа драйвер не установлен. Вопроса два:
- Это следует понимать как: «инф-файл не подходит» или «сами драйвера для win3.1 и поэтому досвидос»??
- Есть ли какой-то универсальный драйвер что ли для lpt-шных старых принтеров?
-
SMArt
Страшила мудрыйLegacy
- Регистрация:
- 19 фев 2006
- Сообщения:
- 2.783
Goblinit, если оно пахало под XP, должно и в XP-mode запахать.
-
SMArt, да, наверное. Но меня интересует именно то, что я спросил. Кстати, добавлю ещё вопрос:
Правильно ли я понимаю, что, если в поставке драйверов для bj-200 также в списке для выбора есть и другие модели (с десяток) — это означает, что для того, чтобы только печатать, каждому из них требуется один и тот же драйвер для печати?
-
Bato-San
Чеширский волк-киборг- Регистрация:
- 24 июн 2010
- Сообщения:
- 14.136
Goblinit, Он без драйверов в списке устройств появился ? Win7 32 или 64 bit ?
-
Bato-San, не понял, после какой операции и где он должен появиться? win7 32bit, само собой — п4 жеж.
-
Bato-San
Чеширский волк-киборг- Регистрация:
- 24 июн 2010
- Сообщения:
- 14.136
Goblinit, После втыкания в LPT на маме и включения с последующей загрузкой винды он должен появиться в диспетчере устройств. Мне интересно как он там определяется — как неизвестное устройство или как принтер со всеми ID в свойствах.
А к Win7 32 великолепно подходят дрова выкушенные из XP. Я её сам пользовал одно время на P4 c кучей старых устройств. На том что в моём профиле.
-
Bato-San, ты когда-нибудь подключал что-нибудь к lpt? Нихрена винда тебе не скажет, ей пофигу вообще. Дрова от XP — хорошее решение! +1.
Всё-таки, господа, кто-нибудь может ответить именно на мои вопросы?))
-
Bato-San
Чеширский волк-киборг- Регистрация:
- 24 июн 2010
- Сообщения:
- 14.136
Goblinit, Вот интересное решение проблемы дров
1. Дрова от 3.11 — 16 bit. В win7 поддержки этого режима уже нет.
2. Именно так, если ты имеешь ввиду список моделей в inf-файле, но там следует смотреть секции ибо для некоторых моделей могут быть вписаны разные файлы из поставки. -
Bato-San,
1. Я почему спрашиваю, вроде как «язык» инф-файлов для ранних осей линейки 9x отличался от языка для более новых осей. Я вот и подумал, может, всё стопориться уже на этом этапе?2. Да, именно список из файла имею ввиду. Вопрос именно о драйвере для печати — он, получается, одинаковый для всех, а различия только в дополнительных возможностях? Знаю, вопрос глупый, я даже уже изучил инф-файл, но хочется убедиться что ли)
Последнее редактирование: 11 дек 2011
-
Nil
Любимый цвет — голубой- Регистрация:
- 30 апр 2007
- Сообщения:
- 1.974
Goblinit, В текстовом режиме он просто обязан печатать без драйверов. Тебе нужен графический режим (office и прочее работает в графическом режиме). Кроме того, в принтере есть поддержка PostScript? если есть, то можно заставить его печатать и графику, только нужен будет соответствующий конвертер документа в ps файл. После чего останется тупо послать сформированный файл в LPT порт командой
А сейчас можешь проверить это для любого текстового файла
Последнее редактирование: 11 дек 2011
-
Goblinit, попробуй этот драйвер — ftp://download.canon.jp/pub/driver/bj/winxp/wxpf200162.exe (Canon BJ-F200 WinXP). Должен подойти.
-
Nil, то есть, вы хотите сказать, что я могу вообще не ставить никаких дров, если хочу печатать просто текст, то достаточно его подключить и в консольке набрать type blablabla >LPT1 ??? Вот это да, а я думал, так тока в досе можно было делать)))
А как узнать, поддерживает принтер PS или нет (в руководстве этого нет)? Вообще, картинки в XP у меня печатал, правда полосочками получались… Простите, просто в плане принтеров я несилён особо…ThisSuXX, Модель тут другая вообще-то. Но посмотрю.
Последнее редактирование: 11 дек 2011
-
Nil
Любимый цвет — голубой- Регистрация:
- 30 апр 2007
- Сообщения:
- 1.974
Goblinit, команда type печатает из файла, echo из консоли, не перепутай.
Технически, в этом случае ты работаешь не с самим принтером, а с LPT портом(на который драйвер есть), отправляя в него простой поток байт. Если принтер достаточно умный, он тебя поймёт.
-
Первая же ссылка в гугле по запросу «canon bj-200 win 7». Цитаты оттуда:
-
ThisSuXX, эээ… не видел этой дискуссии. Наверное, пропустил
Зато нашёл тогда другую, на немецком. Там говорилось, что подходит штатный для вынь7 BJC-240. Поставил, вроде чё-то печатает. -
Bato-San
Чеширский волк-киборг- Регистрация:
- 24 июн 2010
- Сообщения:
- 14.136
Goblinit, А Nil таки прав. Поддержку LPT как устройства никто из винды не вырезал и писать/читать его можно на большинстве матерей (примером служит ECS NF7050 — сокет lga775, а на матери есть пины для подключения кабеля LPT, что в наше время уже удивительно, дефолтной осью для этой мамы является VISTA). Драйвер просто даёт прямой доступ к порту LPT и дополнительным возможностям принтера (например печать цветной графики и смена фонтов в оперативке принтера скажем на русские, что актуально для старых EPSON). Можно попробовать печатать в файл и потом этот файл кидать в LPT, но не факт что совпадут escape-последовательности определяющие команды конкретной модели принтера. Это подбирается опытным путём с документацией на принтер перед глазами. Есть драйвера которые открывают нужные порты в NT-осях, писались они в основном для звуковух, но при смене номера порта прекрасно работают с чем угодно.
Язык inf файлов отличается в основном заголовком и (иногда) кодировкой. Существуют inf которые нельзя установить напрямую из проводника (что иногда таки помогает) в этом случае приходится их редактировать.
-
Опять не понял, о чём это? То, что через консоль можно печатать напрямую в порт, я уже проверил.Вот это, кстати, несовсем точно. Я вспомнил, как родные 95-е дрова ставил на Voodoo 1 в XP. Мне тогда пришлось малость секции попереписывать, потому что XP ругался, что инф-файл то ли неправильный, то ли устаревший… как-то так.
ThisSuXX, Дрова проверил, работают!!!
Так и всё-таки, как узнать, есть ли поддержка PS в принтере?
Последнее редактирование: 11 дек 2011
-
DKr
- Регистрация:
- 11 мар 2008
- Сообщения:
- 875
>как узнать, есть ли поддержка PS в принтере?
Посмотреть руководство, например.Вообще, в винде есть куча генерик-принтеров типа ESC2, PCL6 и подобных. Один из них подойдет.
-
DKr, в руководстве этого не сказано. Так же как и про PCL и т.п. новомодных штуках.
-
Goblinit, PS в струйном принтере, дурак совсем?
Страница 1 из 2
Форум РадиоКот :: Просмотр темы — LPT port (Win7) и BASCOM AVR
Автор: | muhomka [ Пт сен 11, 2015 11:30:25 ] |
Заголовок сообщения: | LPT port (Win7) и BASCOM AVR |
Добрый день! |
Автор: | shinji2009 [ Пт сен 11, 2015 11:42:04 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
в системах выше хр нужен драйвер прямого доступа к лпт, гуглится на раз. проверить можно этим софтом http://www.getchip.net/posts/027-unipro … -lpt-port/ если доступ есть, там прям можно кнопочки тыркать и значения на лпт меняются |
Автор: | Мурик [ Пт сен 11, 2015 12:12:22 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
muhomka писал(а): драйвера стандартные от производителя материнской платы Производители не предоставляют драйвера для прямого доступа в LPT. Это вообще нелегально с точки зрения системы. shinji2009 писал(а): в системах выше хр нужен драйвер прямого доступа к лпт, гуглится на раз. Что за бред? |
Автор: | shinji2009 [ Пт сен 11, 2015 12:34:36 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Мурик ошибся малость. тем не менее гуглится на раз все равно |
Автор: | muhomka [ Пт сен 11, 2015 12:36:29 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Попробывал UniProf, настроил как показано — МК не откликнулся)) Что делать? Устанавливать драйвер? |
Автор: | Мурик [ Пт сен 11, 2015 12:47:39 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
shinji2009 писал(а): какой на вас смотрит Не нужно давать вредных советов. Если установить первый попавшийся то 99.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999% что работать не будет. muhomka писал(а): Какой драйвер ставить? Я же выше писал что нет стандартного драйвера для доступа к портам. Нужно узнать какой драйвер использует bascom и поискать его x64 версию если такая существует. |
Автор: | muhomka [ Пт сен 11, 2015 13:01:40 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Мурик а как это сделать? |
Автор: | Мурик [ Пт сен 11, 2015 13:19:33 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Можно обратиться к разработчику баскома и уточнить про драйвер для Win7x64. |
Автор: | muhomka [ Пт сен 11, 2015 13:50:07 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Обратился к разработчику BASCOM, посмотрим что ответят. Эх кисло все это. |
Автор: | kalobyte [ Пт сен 11, 2015 20:45:43 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
нужно использовать нормальные усб программаторы, а не 5 проводков |
Автор: | muhomka [ Сб сен 12, 2015 10:41:50 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Оказывается в новых версиях BASCOM выше версии 2.0.7.7 поставляется вместе с установкой драйвер LPT порта для 64bit систем, при установке его предлагают установить, или же его можно загрузить и установить отдельно. Я пытался и так и так. Все нужно делать от имени администратора компьютера. В итоге — LPT порт так и не заработал!! В чем причина мне не понятно. Подскажите может что-то хитрое надо сделать. Адреса LPT стоят правильные. У меня такое предчувствие что Win 64 бит долбанная на все голову вместе со всеми ее программистами. |
Автор: | Myp3ik [ Вс сен 13, 2015 10:23:26 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
muhomka писал(а): …поставляется вместе с установкой драйвер LPT порта для 64bit систем… Для каких именно систем ? Например драйвер для XP 64 bit работать на Win7 64 bit никак не сможет. |
Автор: | Мурик [ Вс сен 13, 2015 10:56:41 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Myp3ik писал(а): Например драйвер для XP 64 bit работать на Win7 64 bit никак не сможет. Сможет и это проверено на практике. |
Автор: | Myp3ik [ Вс сен 13, 2015 21:35:02 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Мурик, где можно посмотреть на такой драйвер ? |
Автор: | Мурик [ Вс сен 13, 2015 21:41:13 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Например InpOut32.dll и др. похожие. |
Автор: | Мурик [ Пн сен 14, 2015 09:42:37 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Во вложении еще один аналогичный драйвер с исходниками. |
Автор: | Myp3ik [ Пн сен 14, 2015 11:25:18 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Если драйвер не подписан, то через тестовый режим. Это больше всего огорчает. Даже если подписан действительной ЦП, все равно будет ругаться, ей подавай ЦП WHQL. |
Автор: | Мурик [ Пн сен 14, 2015 11:33:14 ] |
Заголовок сообщения: | Re: LPT port (Win7) и BASCOM AVR |
Myp3ik писал(а): Если драйвер не подписан, то через тестовый режим. Подпись стоит несколько сотен долларов… |
Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |