Как правильно подключить весы Масса-К к 1С и увеличить скорость взвешивания

Программист 1С v8.3 (Управляемые формы) Торговля и дистрибуция
← На главную

При автоматизации торговых точек, складов и производственных площадок интеграция электронных весов с платформой 1С является одной из приоритетных задач. Весы производства компании «Масса-К» пользуются заслуженной популярностью благодаря своей надежности. Однако у разработчиков часто возникают вопросы при их подключении через современные Native-компоненты и при оптимизации скорости работы оборудования. Рассмотрим детально, как решить эти задачи.

Способы подключения весов: COM-объект vs Native-драйвер

Исторически подключение весов «Масса-К» выполнялось через специализированную динамическую библиотеку по технологии COM. Этот метод до сих пор работоспособен, но постепенно вытесняется более современными Native-компонентами, которые соответствуют требованиям Библиотеки подключаемого оборудования (БПО) от 1С. Разберем оба варианта реализации.

Вариант 1. Подключение через классический COM-объект

Если на вашем предприятии используются старые модели весов или требуется быстро запустить обмен по проверенной схеме, можно использовать COM-объект ScalesMassaK.Scale. Для этого метода физический файл драйвера должен быть зарегистрирован в операционной системе или подключен динамически.

Проанализируем пример кода для прямого подключения через COM-технологию:


ТекущийВес = 0;
// Задаем путь к установленной библиотеке драйвера
ПутьКДрайверу = "C:\Program Files (x86)\Massa-K\ScalesMassaKDriver\ScalesMassaK.dll";
ФайлДрайвера = Новый Файл(ПутьКДрайверу);

Если ФайлДрайвера.Существует() Тогда
    Попытка
        // Динамически подключаем внешнюю компоненту
        ПодключитьВнешнююКомпоненту(ФайлДрайвера.ПолноеИмя, "Весы", ТипВнешнейКомпоненты.COM); 
        
        // Создаем COM-объект драйвера весов
        Scales = Новый COMОбъект("ScalesMassaK.Scale");
        
        // Указываем порт подключения (может быть как физическим, так и виртуальным USB-COM)
        Scales.Connection = "COM6"; 
        
        // Инициируем соединение с устройством
        РезультатСвязи = Scales.OpenConnection(); 
        
        Если РезультатСвязи = 0 Тогда // 0 указывает на успешное открытие порта
            // Запрашиваем текущий вес с весового терминала
            РезультатЧтения = Scales.ReadWeight(); 
            
            // Получаем значение из свойства Weight
            ТекущийВес = Scales.Weight; 
            
            // Обязательно закрываем соединение, чтобы освободить порт для других приложений
            Scales.CloseConnection();
            
            Сообщить("Успешно получено значение веса: " + ТекущийВес);
        Иначе
            Сообщить("Не удалось открыть подключение к порту COM6. Код ошибки: " + РезультатСвязи);
        КонецЕсли;
    Исключение
        Сообщить("Произошла ошибка при работе с драйвером весов: " + ОписаниеОшибки());
    КонецПопытки;
Иначе
    Сообщить("Файл драйвера ScalesMassaK.dll не найден по указанному пути!");
КонецЕсли;

Вариант 2. Подключение через универсальный Native-драйвер

Использование современного Native-драйвера MassaKDriverR1C является наиболее предпочтительным решением. Данная компонента работает без регистрации в реестре Windows, может загружаться непосредственно из макета конфигурации 1С и полностью совместима с механизмами БПО.

Рассмотрим по шагам процесс подключения и инициализации весов через новую компоненту:


// Путь к Native-компоненте (для 32-битного клиента 1С)
ПутьККомпоненте = "d:\distr\MassaKDriverR1CWin86_710.dll";

Попытка
    // Подключаем Native-компоненту с уникальным именем "wesy"
    ПодключитьВнешнююКомпоненту(ПутьККомпоненте, "wesy", ТипВнешнейКомпоненты.Native);        
    
    // Создаем объект драйвера весов
    Scales = Новый("AddIn.wesy.MassaKDriverR1C");
    
    Сообщить("Объект драйвера успешно создан!");
Исключение
    Сообщить("Не удалось загрузить внешнюю компоненту: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

Попытка
    // Настройка параметров подключения.
    // В Native-драйверах параметры обычно передаются через свойства или метод УстановитьПараметр()
    Scales.Connection = "COM6"; // Или используйте метод Scales.УстановитьПараметр("ИмяПорта", "COM6")
    
    // Открываем соединение с весовым терминалом
    РезультатСвязи = Scales.OpenConnection();
    
    // Посылаем команду на считывание веса с датчиков
    РезультатЧтения = Scales.ReadWeight();
    
    // Получаем считанное значение
    ТекВес = Scales.Weight;    
    
    // Закрываем порт
    Scales.CloseConnection();
    
    Сообщить("Текущий вес на платформе: " + ТекВес);
Исключение
    Сообщить("Ошибка при обмене данными с устройством: " + ОписаниеОшибки());
КонецПопытки;

Как реально увеличить скорость взвешивания в 1С

Часто разработчики сталкиваются с тем, что метод ReadWeight() выполняется со значительной задержкой (от 1 до 3 секунд). Пользователи жалуются на медленную работу интерфейса при потоковом взвешивании товаров. Разберем причины этого поведения и способы кардинального ускорения процесса.

Причина задержки: Согласно стандартам интеграции торгового оборудования 1С, драйвер должен возвращать исключительно стабилизированный вес. Метод ReadWeight() выполняет опрос весов и ждет, пока платформа весов перестанет колебаться, а весовой терминал установит внутренний флаг стабильности показаний. Пока платформа колеблется, вызов метода блокирует поток выполнения программы.

Для ускорения процесса взвешивания мы можем применить несколько программно-аппаратных решений:

1. Настройка аппаратного фильтра в весовом терминале

Внутреннее программное обеспечение терминалов «Масса-К» (например, серии ТВ, МК или 4Д) имеет встроенный цифровой фильтр колебаний. Если весы установлены на ровной, жесткой, невибрирующей поверхности, стандартное время фильтрации можно безболезненно уменьшить.

  1. Зайдите в сервисное меню весового терминала (обычно это делается удержанием определенных клавиш при включении прибора, подробнее смотрите в инструкции к вашей конкретной модели терминала).
  2. Найдите параметр настройки фильтрации колебаний (в меню он может обозначаться как "Фильтр" или иметь числовой индекс режима).
  3. Переведите фильтр в режим «быстрого реагирования» (более слабый уровень фильтрации). Это позволит весам моментально определять стабилизацию веса, снижая задержку ожидания в 1С до минимума.

2. Переключение весов в «Протокол 1С» для увеличения скорости COM-порта

По умолчанию весы «Масса-К» поставляются с предустановленным «Протоколом № 2» или «Протоколом № 100». При этом скорость передачи данных по COM-порту составляет всего 4800 бод. На такой скорости передача пакетов данных создает ощутимую задержку связи.

Для ускорения обмена необходимо переключить весы в специализированный режим «Протокол 1С», который работает на скорости 57600 бод. Выполним настройку весов по шагам:

  1. Полностью выключите весы кнопкой питания.
  2. Включите весы. Во время прохождения начального теста сегментов экрана (когда на дисплее отображаются бегущие цифры) зажмите и удерживайте кнопку ->0<- (обнуление), затем, не отпуская её, кратковременно нажмите кнопку М.
  3. На дисплее весового терминала должна появиться надпись Int (настройка интерфейса).
  4. Кнопкой ->0<- перебирайте доступные протоколы обмена, пока на экране не отобразится значение 1С.
  5. Подтвердите выбор и сохраните настройки, нажав кнопку Т (Тара). Весы перезагрузятся в новом режиме.

После этого не забудьте указать скорость 57600 бод в настройках подключения в 1С (в параметрах используемой внешней компоненты).

3. Переход на интерфейс Ethernet / Wi-Fi

Для весов, оснащенных современными терминалами серии R (например, MK_R, TB_R, 4D_R), настоятельно рекомендуется отказаться от использования нестабильных виртуальных COM-портов через USB-переходники. Подключение весов напрямую в локальную сеть по протоколу TCP/IP (Ethernet) обеспечивает мгновенный отклик при опросе оборудования.

В параметрах подключения Native-драйвера в таком случае указываются следующие настройки:

Возможные технические проблемы и их решение

При внедрении Native-драйверов разработчики могут столкнуться со специфическими ошибками разрядности платформы или кэширования внешних компонент в системе.

Проблема разрядности (32-бит против 64-бит)

Если вы используете 32-битный файл компоненты (например, MassaKDriverR1CWin86_710.dll), он успешно подключится только в 32-разрядном сеансе тонкого или толстого клиента 1С. Если ваша информационная база работает в 64-битном клиенте или вызовы выполняются на стороне 64-битного сервера приложений 1С, вы получите ошибку инициализации объекта. В таком случае обязательно убедитесь, что вы используете соответствующую 64-битную сборку библиотеки из дистрибутива поставки оборудования.

Очистка устаревшего кэша компонент

При частой смене версий драйверов платформа 1С может сохранять старые версии DLL во временных файлах пользователя, из-за чего новые методы могут не работать. Для решения этой проблемы рекомендуется периодически очищать каталог кэша внешних компонент пользователя, расположенный по пути:
C:\Users\<ИмяПользователя>\AppData\Roaming\1C\1cv8\ExtCompT\ (удалите оттуда все файлы, чье имя начинается на MassaKDriverR1C).

Применяя описанные методы интеграции, настройки параметров связи весового оборудования и оптимизации физических свойств терминала, вы сможете добиться мгновенного отклика весов «Масса-К» при работе из интерфейса 1С.

← На главную