Как подключить автомобильные весы к 1С и настроить считывание веса?

Программист 1С v8.3 (Обычные формы) Управленческий учет Промышленность, строительство и АПК
← На главную

Интеграция весового оборудования (автомобильных тензометрических платформ серий ВАТ, ВАТП, терминалов Тензо-М, CAS и др.) с платформой 1С — распространенная задача при автоматизации контрольно-пропускных пунктов, элеваторов, карьеров и производственных площадок. Разберем по шагам, как настроить взаимодействие весового терминала с базой данных 1С, как правильно зарегистрировать библиотеки и организовать считывание показаний в режиме реального времени.

Варианты сопряжения весового терминала с 1С

В зависимости от модели весового терминала и предоставляемого производителем программного обеспечения подключение к компьютеру и 1С может выполняться несколькими путями:

  1. Использование OLE/COM-сервера производителя (например, ПО «Контроллер» от Тензо-М): терминал подключается к COM-порту (RS-232 / RS-485 / виртуальный USB-COM), а программа-сервер считывает данные из порта и предоставляет доступ внешним приложениям через COM-интерфейс Controller.ScAuto.
  2. Подключение через внешние динамические библиотеки (DLL / Native API): производитель поставляет библиотеку (например, Comm_drv.dll), которая регистрируется в системе и вызывается из кода 1С.
  3. Режим эмуляции клавиатуры: терминал или адаптер настраивается так, что при стабилизации или нажатии кнопки «Печать» на весах текущее значение веса посылается в активное поле ввода оператора как последовательность нажатий клавиш. Этот вариант не требует написания сложного кода, но требует жесткого позиционирования курсора и не позволяет контролировать процесс динамически.

Регистрация OLE-сервера и драйверов в Windows

Для того чтобы 1С смогла инициализировать COM-объект, сервер автоматизации или динамическая библиотека должны быть корректно зарегистрированы в операционной системе Windows. Проанализируем нюансы этого процесса:

  1. Регистрация OLE-сервера (Controller.exe): исполняемый файл приложения OLE Automation регистрирует свои интерфейсы при первом штатном запуске. Необходимо запустить программу Controller.exe один раз от имени Администратора, выполнить первичную настройку связи с COM-портом весов и закрыть приложение. Если файл перемещается в другой каталог, процедуру первого запуска необходимо повторить.
  2. Регистрация библиотек DLL: если обмен выполняется через отдельную DLL, она регистрируется утилитой regsvr32 из командной строки Windows (запущенной от имени Администратора):

    regsvr32 "C:\Drivers\Comm_drv.dll"

    Важно: если при регистрации возникает ошибка об отсутствии точки входа DllRegisterServer, это означает, что библиотека не является COM-сервером и предназначена для прямой загрузки через механизм внешних компонент 1С или требует специализированного установщика.

  3. Учет разрядности клиента 1С (32 / 64 бит): подавляющее большинство драйверов весового оборудования скомпилированы под 32-разрядную архитектуру. При попытке создать COM-объект в 64-разрядном клиенте 1С возникнет ошибка «Класс не зарегистрирован». Для работы с такими драйверами используйте 32-битный клиент 1С.

Программное подключение к OLE-объекту в 1С

Рассмотрим пример инициализации OLE-объекта в модуле формы или внешней обработке. Обратите внимание: все операции с локальным оборудованием и COM-объектами должны выполняться строго на клиенте.


&НаКлиенте
Переменная ВесовойСервер;

&НаКлиенте
Процедура ПодключитьВесы()
    Попытка
        ВесовойСервер = Новый COMОбъект("Controller.ScAuto");
        // Выполняем инициализацию связи согласно руководству к OLE-серверу
        // Например: ВесовойСервер.Connect();
        Сообщить("Связь с весовым контроллером успешно установлена.");
    Исключение
        Сообщить("Не удалось создать объект Controller.ScAuto: " + ОписаниеОшибки(), СтатусСообщения.Важное);
    КонецПопытки;
КонецПроцедуры

Организация динамического опроса и контроль стабильности веса

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

Выясним, как правильно построить интерфейс взвешивания, чтобы оператор видел текущее значение («бегущий вес») и программа автоматически разрешала фиксацию только при стабилизации платформы:

  1. Фоновый опрос через обработчик ожидания: для постоянного обновления значения на форме используем встроенный метод платформы ПодключитьОбработчикОжидания с интервалом 0.2–0.5 секунды. Это обеспечивает плавный вывод цифр без «зависания» пользовательского интерфейса.
  2. Анализ флагов стабильности: большинство весовых индикаторов передают признак стабильности (маркеры состояния платформы ST — стабилен, US — нестабилен) или предоставляют специальный метод/свойство в COM-объекте.
  3. Программная блокировка записи: кнопка «Зафиксировать вес» в форме документа должна быть недоступна до тех пор, пока флаг стабильности не перейдет в истинное состояние и значение веса не превысит минимальный порог (например, отсечение пустой платформы).

Посмотрим на пример организации обработчика обновления веса на форме:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПодключитьВесы();
    // Подключаем циклический опрос показаний каждые 0.3 секунды
    ПодключитьОбработчикОжидания("ОбновитьПоказанияВесов", 0.3);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьПоказанияВесов()
    Если ВесовойСервер = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Попытка
        // Получаем текущее значение веса и статус успокоения платформы
        ТекущийВес = ВесовойСервер.GetWeight();
        ВесСтабилен = ВесовойСервер.IsStable();

        // Отображаем значение на форме
        Элементы.ПолеИндикаторВеса.Заголовок = Формат(ТекущийВес, "ЧЦ=10; ЧДЦ=2") + " кг";

        // Разрешаем фиксацию только при стабильном весе выше минимального порога
        Элементы.КнопкаПринятьВес.Доступность = (ВесСтабилен И ТекущийВес > 50);
        
        Если ВесСтабилен Тогда
            Элементы.СтатусПлатформы.Заголовок = "Вес зафиксирован (покой)";
        Иначе
            Элементы.СтатусПлатформы.Заголовок = "Идет взвешивание (нестабильно)...";
        КонецЕсли;
    Исключение
        // Обработка временных ошибок чтения порта
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(Отказ)
    ОтключитьОбработчикОжидания("ОбновитьПоказанияВесов");
    ВесовойСервер = Неопределено;
КонецПроцедуры

Рекомендации по надежной эксплуатации весового терминала

Разберем основные эксплуатационные требования для стабильной работы связки «1С — весы»:

  1. Использование стандартизированных подсистем: если конфигурация позволяет внедрение типовых библиотек, рекомендуется использовать Библиотеку подключаемого оборудования (БПО) от 1С. Это стандартизирует работу с драйверами по протоколам электронных весов и упростит обновление платформы.
  2. Удаленное подключение: если весовая будка удалена от сервера или компьютера оператора, надежнее использовать конвертеры интерфейсов RS-232/RS-485 в Ethernet (COM-over-IP) для передачи данных по локальной сети без потерь качества сигнала на длинных кабельных линиях.
← На главную