Работа с lpt портом в windows 7

Лет 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, то увидим следующую картину:

Список экспортируемых функций библиотеки inpout32.dll

Список экспортируемых функций библиотеки inpout32.dll

Это список функций, которые мы можем использовать. Фактически все они используются в классе 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, выберите используемый параллельный порт, и в окне свойств (щёлкнув по нему правой кнопкой мыши) посмотрите, какие ресурсы использует выбранный порт (необходимо брать первое значение из диапазона).

Ресурсы, используемые LPT портом, в диспетчере устройств Windows

Ресурсы, используемые LPT портом, в диспетчере устройств Windows

Например, в данном случае необходимо использовать номер порта C100.


Рейтинг 4.93/278:

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 минут
проблема не только в винде7, а проблема в 64 битах оказывается, для проверки установил вин хп 64, не работает порт



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 минут

Delphi
1
procedure Out32(Port: Word; Data: Byte); stdcall; external 'inpout32.dll';

ну вот к примеру таже самая процедура как и в обычной 32 битной

Delphi
1
Out32(888, 2);

вот так же использовать, остальные все можно найти ка к и писал уже тут 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

  1. Простите, что засоряю моск. В принципе, если желания нет, можно дальше не читать, так как одно решение я уже нашёл.

    Однако для тех, кому в принципе не впадлу:

    Есть старый принтер Canon BJ-200 для LPT. В Win7 штатных дров на него нет, даже после нажатия кнопки WinUpdate в диалоге установки принтера. А принтер очень-ма нужен, потому что денег нет, а чернила в нём ещё есть Однако старую ось (XP) ставить не хочется.

    Собственно, последние драйвера для него на офф. сайте — для winme (а при внутреннем исследовании оказалось, что это вообще дрова для «win16»). Понятно, при Have disk я выбираю нужный инф, выбираю из него модель, дрова пытаются поставиться и вылетает окошко с ошибкой 000000x70c, по-моему, что типа драйвер не установлен. Вопроса два:

    1. Это следует понимать как: «инф-файл не подходит» или «сами драйвера для win3.1 и поэтому досвидос»??
    2. Есть ли какой-то универсальный драйвер что ли для lpt-шных старых принтеров?
  2. SMArt
    Страшила мудрый

    Legacy

    Регистрация:
    19 фев 2006
    Сообщения:
    2.783

    Goblinit, если оно пахало под XP, должно и в XP-mode запахать.

  3. SMArt, да, наверное. Но меня интересует именно то, что я спросил. Кстати, добавлю ещё вопрос:

    Правильно ли я понимаю, что, если в поставке драйверов для bj-200 также в списке для выбора есть и другие модели (с десяток) — это означает, что для того, чтобы только печатать, каждому из них требуется один и тот же драйвер для печати?

  4. Bato-San
    Чеширский волк-киборг

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136

    Goblinit, Он без драйверов в списке устройств появился ? Win7 32 или 64 bit ?

  5. Bato-San, не понял, после какой операции и где он должен появиться? win7 32bit, само собой — п4 жеж.

  6. Bato-San
    Чеширский волк-киборг

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136

    Goblinit, После втыкания в LPT на маме и включения с последующей загрузкой винды он должен появиться в диспетчере устройств. Мне интересно как он там определяется — как неизвестное устройство или как принтер со всеми ID в свойствах.

    А к Win7 32 великолепно подходят дрова выкушенные из XP. Я её сам пользовал одно время на P4 c кучей старых устройств. На том что в моём профиле.

  7. Bato-San, ты когда-нибудь подключал что-нибудь к lpt? Нихрена винда тебе не скажет, ей пофигу вообще. Дрова от XP — хорошее решение! +1.

    Всё-таки, господа, кто-нибудь может ответить именно на мои вопросы?))

  8. Bato-San
    Чеширский волк-киборг

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136

    Goblinit, Вот интересное решение проблемы дров

    1. Дрова от 3.11 — 16 bit. В win7 поддержки этого режима уже нет.
    2. Именно так, если ты имеешь ввиду список моделей в inf-файле, но там следует смотреть секции ибо для некоторых моделей могут быть вписаны разные файлы из поставки.

  9. Bato-San,
    1. Я почему спрашиваю, вроде как «язык» инф-файлов для ранних осей линейки 9x отличался от языка для более новых осей. Я вот и подумал, может, всё стопориться уже на этом этапе?

    2. Да, именно список из файла имею ввиду. Вопрос именно о драйвере для печати — он, получается, одинаковый для всех, а различия только в дополнительных возможностях? Знаю, вопрос глупый, я даже уже изучил инф-файл, но хочется убедиться что ли)

    Последнее редактирование: 11 дек 2011

  10. Nil
    Любимый цвет — голубой

    Регистрация:
    30 апр 2007
    Сообщения:
    1.974

    Goblinit, В текстовом режиме он просто обязан печатать без драйверов. Тебе нужен графический режим (office и прочее работает в графическом режиме). Кроме того, в принтере есть поддержка PostScript? если есть, то можно заставить его печатать и графику, только нужен будет соответствующий конвертер документа в ps файл. После чего останется тупо послать сформированный файл в LPT порт командой

    А сейчас можешь проверить это для любого текстового файла

    Последнее редактирование: 11 дек 2011

  11. Goblinit, попробуй этот драйвер — ftp://download.canon.jp/pub/driver/bj/winxp/wxpf200162.exe (Canon BJ-F200 WinXP). Должен подойти.

  12. Nil, то есть, вы хотите сказать, что я могу вообще не ставить никаких дров, если хочу печатать просто текст, то достаточно его подключить и в консольке набрать type blablabla >LPT1 ??? Вот это да, а я думал, так тока в досе можно было делать)))
    А как узнать, поддерживает принтер PS или нет (в руководстве этого нет)? Вообще, картинки в XP у меня печатал, правда полосочками получались… Простите, просто в плане принтеров я несилён особо…

    ThisSuXX, Модель тут другая вообще-то. Но посмотрю.

    Последнее редактирование: 11 дек 2011

  13. Nil
    Любимый цвет — голубой

    Регистрация:
    30 апр 2007
    Сообщения:
    1.974

    Goblinit, команда type печатает из файла, echo из консоли, не перепутай.

    Технически, в этом случае ты работаешь не с самим принтером, а с LPT портом(на который драйвер есть), отправляя в него простой поток байт. Если принтер достаточно умный, он тебя поймёт.

  14. Первая же ссылка в гугле по запросу «canon bj-200 win 7». Цитаты оттуда:

  15. ThisSuXX, эээ… не видел этой дискуссии. Наверное, пропустил
    Зато нашёл тогда другую, на немецком. Там говорилось, что подходит штатный для вынь7 BJC-240. Поставил, вроде чё-то печатает.

  16. Bato-San
    Чеширский волк-киборг

    Регистрация:
    24 июн 2010
    Сообщения:
    14.136

    Goblinit, А Nil таки прав. Поддержку LPT как устройства никто из винды не вырезал и писать/читать его можно на большинстве матерей (примером служит ECS NF7050 — сокет lga775, а на матери есть пины для подключения кабеля LPT, что в наше время уже удивительно, дефолтной осью для этой мамы является VISTA). Драйвер просто даёт прямой доступ к порту LPT и дополнительным возможностям принтера (например печать цветной графики и смена фонтов в оперативке принтера скажем на русские, что актуально для старых EPSON). Можно попробовать печатать в файл и потом этот файл кидать в LPT, но не факт что совпадут escape-последовательности определяющие команды конкретной модели принтера. Это подбирается опытным путём с документацией на принтер перед глазами. Есть драйвера которые открывают нужные порты в NT-осях, писались они в основном для звуковух, но при смене номера порта прекрасно работают с чем угодно.

    Язык inf файлов отличается в основном заголовком и (иногда) кодировкой. Существуют inf которые нельзя установить напрямую из проводника (что иногда таки помогает) в этом случае приходится их редактировать.

  17. Опять не понял, о чём это? То, что через консоль можно печатать напрямую в порт, я уже проверил.Вот это, кстати, несовсем точно. Я вспомнил, как родные 95-е дрова ставил на Voodoo 1 в XP. Мне тогда пришлось малость секции попереписывать, потому что XP ругался, что инф-файл то ли неправильный, то ли устаревший… как-то так.

    ThisSuXX, Дрова проверил, работают!!!

    Так и всё-таки, как узнать, есть ли поддержка PS в принтере?

    Последнее редактирование: 11 дек 2011

  18. DKr

    Регистрация:
    11 мар 2008
    Сообщения:
    875

    >как узнать, есть ли поддержка PS в принтере?
    Посмотреть руководство, например.

    Вообще, в винде есть куча генерик-принтеров типа ESC2, PCL6 и подобных. Один из них подойдет.

  19. DKr, в руководстве этого не сказано. Так же как и про PCL и т.п. новомодных штуках.

  20. Goblinit, PS в струйном принтере, дурак совсем?

Страница 1 из 2

Форум РадиоКот :: Просмотр темы — LPT port (Win7) и BASCOM AVR


Автор:  muhomka [ Пт сен 11, 2015 11:30:25 ]
Заголовок сообщения:  LPT port (Win7) и BASCOM AVR

Добрый день!
Помогите пожалуйста, не могу прошить МК, раньше все делал на XP 32бит, сменил комп теперь на Windows 7 максимальная (64 бит).
LPT порт с материнки подключен к планке. Распиновка проверена, кабель планки прозвонил, программатор «5 проводков» прозвонил и проверил, обвязка и подключение МК проверил и перепроверил. В чем дело? Нет коммуникации.
Дело в драйверах? Программа BASCOM-AVR (32 бит — режим совместимости). При прошивке пишет — «Could not identify chip with ID:FFFFFF» или «Could not identify chip with ID:000000»
Что за хрень драйвера стандартные от производителя материнской платы. Подскажите, в наличии осциллограф как проверить порт и заставить работать? Спасибо


Автор:  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. Это вообще нелегально с точки зрения системы.
У баскома скорее всего нет драйвера для Win7x64. Лучше использовать USB программатор.

shinji2009 писал(а):

в системах выше хр нужен драйвер прямого доступа к лпт, гуглится на раз.

Что за бред?
Во первых, для XP тоже нужен драйвер, а во вторых, нет стандартного драйвера для прямого доступа к портам. Это как писал выше, нелегально с точки зрения системы.


Автор:  shinji2009 [ Пт сен 11, 2015 12:34:36 ]
Заголовок сообщения:  Re: LPT port (Win7) и BASCOM AVR

Мурик
напечатано: хр
следует читать 98

ошибся малость. тем не менее гуглится на раз все равно


Автор:  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

Во вложении еще один аналогичный драйвер с исходниками.
Работает как на x86 так и на x64 (нужно перевести систему в тестовый режим).


Автор:  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/

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Ограничить возможности пользователя windows 10
  • Драйвер биометрические устройства windows 10
  • Как установить видеокодеки на windows 7
  • Как отключить автоматическую настройку яркости в windows 10
  • Scannow sfc windows 10 что это