docs: пояснения почему выбрана такая логика (reasoning)
This commit is contained in:
+14
-3
@@ -120,7 +120,14 @@ class AndrOBD:
|
||||
# ── Приватные методы ──────────────────────────────────
|
||||
|
||||
def _exec(self, cmd: str, timeout: int) -> str:
|
||||
"""Выполнить команду с таймаутом и ретраями (до 10 попыток)."""
|
||||
"""Выполнить команду ELM327 с ретраями (до 10 попыток).
|
||||
|
||||
Архитектура AndrOBD: ELM327 может не ответить, если:
|
||||
- Адаптер ещё не инициализирован (SEARCHING)
|
||||
- ЭБУ медленно отвечает (увеличиваем AdaptiveTiming)
|
||||
- Плохой контакт / потеря связи (Busy→Timeout→Error)
|
||||
10 ретраев — жёсткий лимит из AndrOBD, после — ERROR.
|
||||
"""
|
||||
self._last_cmd = cmd
|
||||
self._write(cmd)
|
||||
t = timeout
|
||||
@@ -128,9 +135,11 @@ class AndrOBD:
|
||||
try:
|
||||
return self._handle(self._read(t))
|
||||
except TimeoutError:
|
||||
# Инициализация: каждый ретрай +1с (ELM может быть занят init)
|
||||
if self._state == State.INITIALIZING:
|
||||
t += 1000
|
||||
else:
|
||||
# Активный режим: растём таймаут адаптивно
|
||||
self._timing.increase()
|
||||
t = self._timing.ms
|
||||
logger.error(f"AndrOBD: no response for {cmd}")
|
||||
@@ -138,9 +147,9 @@ class AndrOBD:
|
||||
return ""
|
||||
|
||||
def _handle(self, raw: str) -> str:
|
||||
"""Обработать ответ ELM327: классифицировать и обновить таймаут.
|
||||
"""Обработать ответ ELM327: классификация → обновление таймаута.
|
||||
|
||||
Возвращает raw как есть — обработка данных делается выше.
|
||||
Возвращает raw как есть — декодирование данных на уровень выше.
|
||||
"""
|
||||
t = Rsp.identify(raw)
|
||||
|
||||
@@ -150,6 +159,8 @@ class AndrOBD:
|
||||
self._timing.decrease()
|
||||
return raw
|
||||
if t == Rsp.NODATA:
|
||||
# NODATA = ЭБУ жив, но не может ответить (например, PID недоступен)
|
||||
# Увеличиваем таймаут — возможно ЭБУ медленный
|
||||
self._timing.increase()
|
||||
self._update_atst()
|
||||
return raw
|
||||
|
||||
Reference in New Issue
Block a user