|
|
|
|
# 7. 자동 시험 프로세스
|
|
|
|
|
|
|
|
|
|
[← 메뉴얼 목차로 돌아가기](사용자_메뉴얼.md)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 7.1 개요
|
|
|
|
|
|
|
|
|
|
자동 시험은 DIO 시작 신호(LEFT_START 또는 RIGHT_START)에 의해 트리거되며, 7단계로 진행됩니다. 좌/우 채널은 각각 독립적인 백그라운드 스레드에서 실행되지만, **세마포어 잠금**을 통해 동시 실행은 방지됩니다.
|
|
|
|
|
|
|
|
|
|
## 7.2 전체 프로세스 흐름도
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
DIO 시작 신호 감지 (LEFT_START 또는 RIGHT_START: OFF→ON)
|
|
|
|
|
│
|
|
|
|
|
▼
|
|
|
|
|
세마포어 잠금 대기 ──(잠금 불가)──→ "대기중" 메시지 표시
|
|
|
|
|
│ │
|
|
|
|
|
│ (잠금 획득) │ (다른 채널 완료 후 자동 진행)
|
|
|
|
|
▼ ▼
|
|
|
|
|
┌──────────────────────────────────────────────────────┐
|
|
|
|
|
│ 1단계: 시험 시작 │
|
|
|
|
|
│ · OK/NG DIO 출력 초기화 (OFF) │
|
|
|
|
|
│ · 메인 화면 결과 표시 초기화 │
|
|
|
|
|
│ · 시작 시간 갱신 │
|
|
|
|
|
│ · C28 LEAK 센서 수신 이벤트 초기화 │
|
|
|
|
|
└──────────────┬───────────────────────────────────────┘
|
|
|
|
|
▼
|
|
|
|
|
┌──────────────────────────────────────────────────────┐
|
|
|
|
|
│ 2단계: 센서 정보 읽기 │
|
|
|
|
|
│ · 4251 보드를 통해 ZMDI 센서에서 제품 ID 판독 │
|
|
|
|
|
│ · ID를 메인 화면에 표시 │
|
|
|
|
|
│ · ID 읽기 실패 시: "ID 읽기 실패" 오류 출력 후 │
|
|
|
|
|
│ "NG" 판정으로 DB 비동기 저장 및 조기 종료 (Skip) │
|
|
|
|
|
│ (DB 저장 실패 시 "DB 저장 실패" 문구 표시) │
|
|
|
|
|
└──────────────┬───────────────────────────────────────┘
|
|
|
|
|
▼
|
|
|
|
|
┌──────────────────────────────────────────────────────┐
|
|
|
|
|
│ 3단계: LEAK 시험 수행 │
|
|
|
|
|
│ · "LEAK 시험중" 메시지 표시 │
|
|
|
|
|
│ · Sentinel C28 센서의 최종 결과(Auto Result) 대기 │
|
|
|
|
|
│ · 최대 대기 시간: 30초 │
|
|
|
|
|
│ · 타임아웃 시: NG 판정 + "Sentinel C28 통신 타임아웃" │
|
|
|
|
|
│ (DB 저장 실패 시 "DB 저장 실패" 문구 표시) │
|
|
|
|
|
└──────────────┬───────────────────────────────────────┘
|
|
|
|
|
▼
|
|
|
|
|
┌──────────────────────────────────────────────────────┐
|
|
|
|
|
│ 4단계: 판정 │
|
|
|
|
|
│ · SPEC LL ≤ 측정값 ≤ SPEC UL → OK │
|
|
|
|
|
│ · 범위 밖 → NG │
|
|
|
|
|
└──────────────┬───────────────────────────────────────┘
|
|
|
|
|
▼
|
|
|
|
|
┌──────────────────────────────────────────────────────┐
|
|
|
|
|
│ 5단계: SPEC 교차 검증 │
|
|
|
|
|
│ · 프로그램 판정과 센서 자체 판정 비교 │
|
|
|
|
|
│ · 센서 판정 정규화: OK/A/P → Accept, NG/R/F → Reject │
|
|
|
|
|
│ · 불일치 시: SpecMismatch = true → 팝업 경고 │
|
|
|
|
|
└──────────────┬───────────────────────────────────────┘
|
|
|
|
|
▼
|
|
|
|
|
┌──────────────────────────────────────────────────────┐
|
|
|
|
|
│ 6단계: 결과 출력 및 저장 │
|
|
|
|
|
│ · CSV 로그 파일에 검사 데이터 기록 │
|
|
|
|
|
│ · MSSQL 중앙 데이터베이스 비동기 저장 │
|
|
|
|
|
│ · DB 저장 실패 시: 오류 메시지 칸에 "DB 저장 실패" 표시 │
|
|
|
|
|
│ · DIO OK 또는 NG 출력 ON │
|
|
|
|
|
│ · 메인 화면에 측정값, 판정 결과 표시 │
|
|
|
|
|
│ · "시험 완료" 메시지 표시 │
|
|
|
|
|
└──────────────────────────────────────────────────────┘
|
|
|
|
|
│
|
|
|
|
|
▼
|
|
|
|
|
세마포어 잠금 해제 → 대기 중인 다른 채널이 있으면 자동 시작
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 7.3 순차 실행 (세마포어 잠금)
|
|
|
|
|
|
|
|
|
|
좌/우 채널은 **동시에 시험을 수행할 수 없습니다**. 이는 하드웨어 통신 충돌을 방지하기 위함입니다.
|
|
|
|
|
|
|
|
|
|
| 상황 | 동작 |
|
|
|
|
|
|------|------|
|
|
|
|
|
| 한 채널만 시작 신호 | 즉시 시험 시작 |
|
|
|
|
|
| 양쪽 동시 시작 신호 | 먼저 잠금을 획득한 채널이 시험 진행, 다른 채널은 "대기중" 표시 |
|
|
|
|
|
| 시험 완료 후 | 대기 중인 채널이 자동으로 시험 시작 (350ms 안정화 대기 후) |
|
|
|
|
|
|
|
|
|
|
> **참고**: 하드웨어 통신 안정화를 위해, 이전 채널 시험 종료 후 **350ms의 여유 시간**이 자동으로 적용됩니다.
|
|
|
|
|
|
|
|
|
|
## 7.4 타임아웃 처리
|
|
|
|
|
|
|
|
|
|
Sentinel C28 센서에서 30초 이내에 응답이 없으면:
|
|
|
|
|
|
|
|
|
|
1. "Sentinel C28 통신 타임아웃" 오류 메시지 표시 (DB 저장 실패 시 "DB 저장 실패"도 오류 메시지에 추가 표시)
|
|
|
|
|
2. 해당 채널 DIO `NG` 출력 ON
|
|
|
|
|
3. 측정값 `0.0000`, 판정 `NG`, 센서판정 `T/O` (Timeout)로 기록
|
|
|
|
|
4. CSV 로그 파일 및 MSSQL 데이터베이스에 NG 결과 비동기 기록
|
|
|
|
|
|
|
|
|
|
## 7.5 C28 센서 결과 채널 라우팅
|
|
|
|
|
|
|
|
|
|
Sentinel C28 센서에서 수신한 데이터는 채널 번호(ChannelNo)로 구분됩니다:
|
|
|
|
|
|
|
|
|
|
| 채널 번호 | 대상 |
|
|
|
|
|
|----------|------|
|
|
|
|
|
| `C01` 또는 `1` | LEFT 채널 |
|
|
|
|
|
| `C02` 또는 `2` | RIGHT 채널 |
|
|
|
|
|
| 채널 번호 없음 | 현재 활성화된(시험 중인) 채널로 자동 할당 |
|
|
|
|
|
|
|
|
|
|
## 7.6 ID 수동 테스트
|
|
|
|
|
|
|
|
|
|
하단 메뉴의 **ID Test (L)** 또는 **ID Test (R)** 버튼으로 DIO 시작 신호 없이 센서 ID 판독만 수행할 수 있습니다.
|
|
|
|
|
|
|
|
|
|
### 실행 흐름
|
|
|
|
|
1. 세마포어 잠금 획득 (다른 채널 시험 중이면 대기)
|
|
|
|
|
2. 결과 표시 초기화
|
|
|
|
|
3. 500ms 대기 (UI 피드백용)
|
|
|
|
|
4. "센서 정보 읽는 중" 메시지 표시
|
|
|
|
|
5. 4251 보드를 통해 ZMDI 센서 ID 판독
|
|
|
|
|
6. 성공 시: ID 표시 + "ID 테스트 완료"
|
|
|
|
|
7. 실패 시: ID를 "-"로 표시 + "ID 테스트 실패"
|
|
|
|
|
8. 세마포어 잠금 해제
|
|
|
|
|
|
|
|
|
|
> **용도**: 설치 후 하드웨어 연결 상태 확인, 디버깅 시 활용합니다. LEAK 시험(3~6단계)은 수행하지 않습니다.
|
|
|
|
|
|
|
|
|
|
## 7.7 SPEC 교차 검증 및 판정 저장 기준
|
|
|
|
|
|
|
|
|
|
시험 과정에서 프로그램(UI) 판정과 C28 센서 자체의 판정이 불일치하는 경우, 데이터베이스 및 로그 저장의 기준은 다음과 같습니다.
|
|
|
|
|
|
|
|
|
|
### 저장 기준 요약
|
|
|
|
|
* **최종 저장 판정 (Result)**: C28 센서 자체의 판정값과 무관하게, 항상 **프로그램(UI) 판정 기준(`programJudgment`)**으로 데이터베이스 및 로그에 저장됩니다.
|
|
|
|
|
* **동작 예시**: UI 상으로 합격(`OK`)이지만 C28 센서 자체적으로는 불합격(`NG`/`R`)인 경우, 최종 DB(`Result` 컬럼) 및 CSV 로그에는 **`OK` (합격)**로 저장됩니다.
|
|
|
|
|
|
|
|
|
|
### 교차 검증 실패 시의 동작 (Spec Mismatch)
|
|
|
|
|
* 프로그램 판정과 센서 자체 판정이 다르면 `specMismatch` 플래그가 `true`로 설정됩니다.
|
|
|
|
|
* 불일치 발생 시 콘솔 로그에 경고(`[TestProcess] {side} SPEC Mismatch!`)를 출력하고 UI 완료 이벤트 인자로 전달되지만, **DB에 저장되는 최종 판정 결과(`Result`)에는 영향을 미치지 않고 프로그램 판정값을 유지**합니다.
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
[← 이전: 측정 데이터 조회](06_데이터_조회.md) | [다음: 로그 관리 →](08_로그_관리.md)
|