База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Почему ответ от весов приходит без точки остановки и как это исправить?
- В этой теме 1 ответ, 2 участника, последнее обновление 3 часа, 25 минут назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
22 октября 2025 в 8:45 #33792
Odineski
УчастникФункция ОтправитьКомандуНаВесы() Экспорт
// — Настройки —
АдресВесов = Объект.АдресВесов; // IP и порт твоих весов
Команда = «S»; // Команда MT-SICS (немедленный вес)
//Таймаут = 5000; // мс ожидания ответа// — Подключаемся к весам через TCP —
Соединение = OPI_TCP.ОткрытьСоединение(АдресВесов);
// — Отправляем команду —
// MT-SICS требует CRLF (rn) после каждой команды
Данные = Команда + Символы.ВК + Символы.ПС;
OPI_TCP.ОтправитьСтроку(Соединение, Данные, «ASCII»);
// — Читаем ответ до CRLF —
Ответ = OPI_TCP.ПрочитатьСтроку(Соединение, «ASCII»);
// — Показываем результат —
Если Не ЗначениеЗаполнено(Ответ) Тогда
Сообщить(«Нет ответа от весов — проверь соединение или CRLF.»);
Иначе
Объект.Вывод = Ответ;ПРоблема с точкой остановы мне приходит ответ без нет в чем проблема или нужен таймаут или как?
КонецЕсли;
// — Закрываем соединение —
OPI_TCP.ЗакрытьСоединение(Соединение);
КонецФункции -
22 октября 2025 в 8:45 #33793
Odin — Одинэсник
УчастникОтвет:
При работе с весами по протоколу MT-SICS через TCP важно учитывать, что весы могут не сразу отправлять полный ответ после получения команды, а формировать его с небольшой задержкой. Если функция сразу после отправки команды пытается прочитать ответ, то может получить неполные данные — например, без ожидаемой точки остановы (CRLF или другого завершающего символа).
Основные причины и рекомендации:
1. **Отсутствие таймаута ожидания ответа**
В вашем коде нет явного ожидания или таймаута перед чтением ответа. Весы могут формировать ответ с задержкой, и если читать сразу — получите неполный ответ.
Решение: добавить ожидание (таймаут) перед чтением или реализовать цикл чтения с проверкой окончания ответа.2. **Неправильный формат окончания команды или ответа**
MT-SICS требует окончания команды CRLF (rn
), вы используетеСимволы.ВК + Символы.ПС
— этоrn
, что правильно. Но стоит проверить, что весы действительно ожидают именно такой формат. Иногда требуется дополнительная проверка документации весов.3. **Чтение ответа по частям**
Возможно, ответ весов приходит по частям, иOPI_TCP.ПрочитатьСтроку
читает только первую часть. Нужно реализовать чтение в цикле, пока не будет получен полный ответ (например, до CRLF).4. **Проверка кодировки**
Вы используете»ASCII»
, убедитесь, что весы действительно работают с этой кодировкой. Иногда требуется»UTF-8″
или другая.5. **Проверка соединения и буферов**
Убедитесь, что соединение стабильно, и буферы не переполняются.Пример улучшенного варианта с таймаутом и циклом чтения:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637381CФункция ОтправитьКомандуНаВесы() ЭкспортАдресВесов = Объект.АдресВесов;Команда = "S";Таймаут = 5000; // 5 секундИнтервалОжидания = 100; // мсМаксимумПопыток = Таймаут / ИнтервалОжидания;Соединение = OPI_TCP.ОткрытьСоединение(АдресВесов);Если Не ЗначениеЗаполнено(Соединение) ТогдаСообщить("Не удалось открыть соединение с весами");Возврат Ложь;КонецЕсли;Данные = Команда + Символы.ВК + Символы.ПС;OPI_TCP.ОтправитьСтроку(Соединение, Данные, "ASCII");Ответ = "";Попытка = 0;Пока Попытка 0 ТогдаПрервать;КонецЕсли;КонецЕсли;Попытка = Попытка + 1;Пауза(ИнтервалОжидания);КонецЦикла;Если НЕ ЗначениеЗаполнено(Ответ) ТогдаСообщить("Нет ответа от весов — проверь соединение или CRLF.");OPI_TCP.ЗакрытьСоединение(Соединение);Возврат Ложь;ИначеОбъект.Вывод = Ответ;КонецЕсли;OPI_TCP.ЗакрытьСоединение(Соединение);Возврат Истина;КонецФункции**Итог:**
Да, нужен таймаут и/или цикл ожидания полного ответа от весов. Без этого вы рискуете получить неполный ответ без точки остановы. Также проверьте корректность формата команд и ответов, а также стабильность соединения.Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/920.html (пример работы с COM-объектами и таймаутами)
и документацию к вашим весам по протоколу MT-SICS.—
Если нужна помощь с конкретным кодом или настройкой — обращайтесь.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.