Esc pos команды принтера. Что спрятано внутри онлайн-касс: разработка фискального регистратора. Примерные возможности принтеров

ESC * является одной из нескольких команд «бит изображения» в ESC/POS. Он принимает данные «формат столбца», который может представлять только одну строку из 8 или 24 пикселей. Таким образом, здесь есть два хороших варианта.

Печать нескольких линий с использованием ESC *

Это звучит, как вы можете напечатать одну строку, поэтому я буду считать, что сам формат данных не является проблемой.

Вы можете распечатать несколько строк простым повторением команды для печати дополнительных строк, разделенных разрывами строк \n . Это требует измельчения изображения и заполнения его пробелом, чтобы он был кратным 8 или 24 пикселям в высоту (опять же, из-за формата).

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

Я использую ESC 3 0x10 для 16-канальных линий (байты 0x1b 0x33 0x10) и ESC 2 (байты 0x1b 0x32) для сброса.

Этот способ печати имеет отличную совместимость со старыми принтерами, но вы можете получить некоторые тонкие горизонтальные линии в выходном сигнале.

печати все изображение с GS v 0

Этот бит команда изображение принимает различные данные «растрового формата». Я использую тот факт, что blob в этом формате идентичен двоичным данным в широко распространенном формате растрового изображения PBM (в частности, двоичные данные в файлах с заголовком P4).

Высота изображения будет ограничена в зависимости от объема вашего буфера печати, но может достигать 65535 пикселей. Из-за представления ширина должна быть делящейся на 8.

Мало кто задумывается, делая покупки в магазине, как работает техника кассира. На самом деле это хорошо отлаженный механизм не только с технической точки зрения, но и с точки зрения законодательства. Все знают, что главное получить чек, а вот почему чек является фискальным документом, подтверждающим покупку - в основном знают только сами предприниматели.

В этой статье мы поделимся опытом разработки кассового аппарата и расскажем, как там всё устроено изнутри.



Старинный кассовый аппарат

1. Система: железо + софт у кассира

Весь программно-аппаратный комплекс, который установлен на рабочем месте кассира, может называться POS-системой или POS-терминалом, от английского Point of sale - место продажи.

Рассмотрим, как работает POS-система. Так как принципиальное отличие системы от терминала - это расположение фискальной памяти (ФП) или фискального накопителя (ФН): у POS-системы она встроена в печатающее устройство, а у POS-терминала находится в компьютерном блоке.


Типовой кассовый аппарат. POS-система российской компании «ШТРИХ-М»

POS-система – программно-аппаратный комплекс, который работает на базе фискального регистратора. Обычно состоит из POS-компьютера, монитора и клавиатуры, чекового принтера, фискального регистратора, дисплея покупателя, денежного ящика и считывателя банковских карт. Типичный набор кассовых функций: учет и отпуск товара, прием и выдача денег, аннулирование покупки.

Самая интересная часть POS-системы - фискальный регистратор - это сердце системы и один из классов контрольно-кассовых машин (ККМ).

В роли фискального регистратора выступает чековый принтер с встроенной фискальной памятью. Он получает информацию по каналу связи, обрабатывает её и выводит на печать. Данные о кассовых операциях могут храниться в фискальной памяти сколь угодно долго, пока не понадобится их обнулить.

Для прямой передачи данных фискального регистратора в налоговую службу используется сервер оператора фискальных данных - ОФД - специального юрлица, которое отвечает за прием, обработку, хранение и передачу фискальных данных в налоговую службу.

В прошлом году российские предприниматели активно обсуждали переход на онлайн-кассы и отправку чеков в налоговую через ОФД в связи с принятием закона 54-ФЗ «О применении контрольно-кассовой техники».


Роль ОФД. Схема из статьи о 54-ФЗ и переходе на онлайн-кассы

ФНС - это Федеральная налоговая служба Российской Федерации. В Казахстане эту функцию выполняет Комитет государственных доходов Министерства финансов. А в Беларуси – Министерство по налогам и сборам.

В РФ работает несколько ОФД, а в Казахстане – всего один, АО «Казахтелеком».

2. Законодательство: мировой онлайн-контроль касс

Онлайн-контроль за работой розничной торговли уже работает во многих странах: Южная Корея (2005 г.), Швеция (2008 г.), Канада (2010 г.), Польша (2011 г.), Хорватия (2013 г.). В 2015 году такой подход начал внедряться в Казахстане. А в Беларуси крайний срок подключения касс к системе дистанционного контроля выручки перенесли на 1 июля 2018 года (такой же срок намечен в России).

Применение онлайн-касс в Казахстане регулируется главой 90 Налогового кодекса . С 2015 года передачу чеков в налоговую по интернету начали продавцы топлива и алкоголя. На втором этапе – с 2016 года – к системе подключили тех, кто занимается оптовой торговлей различными материалами и оборудованием; розничной продажей мебели, ПО и электроники; владельцев гостиниц, ресторанов, парикмахерских и кинотеатров. Предусмотрен третий этап проекта.

Мы ссылаемся на законы не просто так, в них описаны обязательные технические требования к программно-аппаратным системам для сбора и отправки данных в налоговую, которые ложатся в основу тех. задания для инженеров-разработчиков. Так, например, в приказе министра финансов Республики Казахстан был опубликован список требований к контрольно-кассовой машине для передачи сведений о денежных расчетах, который нам очень пригодился для разработки фискального регистратора.

3. Устройство и бизнес-логика фискального регистратора

Наше базовое устройство для разработки – термальный принтер для печати чеков. Сборочная система – Buildroot. Программирование - на Qt.

В рамках проекта требовалось разработать:

1) техническое задание;
2) протокол обмена с POS-компьютером, условно назовем его протокол POS-C;
3) приложение-демон, управляющее устройством:

  • модуль обмена данными с сервером ОФД по протоколу ККТ (контрольно-кассовая техника);
  • модуль обмена данными с POS-компьютером по протоколу POS-C;
  • модуль управления печатью;
  • модуль управления интерфейсами связи;
  • модуль взаимодействия с базой данных;
  • веб-сервер.

1) Модуль обмена данными с сервером ОФД

Обмен устройства с сервером осуществляется по TCP/IP-протоколу. При этом взаимодействии устройство является клиентом, а ОФД – сервером. В качестве основы для кодирования и декодирования информации, передаваемой по протоколу ККТ, используется Protocol Buffers.

Предназначение веб-интерфейса:

  1. настройка параметров;
  2. просмотр состояния устройства;
  3. обновление ПО.


Веб-интерфейс

4. Заключение

На базе перечисленных технологий мы разработали устройство с массой функций и настройками через веб-интерфейс, поддержкой различных протоколов обмена с POS-компьютером и возможностью обновления ПО.

И теперь кажется, что инженерная команда Promwad уже никогда не сможет просто так прийти в магазин и что-то купить, не думая обо всех этих внутренностях онлайн-касс, протоколах для передачи данных, требованиях законодательства и выводе всей этой кухни на печать:
- Возьмите чек, пожалуйста!
- Спасибо, не надо! :-)

P.S. И напоследок минутка юмора: британские уфологи из команды ArtAlienTV обнаружили на снимках марсохода Curiosity предмет, напоминающий старый кассовый аппарат.

Основа протокола

Стандартная задача любого чекового принтера - это печать текста. Дополнительно можно создать индивидуальные параметры шрифта, размера, плотности и других параметров устройства. Вся информация (полезная и управляющая) передается в виде текста, принтер "улавливает" команды управления, отделяет их, и печатает только текстовую часть. Таким образом, управление содержится в самом тексте. Для отделения служебной от информационной части используются специальные символы, которые не печатаются и не могут вводиться с клавиатуры компьютера. Пример такого символа - “ESC” или символ десятичного кода 27. Отправка данного символа на принтер означает, что после него идет краткая команда управления печати. Описание команд ESC/POS протокола обычно идет вместе с устройством и является частью документации принтера.

Примерные возможности принтеров

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

  • Увеличение и уменьшение размера шрифта;
  • Активация инверсного шрифта (белые буквы на черном фоне)
  • Печать штрих-кода;
  • Активация звукового сигнала принтера;
  • Подача электрического сигнала для открытия денежного ящика;
  • Активация ножа на принтере для отрезания бумаги.

В зависимости от модели и возможностей принтера, указанные действия активируются с помощью ESC/POS команд. При этом принтер следит за каждой командой и выполняет ее незамедлительно.

Когда можно использовать ESC/POS команды

Использование ESC/POS команд возможно всегда, когда принтер их поддерживает (почти все принтеры) и когда работа осуществляется напрямую с принтером, без использования промежуточного Windows драйвера. Microinvest Склад Pro Light управляет устройством напрямую, отправляя необходимые команды на принтер. Они работают безупречно и при использовании USB принтера без промежуточного драйвера и USB к COM эмуляции.

Когда невозможно использовать ESC/POS команды

Существуют 3 случая, когда использование ESC/POS команд невозможно в принципе: 1. Фискальные регистраторы. Фискальные принтеры используют сложный протокол коммуникации, который абсолютно не совместим с ESC/POS протоколом. В результате чего принтер никак не реагирует на ESC/POS команды; 2. При управлении принтером через установленный Windows драйвер. В таком случае драйвер сам выполняет ESC/POS команды, и категорично отбрасывает такие команды, отправляемые программным обеспечением. В результате чего нет никакого воздействия на принтер; 3. Когда используются промежуточные звенья в печати, например, сервер печати или другие аналогичные технологии. В таком случае ESC/POS команды фильтруются, и теряются во время коммуникации, даже не доходя до принтера. При построении системы необходимо правильно планировать управление принтерами. Мы рекомендуем, чтобы каждый принтер был привязан напрямую к управляющему компьютеру, и работал непосредственно по протоколу, без драйвера.

Кодирование команд

ESC/POS команды кодируются через один или несколько специальных символов и параметров команды. Все это описывается в соответствующем разделе (Header, Details, Totals или Footer) в настройках принтеров в Microinvest Склад Pro Light или Microinvest Device Manager. Основными командами управления являются:

Их действия описаны в документации принтеров и стандартизировано ESC/POS протоколом.

Популярные команды

Примерный список самых популярных команд ESC/POS протокола:

  • ! - Активирует шрифт A;
  • ! - Активирует шрифт B;
  • ! - Шрифт с двойной высотой;
  • ! - Шрифт с двойной шириной;
  • ! - Шрифт А с нормальной высотой;
  • Е - Включает полужирный шрифт;
  • Е - Выключает полужирный шрифт;
  • B - Включает инверсную печать;
  • B - Выключает инверсную печать;
  • i – Активирует нож на принтере.

Несмотря на то, что перечисленные команды стандартизированы согласно выдержкам из ESC/POS протоколов разных принтеров, но у каждого из них есть своя технология исполнения команд и результаты могут различаться, в зависимости от производителя или модели. Для достижения необходимого эффекта нужно протестировать и подобрать команды, которые выполняются принтерами.

Другая информация

ESC/POS - очень мощная технология управления принтерами. Через данный протокол можно получить превосходные результаты на практически каждом современном принтере. К сожалению, не существует 100% совместимости между разными устройствами, поэтому каждую команду нужно проверить на реальном конкретном устройстве. Часть команд зависят от времени исполнения. Так, например, активация ножа может опередить печать с содержанием и отрезать чек в неподходящем месте. Поэтому использование ESC/POS команд требует тестирования в реальных условиях и внимательной настройки, в зависимости от модели принтера.

Некоторые полезные ресурсы

  • Документация по всем продуктам;
  • Форум технической поддержки Microinvest , где Вы сможете быстро получить ответ на интересующий вопрос;
В продолжение темы:
Asus

Чтобы строки маркированного списка как-то выделить от основного текста, можно сделать так, чтобы цвет маркеров в списке отличался от цвета текста.По умолчанию стоит черная...

Новые статьи
/
Популярные