lift_indicator_suite/tests/target/hil_opto
2026-07-09 10:07:04 +03:00
..
CMakeLists.txt # 13 Слой bsp_opto 2026-03-26 17:54:54 +03:00
main.c # bootloader: target test docs 2026-07-09 10:07:04 +03:00
README.md # bootloader: target test docs 2026-07-09 10:07:04 +03:00

test_hil_opto

Модуль под тестом

bsp/opto — HIL-прошивка test_hil_opto (main.c), поднимающая CLI (OPTO_READ <1|2|3>, OPTO_EVENTS, OPTO_LAST_EVENT, OPTO_RESET_EVENTS) поверх трёх реальных оптоизолированных входов (PS2801-4, active-HIGH). bsp_opto_process() крутится в главном цикле каждую итерацию. Прошивка не содержит проверок — она исполняет команды и считает callback-события; assert'ы находятся в pytest на хосте.

Категория

HIL, требует стенд M5StampPLC — реле M5 физически замыкают/размыкают цепи оптопар таргета (EXT_IN1/EXT_IN2/RS_RX, точный маппинг реле↔канал — см. docs/testing/hil/HIL_BENCH.md и tools/hil/m5/agent.py). M5 также управляет питанием таргета (RLY1).

Моки

Программных моков нет — тестируется реальная электрическая цепь оптопар. Роль стимула играет M5StampPLC под управлением MicroPython-агента (tools/hil/m5/agent.py): pytest дистанционно щёлкает реле через JSON-команды по USB CDC (m5.opto_set(ch, bool), m5.opto_all_off(), фикстура m5 в conftest.py). Все проверки — в tools/hil/02_test_opto.py.

Что проверяется

  • Connectivity — таргет отвечает на PING, M5-агент отвечает на ping.
  • Состояние по умолчанию — все три канала INACTIVE без внешнего воздействия.
  • Активация/деактивация каждого канала по отдельности (реле ON → ACTIVE, реле OFF → INACTIVE) и изоляция — активация одного канала не меняет состояние остальных.
  • Callback-события — включение/выключение реле генерирует минимум одно событие с правильным каналом и состоянием (проверяет цепочку ISR → debounce → bsp_opto_process() → callback), OPTO_RESET_EVENTS обнуляет счётчик, OPTO_LAST_EVENT сообщает верный канал при срабатывании нескольких каналов подряд.

Гарантии

  • Физическое замыкание/размыкание оптопары надёжно регистрируется через ISR + программный debounce (10 мс) и доходит до пользовательского callback.
  • Каналы физически и логически независимы — воздействие на один не влияет на показания и события других.
  • Без внешнего воздействия состояние стабильно INACTIVE на всех каналах.

Запуск

just build::build-hil    # в devcontainer: собрать HIL-прошивки
just host::m5-deploy     # один раз / после правок agent.py: залить агент на M5
just host::hil-opto      # на хосте: прошить по SWD и прогнать тест

Требует MicroPython v1.25 на M5StampPLC (tools/hil/m5/firmware/v1.25/) — в v1.27 модуль CAN недоступен и agent.py не стартует корректно.