| .. | ||
| CMakeLists.txt | ||
| main.c | ||
| README.md | ||
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 не стартует корректно.