Как интегрировать весы Mettler Toledo Panda 7 с 1С через COM-порт?

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

Интеграция специализированного измерительного оборудования, такого как весы Mettler Toledo Panda 7, в среду 1С:Предприятие часто вызывает сложности из-за отсутствия готовых драйверов. Однако, так как весы работают по стандартному промышленному протоколу через интерфейс RS-232, мы можем реализовать обмен данными самостоятельно. Рассмотрим пошаговый алгоритм решения этой задачи.

Этап 1: Подготовка и диагностика канала связи

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

  1. Подключим весы к компьютеру с помощью кабеля RS-232. Если на ПК отсутствует физический разъем, воспользуемся качественным переходником USB-to-RS232 (рекомендуется чипсет FTDI).
  2. В настройках весов включим режим постоянной передачи данных (обычно обозначается как Aut.S или Interface continuously transmit data).
  3. Воспользуемся любой терминальной программой для Windows (например, Putty или специализированные терминалы для работы с COM-портами).
  4. Настроим параметры порта: скорость (Baud Rate), четность (Parity), количество бит данных и стоповые биты в соответствии с руководством пользователя весов.
  5. Если в окне терминала мы видим поток текстовых данных при изменении веса на платформе — значит, канал связи настроен верно.

Этап 2: Методы получения данных в 1С

Существует несколько подходов к считыванию данных в 1С. Рассмотрим их от простых к более надежным.

Способ 1: Прямое чтение из порта (без внешних компонент)

Этот метод подходит для простых задач, где данные поступают непрерывно. Мы можем использовать объект ЧтениеТекста, хотя этот способ может быть нестабильным и требует аккуратной обработки занятости порта.


// Пример упрощенного чтения из COM-порта
Текст = Новый ЧтениеТекста("\\.\COM3", КодировкаТекста.ANSI);
Попытка
    Стр = Текст.ПрочитатьСтроку();
    Если СтрДлина(Стр) > 0 Тогда
        // Парсим строку для выделения веса
        // Например: ищем вхождение подстроки 'KG'
        Если Найти(Стр, "KG") > 0 Тогда
            Вес = Число(Сред(Стр, 5, 5));
        КонецЕсли;
    КонецЕсли;
Исключение
    Сообщить("Ошибка при работе с портом: " + ОписаниеОшибки());
КонецПопытки;
Текст.Закрыть();

Способ 2: Использование MSCOMMLib

Для более профессиональной работы с оборудованием в 1С часто используется библиотека MSCOMMLib.MSComm. Это позволяет более гибко управлять событиями порта.

Для работы потребуется инициализировать COM-объект, настроить его свойства CommPort, Settings (скорость, четность) и PortOpen. Получение данных осуществляется через обработку событий или циклический опрос буфера.

Этап 3: Рекомендованная архитектура (Микросервис)

Для обеспечения максимальной стабильности работы в 1С, особенно если сеансов работы с весами несколько, рекомендуем использовать «прослойку» в виде внешнего микросервиса. Рассмотрим, почему это лучше:

  1. Микросервис, написанный на C#, Python или Go, постоянно висит в системе и держит COM-порт открытым.
  2. Он берет на себя всю грязную работу по парсингу «сырых» данных, приходящих с весов.
  3. Передача данных в 1С происходит через HTTP-сервисы или запись в промежуточный файл.
  4. Это исключает блокировку COM-порта со стороны платформы 1С и предотвращает «зависания» интерфейса при обрыве связи с весами.

Этап 4: Управление весами (команда ТАРЫ)

Если весы поддерживают двусторонний обмен, для отправки команды (например, обнуления веса — TARE) необходимо передать в порт определенный байт или строку. Согласно документации Mettler Toledo, обычно это символ 'T' или 'Z'. При реализации через MSComm используйте метод Output:


// Отправка команды Тарирования
КомОбъект.Output = "T" + Символ(13); // Отправляем T и возврат каретки

В завершение, проанализируем структуру строки данных. Большинство промышленных терминалов передают статус веса (например, S — стабильный вес, D — динамический вес). Рекомендуем создать функцию-парсер, которая будет проверять каждый входящий пакет данных на соответствие формату перед тем, как передавать значение веса в учетную систему.

← На главную