cppsimulationfault-tolerancesqlitepcan

[Multi-Protocol Sensor Acquisition] 가상 재생(Playback) 환경 구축 및 데이터 복구 Fallback 구조 통합

2 min read

현장 데이터를 활용한 실시간 시뮬레이션을 위해 Playback 모드를 구축함. 더불어 하드웨어 통신 단절에 대비한 자동 복구 워치독과 센서 결측치 대응을 위한 계층적 Fallback 방어 로직을 통합하여 시스템 복원력을 강화함.

[C++ / Simulator] 절대 시각 앵커링 기반 데이터 Playback 시뮬레이션 환경

  • 재생 시뮬레이션 중 OS 스케줄링으로 인해 발생하는 누적 오차(Drift)를 차단하기 위해 동기화 아키텍처를 전면 개편함.
  • CAN 프레임에 타임스탬프 필드를 추가하고, 기 확보된 테스트 차량의 정합성 검증용 OBD 주행 데이터를 CAN 메시지 규격으로 재조립하여 Playback 모드로 통합 테스트를 수행함.
  • 증분형 델타 계산을 제거하고 baseFrameTime_baseRealTime_ 기반의 절대 시각 앵커링 메커니즘 적용.
  • 타임스탬프를 13자리 Unix Epoch 정수형으로 변환하여 로컬 데이터베이스에 저장함으로써 시계열 호환성을 개선함.

[C++ / Hardware] 통신 결함 허용(Fault Tolerance)을 위한 워치독 아키텍처

  • 물리적 네트워크 충돌과 컨트롤러 다운 상황에서 시스템이 중단되지 않고 스스로 회복하도록 조치함.
  • PCAN_ERROR_BUSOFF 및 통신 단절 발생 시, 무한 재연결을 시도하는 하드웨어 워치독 구현.
  • 차량 네트워크에 간섭을 일으키지 않기 위해 초기화 단계에서 PCAN_LISTEN_ONLY 모드 강제 적용 및 소프트웨어 비트 필터링 로직 추가.

[C++ / Pipeline] 센서 결측치 대응을 위한 다단계 Fallback 방어 로직

  • 주요 센서 데이터가 유실되었을 때 대체 데이터를 동적으로 매핑하는 방어 구조를 적용함.
  • 1순위 타겟 데이터 유실 시 2순위 데이터로 전환하고, 모두 유실될 경우 NA_VALUE로 처리하는 다중 FallbackStep 구조 적용.
  • 고정 임계값 필터링을 제거하고, 동적 isValid 람다 함수를 통해 SPN별 최대 허용치를 초과하는 비정상 데이터를 필터링함.

[SQLite / WAL] 트랜잭션 커서 트래킹 및 논블로킹 데이터 플러시 알고리즘

  • 처리 진행 상태를 별도로 추적하는 Cursor.dbCarPosition 테이블 아키텍처 분리.
  • 소멸자 종료 시점에 의존하던 트랜잭션 커밋 로직을 개편하여, 배치 플러시 직후 pushData()를 호출하고 PRAGMA wal_checkpoint(TRUNCATE)를 수행하도록 수정.
  • SIGINT 시그널 핸들러와 std::atomic<bool> 변수를 결합하여 예기치 않은 종료에도 데이터 유실이 없도록 파이프라인 안전 종료 메커니즘 구축.