Как лучше напечатать спецсимволы на термопринтерах Godex?
По вводным: есть несколько термопринтеров Godex, на них печатаются коды для "Честного знака".
По вводным: стандарт Datamatrix кода для "Честного знака" (точнее это GS1 Datamatrix) предусматривает первый символ и разделение некоторых полей (91, 92, 93) по символу. Уже давно где-то в примерах мы нашли, что для печати в Datamatrix на EZPL нужно поставить последовательность "~1" в команду XRB (печать Datamatrix), программа GoLabel при формировании этикетки с Datamatrix кодом (если подставляешь символ GS) выводит его в EZPL в виде "", но если отправить это на принтер - то так и напечатается, то же и с
Сейчас ситуация такая: печать ведется прямая, на языке EZPL, по сети на порт 9100. Документацию читали - пока не дало результата.
Сейчас ситуация такая: единстыенное, что нашли - при печати штрихкода Code 128 с нужно подставить в данные комады BQ - "&G", но это не работает для команды XRB (печать Datamatrix)
Нужно понять: вопрос - как в начало Datamatrix вставить при печати на EZPL через команду XRB?
Сейчас ситуация такая: p.S. В большинстве случаев это не на что не влияет, так как сканер при сканировании Datamatrix удаляет как признак начала, но сохраняет как разделитель. Но есть пара случаев, когда это не проходит:
Сейчас ситуация такая: - какая то экзотическая модель кассового аппарата (мы пока не определили ее)
Сейчас ситуация такая: - программа "ЧЗ бизнес", которая четко говорит, что структура Datamatrix не соотвествует стандарту (причем обычная программа "Честный знак" нормально коды без переваривает.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для “Честного знака” важен не просто DataMatrix, а корректная передача управляющего символа GS/FNC1. В языках принтеров это часто реализуется специальной escape-последовательностью, но у разных моделей Godex и разных команд EZPL она может отличаться. Поэтому вариант, который работает в Code128 через
&G, не обязан работать вXRBдля DataMatrix.Первое, что нужно проверить: какой именно символ ожидает команда
XRBдля GS1 DataMatrix. В некоторых языках печати используется~1как FNC1, но это может быть только режим генератора/редактора, а не сырая команда принтера.Практический путь:
Важно проверять не “как выглядит квадрат”, а что реально считывает 2D-сканер. Для GS1 DataMatrix сканер должен видеть разделители групп, а не буквальный текст
~1или пустую строку.Если нужно отправить управляющий символ как байт, может потребоваться не строка
~1, а ASCII GS0x1D. В коде это часто выглядит так:$gs = chr(29); $data = '010460...' . $gs . '91...' . $gs . '92...';
Но будет ли
XRBпринимать сырой0x1D, зависит от прошивки/команды. Иногда команда DataMatrix сама требует escape, а иногда принимает binary data.Проверьте также кодировку отправки. Если Вы формируете строку в UTF-8, а принтер ждёт однобайтовую кодировку или управляющие последовательности, символы могут уходить не так. На порт 9100 лучше отправлять байтовый буфер, а не строку после лишних преобразований.
Итог: снимите эталонный EZPL из GoLabel, сравните raw-команду и проверьте вариант с ASCII GS
0x1D. Для маркировки ориентируйтесь по результату сканирования GS1, а не по визуальному виду кода.