Интеграция весового оборудования (автомобильных тензометрических платформ серий ВАТ, ВАТП, терминалов Тензо-М, CAS и др.) с платформой 1С — распространенная задача при автоматизации контрольно-пропускных пунктов, элеваторов, карьеров и производственных площадок. Разберем по шагам, как настроить взаимодействие весового терминала с базой данных 1С, как правильно зарегистрировать библиотеки и организовать считывание показаний в режиме реального времени.
В зависимости от модели весового терминала и предоставляемого производителем программного обеспечения подключение к компьютеру и 1С может выполняться несколькими путями:
Controller.ScAuto.Comm_drv.dll), которая регистрируется в системе и вызывается из кода 1С.Для того чтобы 1С смогла инициализировать COM-объект, сервер автоматизации или динамическая библиотека должны быть корректно зарегистрированы в операционной системе Windows. Проанализируем нюансы этого процесса:
Controller.exe один раз от имени Администратора, выполнить первичную настройку связи с COM-портом весов и закрыть приложение. Если файл перемещается в другой каталог, процедуру первого запуска необходимо повторить.regsvr32 из командной строки Windows (запущенной от имени Администратора):
regsvr32 "C:\Drivers\Comm_drv.dll"
Важно: если при регистрации возникает ошибка об отсутствии точки входа DllRegisterServer, это означает, что библиотека не является COM-сервером и предназначена для прямой загрузки через механизм внешних компонент 1С или требует специализированного установщика.
Рассмотрим пример инициализации OLE-объекта в модуле формы или внешней обработке. Обратите внимание: все операции с локальным оборудованием и COM-объектами должны выполняться строго на клиенте.
&НаКлиенте
Переменная ВесовойСервер;
&НаКлиенте
Процедура ПодключитьВесы()
Попытка
ВесовойСервер = Новый COMОбъект("Controller.ScAuto");
// Выполняем инициализацию связи согласно руководству к OLE-серверу
// Например: ВесовойСервер.Connect();
Сообщить("Связь с весовым контроллером успешно установлена.");
Исключение
Сообщить("Не удалось создать объект Controller.ScAuto: " + ОписаниеОшибки(), СтатусСообщения.Важное);
КонецПопытки;
КонецПроцедуры
При взвешивании автотранспорта вес на платформе постоянно колеблется (заезд машины, вибрации двигателя, воздействие ветра). Считывать и фиксировать вес в учетном документе можно только в том случае, когда показания стабилизировались («состояние покоя»).
Выясним, как правильно построить интерфейс взвешивания, чтобы оператор видел текущее значение («бегущий вес») и программа автоматически разрешала фиксацию только при стабилизации платформы:
ПодключитьОбработчикОжидания с интервалом 0.2–0.5 секунды. Это обеспечивает плавный вывод цифр без «зависания» пользовательского интерфейса.ST — стабилен, US — нестабилен) или предоставляют специальный метод/свойство в COM-объекте.Посмотрим на пример организации обработчика обновления веса на форме:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьВесы();
// Подключаем циклический опрос показаний каждые 0.3 секунды
ПодключитьОбработчикОжидания("ОбновитьПоказанияВесов", 0.3);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПоказанияВесов()
Если ВесовойСервер = Неопределено Тогда
Возврат;
КонецЕсли;
Попытка
// Получаем текущее значение веса и статус успокоения платформы
ТекущийВес = ВесовойСервер.GetWeight();
ВесСтабилен = ВесовойСервер.IsStable();
// Отображаем значение на форме
Элементы.ПолеИндикаторВеса.Заголовок = Формат(ТекущийВес, "ЧЦ=10; ЧДЦ=2") + " кг";
// Разрешаем фиксацию только при стабильном весе выше минимального порога
Элементы.КнопкаПринятьВес.Доступность = (ВесСтабилен И ТекущийВес > 50);
Если ВесСтабилен Тогда
Элементы.СтатусПлатформы.Заголовок = "Вес зафиксирован (покой)";
Иначе
Элементы.СтатусПлатформы.Заголовок = "Идет взвешивание (нестабильно)...";
КонецЕсли;
Исключение
// Обработка временных ошибок чтения порта
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(Отказ)
ОтключитьОбработчикОжидания("ОбновитьПоказанияВесов");
ВесовойСервер = Неопределено;
КонецПроцедуры
Разберем основные эксплуатационные требования для стабильной работы связки «1С — весы»: