Работа с торговым оборудованием, таким как весы CAS серии LP-15, часто требует настройки визуальных элементов чека или этикетки. Одной из специфических задач является передача пользовательского логотипа (товарного знака) в память устройства. В этой статье мы подробно разберем, как сформировать матрицу точек, преобразовать её в необходимый формат и передать в весы через метод SendLogoImage (или ПередатьТоварнЗнак в русской интерпретации драйвера).
Прежде чем приступать к написанию кода или рисованию, проанализируем входные данные, которые требует драйвер весов. Согласно документации, метод принимает строку байтов в 16-ричной системе записи (Hex). Всего должно быть передано 512 байтов, что соответствует 1024 символам в строке. Выясним, откуда берутся эти цифры:
Рассмотрим процесс создания изображения «вручную». Представим наш логотип как таблицу, где 0 — это белое пространство, а 1 — черная точка. Разберем небольшой пример фрагмента верхней части изображения (первые 16 пикселей первой строки):
Предположим, мы хотим нарисовать простую рамку. Начало первой строки может выглядеть так:
11111111 00000000...
Проанализируем этот фрагмент. Первые 8 бит 11111111 — это первый байт. В десятичной системе это число 255, в шестнадцатеричной — FF. Вторые 8 бит 00000000 — это второй байт, в Hex это 00. Таким образом, начало нашей строки для передачи в метод будет выглядеть как FF00....
Для формирования полной строки нам необходимо пройтись по всем 64 строкам нашего изображения. Рассмотрим алгоритм перевода группы из 8 пикселей в Hex-пару символов:
1. Берем 8 горизонтальных точек.
2. Формируем из них двоичное число. Важно помнить, что в большинстве систем MSB (Most Significant Bit — старший бит) соответствует самому левому пикселю.
3. Переводим двоичное число в шестнадцатеричное.
4. Если результат состоит из одного символа (например, F), обязательно добавляем ведущий ноль (0F), так как драйвер ожидает строго два символа на байт.
Пример перевода сложной комбинации:
Допустим, группа точек выглядит так: 10101011
AB.Рисовать 4096 точек (64x64) вручную в текстовом редакторе крайне неудобно. Проанализируем, как можно автоматизировать этот процесс. Если у вас уже есть готовый файл (например, BMP 64x64), можно написать небольшую обработку, которая будет считывать цвета пикселей.
Посмотрим на пример логики перебора пикселей (псевдокод для общего понимания алгоритма):
// Инициализируем итоговую строку
ИтоговаяСтрока = "";
Для НомерСтроки = 0 По 63 Цикл
Для ГруппаБайт = 0 По 7 Цикл
ТекущийБайтВЦелое = 0;
Для НомерБита = 0 По 7 Цикл
// Получаем цвет точки (0 или 1)
Точка = ПолучитьЗначениеПикселя(ГруппаБайт * 8 + НомерБита, НомерСтроки);
Если Точка = 1 Тогда
// Устанавливаем соответствующий бит
ТекущийБайтВЦелое = ТекущийБайтВЦелое + Pow(2, 7 - НомерБита);
КонецЕсли;
КонецЦикла;
// Конвертируем число в Hex и добавляем в строку
ИтоговаяСтрока = ИтоговаяСтрока + ЧислоВHex(ТекущийБайтВЦелое, 2);
КонецЦикла;
КонецЦикла;
// Передаем сформированную строку в весы
КодОшибки = Весы.SendLogoImage(ИтоговаяСтрока);
При реализации передачи логотипа следует учитывать несколько критически важных моментов, которые часто упускаются из виду:
1 — это черная точка, в других — 0. Если после загрузки вы видите «негатив» своего логотипа, просто инвертируйте биты при формировании байта.SendLogoImage только загружает картинку в память весов под определенным индексом. Чтобы логотип фактически напечатался, он должен быть добавлен в дизайн этикетки через программу CL-Works или Label Editor. В дизайне должен присутствовать объект «Логотип».В среде 1С v7.7 работа с графикой напрямую ограничена. Поэтому наиболее эффективным методом будет подготовка Hex-строки заранее во внешнем редакторе и сохранение её в константу или текстовый файл. Если же требуется динамическая смена логотипов, целесообразно использовать внешние компоненты для работы с изображениями (например, через COM-объекты GDI+), чтобы программно анализировать пиксели файла и формировать строку 1024 символа «на лету».
Разберем пример того, как выглядит готовая строка для полностью черного квадрата 64x64. Это будет последовательность из 1024 символов F. Для полностью белого (пустого) изображения — последовательность из 1024 нулей.
Подведем итог: формирование матрицы — это задача по упаковке 4096 бит информации в 512 байт, где каждые 8 горизонтальных пикселей упаковываются в один байт, а затем записываются в шестнадцатеричном виде в одну длинную строку. Следуя этой логике, вы сможете передать любое монохромное изображение на весы CAS.