При автоматизации автомобильных или платформенных весов (например, УВК-А-СН80) разработчики часто сталкиваются с популярным весовым индикатором А12Е. Производитель предоставляет базовую утилиту для ПК, однако она не содержит программных интерфейсов типа ActiveX или COM-объектов, что делает невозможным её прямое использование внутри платформы 1С. Разберем детально, как организовать прямое взаимодействие с прибором через последовательный интерфейс RS-232 и встроенный язык 1С.
Индикатор А12Е связывается с компьютером через последовательный порт RS-232. Поскольку платформа «1С:Предприятие» не содержит штатных функций встроенного языка для прямого открытия COM-портов операционной системы, обмен реализуется с помощью внешних компонент. Выделим два основных протокола работы весового терминала:
R (Read) терминал возвращает текущее значение веса. Также поддерживаются команды обнуления Z (Zero) и тарирования T (Tare).Для интеграции с 1С предпочтителен командный режим, так как он не перегружает буфер порта постоянными данными и выдает значение строго по нажатию кнопки в форме документа или по сигналу датчика.
Проанализируем аппаратную часть подключения. Распространенной проблемой отсутствия связи в командном режиме является неполный интерфейсный кабель. Для вывода данных на дублирующее табло часто распаивают только две жилы: передачу весов TX и общую шину GND. В таком кабеле компьютер физически не может передать байт запроса в весы.
Для корректной работы командного режима обязательно требуется двусторонняя линия связи:
TX весового терминала подключается к контакту RX COM-порта компьютера (контакт 2 разъема DB-9).RX весового терминала подключается к контакту TX COM-порта компьютера (контакт 3 разъема DB-9).GND соединяется с контактом GND COM-порта (контакт 5 разъема DB-9).Обратим внимание на разъем на задней панели терминала А12Е: обычно там установлен круглый авиационный разъем (5-pin или 7-pin). Сверьте цоколевку контактов по техническому паспорту конкретной модификации перед распайкой.
Для установки соединения необходимо задать идентичные параметры связи в меню индикатора и в настройках драйвера 1С. В конфигурационном меню весового индикатора А12Е настраиваются следующие параметры связи:
9600 (допустимы значения от 1200 до 9600 бод).Рассмотрим нюансы работы с платформой «1С:Предприятие 8». Старые 32-разрядные библиотеки и ActiveX-компоненты (например, MSComm32.ocx) не будут функционировать в 64-разрядном клиенте 1С. Кроме того, синхронное чтение из порта может заблокировать интерфейс пользователя в случае задержки ответа весов.
Для стабильной работы применяются внешние компоненты, разработанные по технологии Native API (с разрядностью x86/x64), либо типовые драйверы из состава БПО (Библиотеки подключаемого оборудования) для весов без печати этикеток. Такие компоненты передают данные в платформу асинхронно через событие ОбработкаВнешнегоСобытия.
При отправке команды R весовой индикатор А12Е возвращает ASCII-строку фиксированного или переменного формата, оканчивающуюся байтами возврата каретки и перевода строки (0x0D, 0x0A). Типовая строка содержит префикс режима:
ww — вес брутто;wn — вес нетто;wt — вес тары.Далее следуют цифровые символы веса с разделителем точки и единица измерения (например, kg). Наша задача во встроенном языке — отсечь служебные символы и преобразовать строку в числовой тип.
Разберем пример кода на встроенном языке 1С, демонстрирующий подключение к порту, передачу управляющей команды и разбор ответа в процедуре перехвата события.
&НаКлиенте
Процедура ПодключитьВесы()
// Подключение Native-компоненты для работы с последовательным портом
Попытка
ПодключитьВнешнююКомпоненту("ОбщийМакет.ДрайверCOMПорта", "ВесовойПорт", ТипВнешнейКомпоненты.Native);
ОбъектДрайвера = Новый ("AddIn.ВесовойПорт.COMDevice");
// Установка параметров связи
ОбъектДрайвера.Порт = "COM1";
ОбъектДрайвера.Скорость = 9600;
ОбъектДрайвера.БитыДанных = 8;
ОбъектДрайвера.СтопБиты = 1;
ОбъектДрайвера.Четность = 0; // Нет
Если ОбъектДрайвера.ОткрытьПорт() Тогда
Сообщить("Связь с индикатором А12Е успешно установлена.");
Иначе
ВызватьИсключение "Не удалось открыть COM-порт весов.";
КонецЕсли;
Исключение
Сообщить("Ошибка инициализации оборудования: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ЗапроситьВес()
// Отправка ASCII-символа R для считывания текущего веса
Если ОбъектДрайвера <> Неопределено И ОбъектДрайвера.ПортОткрыт Тогда
ОбъектДрайвера.ОтправитьДанные("R");
Иначе
Сообщить("Порт весов закрыт. Выполните подключение.");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВнешнегоСобытия(Источник, Событие, Данные)
Если Источник = "ВесовойПорт" И Событие = "ДанныеПолучены" Тогда
// Разбираем полученную строку от терминала А12Е
СтрокаОтвета = СокрЛП(Данные);
// Пример ответа: "ww001540.00kg"
ТекущийВес = ВыделитьЧислоВеса(СтрокаОтвета);
Если ТекущийВес <> Неопределено Тогда
Объект.Вес = ТекущийВес;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ВыделитьЧислоВеса(Знач ИсходныйТекст)
// Очистка строки от префиксов (ww, wn, wt), единиц (kg) и лишних пробелов
ИсходныйТекст = НСтр(ИсходныйТекст);
ИсходныйТекст = СтрЗаменить(ИсходныйТекст, "ww", "");
ИсходныйТекст = СтрЗаменить(ИсходныйТекст, "wn", "");
ИсходныйТекст = СтрЗаменить(ИсходныйТекст, "wt", "");
ИсходныйТекст = СтрЗаменить(ИсходныйТекст, "kg", "");
ИсходныйТекст = СокрЛП(ИсходныйТекст);
// Преобразование точки в запятую для корректного приведения типа
ИсходныйТекст = СтрЗаменить(ИсходныйТекст, ".", ",");
Попытка
Возврат Число(ИсходныйТекст);
Исключение
Возврат Неопределено;
КонецПопытки;
КонецФункции
В условиях реальной эксплуатации автомобильные весы часто удалены от рабочего места оператора на сотни метров. В таких случаях прокладка длинного кабеля RS-232 невозможна из-за затухания сигнала и помех. Решением является подключение терминала А12Е через преобразователь интерфейсов RS-232 to Ethernet / Wi-Fi.
В этом сценарии фоновая служба (микросервис) или виртуальный COM-порт опрашивает весы по локальной сети, а «1С:Предприятие» забирает значение веса с помощью стандартных объектов HTTPСоединение и HTTPЗапрос. Такой подход гарантирует стабильность работы и полностью исключает зависимость от локальных драйверов на рабочих станциях.