5

Я пытаюсь получить кабель IEEE-1284 USB-Parallel, который отображается как USB Printing Support в Device manager для работы в качестве порта LPT, и попытался найти ответ здесь. Используя эту команду:

NET USE LPT1: \\[Computer-Name]\Printer /PERSISTENT:YES

Команда выполнена успешно, но я не вижу LPT1 в Аппаратных устройствах, чтобы получить адрес для записи в него. Я знаю, что порт, который я создаю, выходит, потому что я создал приложение Java, в котором перечислены последовательные и параллельные порты, используя библиотеку RXTX, вот вывод:

Я добавил все эти LPT-порты командой NET потому что на моем компьютере их нет. Но я нигде не вижу их, чтобы получить адрес, а библиотека RXTX не позволяет мне получить адрес порта AFAIK. Есть идеи, как получить доступ к портам?

РЕДАКТИРОВАТЬ:

Хорошо, чтобы прояснить ситуацию немного, у меня есть IEEE-1284 USB-Parallel, когда вы подключаете его к компьютеру под управлением Windows XP, он отображается как устройство USB Printing Support , поэтому он не отображается как порт LPT, потому что он предназначен для работы с принтерами.

Я создал принтер с драйвером Generic/Text и подключил его к порту USB001 потому что это порт USB-кабеля. Затем я делю принтер и создаю LPT порт с помощью команды NET . Теперь я хочу записать данные в этот LPT-порт, как я бы сделал с любым другим собственным LPT-портом, используя, например, InpOut32.dll .

Если невозможно получить доступ к порту таким образом, как я могу получить доступ к порту для записи / чтения необработанных данных на нем? Не для печати документа, а для записи / чтения необработанных данных в него, как это было бы с любым параллельным портом.

4 ответа4

1

Я думаю, что вы можете пойти об этом все неправильно. Не следует использовать "NET USE", а использовать программный драйвер адаптера, чтобы связать порт виртуального принтера с портом USB. Рик опубликовал скриншот того, как это работает. Только если программное обеспечение адаптера позволяет, вы сможете писать так, как если бы этот физический порт существовал.

Команда NET USE LPT1, которую вы показали, предназначена для подключения к принтеру на вашем собственном или на другом компьютере и установки этого принтера в качестве локального (LPT1) принтера. Он основан на печати с именем устройства LPT1 и последующем перенаправлении того, что, как вы сказали, не будет делать ваше программное обеспечение (требуется аппаратный порт).

Вот драйвер от Startech, который делает некоторые из этих кабелей, но я не знаю, будет ли он работать для вас; он работает с некоторыми другими моделями (включая те, которые мне принадлежали):http://sgcdn.startech.com/005329/media/sets/ASIX_MosChip-MCS7715_Drivers/ASIX_MCS7715.zip

А пока избавьтесь от этой команды NET USE; это действительно не помогает вам прямо сейчас, и если бы вы могли заставить его работать вообще с локальным принтером, все равно потребовалось бы, чтобы вы выполняли запись на устройство LPT1 (а не в то место, где оно было бы, если бы оно существовало).)

1

Хорошо. Таким образом, вы подключили параллельное устройство / принтер через USB-порт IEEE-1284, подключенный к USB-порту вашего компьютера. Теперь вам нужно напрямую общаться с ним. Я понимаю, что вы не можете изменить программное обеспечение напрямую для связи с современными портами, такими как USB001 и т.д., Как это делают драйверы сканеров. И программное обеспечение, которое у вас есть, должно взаимодействовать по обычному протоколу для старых портов LPTx (то есть 0x378 вместо LPT1 и т.д.)

Это оставляет вас с одним вариантом, и это "эмуляция". Это должен сделать драйвер, поставляемый с кабелем USB-to-Parallel IEEE-1284. Этот драйвер должен создавать порт LPTx и захватывать порт связи и т.д. Но большинство (если не все) этих адаптеров поставляются с драйверами, которые имитируют USB-принтер. В большинстве случаев это проще всего (и даже в случае старых DOS-программ это можно решить с помощью команды NET ), но когда речь идет о реальной связи через порт, это бесполезно.

Поэтому вам нужно найти программу, которая может эмулировать LPTx (и его порты) и двунаправленно связываться с (любым) USB-драйвером на вашем компьютере. Я не нашел ни одного (пока).

Единственной полезной вещью, которую я нашел, был этот конвертер с USB на параллель. Этот эмулирует LPTx и порты и напрямую связывается с адаптером. Я не проверял это сам, но информационная страница выглядит многообещающе. Из справочного файла:

The USB2LPT device and its driver enables redirecting of port access by random application software to a USB-attached parallel port, i.e. emulating a parallel port via USB. This unique solution works on all USB supporting Windows operating systems.

Он помечает свой собственный драйвер как "Нестабильный драйвер", но вы получите представление о том, что вы ищете. Для этого также нужен специальный USB2LPT-адаптер. Со страницы часто задаваемых вопросов:

Q3. Can I use the USB2LPT.SYS driver with a regular (cheap) USB to parallel printer adapter?
A. Of course not! It's never possible due to design limitations of such adapters. See below.

Он также перечисляет в качестве минуса для себя свою Reduced speed due to emulation (expect 10..100 times slower) . Но это позволит общаться с Base address same as built-in (378h, 278h) . Если вам нравится, вы можете сделать свой собственный адаптер. Схемы все на сайте. Здесь вы можете найти полные инструкции (включая видео) о том, как его создать. Или же вы можете написать ему подробности о том, как его получить.

USB2LPT-адаптер USB2LPT-адаптер Конвертер из USB в параллель

0

Вам понадобятся .NET-Framework и PowerShell, но с помощью этого скрипта вы можете получить доступ к списку любых параллельных портов, установленных в вашей системе.(+ Дополнительная информация)

$strComputer = "." 

$colItems = get-wmiobject -class "Win32_ParallelPort" -namespace "root\CIMV2" ` 
-computername $strComputer 

foreach ($objItem in $colItems) { 
      write-host "Availability: " $objItem.Availability 
      write-host "Capabilities: " $objItem.Capabilities 
      write-host "Capability Descriptions: " $objItem.CapabilityDescriptions 
      write-host "Caption: " $objItem.Caption 
      write-host "Configuration Manager Error Code: " $objItem.ConfigManagerErrorCode 
      write-host "Configuration Manager User Configuration: " $objItem.ConfigManagerUserConfig 
      write-host "Creation Class Name: " $objItem.CreationClassName 
      write-host "Description: " $objItem.Description 
      write-host "Device ID: " $objItem.DeviceID 
      write-host "DMA Support: " $objItem.DMASupport 
      write-host "Error Cleared: " $objItem.ErrorCleared 
      write-host "Error Description: " $objItem.ErrorDescription 
      write-host "Installation Date: " $objItem.InstallDate 
      write-host "Last Error Code: " $objItem.LastErrorCode 
      write-host "Maximum Number Controlled: " $objItem.MaxNumberControlled 
      write-host "Name: " $objItem.Name 
      write-host "Operating System Auto-Discovered: " $objItem.OSAutoDiscovered 
      write-host "PNP DeviceID: " $objItem.PNPDeviceID 
      write-host "Powe rManagement Capabilities: " $objItem.PowerManagementCapabilities 
      write-host "Power Management Supported: " $objItem.PowerManagementSupported 
      write-host "ProtocolS upported: " $objItem.ProtocolSupported 
      write-host "Status: " $objItem.Status 
      write-host "Status Information: " $objItem.StatusInfo 
      write-host "System Creation Class Name: " $objItem.SystemCreationClassName 
      write-host "System Name: " $objItem.SystemName 
      write-host "Time Of Last Reset: " $objItem.TimeOfLastReset 
      write-host 
} 

Источник:Технет-Microsoft

0

(Я переписал свой предыдущий ответ, который не подходил для вашего случая.)

Windows, по-видимому, распознает кабель, но драйвер должен был сделать более обширную эмуляцию, чтобы он был непосредственно доступен для записи.

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

Лучшее, что я могу найти, - в статье « Получение дескриптора usbprint.sys», где была разработана программа на C для прямой записи данных на принтер в обход драйвера принтера. Вы можете использовать эту простую программу в качестве шаблона для разработки собственной программы записи данных на кабель.

Чтобы программа работала, необходимо найти GUID интерфейса в Windows кабеля, предполагая, что кабель имеет доступный GUID интерфейса. Вам нужно будет искать в реестре, используя regedit или более быстрый RegScanner.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .