Грохнул в устройствах lpt грохнул принтер. при включении принтера система принтер обнаруживает устанавливает дрова и говорит что устройство установлено не правельно и возможно работать не будет. захожу снова в настройки принтера и вкачесте порта ни чего не выбрано. снова грохаю принтер и уже через мастера установки пробую установить принтер он у меня спрашивает на каком порту весит принтер, а в списке устройств есть com1: com2: com3: IR USB001: FILE: а вот lpt1: Нет проверил в биосе он есть и включен.
Порт Usb001: остался от другого принтера.
Denn29 заходиш в установку оборудования говориш порт lpt1 он говорит оборудование работает нормально и предлагает на выбор нажать кн [Ок] или чтото в этом роде
Источник: forum.ru-board.com
Проверка LPT порта ПК
При возникновении проблем с подключением контроллеров для управления приводами с ЧПУ через LPT порт, необходимо произвести диагностику всех пинов порта. В зависимости от того, какая операционная система установлена на ПК – выбираем программу:
Что делать если не отображаются порты COM и LPT? Возвращаем порты COM и 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.
Источник: www.duxe.ru
Как включить LPT порт
Драйвер для работы с LPT портом (интегрированным или в виде платы PCI)
Чтение или запись в него генерирует свзяанный цикл чтения или записи адреса EPP. »’ EPP_ADDRESS = DATA + 3 »’ »’ Регистр данных EPP. Чтение (запись) генерирует связанный цикл чтения (записи) данных EPP. »’ EPP_DATA = DATA + 4 »’ »’ Регистр активации режима EPP. »’ »’ »’ Если только смешанный «ECP+EPP» или «Extended» — скорее всего потребуется еще выполнить запись в порт ECR байта 0x80 »’ (ECR — это регистр ECP-режима, ECR=BASE_ADDR+0x402, BASE_ADDR — базовый адрес LPT-порта »’ ECR = DATA + DllImport» Private Shared Function IsInpOutDriverOpen() As Byte End Function Private Shared Function IsInpOutDriverOpen_x64() As UInt64 End Function Private Shared Function Inp32(PortAddress As UInt32) As Byte End Function Private Shared Sub Out32(portAddress As UInt32, data As UInt32) End Sub Private Shared Function Inp64(PortAddress As UInt64) As Byte End Function Private Shared Sub Out64(PortAddress As UInt64, Data As UInt64) End Sub #End Region ‘/DllImport #Region «CTOR» »’ »’ Проверяет возможность использования x86 или x64 драйвера.
В случае невозможности выбрасывает исключение «драйвер не установлен». »’ 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 »’ »’ Инициализация порта — выставление XXXX0100’b в регистре контроля. »’ Private Shared Sub InitLpt(port As ULong) Write(port, Register.ECR, H4) End Sub #End Region ‘/CTOR #Region «PROPS» »’ »’ Используется ли 64-разрядная версия драйвера. »’ Если драйвер не установлен, возвращается NULL. »’ 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» »’ »’ Определяет, является ли драйвер 32-разрядным. »’ Private Shared Function CheckIsDriverX86() As Boolean Try Dim res As Byte = IsInpOutDriverOpen() Return True Catch ex As Exception Return False End Try End Function »’ »’ Определяет, является ли драйвер 64-разрядным. »’ 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» »’ »’ Читает из заданного регистра LPT порта 1 байт данных. »’ »’ Номер порта.
»’ Регистр порта. 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 »’ »’ Записывает в заданный регистр LPT порта число. »’ »’ Адрес порта. »’ Регистр порта. »’ Число для записи.
В 32-разрядных системах аргумент должен быть не более, чем максимальное значение для типа UInt32. Public Shared Sub Write(port As ULong, reg As Register, data As ULong) If IsX64DriverUsed Then Out64(port + CULng(reg), data) Else If (data »’ Тестирует наличие LPT порта по заданному адресу. »’ »’ Адрес параллельного порта. 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 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, H55 = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, HAA = Read(lptAddress, Register.DATA)) Write(lptAddress, Register.DATA, data) ‘восстанавливаем прежнее значение регистра данных ‘Проверим наличие регистров управления и данных, если порт не обнаружен (в случае однонаправленного порта) If (Not portPresent) Then data = Read(lptAddress, Register.CONTROL) portPresent = ((data <> 0) AndAlso (data <> Порт присутствует. If (Not portPresent) Then data = Read(lptAddress, Register.STATUS) portPresent = ((data <> 0) AndAlso (data <> 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; > /// Читает из LPT порта 1 байт данных. /// Номер порта. /// Регистр порта.
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)))); >/// Записывает в LPT порт число. /// Адрес порта. /// Регистр порта. /// Число для записи.
В 32-разрядных системах аргумент должен быть не более, чем максимальное значение для типа UInt32. 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)); > > /// Регистры порта LPT. 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 порта и чтения регистра статуса:
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.