Термопринтер в терминале не печатает

Обновлено: 06.07.2024

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

Известно, что одна из самых трудных задач для системных администраторов терминальных систем - обеспечение возможности печати для пользователей на локальные принтеры, поключенные к тонким клиентам или принтеры, для которых предоставлен общий доступ.

Windows Server 2008 Terminal Services предоставляет действительно захватывающую возможность решить эту проблему: Terminal Services Easy Print, и драйвер универсального принтера, основанный на XPS.

Итак, если клиентские принтеры не перенаправляются на терминальный сервер, для начала проверьте EventLog на наличие ошибок на терминальном сервере именно в тот момент, когда пользователь подключается к серверу.

  • Если у Вас наблюдаются проблемы с нарушениями в spooler сервисе, можно использовать утилиту Spooler Cleaner из Windows 2003 Resource Kit (cleanspl.exe). Утилита удалит все драйверы принтеров, принтеры, порты, мониторы портов, процессы печати и выводы на печать из spool файлов сервера.
  • Если Вы используете как минимум Windows 2003 SP1 на терминальном сервере, а Ваши принтеры поддерживают изначально PCL или PS, Вы можете настроить Fallback Printer Driver.
  • Если Вы используете клиенты Macintosh, Вы обязаны использовать драйвер PostScript, либо запускайте на всех Mac клиентах Mac RDC version 2.0, поддерживающий все принтеры.
  • В том случае, когда используется x64 версия Windows на терминальном сервере, необходимо использовать 64-битные драйверы принтеров, так как это описано в статье KB 895612.
  • Если Вы управляете десятком терминальных серверов и двумя десятками разнородных принтеров, напишите руководству служебную записку с обоснованием приобретения систем управления печатью. Если в Вашей сети обеспечивается поддержка "Host based" принтеров, работающих на "Lightweight Imaging Device Interface Language" (LIDIL), крайне необходимо использовать ПО Universal Printer Driver.

Ссылки документацию и практические руководства:

Средства решения проблем

    - Print Detective - пересчитывает все установленные драйверы, включая детализированную информацию (по драйверам). Можно использовать для удаления отдельных драйверов

CTX109374 - StressPrinters - инструмент, моделирующий ситуацию многократного автоматического перенаправления клиентских принтеров с использованием одного и того же драйвера

Решение проблем автоматического перенаправления

Другие разные проблемы

Windows 2008

Windows 2003

Windows 2000

    - Ошибка - Принтеры остаются активными на терминальном сервере после отключения (W2K) - Ошибка - Пользователи не могут печатать после установки сервис-пака, обновления ПО принтера на сервере в Windows 2000 - Невозможно напечатать с терминального сервера после выполнения "Update Rollup 1" для Microsoft Windows 2000 Service Pack 4 - Возникновение ограничений печати для пользователя при печати на общий для терминального сервера принтер после перезапуска "Spooler service" в Windows 2000 - также смотрите этот документ - 826026

Сегодня я бы хотел поделиться своим опытом устранения проблем печати на терминальном сервере Microsoft.

Подробности под катом.

Вместо Intro

Наверняка, почти каждый системный администратор, работающий с Windows и, в частности, с терминальным сервером, сталкивался с проблемами печати.
Разрывается телефон, у всех одна и та же проблема: «Нажимаю на печать — ничего не происходит!». Идем смотреть логи и видим следующую картину:

image

Причины и решения

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

  • Необходимо помнить, что драйверы у клиентов и на сервере должны быть идентичны
  • Убедитесь, что включена изоляция драйверов
  • Удалите все драйвера на сервере и попробуйте использовать TS Easy Print
  • Попробуйте решения сторонних компаний

А теперь пройдемся подробнее по всем пунктам. Для начала установим на наш терминальный сервер роль «Службы печати и документов».

image

Это позволит нам удобно управлять драйверами и принтерами, установленными в системе.

Идентичные драйвера

Думаю, тут особо не о чем рассказывать. Стоит помнить, что драйвера необходимо брать с официальных страниц изготовителя принтера. Так же еще один момент — стабильнее всего ведут себя PCL5. Если есть возможность выбора между PCL5 и PCL6 — стоит установить PCL5 (соответственно, серверу и клиенту).

Изоляция драйверов

В Windows 2008 появилась замечательная возможность изоляции драйверов принтера. Теперь драйвер принтера подгружается не Spoolsv.exe а специальным процессом PrintIsolationHost.exe. При «вылетании» драйвера принтера «слетает» только один экземпляр PrintIsolationHost.exe, а сама служба «Диспетчера печати» остается работоспособной, что, как понимаете, весьма влияет на настроение пользователей ;)

Чтобы включить данную возможность, нам необходимо открыть редактор локальной групповой политики (gpedit.msc) и пройти следующим путем: «Параметры компьютера -> Административные шаблоны -> Принтеры». Находим и включаем следующие пункты:

  • Выполнить драйверы принтеров в изолированных процессах
  • Переопределить параметр совместимости выполнения драйвера печати, назначенный драйвером печати

image

TS Easy Print

Видимо, вняв наконец стенаниям системных администраторов, компания Microsoft решила что-то сделать с необходимостью ставить зоопарк драйверов на терминальный сервер и падающим из-за этого spoolsv.exe. В итоге, на свет родилась технология TS Easy Print. Ключевой особенностью является, то, что больше нам не нужно устанавливать на сервер драйвера для каждого принтера — вместо этого используется унифицированный драйвер Remote Desktop Easy Print, соответственно, мы уходим от проблемы падающего спулера — ведь все операции с печатью выполняются на компьютере клиента.
Для того, чтобы явно определить, что мы хотим использовать на терминальном сервере TS Easy Print, необходимо пройти опять же в редактор локальной групповой политики (gpedit.msc) по следующему пути: «Параметры компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров». Нас интересуют следующие пункты, которые надо включить:

  • Использовать в первую очередь драйвер принтера Easy Print удаленного рабочего стола
  • Перенаправлять только используемый по умолчанию принтер клиента

image

Далее, необходимо очистить наш сервер от лишних драйверов принтеров. Это можно сделать в менеджере роли «Службы печати и документов».
Внимательно удаляйте драйвера! Необходимо оставить в живых такие вещи, как «Remote Desktop Easy Print» и «Microsoft XPS Document Writer». Именно они и отвечают за передачу печати на клиента.

Решения сторонних компаний

Избавиться от проблемы падающего спулера призваны такое ПО как, например, ScrewDrivers (сайт). Оно предоставляет клиент-серверную архитектуру.
Сервер ScrewDrivers — это компонент, который необходимо установить на серверы, на которых планируется использовать печать в терминальном сеансе. Клиент ScrewDrivers должен быть установлен на рабочих станциях. Именно этот компонент позволяет создать на терминальном сервере виртуальные принтеры, которые соответствуют локальным принтерам пользователя.
В целом, напоминает Easy Print, но не бесплатно (впрочем, есть лекарства ;).

1. Есть терминальный сервер Windows Server 2003 (прямое подключение к интернету белый IP)
2. Есть компьютер Windows 7 Pro в удаленном офисе, который подключается к терминалу (подключен через роутер)
3. Есть принтер Samsung SCX-3400

При подключении к терминалу (там стоит общая 1с) локальный принтер определяется, даже документ отправляется на печать, но через секунду пропадает из очереди печати и соответственно ничего не печатается.

Версии драйверов одинаковые, терминальный клиент на компьютере скопирован с сервера.

Пока у самого 2 идеи:
1. сменить принтер
2. поставить win xp на клиента

У какого какие идеи, жду помощи)

Есть подозрение, что это - GDI принтер. Если это действительно так, то, увы, работать из терминала не будет (ни под семеркой, ни под экспей). Последний раз редактировалось dalco; 21.03.2013 в 10:22 . Как распознать GDI, не GDI. Есть еще Canon mf4120 может его попробовать? Как распознать GDI, не GDI. Есть еще Canon mf4120 может его попробовать?

100% способа распознания не скажу.

Правильный принтер имеет полноценные "мозги". Косвенные признаки - не самая дешевая модель, поддержка эмуляции PCLx, наличие модификаций этой модели с сетевой картой, широкая поддержка различных операционок (вплоть до MS-DOS. ). В общем, явная возможность принтера работать автономно - типа печати фоток с непосредственно подключенного к принтеру фотоаппарата/флешки/еще_чего_там

GDI принтер - сущность с урезанными по самое нехочу мозгами. Косвенные признаки - дешевизна, работа исключительно с локальными интерфейсами (USB/LPT), наличие драйверов только под одну-две наиболее ходовых операционки. Сие чудо работает только при условии, что печатающий комп непосредственно связан кабелем с принтером, ибо 95% расчетов и управления таким принтером выполняется этим самым компом.

По идее, можно попробовать сделать проброс USB-порта с семерки на терминальный сервер, но что-то я не помню - поддерживала ли 2003я такую возможность.

Кэнон попробовать можно, одна беда - у них тоже много недопринтеров было. Другое дело, что твоя модель, вроде как, достаточно навороченная и шансы на то, что у нее полноценные "мозги" весьма велики.

GDI принтер или нет - не принципиально. Принципиально это в случае, если тонкий терминальный клиент. А тут полноценная винда.
Скорее всего кривые драйвера.
Попробуйте принтер подключить напрямую к серверу, установить драйвер и попечатать. Потом обратно на клиента вернуть.

ЗЫ бывают "кривые" инсталлеры драйверов, которым обязательно нужно прямое подключение по usb для правильной установки драйвера.

__________________
..Ласка - хитрый зверёк..

вы все ругаете олега
за то что он такой олег
а вот олег вас не ругает
за то что вы такие вы
у принтера модель есть ? может он в принципе с серваком не дружит а считает его локальной машиной если так он по терминалу работать не будет

Текущее время: 11:32 . Часовой пояс GMT +6.
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd. Перевод: zCarot

Сама печатающая головка имеет маркировку gp16b337 (в Гугле пусто)
Немного прошелся тестером по плате, получилась (примерно) следующая распиновка:

Может у вас есть какие-то мысли и идеи как его запустить?
Фото выложу чуть позже.

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Не могу сказать на 100% про вашу "ТермоПечатающуюГоловку", но те, с которыми я сталкивался- это "по сути" - сдвиговый регистр, в который по сигналу "строб" просто записываются "нолики" или "единички", по окончании записи этой "строки пикселей" на ТПГ поступает сигнал "нагрев" соответствующих резисторов, потом ШД перемещает бумагу на "одну строку", а в ТПГ "закачивается" следующая строка "пикселей"..
Вот тут:

кто- то "баловался" с ТПГ от АМС-100..

Я так думаю, что ТПГ, "в основном" мало отличаются друг от друга - можно посмотрет, как реализуются подобные проекты на основе других ТПГ..

Последний раз редактировалось АлександрЛ Ср сен 04, 2019 22:40:27, всего редактировалось 2 раз(а).

JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Может у вас есть какие-то мысли и идеи как его запустить? А можно еще для начала поинтересоваться, в чем смысл всей затеи?
Вот напечатал, допустим, с ардуины "нечто" вместо чека, а "оно" через пару месяцев поблекло и почти пропало, как это часто бывает с теми же чеками. И.

_________________
Делай то, что тебе нравится и ты никогда не будешь работать

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Обычная распечатка данных/текстов (вплоть до фото низкого разрешения).

Кроме прочего термобумага разная бывает - смотрим термопринтеры для этикеток
(или термотрансфер).

Приглашаем всех желающих 25/11/2021 г. принять участие в вебинаре, посвященном антеннам Molex. Готовые к использованию антенны Molex являются компактными, высокопроизводительными и доступны в различных форм-факторах для всех стандартных антенных протоколов и частот. На вебинаре будет проведен обзор готовых решений и перспектив развития продуктовой линейки. Разработчики смогут получить рекомендации по выбору антенны, работе с документацией и поддержкой, заказу образцов.

Один из пинов определен:
16 - термистор (второй контакт идет на GND), только он прозванивается только в одну сторону. Это точно термистор. Проверял на нагрев.
остаются пины:
11 - ?
15+18 - ?
22 - ?
23 - ?

Осталось определить что из них:
DI - данные для регистра (1 - точка, 0 - нет )
CLK - строб для них.
LAT - защёлка для регистра
STB - длительность импульса нагрева для нагревателей. (От неё зависит яркость отпечатка).

Можно как-то определить? Или только экспериментальным путем?

Добавлено after 18 minutes 12 seconds:
В саму Термо Печатающую Головку Шлейф заходит немного с другой распиновкой:
1 - VDD
2 - VDD
3 - . Пин 23
4 - . Пин 22
5 - GND
6 - GND
7 - Тр.Шм. Пин 18
8 - Тр.Шм. Пин 18
9 - Тр.Шм. Пин 18
10 - +3.3
11 - +3.3
12 - Термистор
13 - Тр.Шм. Пин 15
14 - Тр.Шм. Пин 15
15 - Тр.Шм. Пин 15
16 - GND
17 - GND
18 - . Пин 11
19 - NC
20 - VDD
21 - VDD

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Навигационные модули позволяют существенно сократить время разработки оборудования. На вебинаре 17 ноября вы сможете познакомиться с новыми семействами Teseo-LIV3x, Teseo-VIC3x и Teseo-LIV4F. Вы узнаете, насколько просто добавить функцию определения местоположения с повышенной точностью благодаря использованию двухдиапазонного приемника и функции навигации по сигналам от MEMS-датчиков. Поработаем в программе Teseo Suite и рассмотрим результаты полевого тестирования.

ЛСД и то интересней применить, в инете пишут "LCD Module PE12864 / driver ST7565S"
и примеры программ для него есть.


Разбираю терминал Ingenico I5100. Ролик есть, установлен на крышке держателя бумаги (часть корпуса). Все детали на месте.
Я в сети много чего пересмотрел. Нашел несколько распиновок, но все они были от одной и той же печатающей головки и тоже на 28 выводов.

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Попробуй в местных ЦСО по обслуживанию кассовых аппаратов поспрашать - может у кого найдутся схемки.

Попробовал модифицировать скетч, но стало только хуже, прикрепляю скетч

вот есть у мя штук 5 касовых принтоф ..ума не хватает придумать ну нахуя они мне нужны и чо с ними делать. была мысль отдат мчстудням на пыты в Лабораторию ТС
да далеко он

_________________
Мудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет. и МЧС опаздает
и таки теперь Дураки и Толерасты умирают по пятницам!

Я таки "многофайловики" под адуринкой малость удавил.
Теперь можно будет и поиграться в свое удовольствие - может таки и до принтеров доберусь, чуток поотдохнувши.

В общем, промучился я с весь день. Немного поигравшись с временем прожига выяснил что это не расслоение, а именно дублирование. Печатающая головка похоже неравномерно все пропечатывает, из-за чего копии казались слегка разными (и я подумал что изображение расслаивается). Дублируется изображение из-за неправильно заданных границ печати. Дублирование убрал. В строке for(int i=0; i<16; ++i) 16 заменил на 48.

Настроил печать, теперь по высоте изображение получается нормальным. Печать ускорилась в 2 раза, но все равно очень медленно печатает: более 200. мс на каждую строку (длинной 384 точек). Вот код:

Но все равно мне очень сложно разобраться в том как происходит сам процесс вывода данных (прожига). К тому же код нужно оптимизировать. Скорость печати просто ужасная! Я пробовал оптимизировать Вывод данных, но не вышло. Стоит немного что-то изменить в функции, как все перестает вообще печатать. То есть выходит чистая бумага. Из минусов кода - удержание в памяти буфера печати. Который занимает абсолютно всю ОЗУ Atmega328, что тоже не фонтан.
В качестве контроллера возьму плату stm32f103c8t6, это решит проблему с памятью и недостатком пинов, но на скорость печати не повлияет. Остается главный вопрос: как оптимизировать скорость печати??

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Вывод данных подобен выводу в растровой развертке.
Засылаем строку из точек. Даем импульс нагрева. Смотрим температуру головки.
Выполняем сдвиг ленты.
Затем все повторяем.
Одно замечание.
Головка поделена на несколько секторов со своими сдвиговыми регистрами.
Следовательно или те регистры включены последовательно или у каждого еще свой вывод CS.
Если одновременно все получат данные - будем иметь столько копий, сколько тех регистров.

Буфер изображения может быть внешний (включая микроСД), расширение количества выводов - используем соответствующие микросхемы из логики-рассыпухи.

Все регистры включены последовательно, всего 12 регистров по 32 точки. Дерганьем вывода LATCH определяется сколько регистров будут прожигаться.
Ускорил вывод еще больше: убрал все паузы, и вместо digitalWrite(); прописал прямую запись в порт: PORTB &=

(1<<1);
Из минусов: сейчас нужно каждый регистр прожигать отдельно. То есть:
закинули 32 точки - прожиг - пауза на прожиг 5 мс - следующий регистр. - сдвиг ленты (тоже пауза).
В такой последовательности на печать строки в 384 точки (все 12 регистров) уходит ну очень много времени. Даже с удалением всех пауз и ускорением записи.
Еще не понятно зачем 8 раз подряд передавать одну и ту же точку:

for (int i = 0; i < 48; ++i)
for (int j = 0; j < 8; ++j)
uint8_t pinValue = LOW;
if (i/4==p)
<
..читаем бит
>
..записываем бит
>
>

Можете мне объяснить как это работает?

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

может поискать листинги исходникоф для касовых дел? там вроде очень быстый код написан правда по семью мк51совместимых. но печатае влет даже новые чеки на стакрых касах после апгрейда прошивки где графическая херня идентификатор идут на чеке

_________________
Мудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет. и МЧС опаздает
и таки теперь Дураки и Толерасты умирают по пятницам!

Исходники вряд-ли найти удастся.
А вот типовую схему и кратенькое описание от мини500-02 или ешшо чаво. вполне.
Но там принтера другие. хотя.
Разве что с шаговым движком дополнительно разбираться.

Ниже прикрепляю весь код (скетч).

Столкнулся еще с одной неприятной вещью. Нагар на печатающей головке. Он образуется сразу же после первой печати, и с каждой последующей печатью становится только хуже. Нагар легко убрать. Но все же он образуется потому что лента во время прожига стоит на месте и прилипает к головке. Кстати, время прожига на это не влияет. "Пригорание" происходит даже на самых блеклых отпечатках. Если делать печать на движущейся ленте, то такого не происходит (проверял).
НО! Текущий алгоритм не подходит для печати "на лету". Я пробовал. Происходит расслоение изображения. Каждые 32 точки происходит 1/2 шага мотора (1 прожиг), таких сегментов 12, 12 полу-шагов мотора, соответствует 3-м строкам. На одной линии (строке) это не заметно, но вот следующая строка (линия) отстоит от первой в 3 раза дальше чем должна быть. Изображение пропечатывается хорошо, но "полосатое" и в 3 раза выше чем должно быть. В общем, данный алгоритм не подходит. Если бы можно было прожигать одновременно всю линию, или несколько сегментов то проблем бы не было.
Может у кого-то есть идеи как сделать одновременный прожиг? То есть как сделать запись сразу во все регистры, а не в 1 из 12?

P.S. . на заметку: скорость печати на прямую зависит от напряжения питания головки. Если напряжение питания 7-8 вольт то на прожиг одного сегмента нужно примерно 5 мс. Если напряжение 12 вольт то 1 мс вполне достаточно. Как результат - увеличение скорости в 2-3 раза.

Спасибо! Заработало! Немного переделал, теперь летает! На печать всего буфера (384х134 точек) уходит в среднем 600 мс. При чем скорость печати зависит от количества точек в линии: меньше точек - меньше время на прожиг - быстрее печать. А если точек в линии нет, то вообще пропускается без задержки на прожиг!
Три строчки "среднего" шрифта печатаются "примерно" за 500 мс.
Картинка панды печатается дольше, до 1 сек. Из-за того что там много сплошных участков.


Я использовал не линейную зависимость длительности прожига от количества пикселей в линии. График функции выглядит как парабола. Формула выглядит так:

где:
FireH - максимальное время прожига линий с наибольшим заполнением. Измеряется в мс. У меня установлено значение 12 мс
FireL - минимальное время прожига, если точек очень мало (на пример одна. ) Измеряется в мс. У меня установлено 2 мс
StrobeEn - количество пикселей в строке
0.17667 - коэффициент: 100/566, как высчитал 566, уже не вспомню. расчеты не сохранил. Но он на прямую зависит от количества точек на головке (384).
_Standby() - функция отключает питание шаговика, чтобы не перегрелся.

Функция принимает не линейное значение от 2 до 12 (FireH и FireL)

Конечно, можно было так не заморачиваться, но я хотел добиться одинаковой "яркости" линий с разным заполнением, и при этом не жечь на всю катушку. В общем пытался поймать золотую середину между пережиганием пикселей (когда точки расплываются и сливаются от нагрева) и пропусками от очень слабого нагрева.
Остальной код не менял, но в будущем нужно будет переписать большинство функций.
Завтра скину фотки и видео работы.

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Вот результат:

_________________
Сделать своими руками всегда интересней чем просто купить и пользоваться

Читайте также: