База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Почему ответ от весов приходит без точки остановки и как это исправить?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33792
      Телеграм группа https://t.me/odineskiOdineski
      Участник

      Функция ОтправитьКомандуНаВесы() Экспорт
      // — Настройки —
      АдресВесов = Объект.АдресВесов; // IP и порт твоих весов
      Команда = «S»; // Команда MT-SICS (немедленный вес)
      //Таймаут = 5000; // мс ожидания ответа

      // — Подключаемся к весам через TCP —
      Соединение = OPI_TCP.ОткрытьСоединение(АдресВесов);
      // — Отправляем команду —
      // MT-SICS требует CRLF (rn) после каждой команды
      Данные = Команда + Символы.ВК + Символы.ПС;
      OPI_TCP.ОтправитьСтроку(Соединение, Данные, «ASCII»);
      // — Читаем ответ до CRLF —
      Ответ = OPI_TCP.ПрочитатьСтроку(Соединение, «ASCII»);
      // — Показываем результат —
      Если Не ЗначениеЗаполнено(Ответ) Тогда
      Сообщить(«Нет ответа от весов — проверь соединение или CRLF.»);
      Иначе
      Объект.Вывод = Ответ;

      ПРоблема с точкой остановы мне приходит ответ без нет в чем проблема или нужен таймаут или как?
      КонецЕсли;
      // — Закрываем соединение —
      OPI_TCP.ЗакрытьСоединение(Соединение);
      КонецФункции

    • #33793
      bot_avaOdin — Одинэсник
      Участник

      Ответ:

      При работе с весами по протоколу MT-SICS через TCP важно учитывать, что весы могут не сразу отправлять полный ответ после получения команды, а формировать его с небольшой задержкой. Если функция сразу после отправки команды пытается прочитать ответ, то может получить неполные данные — например, без ожидаемой точки остановы (CRLF или другого завершающего символа).

      Основные причины и рекомендации:

      1. **Отсутствие таймаута ожидания ответа**
      В вашем коде нет явного ожидания или таймаута перед чтением ответа. Весы могут формировать ответ с задержкой, и если читать сразу — получите неполный ответ.
      Решение: добавить ожидание (таймаут) перед чтением или реализовать цикл чтения с проверкой окончания ответа.

      2. **Неправильный формат окончания команды или ответа**
      MT-SICS требует окончания команды CRLF (rn), вы используете Символы.ВК + Символы.ПС — это rn, что правильно. Но стоит проверить, что весы действительно ожидают именно такой формат. Иногда требуется дополнительная проверка документации весов.

      3. **Чтение ответа по частям**
      Возможно, ответ весов приходит по частям, и OPI_TCP.ПрочитатьСтроку читает только первую часть. Нужно реализовать чтение в цикле, пока не будет получен полный ответ (например, до CRLF).

      4. **Проверка кодировки**
      Вы используете »ASCII», убедитесь, что весы действительно работают с этой кодировкой. Иногда требуется »UTF-8″ или другая.

      5. **Проверка соединения и буферов**
      Убедитесь, что соединение стабильно, и буферы не переполняются.

      Пример улучшенного варианта с таймаутом и циклом чтения:

      **Итог:**
      Да, нужен таймаут и/или цикл ожидания полного ответа от весов. Без этого вы рискуете получить неполный ответ без точки остановы. Также проверьте корректность формата команд и ответов, а также стабильность соединения.

      Рекомендую посмотреть здесь:
      https://helpf.pro/faq/view/920.html (пример работы с COM-объектами и таймаутами)
      и документацию к вашим весам по протоколу MT-SICS.

      Если нужна помощь с конкретным кодом или настройкой — обращайтесь.

Просмотр 1 ветки ответов
  • Для ответа в этой теме необходимо авторизоваться.