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.Предназначение веб-интерфейса:
- настройка параметров;
- просмотр состояния устройства;
- обновление ПО.
Веб-интерфейс
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 , где Вы сможете быстро получить ответ на интересующий вопрос;