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

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


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

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

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

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

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


Спасибо.
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) ?
Извините, я все еще учусь
Re[14]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 20.06.07 08:50
Оценка:
Здравствуйте, SergeyIT, Вы писали:

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


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

SIT>В программе или из команды
SIT>copy con lpt1 (или com1) ?


Из команды. Да и с небольшой тестовой программы — тоже....
Re[15]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 20.06.07 09:05
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Из команды. Да и с небольшой тестовой программы — тоже....

Так может COM порт полетел? Это бывает (у меня 1 раз было — в розетке отошли земляные контакты, с тех пор соединяю корпуса компов напрямую).
Извините, я все еще учусь
Re[16]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 20.06.07 09:44
Оценка:
Здравствуйте, SergeyIT, Вы писали:

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


D>>Из команды. Да и с небольшой тестовой программы — тоже....

SIT>Так может COM порт полетел? Это бывает (у меня 1 раз было — в розетке отошли земляные контакты, с тех пор соединяю корпуса компов напрямую).


Да нет. Из Windows все ок. файлы передает.
Re[17]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 20.06.07 11:12
Оценка:
Здравствуйте, Demetrio, Вы писали:


D>Да нет. Из Windows все ок. файлы передает.

Может Checkit или подобное с заглушкой
Извините, я все еще учусь
Re[18]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 20.06.07 11:22
Оценка:
Здравствуйте, SergeyIT, Вы писали:

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



D>>Да нет. Из Windows все ок. файлы передает.

SIT>Может Checkit или подобное с заглушкой

а не нужен ли какой-нить специальный драйвер под ДОс для COM-порта? А то ведь я ничего специфического не делал. Просто поставил "голый" ДОС.
Re[19]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 20.06.07 13:05
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>а не нужен ли какой-нить специальный драйвер под ДОс для COM-порта? А то ведь я ничего специфического не делал. Просто поставил "голый" ДОС.

Да нет вроде.
Может у Вас машина современная и с этим проблемы (может установки в биосе другие нужны).
Я недавно подобным занимался, но на 286, без проблем. А проверял Checkit'ом. Может Вам прислать?
Извините, я все еще учусь
Re[20]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 20.06.07 13:15
Оценка:
Здравствуйте, SergeyIT, Вы писали:

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


D>>а не нужен ли какой-нить специальный драйвер под ДОс для COM-порта? А то ведь я ничего специфического не делал. Просто поставил "голый" ДОС.

SIT>Да нет вроде.
SIT>Может у Вас машина современная и с этим проблемы (может установки в биосе другие нужны).
SIT>Я недавно подобным занимался, но на 286, без проблем. А проверял Checkit'ом. Может Вам прислать?

Да. Был бы признателен. demetrio@mail.ru
Re[21]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 20.06.07 19:56
Оценка:
Письмо получили?
Извините, я все еще учусь
Re[13]: эмуляция принтера на принимающей стороне LPT
От: sz36 Россия  
Дата: 21.06.07 00:09
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Ковыряюсь с настройками, вроде все выставляю аналогично — а пишет ошибку записи

D>в порт. Может в ДОСе нужно еще какие-нибудь настройки ставить? Или в чем здесь может
D>быть проблема?

Все зависит от того, каким способом ДОСовая программа печатает. Если через функцию ДОС — то тут все просто, и вывод перенаправляется без проблем. Если через BIOSное прерывание, то напрямую вывод не перенаправляется, но подменив точку входу чем-нибудь своим можно добиться искомого и при таком варианте. Но, к сожалению, большинство ДОСовских программ работают с COM и LPT портами "врукопашную", без использования ф-й DOS и BIOS. В этом случае перенаправление невозможно. Если целевая программа имеет свой GUI, то, скорее всего, это именно этот случай. Стандартными прерываниями для работы с портами во времена DOS пользовались только простенькие, как правило, консольные утилиты. В этом случае возможно три пути решения проблемы:
1) Дизассемблировать программу, найти ф-ю печати и пропатчить ее (самый, на мой взгляд, перспективный)
2) Запускать под VMWare и своим драйвером перехватывать обращения к LPT
3) Соединить с другим компом, на котором реализовать ответную часть принтерного интерфейса, чтобы второй комп рассказывал по LPT, какой он Epson. Не факт, что такое возможно чисто программно, но если поставить на STROBE триггер, то вроде без проблем, и даже без писания собственного драйвера.
Re[22]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 21.06.07 06:02
Оценка:
Здравствуйте, SergeyIT, Вы писали:

SIT>Письмо получили?


Да! Спасибо! Проверил — выдает ошибки. (принят неожидаемый символ, наоборот не принят ожидаемый символ и некоторые другие)

— Received unexpected character
— Transmitter wouldn't go ready
— Expected 54h, received no character
Re[23]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 21.06.07 06:30
Оценка:
Здравствуйте, Demetrio, Вы писали:

D>Да! Спасибо! Проверил — выдает ошибки. (принят неожидаемый символ, наоборот не принят ожидаемый символ и некоторые другие)

У меня такое было только с битым портом.
Советую Вам обратиться на forum.ixbt.com в соответствующий форум — там специалисты.
Извините, я все еще учусь
Re[24]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 21.06.07 13:00
Оценка:
Самое интересное, что связь есть! Терминалка из DOS-NAvigatora (под ДОС-компом) и стандартная терминалка Windows пректасно ужились. и я могу писать нормальный текст — и он приходит в обе стороны.
Re[24]: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 21.06.07 13:20
Оценка:
У меня все больше складывается ощущение, что с COm-портом та же история что и с LPT. Т.е. необходим какой-то специальный протоколо взаимодействия. Например по терминалке все ок, а просто копирование текста в порт — ему не нравится....
Re[25]: эмуляция принтера на принимающей стороне LPT
От: SergeyIT Россия  
Дата: 21.06.07 15:42
Оценка:
Здравствуйте, Demetrio, Вы писали:

А кабель у Вас правильно распаян?
Посмотрите здесь (но в Виндах вроде нужно другой драйвер с ним ставить)
http://sakva.narod.ru/NullModemFrame.htm
И поищите в инете — вроде под ДОСом и Виндами СОМы как-то по-разному работают.
Я бы спросил на форуме железячников.
Извините, я все еще учусь
Re: эмуляция принтера на принимающей стороне LPT
От: Demetrio  
Дата: 28.06.07 09:26
Оценка:
Com вариант не подходит. Com-порты заныты под другие цели...

Поэтому возвращаюсь к LPT. Замыкая на стороне Win-компа контакты 2 и 3 — то бишь на стороне DOS контакты 15 и 13 соответственно, получил возможность печати из DOS. Печать из DOS (из программы или командой) выполняется без ошибок. Но теперь встала проблема как отловить данные. Данные теперь приходят на следйющие котнакты (на стороне Win): 15,13,12,10,11,7,8,9 (в порядке возрастания битов). При посылке одного символа на контактах с 15-по 11 приходят данные (ASCII-символ), но верхних трех битов (7,8,9) не достает. Я так понимаю что это биты выходные и они не принимают с обратоной стороны данных. Но вроде как по теории можно переключить Направление передачи. Но ведь тогда я не смогу установить контакты 2 и 3, необходимые для проверки готовности "принтера" (Win-компа). Какой-то замкнутый круг!

Помогите! Как побороть данную проблему? Можно ли стандартным путем или же нужно все-таки писать свой драйвер. Читал про режимы... Nibble Mode и другие. Не совсем понял, можно ли обойтись средствами верхнего уровня для перехвата всех символов или же нужно эмулировать один из протоколов взаимодействия? Т.е. проверять и выставлять задержки, ответы, стробы данных, занятость и т.п.? И я так понял, на какждый символ должно формироваться прерывание или как? Иначе как прочитать следующий символ ?


Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.