эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 13.06.07 12:53
Оценка:
Добрый день!

Имеется такая задача: на одном компьютере есть программа работающая под ДОС. Эта программа отправляет на печать на LPT порт информацию.
Требуется "подменить" на принимающей стороне принтер — т.е. вместо принтера поставить компьютер (под управлением Windows), который будет считывать
информацию с порта и записывать ее в БД.

Проблема видимо в протоколе взаимодействия. Стандартная команда печати из ДОСа сообщает о том, что в принтере закончилась бумага.
Т.е. по протоколу взаимодействия проверяются видимо соответсвующие значения на пинах (контактах) LPT — и естественно эта проверка не проходит. Пины состояния порта LPT (с 10 по 15) программно выставить нельзя.

Возможно ли обмануть каких либо образом отсылающую сторону, или необходимо написание своего драйвера для работы с LPT (и поможет ли написание своего драйвера) для решения данной проблемы?


Спасибо.
Re: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 13.06.07 20:51
Оценка: 1 (1)
Здравствуйте, Demetrio, Вы писали:

D>Добрый день!


D>Имеется такая задача: на одном компьютере есть программа работающая под ДОС. Эта программа отправляет на печать на LPT порт информацию.

Может лучше перенаправить вывод принтера с LPT на COM порт и к нему подключить другой комп — так будет проще.
Извините, я все еще учусь
Re: эмуляция принтера на принимающей стороне LPT
От: Sergey Россия  
Дата: 13.06.07 21:03
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Добрый день!


D>Имеется такая задача: на одном компьютере есть программа работающая под ДОС. Эта программа отправляет на печать на LPT порт информацию.

D>Требуется "подменить" на принимающей стороне принтер — т.е. вместо принтера поставить компьютер (под управлением Windows), который будет считывать
D>информацию с порта и записывать ее в БД.

D>Проблема видимо в протоколе взаимодействия. Стандартная команда печати из ДОСа сообщает о том, что в принтере закончилась бумага.

D>Т.е. по протоколу взаимодействия проверяются видимо соответсвующие значения на пинах (контактах) LPT — и естественно эта проверка не проходит. Пины состояния порта LPT (с 10 по 15) программно выставить нельзя.

А что мешает выставить их аппаратно? Простой перепайкой кабеля. Всяко быстрее, чем драйвер писать.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 14.06.07 06:16
Оценка:
SIT>Может лучше перенаправить вывод принтера с LPT на COM порт и к нему подключить другой комп — так будет проще.

компьютер с ДОСом и программой на нем нельзя трогать. Таковы условия задачи. Что-то делать можно только на принимающей стороне.
Re[2]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 14.06.07 06:20
Оценка:
S>А что мешает выставить их аппаратно? Простой перепайкой кабеля. Всяко быстрее, чем драйвер писать.

Какой именно распайкой? Если такой как соединение двух компьютеров по LPT, то она уже осуществлена.
Без нее вообще ДОС ругался на попытку записи в порт, а теперь пишет что нет бумаги

Или можно еще как-то по-другому перепаивать?
Re[3]: эмуляция принтера на принимающей стороне LPT
От: Sergey Россия  
Дата: 14.06.07 06:56
Оценка:
"Demetrio" <59313@users.rsdn.ru> wrote in message news:2545186@news.rsdn.ru...
>S>А что мешает выставить их аппаратно? Простой перепайкой кабеля. Всяко быстрее, чем драйвер писать.
>
> Какой именно распайкой? Если такой как соединение двух компьютеров по LPT, то она уже осуществлена.
> Без нее вообще ДОС ругался на попытку записи в порт, а теперь пишет что нет бумаги
>
> Или можно еще как-то по-другому перепаивать?

Просто контакт paper out (12 нога) на землю посадить. Для начала. Потому что дальше будут другие трудности
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[3]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 14.06.07 21:31
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>компьютер с ДОСом и программой на нем нельзя трогать.

Даже в autoexec.bat строчку добавить нельзя?
Извините, я все еще учусь
Re[4]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 15.06.07 06:50
Оценка:
Здравствуйте, SergeyIT, Вы писали:

SIT>Здравствуйте, Demetrio, Вы писали:


D>>компьютер с ДОСом и программой на нем нельзя трогать.

SIT>Даже в autoexec.bat строчку добавить нельзя?

а есть уверенность в том что через COM данные таким образом дойдут до принимающего компьютера и там без проблем считаются?
Кстати, из ДОС в этом случае все равно возникает ошибка — записи в LPT порт. Т.е. редирект сработал, чувствуется задержка,
но команда не выполняется удачно. (использовал mode lpt1=com1, а затем copy 1.txt lpt1 или copy 1.txt prn)
Re[5]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 15.06.07 08:02
Оценка:
У меня еще строчка в бате
MODE COM1:96,n,8,1,p
(это от установок в принтере зависит)
Редирект нормально работает.
А Вы соединили Com с другим компом или принтером?
Извините, я все еще учусь
Re[6]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 15.06.07 09:00
Оценка:
Здравствуйте, SergeyIT, Вы писали:

SIT>У меня еще строчка в бате

SIT>MODE COM1:96,n,8,1,p
SIT>(это от установок в принтере зависит)
SIT>Редирект нормально работает.
SIT>А Вы соединили Com с другим компом или принтером?

с другим компом он работает под Windows
Re[7]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 15.06.07 09:46
Оценка:
Здравствуйте, Demetrio, Вы писали:
D>с другим компом :-) он работает под Windows
А файлы передаются?
win комп. — copy com1 1.txt
Dos комп. — copy 1.txt com1
Если нет — то настройки COMов не одинаковые.

или (я проверяю так)
win комп. — copy com1 con
Dos комп. — copy con com1 (и печатаете, что хотите, в конце текста ^z поставить надо)
Извините, я все еще учусь
Re[8]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 15.06.07 11:22
Оценка:
Здравствуйте, SergeyIT, Вы писали:

SIT>Здравствуйте, Demetrio, Вы писали:

D>>с другим компом он работает под Windows
SIT>А файлы передаются?
SIT>win комп. — copy com1 1.txt
SIT>Dos комп. — copy 1.txt com1
SIT>Если нет — то настройки COMов не одинаковые.

SIT>или (я проверяю так)

SIT>win комп. — copy com1 con
SIT>Dos комп. — copy con com1 (и печатаете, что хотите, в конце текста ^z поставить надо)

После проверки,ситуация между 2-мя win компами такая: данные отправляются/принимаются но не те.
В смысле вместо одного текста приходят например буквы АААААА..... причем количество букв в ответе
зависит от того сколько данных мы отправили. Т.е. связь есть, но данные нужные не приходят.

Свиду посмотрел в настройки портов — вроде все одно и тоже:скорость 9600, биты данных 8, четность — нет,
стоповые биты — 1, управление потоком — нет
Re[9]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 15.06.07 13:32
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Свиду посмотрел в настройки портов — вроде все одно и тоже:скорость 9600, биты данных 8, четность — нет,

D>стоповые биты — 1, управление потоком — нет

Открыл консольное окно, спросил mode com1
показало совсем не те установки, что в Device managere.
Установил в консоли
MODE COM1:48,n,8,1,p
а в Device managere они не изменились.
То есть надо в консоли устанавливать нужные параметры com портов.
И не забудьте соединить корпуса компов — может выбить Com порты
Извините, я все еще учусь
Re[10]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 15.06.07 14:36
Оценка:
Здравствуйте, SergeyIT, Вы писали:

SIT>Здравствуйте, Demetrio, Вы писали:


D>>Свиду посмотрел в настройки портов — вроде все одно и тоже:скорость 9600, биты данных 8, четность — нет,

D>>стоповые биты — 1, управление потоком — нет

SIT>Открыл консольное окно, спросил mode com1

SIT>показало совсем не те установки, что в Device managere.
SIT>Установил в консоли
SIT>MODE COM1:48,n,8,1,p
SIT>а в Device managere они не изменились.
SIT>То есть надо в консоли устанавливать нужные параметры com портов.
SIT>И не забудьте соединить корпуса компов — может выбить Com порты

Огромное спасибо! По крайней мере в Windows заработало!
Действительно настройки не совпадают! буду теперь пытаться проделать тоже самое из под ДОС.
Re[11]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 15.06.07 15:07
Оценка:
Рекомендую в Виндах сделать программу, которая будет загружаться при загрузке виндов и писать данные из COM порта в файл или может лучше в файлы (каждую порцию печати отдельно). А другая программа будет переносить данные из файлов в БД и удалять ненужное.
Извините, я все еще учусь
Re: эмуляция принтера на принимающей стороне LPT
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 15.06.07 18:31
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Имеется такая задача: на одном компьютере есть программа работающая под ДОС. Эта программа отправляет на печать на LPT порт информацию.


D>Требуется "подменить" на принимающей стороне принтер — т.е. вместо принтера поставить компьютер (под управлением Windows), который будет считывать

D>информацию с порта и записывать ее в БД.
возможно уже неактуально, хорошее решение уже посоветовали, но подумалось — как насчет поднять VM с гостевой DOS и прицепить виртуальный порт куда душа пожелает на хосте?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 15.06.07 19:08
Оценка:
Здравствуйте, Valery A. Boronin, Вы писали:

AB>возможно уже неактуально, хорошее решение уже посоветовали, но подумалось — как насчет поднять VM с гостевой DOS и прицепить виртуальный порт куда душа пожелает на хосте?

Не всегда такое возможно.
Извините, я все еще учусь
Re[4]: эмуляция принтера на принимающей стороне LPT
От: sz36 Россия  
Дата: 15.06.07 21:04
Оценка:
Здравствуйте, Sergey, Вы писали:

>>S>А что мешает выставить их аппаратно? Простой перепайкой кабеля. Всяко быстрее, чем драйвер писать.

>>
>> Какой именно распайкой? Если такой как соединение двух компьютеров по LPT, то она уже осуществлена.
>> Без нее вообще ДОС ругался на попытку записи в порт, а теперь пишет что нет бумаги :-)
>>
>> Или можно еще как-то по-другому перепаивать?

S>Просто контакт paper out (12 нога) на землю посадить. Для начала. Потому что дальше будут другие трудности :)

Чисто из занудства добавлю — этого будет мало. Кабель между портами должен быть не 1:1, нужно ловить STROBE, ее подсоединить на любой из входов принимающего компа, и, возможно, управлять BUSY — ее к выходу. STROBE программно ловить может оказаться проблематичным — он имеет право быть коротким, менее микросекунды.
Другая потенциальная проблема — если целевая программа печатает в графическом режиме.
Re[12]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 20.06.07 06:56
Оценка:
К сожалению в ДОСе пока не получается этого добиться. Ковыряюсь с настройками, вроде все выставляю аналогично — а пишет ошибку записи в порт.
Может в ДОСе нужно еще какие-нибудь настройки ставить? Или в чем здесь может быть проблема?
Re[13]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 20.06.07 08:08
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>К сожалению в ДОСе пока не получается этого добиться.

В программе или из команды
copy con lpt1 (или com1) ?
Извините, я все еще учусь
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.