| Автор | Сообщение |
Paidj Участник Сообщения: 1442
|
Доброго времени суток всем. Понадобились знания из давно минувших времён . Есть принтак Epson-LQ2190, соответственно 24 игольчатый. Из за косяка софтины сыплющей в него данные(неправильно отсылает коды двух букв, все остальные согласно CP866) надо программно переопределить начертание двух символов.
Проблема в том что я не могу найти достаточно подробного описания команды ESC& именно для 24pin принтеров. Самое толковое описание которое я нашёл http://www.lib.csu.ru/DL/bases/prg/frolov/books/bsp/v02/ch7.htm#ch7_7
Но и в нём не всё понятно:
- как именно указать символ из какого набора символов я переопределяю(Draft, LQ, Proportional)или это определяется автоматом по параметрам d0..d2???
- зачем нужны параметры d0 и d2 если отступы всё равно определяется в битовой маске
- правильно ли я понимаю что порядок байтов в описании символа должен быть: 3 байта первого столбца, 3байта второго столбца, итд.......
Пробовал отправлять вот такую строку как на картинке(в HEX виде, данные символа пробные) принтер её глатает, но символ который я пытался переопределить не меняется.
ESC.JPG 32,02 КБ Скачано: 86 раз(а)
|
|
Konstantin_18 Участник Сообщения: 3413
|
Paidj, Заменяющие символы новые собственные или уже есть в наборе ?
Может просто перекодировщик применить ? |
|
chignon Предупреждений: 1 Сообщения: 6186
|
Paidj, неудобно спрашивать, банальность вроде... костыль ему, перехватчик написать - не проще? |
|
Captain monitor.net.ru  Сообщения: 10113
|
Paidj, а в графике печатать не айс? для чего принтер пользуется? |
|
Paidj Участник Сообщения: 1442
|
| chignon писал: | | Paidj, неудобно спрашивать, банальность вроде... костыль ему, перехватчик написать - не проще? |
Если бы дело было под Dos возможно перехват прерывания был бы и проще, а так феноменальная экзотика: программа написана на BP под Win 3.x но при этом внезапно умудряется работать под ХР(в описании сказано что данные сыпятся в порт через виндовый спуллер, но в обход драйверов принтера). По факту основная проблема с "ш" которая используется часто, вместо неё присылается "Ы" которая не используется вообще, проблема ещё с "Э" но она пока не так критична.
В общем надо нарисовать заново "ш"на месте "Ы", но я до такой глубины ESC никогда не копал, в добавок примеры везде под 9pin, формат данных соответственно отличается. |
|
uam Участник Сообщения: 1629
|
Тоже этим когда-то занимался.
Где-то у меня валялся диск с драйверами . Но как привод на 5.25" найти?
Там были загрузочные файлы с кириллическими фонтами. Один раз после включения принтера сбрасываешь его на печать и потом можно все время печатать в той кодировке, что надо. В файле вручную можно поправить коды символов. А еще в Win 95 в драйвере принтера Generic/Text only в файле TTY.DAT можно было настроить таблицу перекодировки символов.
Добавлено 20-07-2015 21:55
Ага. Драйвер нужен от Win 2000/
| Цитата: |
(40) Если у вас матричный принтер, то в ряде случаев имеет смысл печатать на нём в текстовом режиме (используются шрифты, хранящиеся в ПЗУ принтера), что в несколько раз быстрее, чем в графическом режиме. Большинство DOS-приложений только в текстовом режиме и печатает. Чтобы заставить так печатать Windows-приложения, надо воспользоваться драйвером "Общий / Только текст" (Generic / Text Only), входящим в дистрибутив Windows. Для правильной печати кириллицы нужно дополнительно проделать следующее.
Во-первых, на самом принтере надо выставить 866 кодовую страницу (кириллица DOS), которая обычно имеется, а кодовой страницы 1251 (кириллица Windows) на матричных принтерах, как правило, нет. Как выставить ? смотрите инструкцию к принтеру. На некоторых моделях это делается с помощью переключателей, на некоторых ? путём запуска встроенной в принтер программы настройки и ответа на вопросы, печатаемые принтером, нажатием определённых кнопок. Если у принтера вообще нет в ПЗУ CP-866, то с кириллицей в текстовом режиме будут проблемы. Если принтер имеет ОЗУ знакогенератора, то можно попытаться использовать специальные драйверы, которые загружают шрифт кириллицы в ОЗУ. В противном случае может помочь только прошивка шрифтов кириллицы в ПЗУ принтера с помощью специального прибора ? программатора.
Во-вторых, надо в свойствах драйвера "Общий / Только текст" перейти на вкладку "Параметры устройства" и настроить "Таблицу соответствия расширенных символов". Для этого следует поочерёдно в списке "На экране" выбирать буквы кириллицы и вводить для них в поле "На принтере" нужные коды из CP-866, которые надо передавать на принтер. Например, выбираем букву "А" кириллицы и задаём для неё код 128 (в поле "На принтере" нажимаем клавишу и набираем 128 на цифровой панели клавиатуры). Аналогично поступаем со всеми остальными буквами кириллицы, а также некоторыми знаками (например, знак номера "?" ? код 252). В списке "Соответствие" должно быть задано "1 TTY". Введённые коды сохраняются в файле tty.dat в каталоге Windows. Уже готовый файл tty.dat можно взять отсюда
Драйвер "Общий / Только текст" можно использовать также для сохранения информации в текстовый файл из тех приложений, которые сами не позволяют этого, но осуществляют печать. Надо будет лишь в свойствах данного драйвера портом для вывода на печать назначить FILE:
Следует иметь в виду, что настроить печать кириллицы на матричном принтере в текстовом режиме удастся только для Windows 95/98/Me/2000, причём в Windows 95/98/Me этот способ не сработает для программ, использующих кодировку Unicode, например, Word 97/2000/2002 (придётся документ сохранять в формате RTF или Word 6.0/95 и печатать из стандартного редактора WordPad). В Windows NT/2000/XP нет возможности самостоятельной настройки таблицы соответствия, там файл tty.dat не используется. Однако в Windows 2000 в драйвере "Generic / Text Only" можно выбрать кодовую страницу 866 на вкладке "Выбор шрифта". В Windows XP почему-то доступна только кодовая страница 1251, что позволяет решить вторую задачу (сохранение печатной информации в текстовый файл), но не первую (печать в текстовом режиме).
Александр Рыжов (sovety AT sovety.net) www.sovety.net
(45) Чтобы в Windows XP обеспечить печать на матричном принтере в текстовом режиме, можно после установки драйвера "Generic / Text Only" заменить файлы tty* (как минимум эти: tty.dll, ttyres.dll, ttyui.dll) в каталоге
%windir%\system32\spool\drivers\w32x86\3
(это каталог с УСТАНОВЛЕННЫМИ принтерами, но, возможно, вместо подкаталога "3" может быть любая другая цифра, в любом случае можно найти tty* поиском) на файлы с такими же именами из Windows 2000, например, из дистрибутива (\i386\driver.cab) или скачать отсюда
После этого появится возможность выбрать кодовую страницу 866 в настройках драйвера "Generic / Text Only".
Pavel_L (nrz AT yandex.ru) |
|
|
Paidj Участник Сообщения: 1442
|
Фонты под 9pin и редактор под них я находил, но они не катят. В принципе загрузка шрифта целиком, с переставленными буквами это тоже выход, но ничего подходящего под 24 игольчатый принтак нету. На сколько я понял у него в режиме Draft знакоместо 12х24, а в LQ вообще 37х24
| Цитата: | | Ага. Драйвер нужен от Win 2000/ |
Если бы. В настройках программы выберется порт а не принтер, специально пробовали - можно вообще снести драйвер, прога всё равно будет печатать, драйвер на принтак ставили только для того чтобы винда не орала что нашла новое PnP устройство. |
|
uam Участник Сообщения: 1629
|
Ага. Через спулер не печатает.
Нашел свой первый CD. Записал его в октябре 1996. На нем есть
>Комплекс резидентных программ BETA Антон ЧижовChi-Sovt 1987-1988
Версии 3.30. Там лежат шрифты под LQ.
В инете эту версию не нашел. Сейчас отправлю в личку. Только поменяю расширение с arj |
|
Paidj Участник Сообщения: 1442
|
uam, спасибо, завтра посмотрю что с этим можно сделать. А печатает прога скорее всего так: выводит последовательность команд и данных в файл(куда нюдь в %windows%\temp\), а затем копирует его в выбранный LPT, иначе я ни как не могу объяснить работоспособность такой древней программы под ХР. |
|
dsp155 Участник Сообщения: 1126
|
| Paidj писал: | | написана на BP под Win 3.x .Основная проблема с "ш" которая используется часто, вместо неё присылается "Ы" которая не используется вообще, проблема ещё с "Э" . |
Исходники этой проги имеются? если да то можно подравить. |
|
Konstantin_18 Участник Сообщения: 3413
|
| Konstantin_18 писал: | | Paidj, Заменяемые символы новые, собственные или уже есть в наборе у принтера? |
Paidj, Программа печатает в символьном режиме ?
ESC последовательности использует ? |
|
Paidj Участник Сообщения: 1442
|
| Konstantin_18 писал: | | Konstantin_18 писал: | | Paidj, Заменяемые символы новые, собственные или уже есть в наборе у принтера? |
Paidj, Программа печатает в символьном режиме ?
ESC последовательности использует ? |
Я переводил принтер в HEX Dump и смотрел что она использует: переключает плотность, междустрочные интервалы, длину листа.
Исходников нет, я пробовал ковырять её IDA(отсюда изнаю что она на BP), но так как прога 16bit грызёт IDA её плохо(много функций ведущих в никуда), а отладка вообще не идёт (bochs debug тоже плохо дружит с 16bit). Короче самый подходящий инструмент для разборок с этой прогой TD for Win, но это "песня пахаря". |
|
Captain monitor.net.ru  Сообщения: 10113
|
внутри принтера, наверное, есть диппереключатель. Там можно таблицы и режимы переключать. Давно было, решали проблему с символами. |
|
Paidj Участник Сообщения: 1442
|
| Captain писал: | | внутри принтера, наверное, есть диппереключатель. Там можно таблицы и режимы переключать. Давно было, решали проблему с символами. | Кодировка уже выбрана CP866, и в современных матричных принтерах давно нет DIP переключателей всё настраивается через меню, пункты которого печатаются на лист после чего предлагается нажать ту или иную клавишу.
Тот "программный комплекс" что прислал uam скорее всего поможет решить проблему, но не сам по себе: оказалось что для загрузки шрифта в принтер он как раз таки использует команду ESC& переопределяя по одному символу за команду, принтер в режиме HEX Dump исправно фиганул простыню больше метра отображая весь процесс загрузки шрифта. |
|
Paidj Участник Сообщения: 1442
|
Всё, почти разобрался. Удалось переопределить один символ с заданным кодом. Также удалось выдрать из файла шрифтов со знакоместом 24х36 данные символов(напрямую те файлы что прислал uam в принтер грузить нельзя, а как исполняемые файлы они пашут только в составе комплекса), так что с рисованием умчаться не придётся.
А "почти разобрался" потому что я ещё не пробовал возиться со шрифтами других размерностей.

|
|
Scorpio2007 Участник Сообщения: 686
|
| Paidj писал: | | На сколько я понял у него в режиме Draft знакоместо 12х24, а в LQ вообще 37х24 | Точнее, в LQ будет 29х24, а в Proportional - можно даже до 37х24. |
|
uam Участник Сообщения: 1629
|
| Paidj писал: | | напрямую те файлы что прислал uam в принтер грузить нельзя, а как исполняемые файлы они пашут только в составе комплекса |
Ну да. Тогда делали перенаправление в файл, чтобы получить всю последовательность, и с ним уже работали. |
|
Paidj Участник Сообщения: 1442
|
| uam писал: | | Paidj писал: | | напрямую те файлы что прислал uam в принтер грузить нельзя, а как исполняемые файлы они пашут только в составе комплекса |
Ну да. Тогда делали перенаправление в файл, чтобы получить всю последовательность, и с ним уже работали. |
Сделал я вывод шрифтов из того комплекса в файлы. После этого стало понятно что "альтернативный, 24х36" это нифига не СР866: русские буквы в младшей части таблицы, на месте английских, переключение между рус\eng осуществляет драйвер комплекса подачей команды переключения знакогенератора ram\rom. "основной, 24х36" похоже битый или неправильно описан(такое впечатление что высота не 24) по факту принтер печатает с ним "письмена хищников".
Выяснилось ещё одна "приятная" подробность: для реализации моей затеи необходимо было использование команды ESC: (копирование знакогенератора из ROM в RAM) так вот в разных принтерах она работает по разному - в одних копирует всю таблицу, в других только младшую её часть(до кода 127), имеющийся аппарат к сожалению относится к последним Более того подключение пользовательского набора символов в старшую часть таблицы(где и должны находится русские буквы согласно СР866) осуществляется отдельной командой, при этом все символы которые предполагается использовать должны быть загружены снаружи(то есть скопировать верхнюю часть знакогенератора ROM->RAM нельзя).
Идея переписать нафиг софт, формирующий текст на печать, кажется всё менее сложной. |
|
uam Участник Сообщения: 1629
|
| Paidj писал: | | Идея переписать нафиг софт, формирующий текст на печать, кажется всё менее сложной. |
Тогда, может, перешить ROMку?
Мы на OKI ML390FB так делали. |
|
Paidj Участник Сообщения: 1442
|
| uam писал: | | Paidj писал: | | Идея переписать нафиг софт, формирующий текст на печать, кажется всё менее сложной. |
Тогда, может, перешить ROMку?
Мы на OKI ML390FB так делали. |
Плата электроники этого принтака просто сказка(посмотрел когда удалял датчики бумаги) BGAшный проц, флеш TSOP48(принтак куплен 2года назад). Сильно подозреваю что вычленить знакогенератор из прошивки будет сложно. На старых принтаках конечно всё было приятней - отдельная 27Сххх в которой можно было легко разобраться что к чему.
Я медленно но верно приближаюсь к решению поставленной задачи. В ходе курения манов была найдена команда ESCt2, которая подменяет(не копирует а именно временно подменяет, так как перед использованием ESCt2 принтер обязательно должен находится в режиме использования rom знакогенератора) верхнюю часть таблицы на набор определённый пользователем, единственный недостаток - пришлось описывать весь русский набор букв, иначе на месте не прописанных произвольный мусор. Фактически осталось сварганить простенькую програмульку которая по нажатию кнопок будет засылать в принтак шрифты с нужной или правильной расстановкой букв. |
|
uam Участник Сообщения: 1629
|
| Paidj писал: | | На старых принтаках конечно всё было приятней - отдельная 27Сххх в которой можно было легко разобраться что к чему. |
Я новых не видел. Последнее, с чем сталкивался - DFX8500 и OKI MX100
| Paidj писал: | | Фактически осталось сварганить простенькую програмульку которая по нажатию кнопок будет засылать в принтак шрифты с нужной или правильной расстановкой букв. |
.bat файлик с командой
copy xxx.prn lpt: /b
? |
|
Paidj Участник Сообщения: 1442
|
Сначала в планах был действительно батник, но потом я оценил как всем этим пользоваться и решил что прога с кнопками будет по приятней. Собственно я уже написал програмулину которая по кнопкам засылает в принтер шрифт с переставленными буквами, с нормальными буквами, печатает тестовый текст, сбрасывает принтер. файлы шрифтов запихал прямо в ресурсы exeшника. Осталось завтра уточнить у соседей что со второй проблемной буквой. |
|
Paidj Участник Сообщения: 1442
|
Всё работа сдана. Если кому нужны битовые маски символов 24х36 могу выложить.
ЗЫ: недавно где то прочитал фразу: счастье - это момент времени между окончанием решения одной большой проблемы и возникновением следующей. В данном случае через 4 минуты после отчёта руководству о выполнении поставленной задачи, позвонили с термички и сообщили что у них случился очередной геморой. |
|
|
Текущий раздел»
Флейм»
Технофлейм (Различные обсуждения на технические темы)
|
|
|