Имеется такая задача: на одном компьютере есть программа работающая под ДОС. Эта программа отправляет на печать на LPT порт информацию.
Требуется "подменить" на принимающей стороне принтер — т.е. вместо принтера поставить компьютер (под управлением Windows), который будет считывать
информацию с порта и записывать ее в БД.
Проблема видимо в протоколе взаимодействия. Стандартная команда печати из ДОСа сообщает о том, что в принтере закончилась бумага.
Т.е. по протоколу взаимодействия проверяются видимо соответсвующие значения на пинах (контактах) LPT — и естественно эта проверка не проходит. Пины состояния порта LPT (с 10 по 15) программно выставить нельзя.
Возможно ли обмануть каких либо образом отсылающую сторону, или необходимо написание своего драйвера для работы с LPT (и поможет ли написание своего драйвера) для решения данной проблемы?
Здравствуйте, Demetrio, Вы писали:
D>Добрый день!
D>Имеется такая задача: на одном компьютере есть программа работающая под ДОС. Эта программа отправляет на печать на LPT порт информацию.
Может лучше перенаправить вывод принтера с LPT на COM порт и к нему подключить другой комп — так будет проще.
Здравствуйте, Demetrio, Вы писали:
D>Добрый день!
D>Имеется такая задача: на одном компьютере есть программа работающая под ДОС. Эта программа отправляет на печать на LPT порт информацию. D>Требуется "подменить" на принимающей стороне принтер — т.е. вместо принтера поставить компьютер (под управлением Windows), который будет считывать D>информацию с порта и записывать ее в БД.
D>Проблема видимо в протоколе взаимодействия. Стандартная команда печати из ДОСа сообщает о том, что в принтере закончилась бумага. D>Т.е. по протоколу взаимодействия проверяются видимо соответсвующие значения на пинах (контактах) LPT — и естественно эта проверка не проходит. Пины состояния порта LPT (с 10 по 15) программно выставить нельзя.
А что мешает выставить их аппаратно? Простой перепайкой кабеля. Всяко быстрее, чем драйвер писать.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: эмуляция принтера на принимающей стороне LPT
S>А что мешает выставить их аппаратно? Простой перепайкой кабеля. Всяко быстрее, чем драйвер писать.
Какой именно распайкой? Если такой как соединение двух компьютеров по LPT, то она уже осуществлена.
Без нее вообще ДОС ругался на попытку записи в порт, а теперь пишет что нет бумаги
Или можно еще как-то по-другому перепаивать?
Re[3]: эмуляция принтера на принимающей стороне LPT
"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, Вы писали:
SIT>Здравствуйте, Demetrio, Вы писали:
D>>компьютер с ДОСом и программой на нем нельзя трогать. SIT>Даже в autoexec.bat строчку добавить нельзя?
а есть уверенность в том что через COM данные таким образом дойдут до принимающего компьютера и там без проблем считаются?
Кстати, из ДОС в этом случае все равно возникает ошибка — записи в LPT порт. Т.е. редирект сработал, чувствуется задержка,
но команда не выполняется удачно. (использовал mode lpt1=com1, а затем copy 1.txt lpt1 или copy 1.txt prn)
Re[5]: эмуляция принтера на принимающей стороне LPT
У меня еще строчка в бате
MODE COM1:96,n,8,1,p
(это от установок в принтере зависит)
Редирект нормально работает.
А Вы соединили Com с другим компом или принтером?
Извините, я все еще учусь
Re[6]: эмуляция принтера на принимающей стороне LPT
Здравствуйте, SergeyIT, Вы писали:
SIT>У меня еще строчка в бате SIT>MODE COM1:96,n,8,1,p SIT>(это от установок в принтере зависит) SIT>Редирект нормально работает. SIT>А Вы соединили Com с другим компом или принтером?
с другим компом он работает под Windows
Re[7]: эмуляция принтера на принимающей стороне LPT
Здравствуйте, 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
Здравствуйте, 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
Здравствуйте, Demetrio, Вы писали:
D>Свиду посмотрел в настройки портов — вроде все одно и тоже:скорость 9600, биты данных 8, четность — нет, D>стоповые биты — 1, управление потоком — нет
Открыл консольное окно, спросил mode com1
показало совсем не те установки, что в Device managere.
Установил в консоли
MODE COM1:48,n,8,1,p
а в Device managere они не изменились.
То есть надо в консоли устанавливать нужные параметры com портов.
И не забудьте соединить корпуса компов — может выбить Com порты
Извините, я все еще учусь
Re[10]: эмуляция принтера на принимающей стороне LPT
Здравствуйте, 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
Рекомендую в Виндах сделать программу, которая будет загружаться при загрузке виндов и писать данные из COM порта в файл или может лучше в файлы (каждую порцию печати отдельно). А другая программа будет переносить данные из файлов в БД и удалять ненужное.
Здравствуйте, 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
Здравствуйте, Valery A. Boronin, Вы писали:
AB>возможно уже неактуально, хорошее решение уже посоветовали, но подумалось — как насчет поднять VM с гостевой DOS и прицепить виртуальный порт куда душа пожелает на хосте?
Не всегда такое возможно.
Извините, я все еще учусь
Re[4]: эмуляция принтера на принимающей стороне LPT
Здравствуйте, Sergey, Вы писали:
>>S>А что мешает выставить их аппаратно? Простой перепайкой кабеля. Всяко быстрее, чем драйвер писать. >> >> Какой именно распайкой? Если такой как соединение двух компьютеров по LPT, то она уже осуществлена. >> Без нее вообще ДОС ругался на попытку записи в порт, а теперь пишет что нет бумаги :-) >> >> Или можно еще как-то по-другому перепаивать?
S>Просто контакт paper out (12 нога) на землю посадить. Для начала. Потому что дальше будут другие трудности :)
Чисто из занудства добавлю — этого будет мало. Кабель между портами должен быть не 1:1, нужно ловить STROBE, ее подсоединить на любой из входов принимающего компа, и, возможно, управлять BUSY — ее к выходу. STROBE программно ловить может оказаться проблематичным — он имеет право быть коротким, менее микросекунды.
Другая потенциальная проблема — если целевая программа печатает в графическом режиме.
Re[12]: эмуляция принтера на принимающей стороне LPT
К сожалению в ДОСе пока не получается этого добиться. Ковыряюсь с настройками, вроде все выставляю аналогично — а пишет ошибку записи в порт.
Может в ДОСе нужно еще какие-нибудь настройки ставить? Или в чем здесь может быть проблема?
Re[13]: эмуляция принтера на принимающей стороне LPT