Как исправить некорректное считывание показаний с весов НВТ-9 в 1С 7.7

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При замене весового оборудования, например, при переходе со старых моделей НВТ-3 на более современные НВТ-9 (или аналогичные индикаторы серии А12), программисты часто сталкиваются с проблемой «залипания» веса. Ситуация выглядит так: первое взвешивание проходит корректно, но при смене груза 1С продолжает считывать старое значение, и только через несколько попыток или с большой задержкой появляется актуальный вес. В этой статье мы подробно разберем, почему это происходит и как правильно настроить программно-аппаратный комплекс на базе 1С:Предприятие 7.7 и внешней компоненты vk_rs232.dll.

Анализируем причину проблемы

Основная причина некорректного поведения заключается в механизме работы COM-порта и логике передачи данных весовым терминалом. В отличие от старых моделей, современные терминалы НВТ-9 имеют более высокую частоту опроса и специфические режимы стабилизации. Когда весы настроены на непрерывную передачу данных, буфер операционной системы забивается посылками. Если 1С считывает данные реже, чем весы их отправляют, программа начинает доставать из очереди «устаревшие» пакеты данных, которые накопились в буфере, пока весы стояли под старым грузом или были пустыми.

Рассмотрим основные факторы, влияющие на ошибку:

  1. Переполнение буфера: Компонента vk_rs232.dll просто слушает порт. Если код 1С не очищает входную очередь перед чтением, вы будете получать данные минутной давности.
  2. Режим передачи данных: Весы могут отправлять вес постоянно, только после стабилизации или только по запросу.
  3. Протокол обмена: Формат строки данных НВТ-9 может отличаться от НВТ-3 длиной кадра (12 или 18 байт), что требует корректировки алгоритма парсинга строки в 1С.

Настройка весового индикатора НВТ-9

Прежде чем менять код в 1С, необходимо убедиться, что сам весовой терминал настроен правильно. Для входа в режим конфигурации НВТ-9 обычно требуется удерживать клавишу «#» или «Функция» при включении прибора. Нас интересуют параметры связи, которые обычно обозначаются буквой P.

Проанализируем ключевые настройки:

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

Программная реализация в 1С 7.7

Разберем, как правильно реализовать чтение данных, если весы работают в режиме непрерывной передачи. Главная задача — «промотать» буфер до самого конца, чтобы считать последнюю, самую свежую посылку.

Рассмотрим пример кода, который предотвращает считывание старых показаний:


// Создаем объект внешней компоненты
Попытка
    ЗагрузитьВнешнююКомпоненту("vk_rs232.dll");
    Весы = СоздатьОбъект("AddIn.Rs232");
Исключение
    Сообщить("Ошибка загрузки компоненты vk_rs232.dll");
КонецПопытки;

// Функция для получения актуального веса
Функция ПолучитьТекущийВес()
    // 1. Очищаем старые данные из порта (проматываем буфер)
    ВременнаяСтрока = "";
    Пока Весы.ДанныеВПорту() > 0 Цикл
        ВременнаяСтрока = Весы.ЧитатьСтроку(); // Читаем и выбрасываем
    КонецЦикла;
    
    // 2. Ждем короткую паузу, чтобы пришла свежая посылка
    // В 7.7 паузу можно реализовать через пустой цикл или внешнюю компоненту
    Для ии = 1 По 1000 Цикл
        // Небольшая задержка
    КонецЦикла;
    
    // 3. Теперь читаем свежие данные
    Посылка = Весы.ЧитатьСтроку();
    
    // 4. Парсим строку (для НВТ-9 обычно ищем символы конца строки и статус)
    // Примерная логика выделения числа:
    ЧистыйВес = СокрЛП(Сред(Посылка, 3, 7)); 
    Возврат Число(ЧистыйВес);
КонецФункции

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

Проблема стабилизации и «головы» весов

Иногда даже при правильном коде вес «скачет» или не обновляется. Выясним причину в настройках фильтрации. У весов НВТ-9 есть внутренние настройки цифровой фильтрации (параметры группы P1, P2). Если фильтрация слишком сильная, весы долго «думают», прежде чем признать вес стабильным и обновить данные в порту.

Важный совет: Если переоткрытие порта методом ЗакрытьПорт() / ОткрытьПорт() не помогает, значит, проблема в прошивке самого весового индикатора или в аппаратной части. Проверьте распайку кабеля RS-232. Для весов Невского завода стандартная распиновка: 2-3, 3-2, 5-5. Однако в некоторых случаях требуется соединение контактов 7-8 на стороне разъема весов для управления потоком данных.

Заключение и рекомендации

Подведем итоги. Чтобы весы НВТ-9 корректно отдавали вес в 1С 7.7, выполните следующие шаги:

  1. Проверьте настройки весов: установите P4=9600 и попробуйте режим P5=2.
  2. В коде 1С перед основным чтением обязательно добавьте цикл очистки буфера (чтение «в пустоту»).
  3. Если весы все равно «тормозят», обратитесь в сервис для обновления прошивки весового процессора, так как старые версии ПО индикатора могли иметь баги в протоколе передачи.
  4. Убедитесь, что используемая компонента vk_rs232.dll корректно настроена на параметры четности и стоповых битов (обычно это 8-N-1).

Использование связки 1С 7.7 и современного оборудования вполне реально, если учитывать специфику работы последовательного интерфейса и своевременно очищать очередь входящих сообщений. Для интеграции аналогичного оборудования также можно использовать специализированную внешнюю компоненту для подключения весовых терминалов Т3 и Т9.

← На главную