При автоматизации торговых точек, складов и производственных площадок интеграция электронных весов с платформой 1С является одной из приоритетных задач. Весы производства компании «Масса-К» пользуются заслуженной популярностью благодаря своей надежности. Однако у разработчиков часто возникают вопросы при их подключении через современные Native-компоненты и при оптимизации скорости работы оборудования. Рассмотрим детально, как решить эти задачи.
Исторически подключение весов «Масса-К» выполнялось через специализированную динамическую библиотеку по технологии COM. Этот метод до сих пор работоспособен, но постепенно вытесняется более современными Native-компонентами, которые соответствуют требованиям Библиотеки подключаемого оборудования (БПО) от 1С. Разберем оба варианта реализации.
Если на вашем предприятии используются старые модели весов или требуется быстро запустить обмен по проверенной схеме, можно использовать 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 не найден по указанному пути!");
КонецЕсли;
Использование современного 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();
Сообщить("Текущий вес на платформе: " + ТекВес);
Исключение
Сообщить("Ошибка при обмене данными с устройством: " + ОписаниеОшибки());
КонецПопытки;
Часто разработчики сталкиваются с тем, что метод ReadWeight() выполняется со значительной задержкой (от 1 до 3 секунд). Пользователи жалуются на медленную работу интерфейса при потоковом взвешивании товаров. Разберем причины этого поведения и способы кардинального ускорения процесса.
Причина задержки: Согласно стандартам интеграции торгового оборудования 1С, драйвер должен возвращать исключительно стабилизированный вес. Метод ReadWeight() выполняет опрос весов и ждет, пока платформа весов перестанет колебаться, а весовой терминал установит внутренний флаг стабильности показаний. Пока платформа колеблется, вызов метода блокирует поток выполнения программы.
Для ускорения процесса взвешивания мы можем применить несколько программно-аппаратных решений:
Внутреннее программное обеспечение терминалов «Масса-К» (например, серии ТВ, МК или 4Д) имеет встроенный цифровой фильтр колебаний. Если весы установлены на ровной, жесткой, невибрирующей поверхности, стандартное время фильтрации можно безболезненно уменьшить.
По умолчанию весы «Масса-К» поставляются с предустановленным «Протоколом № 2» или «Протоколом № 100». При этом скорость передачи данных по COM-порту составляет всего 4800 бод. На такой скорости передача пакетов данных создает ощутимую задержку связи.
Для ускорения обмена необходимо переключить весы в специализированный режим «Протокол 1С», который работает на скорости 57600 бод. Выполним настройку весов по шагам:
->0<- (обнуление), затем, не отпуская её, кратковременно нажмите кнопку М.Int (настройка интерфейса).->0<- перебирайте доступные протоколы обмена, пока на экране не отобразится значение 1С.Т (Тара). Весы перезагрузятся в новом режиме.После этого не забудьте указать скорость 57600 бод в настройках подключения в 1С (в параметрах используемой внешней компоненты).
Для весов, оснащенных современными терминалами серии R (например, MK_R, TB_R, 4D_R), настоятельно рекомендуется отказаться от использования нестабильных виртуальных COM-портов через USB-переходники. Подключение весов напрямую в локальную сеть по протоколу TCP/IP (Ethernet) обеспечивает мгновенный отклик при опросе оборудования.
В параметрах подключения Native-драйвера в таком случае указываются следующие настройки:
"ethernet" (или "wifi");192.168.1.150);5001.При внедрении Native-драйверов разработчики могут столкнуться со специфическими ошибками разрядности платформы или кэширования внешних компонент в системе.
Если вы используете 32-битный файл компоненты (например, MassaKDriverR1CWin86_710.dll), он успешно подключится только в 32-разрядном сеансе тонкого или толстого клиента 1С. Если ваша информационная база работает в 64-битном клиенте или вызовы выполняются на стороне 64-битного сервера приложений 1С, вы получите ошибку инициализации объекта. В таком случае обязательно убедитесь, что вы используете соответствующую 64-битную сборку библиотеки из дистрибутива поставки оборудования.
При частой смене версий драйверов платформа 1С может сохранять старые версии DLL во временных файлах пользователя, из-за чего новые методы могут не работать. Для решения этой проблемы рекомендуется периодически очищать каталог кэша внешних компонент пользователя, расположенный по пути: C:\Users\<ИмяПользователя>\AppData\Roaming\1C\1cv8\ExtCompT\ (удалите оттуда все файлы, чье имя начинается на MassaKDriverR1C).
Применяя описанные методы интеграции, настройки параметров связи весового оборудования и оптимизации физических свойств терминала, вы сможете добиться мгновенного отклика весов «Масса-К» при работе из интерфейса 1С.