Как создать матрицу точек для формирования изображения и передать логотип в весы CAS LP-15

Программист 1С v7.7 Торговля и дистрибуция
← На главную

Работа с торговым оборудованием, таким как весы CAS серии LP-15, часто требует настройки визуальных элементов чека или этикетки. Одной из специфических задач является передача пользовательского логотипа (товарного знака) в память устройства. В этой статье мы подробно разберем, как сформировать матрицу точек, преобразовать её в необходимый формат и передать в весы через метод SendLogoImage (или ПередатьТоварнЗнак в русской интерпретации драйвера).

Анализ технических требований к изображению

Прежде чем приступать к написанию кода или рисованию, проанализируем входные данные, которые требует драйвер весов. Согласно документации, метод принимает строку байтов в 16-ричной системе записи (Hex). Всего должно быть передано 512 байтов, что соответствует 1024 символам в строке. Выясним, откуда берутся эти цифры:

  1. Разрешение логотипа: Весы CAS LP-15 работают с матрицей 64 на 64 пикселя.
  2. Глубина цвета: Изображение строго монохромное (1 бит на пиксель). Точка либо есть (черный цвет), либо её нет (белый цвет).
  3. Расчет объема данных: Если ширина составляет 64 точки, а в одном байте 8 бит, то одна горизонтальная строка изображения занимает 64 / 8 = 8 байт.
  4. Общий объем: 8 байт в строке умножаем на 64 строки и получаем ровно 512 байт.
  5. Hex-представление: Поскольку каждый байт записывается двумя шестнадцатеричными символами (например, 255 = FF), итоговая строка получается длиной 512 * 2 = 1024 символа.

Шаг 1: Формирование бинарной матрицы

Рассмотрим процесс создания изображения «вручную». Представим наш логотип как таблицу, где 0 — это белое пространство, а 1 — черная точка. Разберем небольшой пример фрагмента верхней части изображения (первые 16 пикселей первой строки):

Предположим, мы хотим нарисовать простую рамку. Начало первой строки может выглядеть так:

11111111 00000000...

Проанализируем этот фрагмент. Первые 8 бит 11111111 — это первый байт. В десятичной системе это число 255, в шестнадцатеричной — FF. Вторые 8 бит 00000000 — это второй байт, в Hex это 00. Таким образом, начало нашей строки для передачи в метод будет выглядеть как FF00....

Шаг 2: Перевод из битов в байты и шестнадцатеричный код

Для формирования полной строки нам необходимо пройтись по всем 64 строкам нашего изображения. Рассмотрим алгоритм перевода группы из 8 пикселей в Hex-пару символов:

1. Берем 8 горизонтальных точек.
2. Формируем из них двоичное число. Важно помнить, что в большинстве систем MSB (Most Significant Bit — старший бит) соответствует самому левому пикселю.
3. Переводим двоичное число в шестнадцатеричное.
4. Если результат состоит из одного символа (например, F), обязательно добавляем ведущий ноль (0F), так как драйвер ожидает строго два символа на байт.

Пример перевода сложной комбинации:

Допустим, группа точек выглядит так: 10101011

Шаг 3: Автоматизация процесса в 1С

Рисовать 4096 точек (64x64) вручную в текстовом редакторе крайне неудобно. Проанализируем, как можно автоматизировать этот процесс. Если у вас уже есть готовый файл (например, BMP 64x64), можно написать небольшую обработку, которая будет считывать цвета пикселей.

Посмотрим на пример логики перебора пикселей (псевдокод для общего понимания алгоритма):


// Инициализируем итоговую строку
ИтоговаяСтрока = "";

Для НомерСтроки = 0 По 63 Цикл
    Для ГруппаБайт = 0 По 7 Цикл
        ТекущийБайтВЦелое = 0;
        Для НомерБита = 0 По 7 Цикл
            // Получаем цвет точки (0 или 1)
            Точка = ПолучитьЗначениеПикселя(ГруппаБайт * 8 + НомерБита, НомерСтроки);
            
            Если Точка = 1 Тогда
                // Устанавливаем соответствующий бит
                ТекущийБайтВЦелое = ТекущийБайтВЦелое + Pow(2, 7 - НомерБита);
            КонецЕсли;
        КонецЦикла;
        
        // Конвертируем число в Hex и добавляем в строку
        ИтоговаяСтрока = ИтоговаяСтрока + ЧислоВHex(ТекущийБайтВЦелое, 2);
    КонецЦикла;
КонецЦикла;

// Передаем сформированную строку в весы
КодОшибки = Весы.SendLogoImage(ИтоговаяСтрока);

Важные нюансы при работе с весами LP-15

При реализации передачи логотипа следует учитывать несколько критически важных моментов, которые часто упускаются из виду:

  1. Инверсия цвета: В разных версиях прошивок весов CAS логика может отличаться. В одних случаях 1 — это черная точка, в других — 0. Если после загрузки вы видите «негатив» своего логотипа, просто инвертируйте биты при формировании байта.
  2. Плотность печати: Не рекомендуется создавать логотипы с большими областями сплошного черного цвета. Это создает избыточную нагрузку на термоголовку весов, что может привести к её перегреву или быстрому износу. Старайтесь использовать контурные изображения.
  3. Позиционирование на этикетке: Метод SendLogoImage только загружает картинку в память весов под определенным индексом. Чтобы логотип фактически напечатался, он должен быть добавлен в дизайн этикетки через программу CL-Works или Label Editor. В дизайне должен присутствовать объект «Логотип».
  4. Специализированное ПО: Чтобы упростить задачу, можно воспользоваться утилитой CAS Logo Editor. Она позволяет открыть стандартный BMP файл и сохранить его сразу в текстовом формате с готовой Hex-строкой, которую останется только скопировать в вашу обработку 1С.

Использование внешних компонент

В среде 1С v7.7 работа с графикой напрямую ограничена. Поэтому наиболее эффективным методом будет подготовка Hex-строки заранее во внешнем редакторе и сохранение её в константу или текстовый файл. Если же требуется динамическая смена логотипов, целесообразно использовать внешние компоненты для работы с изображениями (например, через COM-объекты GDI+), чтобы программно анализировать пиксели файла и формировать строку 1024 символа «на лету».

Разберем пример того, как выглядит готовая строка для полностью черного квадрата 64x64. Это будет последовательность из 1024 символов F. Для полностью белого (пустого) изображения — последовательность из 1024 нулей.

Подведем итог: формирование матрицы — это задача по упаковке 4096 бит информации в 512 байт, где каждые 8 горизонтальных пикселей упаковываются в один байт, а затем записываются в шестнадцатеричном виде в одну длинную строку. Следуя этой логике, вы сможете передать любое монохромное изображение на весы CAS.

← На главную