При работе с торговым оборудованием в среде 1С программисты часто сталкиваются с ситуацией, когда стандартная Библиотека подключаемого оборудования (БПО) успешно справляется с печатью графической информации (штрихкодов, текста, логотипов), но оказывается бессильна перед специфическими задачами, такими как программирование (кодирование) RFID-меток. Рассмотрим подробнее, почему так происходит и как «подружить» 1С с принтером Zebra ZD500R для полноценной работы с радиочастотными метками.
Проанализируем архитектуру работы БПО. В большинстве случаев драйверы, входящие в состав БПО, работают по принципу формирования графического образа этикетки. 1С подготавливает картинку, которая затем отправляется на принтер. Однако RFID-чип — это не графический объект, а запоминающее устройство. Для записи данных в него требуются текстовые команды управления, передаваемые непосредственно контроллеру принтера.
Выясним причину сложностей: стандартный механизм печати через Windows-драйвер часто перехватывает поток данных и преобразует его в растр, «съедая» управляющие команды. Поэтому для реализации кодирования нам придется выйти за рамки стандартных методов БПО и обратиться к низкоуровневому управлению принтером на языке ZPL (Zebra Programming Language).
Самый надежный и гибкий способ — это формирование текстовой строки на языке ZPL и ее прямая отправка на принтер. Разберем по шагам структуру такой команды. Для записи данных в формате EPC (основной стандарт для RFID) используется команда ^RF.
Рассмотрим пример кода этикетки, которая одновременно печатает текст и записывает данные в RFID-метку:
// Пример формирования ZPL-кода для кодирования и печати
ТекстZPL = "^XA" + // Начало этикетки
"^FO50,50^A0N,30,30^FDТекст на этикетке^FS" + // Печать обычного текста
"^RS8,,,1" + // Настройка параметров RFID (номер попытки, позиция)
"^RFW,H,,,^FD" + ДанныеRFID + "^FS" + // Сама команда записи в HEX-формате
"^XZ"; // Конец этикетки
В данном примере параметр ^RFW отвечает за операцию записи (Write). Важно помнить, что данные для RFID-метки обычно передаются в шестнадцатеричном виде (HEX). Если мы работаем с маркировкой («Честный ЗНАК»), необходимо заранее преобразовать код маркировки в соответствующий формат EPC Gen2.
Посмотрим на ситуацию со стороны передачи данных. Раз мы решили использовать ZPL, нам нужно доставить эту строку на принтер так, чтобы драйвер Windows не пытался ее «распечатать как текст». Существует несколько проверенных способов:
WritePrinter, и принтер, получая знакомые команды ^XA, понимает, что нужно не рисовать буквы, а выполнять инструкции.9100 и отправляем строку ZPL напрямую по IP-адресу принтера. Рассмотрим, как это может выглядеть в коде:
// Пример отправки через сокет (упрощенно)
IPАдрес = "192.168.1.100";
Порт = 9100;
Соединение = Новый TCPСоединение(IPАдрес, Порт);
ДанныеДляОтправки = Новый ЗаписьДанных(Соединение.ОткрытьПотокЗаписи());
ДанныеДляОтправки.ЗаписатьСтроку(ТекстZPL);
ДанныеДляОтправки.Закрыть();
Если разработка собственного механизма на ZPL кажется слишком трудоемкой, проанализируем рынок готовых решений. Существуют специализированные драйверы (например, от компаний «Клеверенс» или «DataMobile»), которые интегрируются в 1С и расширяют возможности БПО. Они содержат в себе готовые методы для работы с RFID-антенной принтера.
Также популярным решением является использование ПО BarTender. В этом случае 1С выступает лишь источником данных (например, выгружает CSV-файл), а BarTender, обладая профессиональными драйверами с поддержкой RFID, берет на себя всю логику кодирования и управления физическими параметрами чипа.
Просто отправить команду на запись недостаточно. При работе с RFID на модели ZD500R критически важна калибровка. Посмотрим на этот процесс подробнее:
RFID Calibration при каждой смене рулона. Из 1С это можно инициировать командой ~JR.Таким образом, несмотря на отсутствие прямой «галочки» в настройках БПО, задача кодирования RFID-меток из 1С полностью решаема. Оптимальным путем для программиста будет использование прямых ZPL-команд в сочетании с отправкой данных по протоколу TCP/IP или через Raw-печать Windows. Это обеспечит максимальную скорость работы и независимость от версий драйверов БПО.