Как подключить лабораторные весы Ohaus к 1С через RS232: пошаговое руководство

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Подключение специализированного лабораторного оборудования, такого как весы серии Ohaus Adventurer AX, к системе 1С часто вызывает вопросы у разработчиков. Основная сложность заключается в отсутствии специализированных драйверов от производителя, интегрированных в типовые решения 1С. Однако наличие COM-порта (RS232) позволяет организовать обмен данными напрямую. В этой статье мы разберем способы программного получения веса, проанализируем необходимые компоненты и рассмотрим примеры кода.

Выбор программного интерфейса для работы с COM-портом

Первым шагом при интеграции весов является выбор метода взаимодействия с последовательным портом. Рассмотрим основные варианты, которые успешно применяются в среде 1С:

  1. MSCOMM32.ocx — классический ActiveX-объект от Microsoft. Несмотря на свой возраст, он остается одним из самых стабильных решений для 32-битных клиентов 1С. Важно помнить, что его использование требует регистрации в реестре и может потребовать лицензионный ключ, который исторически поставлялся с Visual FoxPro или Visual Basic.
  2. vk_rs232.dll — популярная внешняя компонента, созданная специально для 1С. Она хорошо справляется с простыми задачами чтения и записи строк. Существуют версии с поддержкой HEX-данных, что полезно при работе с нестандартными протоколами.
  3. NativeAPI компоненты — современные библиотеки (например, кроссплатформенная компонента с GitHub), которые поддерживают как 32-битные, так и 64-битные клиенты 1С. Это наиболее предпочтительный вариант для новых проектов.

Проанализируем ситуацию: если ваша база работает в 64-битном клиентском приложении, старые .ocx и .dll библиотеки не загрузятся. В таком случае следует ориентироваться только на NativeAPI решения.

Настройка физического подключения и параметров порта

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

Разберем важный нюанс: физический кабель RS232 для Ohaus может требовать специфической распиновки. Если данные не приходят, проверьте наличие перемычек между контактами RTS/CTS (7 и 8), если в настройках весов включено аппаратное управление потоком. Если же весы подключены через встроенный USB-порт, убедитесь, что в меню весов выбран режим Virtual COM Port, а в системе установлен соответствующий драйвер (обычно Silicon Labs).

Реализация считывания веса с помощью MSCOMM32.ocx

Рассмотрим подробнее пример кода для получения веса. Данный метод основан на периодическом опросе порта. Обратите внимание на использование объекта WScript.Shell для создания задержки — это необходимо, чтобы весы успели отправить данные в буфер после открытия порта.


// Создаем объект для работы с портом
КонтроллерВесов = Новый COMОбъект("MsCommLib.MsComm.1");    
КонтроллерВесов.CommPort  = 1; // Номер порта в системе
КонтроллерВесов.Settings  = "2400,N,8,1"; // Параметры из документации весов
КонтроллерВесов.PortOpen  = Истина;    

// Небольшая пауза для инициализации обмена
Shell = Новый COMОбъект("WScript.Shell");
Shell.run("timeout /t 1", 0, -1);
Shell = Неопределено;    

// Читаем накопленные данные из буфера
СтрокаВес = КонтроллерВесов.Input;

Если НЕ ПустаяСтрока(СтрокаВес) Тогда    
    // Весы Ohaus часто присылают строку вида "      125.50 g"
    // Нам нужно выделить числовое значение
    МассивСигналов = СтрРазделить(СтрокаВес, " ", Ложь);
    Для каждого ТекСтрока Из МассивСигналов Цикл        
        Если СтрДлина(СокрЛП(ТекСтрока)) > 0 Тогда            
            Попытка
                РезультатВес = Число(ТекСтрока);
                Прервать; // Нашли первое числовое значение
            Исключение
                Продолжить;
            КонецПопытки;                
        КонецЕсли;        
    КонецЦикла;        
КонецЕсли;    

КонтроллерВесов.PortOpen  = Ложь;

Работа по протоколу MT-SICS

Выясним причину, по которой иногда простая команда печати не подходит. Лабораторные весы Ohaus поддерживают стандарт MT-SICS. Это позволяет не просто ждать нажатия кнопки "Print" на весах, а активно запрашивать данные из 1С. Рассмотрим основные команды:

Для отправки команды в порт используется метод Output. Например, отправка КонтроллерВесов.Output = "SI" + Символы.ПС; заставит весы мгновенно вернуть текущее значение в буфер Input.

Использование современной NativeAPI компоненты

Если вы решили использовать более современный подход (рекомендуется для Управляемых форм и 64-битных систем), структура кода будет выглядеть иначе. Вместо ActiveX-объекта мы подключаем внешнюю компоненту. Проанализируем общую схему:


// Подключение компоненты (предположим, она загружена в макет или лежит на диске)
УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаRS232");
ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаRS232", "RS232", ТипВнешнейКомпоненты.Native);
Весы = Новый ("AddIn.RS232.RS232_Device");

// Настройка
Весы.Порт = 1;
Весы.Скорость = 9600;
Если Весы.ОткрытьПорт() Тогда
    // Отправляем запрос на получение веса
    Весы.ЗаписатьСтроку("P"); // Команда Print
    
    // Читаем ответ
    Данные = "";
    Весы.ПрочитатьСтроку(Данные);
    Сообщить("Вес получен: " + Данные);
    
    Весы.ЗакрытьПорт();
Иначе
    Предупреждение("Не удалось открыть COM-порт!");
КонецЕсли;

Обработка данных и нюансы формата

При разборе строки ответа важно учитывать, что весы могут передавать единицы измерения (g, mg, ct) и статус стабильности (S, SD). Посмотрим на пример типичной строки от Ohaus: "S 10.005 g". Здесь:

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

Важный совет: При фасовке удобно использовать режим автоматической отправки данных при стабилизации. В этом случае 1С должна постоянно "слушать" порт в фоновом режиме (например, через обработчик ожидания), и как только в буфере появляется корректная строка веса — фиксировать её в документе.

Подводя итог, можно сказать, что весы Ohaus отлично интегрируются с 1С. Главное — правильно определить разрядность вашего клиента 1С, выбрать соответствующую компоненту (ActiveX или NativeAPI) и верно настроить параметры передачи данных в соответствии с технической документацией конкретной модели Adventurer AX.

← На главную