#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.

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