# Pressure Leak Inspect System - 사용자 메뉴얼
> **버전**: 1.0.0 | **최종 수정**: 2026-06-25
---
## 메뉴얼 목차
본 메뉴얼은 각 주제별로 별도 문서로 구성되어 있습니다. 아래 링크를 클릭하여 해당 문서로 이동하세요.
| 번호 | 문서 | 설명 |
|------|------|------|
| 1 | [시스템 개요 및 요구사항](#1-시스템-개요-및-요구사항) | 프로그램 소개, 주요 기능, 하드웨어/소프트웨어 요구사항, DIO 신호 매핑 |
| 2 | [초기 설정 가이드](#2-초기-설정-가이드) | 설치 전 준비, 로그인 및 프로그램 실행, 최초 설정 순서 (통신→시험→동작 테스트) |
| 3 | [메인 화면 (Home View)](#3-메인-화면-home-view) | 타이틀 바(작업자/모델/라인 정보 배지 및 로그아웃), 좌/우 채널 모니터링 영역, 하단 메뉴 바 상세 설명 |
| 4 | [통신 설정 (Comm. Settings)](#4-통신-설정-comm-settings) | 4251 보드 및 Sentinel C28 센서의 COM 포트/BaudRate 설정 방법 |
| 5 | [시험 설정 (Parameters)](#5-시험-설정-parameters) | SPEC UL/LL 판정 규격값 설정 방법 |
| 6 | [측정 데이터 조회 (Data View)](#6-측정-데이터-조회-data-view) | 검사 기록 검색, 필터링, CSV 내보내기 방법 |
| 7 | [자동 시험 프로세스](#7-자동-시험-프로세스) | 7단계 자동 시험 흐름, 순차 실행, ID 수동 테스트 |
| 8 | [로그 및 데이터 관리](#8-로그-및-데이터-관리) | 검사 데이터 로그, 시스템 로그, 설정 파일 구조 |
| 9 | [오류 대응 및 프로그램 종료](#9-오류-대응-및-프로그램-종료) | 통신 오류, 시험 중 오류, DIO 보드 오류 대응, 종료 절차 |
---
## 빠른 시작 가이드 (Quick Start)
처음 사용하는 경우 아래 순서를 따르세요:
1. **하드웨어 연결 확인** → [시스템 개요 및 요구사항](#1-시스템-개요-및-요구사항) 참조
2. **프로그램 실행 및 로그인** → `leak_test_project.exe` 실행 후 로그인 완료 (오프라인 테스트는 `Database.ini`에서 `OfflinePreview=true` 설정)
3. **통신 설정** → 하단 메뉴 `Comm. Settings` → COM 포트 선택 → `설정 저장`
4. **시험 설정** → 하단 메뉴 `Parameters` → SPEC UL/LL 입력 → `설정 저장`
5. **시험 시작** → DIO 시작 신호 또는 `ID Test (L/R)` 버튼으로 동작 확인
---
*본 문서는 Pressure Leak Inspect System v1.0.0 기준으로 작성되었습니다.*
# 1. 시스템 개요 및 요구사항
---
## 1.1 시스템 개요
**Pressure Leak Inspect System**은 제품의 압력 누설(Leak)을 자동으로 검사하는 WPF 기반 데스크탑 애플리케이션입니다. 생산 라인에서 DIO 시작 신호를 받아 제품 ID를 판독하고, 누설 시험을 수행한 뒤 합격/불합격을 자동 판정합니다.
### 주요 기능 요약
| 기능 | 설명 |
| ------------------- | ---------------------------------------------------- |
| **좌/우 2채널 관리** | LEFT / RIGHT 두 개의 독립적인 시험 채널을 운영합니다 |
| **자동 시험 프로세스** | DIO 시작 신호 감지 → ID 판독 → 누설 시험 → 판정 → 결과 출력까지 전 과정 자동화 |
| **Sentinel C28 연동** | RS-232 시리얼 통신으로 누설 센서의 실시간 측정값을 수신합니다 |
| **4251 보드 연동** | 제품 ID 판독을 위한 시리얼 통신을 수행합니다 |
| **PCI-7432 DIO 보드** | 디지털 입출력 제어 (시작 신호 수신, OK/NG 출력) |
| **검사 기록 관리** | 날짜/판정/ID별 필터링 검색 및 CSV 파일 내보내기를 지원합니다 |
| **SPEC 교차 검증** | 프로그램 판정과 센서 자체 판정을 비교하여 불일치 시 경고합니다 |
| **순차 실행 보장** | 세마포어 잠금으로 좌/우 채널 동시 시험을 방지합니다 |
---
## 1.2 소프트웨어 요구사항
| 항목 | 요구사항 | 비고 |
|------|----------|------|
| **운영체제** | Windows 10 이상 (64bit 권장) | 32bit도 지원 가능 |
| **.NET Framework** | 4.7.2 이상 | Windows 10에 기본 포함 |
| **드라이버** | ADLINK PCIS-DASK 드라이버 | `PCI-Dask.dll` 필요 |
| **시리얼 포트** | 최소 2개의 COM 포트 | C28 센서용 + 4251 보드용 |
| **화면 해상도** | 1024×768 이상 | 최대화 실행 시 1920×1080 권장 |
> **참고**: ADLINK 드라이버가 설치되지 않은 환경에서는 프로그램이 **시뮬레이션 모드**로 자동 전환됩니다. 이 경우 DIO 입출력은 동작하지 않지만, 프로그램의 나머지 기능은 정상적으로 사용할 수 있습니다.
---
## 1.3 하드웨어 구성
| 장비 | 모델명 | 용도 | 통신 방식 |
|------|--------|------|-----------|
| **DIO 보드** | ADLINK PCI-7432 | 디지털 입출력 (시작 신호 수신, OK/NG 결과 출력) | PCI 슬롯 장착 |
| **ID 판독 보드** | 4251 | 제품 ID 데이터 판독 | RS-232 시리얼 (COM 포트) |
| **누설 센서** | Sentinel C28 | 압력 누설량(sccm) 측정 | RS-232 시리얼 (COM 포트) |
### 케이블 연결도
본체 PC
RS-232 통신 ➔
Sentinel C28 센서
RS-232 통신 ➔
4251 보드 (ID 리더)
PCI 슬롯 ══➔
ADLINK PCI-7432
---
## 1.4 DIO 신호 매핑
### 입력 신호 (Inputs) - PCI-7432
| 주소 | 신호명 | 동작 | 설명 |
|------|--------|------|------|
| 0 | `LEFT_START` | OFF→ON 감지 | 좌측 채널 시험 시작 트리거 |
| 1 | `RIGHT_START` | OFF→ON 감지 | 우측 채널 시험 시작 트리거 |
> **동작 원리**: 시작 신호가 OFF→ON으로 전환되는 순간(Rising Edge)을 감지하여 시험을 시작합니다.
### 출력 신호 (Outputs) - PCI-7432
| 주소 | 신호명 | 초기값 | 설명 |
|------|--------|--------|------|
| 0 | `LEFT_OK` | OFF | 좌측 합격 시 ON 출력 |
| 1 | `RIGHT_OK` | OFF | 우측 합격 시 ON 출력 |
| 2 | `PC_ON` | **ON** | PC 가동 상태 신호 (프로그램 실행 시 자동 ON) |
| 3 | `LEFT_NG` | OFF | 좌측 불합격 시 ON 출력 |
| 4 | `RIGHT_NG` | OFF | 우측 불합격 시 ON 출력 |
> **참고**: `PC_ON` 신호는 프로그램 시작 시 자동으로 ON이 되며, 프로그램 종료 시 자동으로 OFF됩니다. 이를 통해 외부 시스템이 PC의 가동 상태를 확인할 수 있습니다.
> **참고**: 시험이 시작되면 해당 채널의 OK/NG 출력이 모두 OFF로 초기화된 후, 판정 완료 시 해당 결과에 맞는 출력만 ON됩니다.
---
## 1.5 프로그램 창 구조 개요
프로그램은 3개의 영역으로 구성됩니다:
상단 타이틀 바 (프로그램명, 시간, 배지, 창 제어)
메인 콘텐츠 영역
(Home / Data View 전환)
하단 메뉴 바 (Data, Parameters, Comm.Settings, ID Test L/R)
| 영역 | 설명 |
|------|------|
| 상단 타이틀 바 | 프로그램 제목, 실시간 날짜/시간, 현재 로그인된 작업자/모델/라인 정보 배지, 세션 로그아웃 버튼, 시스템 창 제어 버튼 배치 |
| 메인 콘텐츠 영역 | 선택된 기능 화면(Home 검사 모니터 또는 Data 데이터 조회)이 표시되는 주 콘텐츠 영역 |
| 하단 메뉴 바 | 각 화면 전환 및 설정을 위한 조작 버튼 영역 |
# 2. 초기 설정 가이드
---
## 2.1 설치 전 준비사항 체크리스트
프로그램을 실행하기 전에 아래 항목을 모두 확인하세요:
| # | 확인 항목 | 확인 방법 | 비고 |
|---|----------|----------|------|
| 1 | ADLINK PCIS-DASK 드라이버 설치 완료 | Windows 장치 관리자에서 PCI-7432 인식 확인 | 미설치 시 시뮬레이션 모드로 동작 |
| 2 | Sentinel C28 센서 시리얼 케이블 연결 | 장치 관리자 → 포트(COM & LPT)에서 COM 포트 번호 확인 | RS-232 케이블 사용 |
| 3 | 4251 보드 시리얼 케이블 연결 | 장치 관리자 → 포트(COM & LPT)에서 COM 포트 번호 확인 | RS-232 케이블 사용 |
| 4 | PCI-7432 DIO 보드 장착 | 장치 관리자에서 ADLINK PCI-7432 인식 확인 | PCI 슬롯에 장착 |
| 5 | COM 포트 번호 메모 | C28 센서와 4251 보드 각각의 COM 포트 번호를 기록 | 설정 시 필요 |
> **⚠️ 중요**: C28 센서와 4251 보드는 **서로 다른 COM 포트**에 연결해야 합니다. 동일한 포트를 지정하면 통신 충돌이 발생합니다.
---
## 2.2 프로그램 실행
### 실행 방법
1. `leak_test_project.exe` 파일을 **더블 클릭**하여 실행합니다.
2. 프로그램이 전체화면(Maximized) 모드로 시작됩니다.
### 최초 실행 시 자동 생성되는 파일
| 파일 | 위치 | 설명 |
|------|------|------|
| `config.xml` | 프로그램 실행 폴더 | 통신 포트, BaudRate, SPEC 값 등 모든 설정을 저장 |
| `Settings/DioConfig.ini` | Settings 하위 폴더 | DIO 보드 타입, 입출력 포인트 정의 |
### 프로그램 시작 시 자동 수행 동작
프로그램이 실행되면 아래 동작이 자동으로 수행됩니다:
1. DIO 보드 초기화
PCI-7432 보드를 확인하며, 실패 시 시뮬레이션 모드로 전환
2. PC_ON 출력 신호 ON
외부 설비에 PC 가동 상태를 실시간 알림
3. 설정값 로드
`config.xml` 파일로부터 통신 포트 및 판정 규격(SPEC) 로드
4. Sentinel C28 연결
리크 센서 시리얼 통신 포트 연결 시도
5. 4251 보드 연결
ID 판독 보드 시리얼 통신 포트 연결 시도
6. 시험 프로세스 스레드 기동
LEFT 및 RIGHT 채널의 백그라운드 계측 제어 스레드 개시
7. 메인 화면(Home View) 표시
프로그램 UI 전체 활성화 및 측정 대기 상태 진입
> **참고**: 시리얼 포트 연결에 실패하면 메인 화면의 **오류 메시지** 영역에 해당 오류가 표시됩니다. 이 경우 `Comm. Settings`에서 올바른 포트를 선택한 후 저장하면 자동으로 재연결됩니다.
---
## 2.3 프로그램 로그인 및 오프라인 모드 설정
프로그램 실행이 완료되면 메인 화면이 활성화되기 전, **작업 정보 입력 및 로그인 창**이 모달로 표시됩니다. 로그인을 성공적으로 마쳐야 메인 화면을 조작할 수 있습니다.
### 로그인 필드 구성
| 입력 필드 | 예시 | 설명 |
|-----------|------|------|
| **Maker** | `MOBIS` | 제조사 정보 |
| **Model** | `C28_TEST` | 검사 모델명 |
| **Variant 1** | `V1` | 세부 파생 모델 정보 1 |
| **Variant 2** | `V2` | 세부 파생 모델 정보 2 |
| **ID (Operator)** | `sa` | 작업자 ID |
| **PW (Password)** | `****` | 비밀번호 (DB 조회용) |
| **Line** | `EOL_01` | 생산 라인 번호 |
| **Lot No** | `LOT001` | 로트 번호 |
| **Jig No** | `JIG_L` | 지그 번호 |
> **참고 (자동완성)**: 각 필드에 마우스를 클릭하거나 포커스를 두면, 이전 로그인 이력이 팝업 메뉴 형식으로 나열되어 간편하게 자동 완성을 사용할 수 있습니다.
### 로그인 방식 설정 (Database.ini)
윈도우 공용 폴더(`C:\ProgramData\LeakTest\Database.ini`)에 위치한 `Database.ini` 파일 설정에 따라 로그인 인증 방식이 달라집니다. (해당 파일이 누락된 경우 프로그램 최초 실행 시 기본 템플릿 정보와 함께 경로상에 자동으로 생성됩니다. ClickOnce 배포 방식을 사용하는 경우에도 프로그램 업데이트 시 설정 데이터가 유실되지 않고 영구 보존됩니다.)
```ini
; [데이터베이스 접속 상세 설정]
Db_Server=192.168.0.20
Db_Name=NE1aW_PT_SENSOR
Db_User=sa
Db_Password=sa1234
[Login]
Procedure=dbo.CheckOperator
ProcessName=EOL
OfflinePreview=false
```
- **온라인 인증 모드 (`OfflinePreview=false`)**: 지정된 개별 데이터베이스 접속 정보(`Db_Server`, `Db_Name`, `Db_User`, `Db_Password`)를 기반으로 데이터베이스에 접속하여 Stored Procedure(`Procedure`)로 ID/PW 존재 여부를 직접 확인합니다. DB 서버 연결 실패나 미등록 사용자일 경우 로그인이 거부됩니다.
- **오프라인 테스트 모드 (`OfflinePreview=true`)**: 데이터베이스를 거치지 않고, 필수 입력 값을 채우면 즉시 로그인이 허용됩니다. 네트워크 연결이 안 된 시뮬레이션 및 테스트 환경에서 사용합니다.
---
## 2.4 최초 설정 순서 (Step-by-Step)
프로그램을 처음 사용할 때는 반드시 아래 순서로 설정을 진행하세요.
### Step 1: 통신 설정 (가장 먼저 수행)
> 하드웨어와의 통신이 설정되어야 이후 모든 기능이 정상 동작합니다.
1. 하단 메뉴 바에서 **`Comm. Settings (통신 설정)`** 버튼을 클릭합니다.
2. **통신 설정** 팝업 창이 메인 창 중앙에 표시됩니다.
**4251 보드 설정 (좌측 영역):**
| 설정 항목 | 설명 | 선택 방법 | 기본값 |
|-----------|------|----------|--------|
| `4251 BaudRate` | 통신 속도 | 드롭다운에서 선택 (9600/19200/38400/115200) | `115200` |
| `4251 Port` | COM 포트 | 드롭다운에서 연결된 포트 선택 | `COM3` |
**Sentinel C28 설정 (우측 영역):**
| 설정 항목 | 설명 | 선택 방법 | 기본값 |
|-----------|------|----------|--------|
| `Sensor BaudRate` | 통신 속도 | 드롭다운에서 선택 (9600/19200/38400/115200) | `9600` |
| `Sensor Port` | COM 포트 | 드롭다운에서 연결된 포트 선택 | `COM1` |
3. 모든 항목을 설정한 후 **`설정 저장`** 버튼을 클릭합니다.
4. "통신 설정이 저장되었습니다." 메시지가 표시되면 설정 완료입니다.
> **⚠️ 중요**: 저장 시 기존의 모든 시리얼 통신 연결이 해제되고, 새로운 설정으로 자동 재연결됩니다. 이 과정에서 진행 중인 시험이 있다면 중단될 수 있습니다.
> **참고**: COM 포트 목록에는 현재 PC에 물리적으로 연결된 시리얼 장치만 표시됩니다. 원하는 포트가 보이지 않으면:
> - USB-시리얼 케이블이 PC에 연결되어 있는지 확인
> - 장치 관리자에서 해당 포트의 드라이버가 정상 설치되었는지 확인
> - 다른 프로그램이 해당 포트를 점유하고 있지 않은지 확인
---
### Step 2: 시험 설정 (SPEC 규격값 입력)
1. 하단 메뉴 바에서 **`Parameters (시험 설정)`** 버튼을 클릭합니다.
2. **시험 설정** 팝업 창이 표시됩니다.
| 설정 항목 | 설명 | 입력 형식 | 기본값 |
|-----------|------|----------|--------|
| `SPEC UL (sccm)` | 누설 상한 규격값 | 소수점 포함 숫자 (예: `1.00`) | `1.00` |
| `SPEC LL (sccm)` | 누설 하한 규격값 | 소수점 포함 숫자 (예: `-1.00`) | `-1.00` |
3. 값을 입력한 후 **`설정 저장`** 버튼을 클릭합니다.
4. "파라미터 설정이 저장되었습니다." 메시지가 표시되면 완료입니다.
> **참고**: SPEC UL/LL 값은 좌/우 양쪽 채널에 **공통으로 적용**됩니다.
> **판정 기준**: `SPEC LL ≤ 측정값 ≤ SPEC UL` 이면 **OK**, 범위를 벗어나면 **NG**로 판정됩니다.
---
### Step 3: 동작 테스트 (선택사항)
모든 설정이 완료되면 하단 메뉴의 **`ID Test (L)`** 또는 **`ID Test (R)`** 버튼으로 간단한 동작 테스트를 수행할 수 있습니다.
1. **`ID Test (L)`** 버튼을 클릭합니다.
2. 좌측 채널의 진행 메시지가 순서대로 표시됩니다:
- `시험 시작` → `센서 정보 읽는 중` → `ID 테스트 완료` (또는 `ID 테스트 실패`)
3. 좌측 채널의 **ID** 영역에 읽은 제품 ID가 표시되면 정상입니다.
> **참고**: ID Test는 DIO 시작 신호 없이도 4251 보드의 센서 판독 기능만 단독으로 테스트합니다. 실제 LEAK 시험은 수행하지 않습니다.
---
## 2.5 설정 변경 시 주의사항
| 상황 | 동작 | 주의 |
|------|------|------|
| 통신 설정 저장 | 모든 시리얼 연결 해제 → 새 설정으로 재연결 | 시험 중 변경 시 시험 중단 |
| 시험 설정 저장 | 즉시 메인 화면의 SPEC 표시 갱신 | 진행 중인 시험에는 영향 없음 |
| 프로그램 재시작 | `config.xml`에서 마지막 저장된 설정 자동 로드 | 별도 작업 불필요 |
# 3. 메인 화면 (Home View)
---
프로그램 실행 시 기본으로 표시되는 화면입니다. 좌/우 채널의 누설 시험 결과를 실시간으로 모니터링합니다.
## 3.1 전체 화면 레이아웃
---
## 3.2 상단 타이틀 바
프로그램 최상단에 위치한 짙은 블랙 그레이 배경의 바입니다.
| 위치 | 요소 | 설명 |
|------|------|------|
| 좌측 | **프로그램 제목 & 버전** | "Pressure Leak" (백색 볼드) 및 `v1.0.0 (Updated: 2026-06-05)` 표시 |
| 중앙 | **현재 날짜/시간** | `yyyy-MM-dd [요일] HH:mm:ss` 형식, 1초 주기로 실시간 갱신 |
| 우측 | **작업 정보 배지** | 현재 로그인 상태에 따른 `작업자 ID`, `검사 모델`, `생산 라인` 정보를 배지로 시각화하여 현재 작업 상태 인지 |
| 우측 | **로그아웃 버튼** | 현재 세션을 로그아웃하고, 다시 로그인 모달 창을 띄웁니다 |
| 최우측 | **창 제어 버튼** | 최소화(─) / 최대화·복원(□) / 종료(X)를 수행하는 윈도우 창 제어 아이콘 배치 |
### 타이틀 바 조작
| 조작 | 동작 |
|------|------|
| 타이틀 바 **드래그** | 창 이동 |
| 타이틀 바 **더블 클릭** | 최대화 ↔ 일반 크기 전환 |
| **─** 버튼 클릭 | 작업표시줄로 최소화 |
| **□** 버튼 클릭 | 최대화 ↔ 일반 크기 전환 (아이콘도 변경됨) |
| **X** 버튼 클릭 | 종료 확인 대화상자 표시 → "예" 선택 시 종료 |
---
## 3.3 메인 영역 - 채널 모니터링
화면은 좌측(`LEFT LEAK TESTER`)과 우측(`RIGHT LEAK TESTER`)으로 균등 분할되며, 각 채널은 동일한 구조입니다.
### 각 채널의 구성 요소 (위에서 아래 순서)
#### ① 채널 타이틀 (Row 0)
- **LEFT LEAK TESTER** 또는 **RIGHT LEAK TESTER**
- 짙은 남색 배경에 백색 볼드 텍스트로 채널 구분을 명시합니다.
#### ② 시작 시간 (Row 1)
| 항목 | 설명 |
|------|------|
| 라벨 | `시작 시간` (회색 헤더 배경) |
| 값 | `yyyy-MM-dd HH:mm:ss` 형식 (예: `2026-05-08 10:30:15`) |
| 갱신 시점 | 시험이 시작될 때마다 현재 시각으로 자동 갱신 |
#### ③ ID (Row 2)
| 항목 | 설명 |
|------|------|
| 라벨 | `ID` (회색 헤더 배경) |
| 값 | 16자리 제품 ID 표시 |
| 데이터 소스 | 4251 보드를 통해 제품 ID 센서에서 읽은 값 |
| 갱신 시점 | 시험 시작 시 초기화, 센서 판독 완료 시 표시 |
#### ④ 측정값 + SPEC (Row 3) - **가장 큰 영역**
좌측에 측정값, 우측에 SPEC 규격이 함께 표시됩니다.
**측정값 영역:**
| 항목 | 설명 |
|------|------|
| 라벨 | `측정값` (볼드) |
| 값 | Sentinel C28에서 수신한 누설량 (소수점 4자리, 예: `0.5234`) |
| 단위 | `sccm` (우측 하단에 표시) |
| 폰트 크기 | 원거리에서도 쉽게 식별할 수 있도록 대형 폰트로 강조 표시 |
| 색상 | 파란색 볼드 |
| 갱신 시점 | C28 센서 스트리밍 데이터 수신 시 실시간 갱신 |
**SPEC 영역 (우측):**
| 항목 | 설명 |
|------|------|
| `UL` | 상한 규격값 (예: `1.00`) 볼드 |
| `LL` | 하한 규격값 (예: `-1.00`) 볼드 |
| 갱신 시점 | Parameters에서 저장 시 즉시 반영 |
#### ⑤ 판정 (Row 4) - **두 번째로 큰 영역**
| 항목 | 설명 |
|------|------|
| 라벨 | `판정` (볼드) |
| 값 | **OK** 또는 **NG** (대형 볼드) |
| OK 표시 | 녹색 텍스트 + 연녹색 배경으로 가시성 극대화 |
| NG 표시 | 빨간색 텍스트 + 연빨간색 배경으로 가시성 극대화 |
> **판정 기준**: `SPEC LL ≤ 측정값 ≤ SPEC UL` → **OK**, 그 외 → **NG**
#### ⑥ 진행 메시지 (Row 5)
| 항목 | 설명 |
|------|------|
| 라벨 | `진행 메시지` (연파랑 배경) |
| 값 | 현재 시험 단계를 나타내는 파란색 볼드 텍스트 |
표시되는 메시지 목록:
| 메시지 | 의미 |
|--------|------|
| `시험 시작` | DIO 시작 신호 감지, 시험 프로세스 시작 |
| `대기중` | 다른 채널이 시험 중이어서 순서 대기 |
| `센서 정보 읽는 중` | 4251 보드를 통해 제품 ID 판독 중 |
| `LEAK 시험중` | Sentinel C28 센서의 측정 결과 대기 중 |
| `시험 완료` | 판정 완료 및 결과 출력 완료 |
| `오류 발생` | 시험 중 오류 발생 (상세 내용은 오류 메시지 참조) |
| `ID 테스트 완료` | 수동 ID 테스트 정상 완료 |
| `ID 테스트 실패` | 수동 ID 테스트 실패 |
| `통신 대기 중` | 통신 설정 변경 후 재연결 대기 |
#### ⑦ 오류 메시지 (Row 6)
| 항목 | 설명 |
|------|------|
| 라벨 | `오류 메시지` (연주황 배경, 갈색 텍스트) |
| 값 | 오류 내용 (빨간색 볼드). 스크롤 가능 |
| 특징 | 읽기 전용 텍스트 박스, 텍스트 줄바꿈 자동, 세로 스크롤바 |
| 초기화 시점 | 새 시험 시작 시 자동 초기화 |
---
## 3.4 SPEC 교차 검증 경고
프로그램의 판정 결과(SPEC UL/LL 기준)와 Sentinel C28 센서의 **자체 판정 결과**가 서로 다를 경우:
1. 해당 채널의 **오류 메시지** 영역에 `SPEC 불일치 - 프로그램: OK, 센서: R` 등의 메시지가 표시됩니다.
2. **팝업 경고 대화상자**가 표시됩니다: "프로그램 스팩과 센서의 스팩이 서로 맞지 않습니다."
> **조치**: 센서 측의 SPEC 설정과 프로그램의 SPEC UL/LL 설정이 동일한지 확인하세요.
---
## 3.5 하단 메뉴 바
프로그램 최하단의 연회색 배경 영역입니다. 5개의 버튼이 좌측부터 수평으로 배치됩니다.
| 순서 | BUTTON | 부제 | 동작 | 동작 방식 |
|------|------------|------|------|----------|
| 1 | **Data** | (측정 데이터) | 검사 기록 조회 화면 전환 | 토글 (다시 클릭 시 Home으로 복귀) |
| 2 | **Parameters** | (시험 설정) | 시험 설정 팝업 창 열기 | 모달 팝업 (설정 후 자동 닫힘) |
| 3 | **Comm. Settings** | (통신 설정) | 통신 설정 팝업 창 열기 | 모달 팝업 (설정 후 자동 닫힘) |
| 4 | **ID Test (L)** | (좌측 ID 테스트) | 좌측 채널 센서 ID 수동 판독 | 즉시 실행 (파란색 텍스트) |
| 5 | **ID Test (R)** | (우측 ID 테스트) | 우측 채널 센서 ID 수동 판독 | 즉시 실행 (파란색 텍스트) |
### 버튼 스타일
- 배경: 연회색, 마우스 오버 시 시각적 피드백을 위해 약간 어둡게 변함
- 테두리: 회색
- 텍스트: 볼드 (부제는 일반 텍스트)
# 4. 통신 설정 (Comm. Settings)
---
하단 메뉴에서 **Comm. Settings (통신 설정)** 버튼 클릭 시 열리는 **모달 팝업 창**입니다.
## 4.1 창 구성
| 속성 | 값 |
|------|-----|
| 창 크기 | 고정 (크기 변경 불가) |
| 위치 | 메인 창 중앙에 정렬되어 표시 |
| 타입 | 모달 (이 창이 열려있으면 메인 창 조작 불가) |
## 4.2 4251 보드 설정 (좌측 영역)
| 항목 | UI 타입 | 선택 가능 값 | 기본값 | 설명 |
|------|---------|-------------|--------|------|
| **4251 BaudRate** | 드롭다운 | 9600 / 19200 / 38400 / 115200 | `115200` | 4251 보드 통신 속도. 보드 설정과 일치해야 함 |
| **4251 Port** | 드롭다운 | 시스템 감지 COM 포트 목록 | `COM3` | 4251 보드가 연결된 시리얼 포트 |
## 4.3 Sentinel C28 설정 (우측 영역)
| 항목 | UI 타입 | 선택 가능 값 | 기본값 | 설명 |
|------|---------|-------------|--------|------|
| **Sensor BaudRate** | 드롭다운 | 9600 / 19200 / 38400 / 115200 | `9600` | C28 센서 통신 속도. 센서 설정과 일치해야 함 |
| **Sensor Port** | 드롭다운 | 시스템 감지 COM 포트 목록 | `COM1` | C28 센서가 연결된 시리얼 포트 |
## 4.4 버튼 설명
| 버튼 | 특징 | 동작 |
|------|------|------|
| **설정 저장** | 녹색 계열 | config.xml에 저장 → 기존 연결 해제 → 새 설정으로 재연결 → "통신 설정이 저장되었습니다." 메시지 → 창 닫힘 |
| **닫기** | 회색 계열 | 변경 사항 저장하지 않고 창 닫기 |
## 4.5 저장 시 내부 동작 순서
1. 현재 선택된 값을 `config.xml`에 저장
2. 기존 Sentinel C28 시리얼 연결 해제
3. 기존 4251 보드 시리얼 연결 해제
4. 시험 프로세스 스레드 종료
5. 새 설정값으로 Sentinel C28 재연결
6. 새 설정값으로 4251 보드 재연결
7. 시험 프로세스 스레드 재시작
> **⚠️ 주의**: COM 포트를 동일하게 설정하면 충돌이 발생합니다. 4251 보드와 C28 센서는 반드시 다른 포트를 사용하세요.
# 5. 시험 설정 (Parameters)
---
하단 메뉴에서 **Parameters (시험 설정)** 버튼 클릭 시 열리는 **모달 팝업 창**입니다.
## 5.1 창 구성
| 속성 | 값 |
|------|-----|
| 창 크기 | 고정 (크기 변경 불가) |
| 위치 | 메인 창 중앙에 정렬되어 표시 |
| 타입 | 모달 |
## 5.2 설정 항목
| 항목 | UI 타입 | 입력 형식 | 기본값 | 설명 |
|------|---------|----------|--------|------|
| **SPEC UL (sccm)** | 텍스트 입력 | 소수점 숫자 | `1.00` | 누설 상한 규격값. 이 값 이하일 때 OK |
| **SPEC LL (sccm)** | 텍스트 입력 | 소수점 숫자 | `-1.00` | 누설 하한 규격값. 이 값 이상일 때 OK |
> **입력 팁**: 소수점 2자리까지 입력합니다 (예: `1.50`, `-0.80`). 정수도 입력 가능합니다 (예: `2`).
## 5.3 판정 로직 상세
* **합격 판정 기준**: `SPEC LL ≤ 측정값 ≤ SPEC UL`
* **불합격 판정 기준**: `측정값 < SPEC LL` 또는 `측정값 > SPEC UL`
**예시**:
| SPEC LL | SPEC UL | 측정값 | 판정 |
| :---: | :---: | :---: | :---: |
| -1.00 | 1.00 | 0.523 | ✅ OK |
| -1.00 | 1.00 | 1.200 | ❌ NG |
| -1.00 | 1.00 | -1.500 | ❌ NG |
| -1.00 | 1.00 | -1.00 | ✅ OK (경계값 포함) |
## 5.4 버튼 설명
| 버튼 | 동작 |
|------|------|
| **설정 저장** | config.xml에 저장 → 메인 화면의 SPEC 표시 즉시 갱신 → "파라미터 설정이 저장되었습니다." 메시지 → 창 닫힘 |
| **닫기** | 변경 사항 저장하지 않고 창 닫기 |
> **참고**: SPEC 값은 좌/우 양쪽 채널에 **공통으로 적용**됩니다. 채널별 개별 설정은 지원하지 않습니다.
> **참고**: SPEC 값 변경 후 저장하면, 이미 진행 중인 시험에는 영향을 주지 않으며, 다음 시험부터 새 값이 적용됩니다.
# 6. 측정 데이터 조회 (Data View)
---
하단 메뉴에서 **Data (측정 데이터)** 버튼을 클릭하면 표시됩니다. 다시 클릭하면 메인 화면으로 복귀합니다.
## 6.1 화면 구성
## 6.2 필터 조건 상세
### 1행: 공통 기본 필터
| 항목 | UI 타입 | 기본값 | 설명 |
|------|---------|--------|------|
| **조회 기간** | DatePicker (달력) x 2 | 오늘로부터 7일 전 ~ 오늘 | 조회 대상 날짜 범위 설정 (달력 확대 표시 적용) |
| **판정 결과** | 드롭다운 ComboBox | `[전체]` / `OK` / `NG` | 판정 결과에 따른 필터링 (기본값: 전체) |
### 2행: 상세 검색 필터 (DB 스키마 필드 교차 검색)
| 항목 | UI 타입 | 설명 | 기본값 |
|------|---------|------|--------|
| **ID 검색** | TextBox (텍스트 입력) | `IC_SN` 또는 `PCB_Barcode` 컬럼에 대한 부분 일치 (LIKE) 검색 | (빈 값 = 필터 제외) |
| **작업자** | TextBox (텍스트 입력) | 작업자 ID (`Operator`) 컬럼에 대한 부분 일치 검색 | (빈 값 = 필터 제외) |
| **Lot No** | TextBox (텍스트 입력) | 랏 번호 (`Lot_No`) 컬럼에 대한 부분 일치 검색 | (빈 값 = 필터 제외) |
| **모델** | TextBox (텍스트 입력) | 모델명 (`Model`) 컬럼에 대한 부분 일치 검색 | (빈 값 = 필터 제외) |
## 6.3 조회 및 취소 버튼
| 버튼 | 색상 | 동작 |
|------|------|------|
| **Search** | 파란색 계열 | 설정된 2행의 모든 필터 조건으로 로컬 로그 CSV 백업 파일을 부분일치 검색하여 그리드에 표시합니다. (안정성을 위해 DB 접속 조회가 아닌 로컬 파일 조회로 작동합니다.) |
| **Cancel (취소)** | 빨간색 계열 | 조회 중일 때 로딩 화면 내부에 나타나며, 진행 중인 파일 검색 작업을 즉시 중단하고 화면을 복귀시킵니다. |
### Search 버튼 동작 상세
1. 설정된 조회 기간 날짜를 직접 일자별로 조합하여 해당하는 일일 로그 CSV 파일만 콕 집어 정밀 탐색합니다. (전체 디렉토리 풀 스캔 차단으로 조회 속도가 매우 빠릅니다.)
2. 검색 조건(판정, ID, 작업자, Lot No, 모델)에 맞는 대상을 인메모리 부분일치 검색 처리합니다. (과거 구형 8개 컬럼 포맷 파일도 하위 호환되어 정상 파싱됩니다.)
3. 검색 결과가 없으면 "해당 조건의 데이터가 없습니다." 알림 표시.
### 조회 중 로딩 및 Cancel 버튼 동작 상세
1. Search 버튼 클릭 시 화면 전체에 "Searching Logs..." 라는 반투명 어두운 로딩 오버레이가 활성화되어 작업 중임을 시각적으로 나타냅니다.
2. 데이터가 많아 조회가 오래 걸릴 경우 로딩 오버레이의 **Cancel (취소)** 버튼을 누르면 즉시 조회가 중단되고, "조회가 취소되었습니다." 알림과 함께 메인 화면으로 안전하게 복귀합니다.
## 6.4 데이터 그리드 컬럼 (DB EOL 스키마 표준 규격)
| 컬럼 헤더명 | 바인딩 프로퍼티 | 정렬 | 설명 |
|------|------|------|------|
| **IC_SN** | `IcSn` | 좌측 | 제품 고유 IC SN 시리얼 번호 (PK/FK) |
| **PCB_Barcode** | `PcbBarcode` | 좌측 | PCB 바코드 고유 식별 정보 (UK) |
| **Maker** | `Maker` | 좌측 | 로그인 시 입력된 제조사명 |
| **Model** | `Model` | 좌측 | 로그인 시 입력된 검사 모델명 |
| **Variant_1** | `Variant1` | 좌측 | 로그인 시 입력된 세부 파생 모델 1 |
| **Variant_2** | `Variant2` | 좌측 | 로그인 시 입력된 세부 파생 모델 2 |
| **Operator** | `Operator` | 좌측 | 작업 진행자 사용자 ID |
| **Production_Date** | `ProductionDate` | 좌측 | 검사 수행 및 완료 일시 (yyyy-MM-dd HH:mm:ss) |
| **Line** | `Line` | 좌측 | 로그인 공정 작업 라인 |
| **Lot_No** | `LotNo` | 좌측 | 생산 Lot 번호 |
| **Jig_No** | `JigNo` | 좌측 | 사용 지그(Jig) 번호 |
| **Channel** | `Channel` | 좌측 | 검사 채널 (`LEFT` 또는 `RIGHT`) |
| **Spec_UL** | `SpecUL` | 좌측 | 누설 상한 규격값 (sccm) |
| **Spec_LL** | `SpecLL` | 좌측 | 누설 하한 규격값 (sccm) |
| **Leak_Value** | `MeasuredValue` | **우측** | 측정된 누설 리크량 (**볼드 표시**) |
| **Result** | `Judgment` | **중앙** | 최종 판정 결과 (`OK` 초록 / `NG` 빨강 볼드 강조) |
### 그리드 스타일
- 격자선: 수평/수직 연회색 격자선 표시
- 홀수 행 배경: 흰색, 짝수 행 배경: 연회색 배경으로 행 식별 편의 제공
- 선택된 행: 연파랑 배경에 파란색 텍스트로 강조
- 컬럼 헤더 클릭 시 해당 열 기준 오름차순/내림차순 정렬 가능 (컬럼 순서 변경 불가)
- 최소 50행이 항상 표시됩니다 (데이터가 적어도 격자 형태 유지를 위해 빈 행으로 채워짐)
## 6.5 화면 닫기
| 방법 | 설명 |
|------|------|
| 하단 **Close** 버튼 클릭 | 메인 화면으로 복귀 |
| 하단 메뉴 **Data** 버튼 재클릭 | 토글 동작으로 메인 화면으로 복귀 |
# 7. 자동 시험 프로세스
---
## 7.1 개요
자동 시험은 DIO 시작 신호(LEFT_START 또는 RIGHT_START)에 의해 트리거되며, 7단계로 진행됩니다. 좌/우 채널은 각각 독립적인 백그라운드 스레드에서 실행되지만, **세마포어 잠금**을 통해 동시 실행은 방지됩니다.
## 7.2 전체 프로세스 흐름도
DIO 시작 신호 감지 (LEFT_START 또는 RIGHT_START: OFF➔ON)
세마포어 잠금 대기
• 잠금 불가 시: "대기중" 메시지 표시 후 대기
• 잠금 획득 시: 다음 단계로 진행 (좌/우 채널 동시 시험 방지)
1단계: 시험 시작 (초기화)
• OK/NG DIO 출력 초기화 (OFF)
• 메인 화면 결과 표시 초기화 및 시작 시간 갱신
• Sentinel C28 LEAK 센서 수신 이벤트 버퍼 초기화
2단계: 센서 정보 읽기 (ID 판독)
• 4251 보드를 통해 제품 ID 센서에서 16자리 ID 판독
• [실패 시] "ID 읽기 실패" 오류 출력 후 NG 판정 조기 종료 (DB 비동기 저장)
3단계: LEAK 시험 수행 (계측)
• 화면에 "LEAK 시험중" 표시
• Sentinel C28 센서의 최종 압력 누설 측정 결과 대기 (최대 30초)
• [타임아웃] "Sentinel C28 통신 타임아웃" 오류 후 NG 판정 종료
4단계: 합격 판정
• SPEC LL ≤ 측정값 ≤ SPEC UL 이면 **OK (합격)**, 범위를 벗어나면 **NG (불합격)**
5단계: SPEC 교차 검증
• 프로그램(UI) 판정과 센서 자체 판정(OK/A/P vs NG/R/F)을 상호 비교
• 불일치 시 `SpecMismatch` 플래그 설정 및 경고 팝업 표시
6단계: 결과 출력 및 저장
• 로컬 CSV 로그 파일 기록 및 MSSQL DB에 비동기 저장
• 판정 결과에 따른 DIO 하드웨어 출력 (OK 또는 NG 포트 ON)
• 메인 화면에 최종 측정값 및 판정 출력 ("시험 완료" 표시)
세마포어 잠금 해제
• 시험 종료 후 잠금 해제 → 대기 중인 채널이 있을 경우 350ms 안정화 대기 후 자동 시작
## 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 보드를 통해 제품 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`)에는 영향을 미치지 않고 프로그램 판정값을 유지**합니다.
# 8. 로그 및 데이터 관리
---
## 8.1 검사 데이터 로그 (CSV)
### 기본 정보
| 항목 | 내용 |
|------|------|
| **저장 위치** | `C:\ProgramData\LeakTest\Logs\yyyy-MM-dd.csv` |
| **파일 형식** | CSV (UTF-8 인코딩) |
| **파일 생성** | 날짜별 자동 생성 (해당 날짜 첫 시험 시) |
| **데이터 추가** | 매 시험 완료 시 자동으로 해당 날짜 파일에 1행 추가 |
### CSV 헤더 및 컬럼
```
IC_SN,PCB_Barcode,Maker,Model,Variant_1,Variant_2,Operator,Production_Date,Line,Lot_No,Jig_No,Channel,Spec_UL,Spec_LL,Leak_Value,Result
```
| 컬럼 | 예시 | 설명 |
|------|------|------|
| `IC_SN` | `260508A00123B01C` | 제품 고유 시리얼 번호 (PK/FK) |
| `PCB_Barcode` | `260508A00123B01C` | PCB 바코드 고유 식별 정보 (UK) |
| `Maker` | `Hyundai` | 메이커 정보 |
| `Model` | `NE1aW` | 모델 정보 |
| `Variant_1` | `PT` | 변형1 정보 |
| `Variant_2` | `SENSOR` | 변형2 정보 |
| `Operator` | `op001` | 작업자 ID |
| `Production_Date` | `2026-05-08 10:30:15` | 검사 수행 일시 |
| `Line` | `L1` | 작업 라인 번호 |
| `Lot_No` | `LOT001` | Lot 번호 |
| `Jig_No` | `JIG01` | 지그 번호 |
| `Channel` | `LEFT` | 검사 채널 (LEFT 또는 RIGHT) |
| `Spec_UL` | `1.00` | 규격 상한값 |
| `Spec_LL` | `-1.00` | 규격 하한값 |
| `Leak_Value` | `0.5234` | 측정된 릭 측정값 (소수점 4자리) |
| `Result` | `OK` | 최종 판정 결과 (OK 또는 NG) |
### CSV 예시
```csv
IC_SN,PCB_Barcode,Maker,Model,Variant_1,Variant_2,Operator,Production_Date,Line,Lot_No,Jig_No,Channel,Spec_UL,Spec_LL,Leak_Value,Result
260508A00123B01C,260508A00123B01C,Hyundai,NE1aW,PT,SENSOR,op001,2026-05-08 10:30:15,L1,LOT001,JIG01,LEFT,1.00,-1.00,0.5234,OK
260508A00456D02E,260508A00456D02E,Hyundai,NE1aW,PT,SENSOR,op002,2026-05-08 10:30:45,L1,LOT001,JIG01,RIGHT,1.00,-1.00,1.2000,NG
```
> **참고**: 타임아웃 발생 시에도 측정값 `0.0000`, 판정 `NG`로 로그에 기록됩니다.
> **참고**: 프로그램은 구형 8개 컬럼 포맷(`Date,Time,ID,Channel,SpecUL,SpecLL,Value,Judgment`)의 로그 파일에 대해서도 컬럼 크기를 기준으로 자동 감지 및 파싱(하위 호환성)을 수행합니다.
> **참고**: CSV 값에 쉼표, 따옴표, 줄바꿈이 포함된 경우 자동으로 이스케이프 처리됩니다.
---
## 8.2 시스템 로그
### 기본 정보
| 항목 | 내용 |
|------|------|
| **저장 위치** | `C:\ProgramData\LeakTest\Logs\yyyy-MM-dd_system.log` |
| **파일 형식** | 텍스트 파일 (UTF-8 인코딩) |
| **내용** | 통신 오류, 시스템 이벤트 등 |
### 로그 형식
```
[HH:mm:ss.fff] [TAG] 메시지 내용
```
### 예시
```
[10:30:00.123] [SYSTEM] 프로그램 시작
[10:30:01.456] [COMM] Sentinel C28 포트 연결 성공 (COM1)
[10:35:15.789] [ERROR] Sentinel C28 통신 타임아웃
```
---
## 8.3 설정 파일
### config.xml
| 항목 | 내용 |
|------|------|
| **위치** | 프로그램 실행 폴더 |
| **생성** | 최초 실행 시 기본값으로 자동 생성 |
| **수정** | Comm. Settings 또는 Parameters에서 저장 시 갱신 |
```xml
COM1
9600
COM3
115200
5000
1.00
-1.00
```
| 설정 키 | 기본값 | 설정 위치 | 설명 |
|---------|--------|----------|------|
| `SensorPort` | COM1 | Comm. Settings | C28 센서 COM 포트 |
| `SensorBaudRate` | 9600 | Comm. Settings | C28 센서 통신 속도 |
| `Board4251Port` | COM3 | Comm. Settings | 4251 보드 COM 포트 |
| `Board4251BaudRate` | 115200 | Comm. Settings | 4251 보드 통신 속도 |
| `Board4251Timeout` | 5000 | (코드 내 고정) | 4251 보드 응답 대기 시간(ms) |
| `SpecUL` | 1.00 | Parameters | 누설 상한 규격값 |
| `SpecLL` | -1.00 | Parameters | 누설 하한 규격값 |
### Database.ini
| 항목 | 내용 |
|------|------|
| **위치** | `C:\ProgramData\LeakTest\Database.ini` |
| **생성** | 배포 시 기본 포함 및 파일 누락 상태로 기동 시 기본 양식이 자동 생성됨 |
| **수정** | 메모장 등의 텍스트 에디터를 통해 연결 주소 및 프로시저 정보 직접 수정 |
```ini
; [데이터베이스 접속 상세 설정]
Db_Server=192.168.0.20
Db_Name=NE1aW_PT_SENSOR
Db_User=sa
Db_Password=sa1234
[Login]
Procedure=dbo.CheckOperator
ProcessName=EOL
OfflinePreview=false
```
| 설정 키 | 예시 | 설명 |
|---------|--------|------|
| `Db_Server` | 192.168.0.20 | 데이터베이스 서버 IP 주소 또는 호스트명 |
| `Db_Name` | NE1aW_PT_SENSOR | 대상 데이터베이스(DB) 이름 |
| `Db_User` | sa | 데이터베이스 접속 계정 ID |
| `Db_Password` | sa1234 | 데이터베이스 접속 계정 비밀번호 |
| `Procedure` | dbo.CheckOperator | 로그인 계정 검증용 저장 프로시저명 |
| `ProcessName` | EOL | 검증 공정명 |
| `OfflinePreview` | false | true 시 DB 연결 없이 로그인 즉시 성공 (오프라인 모드) |
### DioConfig.ini
| 항목 | 내용 |
|------|------|
| **위치** | `[프로그램 폴더]\Settings\DioConfig.ini` |
| **생성** | 최초 실행 시 자동 생성 |
| **수정** | 일반적으로 수정 불필요 (하드웨어 변경 시에만) |
```ini
[DIO]
CompanyName=ADLink
BoardCnt=1
[BOARD_1]
BoardType=PCI_7432
BoardNumber=0
[BOARD_1_IN]
0=LEFT_START,1,좌측 시험 시작 신호
1=RIGHT_START,1,우측 시험 시작 신호
[BOARD_1_OUT]
0=LEFT_OK,1,좌측 합격 출력
1=RIGHT_OK,1,우측 합격 출력
2=PC_ON,1,PC 가동 신호
3=LEFT_NG,1,좌측 불합격 출력
4=RIGHT_NG,1,우측 불합격 출력
```
**INI 포맷 설명**: `비트인덱스=신호명,활성여부,설명`
---
## 8.4 파일 관리 주의사항
| 주의사항 | 설명 |
|---------|------|
| Logs 폴더 삭제 금지 | 검사 기록이 영구 삭제됩니다 |
| CSV 파일 직접 편집 | Excel 등으로 편집 시 인코딩이 변경될 수 있으므로 주의 |
| config.xml 직접 편집 | 잘못된 값 입력 시 프로그램 오작동 가능. 프로그램 내 설정 화면 사용 권장 |
| 디스크 용량 | 일일 수백 건 검사 기준, 연간 약 50~100MB 정도의 로그가 생성됩니다 |
---
## 8.5 데이터베이스 데이터 관리 (dbo.EOL)
매 시험 완료 시 검사 결과 및 로그인 정보가 데이터베이스에 실시간으로 저장(MERGE/UPSERT)됩니다.
### 데이터베이스 테이블 및 컬럼 매핑
* **대상 테이블**: `[dbo].[EOL]`
* **매핑 상세**:
| DB 컬럼명 | 데이터 타입 | 매핑되는 C# 데이터 | 비고 |
| :--- | :--- | :--- | :--- |
| **`IC_SN`** | `NVARCHAR(10)` | 제품의 최종 조합 ID (`inspectData.ProductId`) | **PK / FK** |
| **`PCB_Barcode`** | `NVARCHAR(10)` | 고유 식별용 바코드 정보 (`inspectData.ProductId` 매핑) | **UK** |
| `Maker` | `NVARCHAR(10)` | 로그인 제조사 정보 (`App.LoginResult.Maker`) | |
| `Model` | `NVARCHAR(10)` | 로그인 모델 정보 (`App.LoginResult.Model`) | |
| `Variant_1` | `NVARCHAR(10)` | 로그인 변형1 정보 (`App.LoginResult.Variant1`) | |
| `Variant_2` | `NVARCHAR(10)` | 로그인 변형2 정보 (`App.LoginResult.Variant2`) | |
| `Operator` | `NVARCHAR(10)` | 로그인 검사자 ID (`App.LoginResult.Operator`) | |
| `Production_Date` | `DATETIME2(0)` | 검사 수행 일시 (`DateTime.Now`) | |
| `Line` | `NVARCHAR(5)` | 로그인 작업 라인 (`App.LoginResult.LineNo`) | |
| `Lot_No` | `NVARCHAR(8)` | 로그인 Lot 번호 (`App.LoginResult.LotNo`) | |
| `Jig_No` | `NVARCHAR(10)` | 로그인 지그 번호 (`App.LoginResult.JigNo`) | |
| `Channel` | `NVARCHAR(5)` | 검사 채널 (`LEFT` / `RIGHT`) | |
| `Spec_UL` | `DECIMAL(3,2)` | 규격 상한값 (소수점 2자리) | |
| `Spec_LL` | `DECIMAL(3,2)` | 규격 하한값 (소수점 2자리) | |
| `Leak_Value` | `DECIMAL(5,4)` | 측정된 릭 값 (소수점 4자리) | |
| `Result` | `NVARCHAR(5)` | 최종 판정 결과 (`OK` 또는 `NG`) | |
# 9. 오류 대응 및 프로그램 종료
---
## 9.1 통신 연결 실패
프로그램 시작 또는 통신 설정 저장 시 발생할 수 있습니다.
| 오류 메시지 | 원인 | 조치 방법 |
|------------|------|----------|
| `Sentinel C28 포트 연결 실패 (COMx)` | C28 센서 미연결, 잘못된 포트, 다른 프로그램이 포트 점유 | ① 케이블 연결 확인 ② 장치 관리자에서 COM 포트 번호 확인 ③ Comm. Settings에서 올바른 포트 선택 후 `설정 저장` |
| `4251 보드 포트 연결 실패 (COMx)` | 4251 보드 미연결, 잘못된 포트 | ① 케이블 연결 확인 ② Comm. Settings에서 올바른 포트 선택 후 `설정 저장` |
> **참고**: 통신 설정을 저장하면 기존 연결을 모두 해제하고 새 설정으로 재연결을 시도합니다. 포트 변경 후 재시작 없이 바로 적용됩니다.
## 9.2 시험 중 오류
시험 프로세스 진행 중 발생하는 오류입니다. 메인 화면의 **오류 메시지** 영역에 표시됩니다.
| 오류 메시지 | 원인 | 조치 방법 |
|------------|------|----------|
| `Sentinel C28 통신 타임아웃` | 30초 내 C28 센서 응답 없음 | ① 센서 전원 ON 확인 ② 시리얼 케이블 연결 확인 ③ BaudRate 설정 확인 (기본: 9600) |
| `통신 실패 (4251 보드 CHx 상태 타임아웃)` | 4251 보드가 응답 시간(15초) 내에 상태 응답을 회신하지 않음 | ① 4251 보드 전원 공급 및 케이블 연결선 확인 ② 통신 노이즈 방지 조치 확인 |
| `통신 실패 (4251 보드 CHx 상태 이상 또는 Fail)` | 4251 보드로부터 정상 응답을 받지 못했거나 오류 코드가 반환됨 | ① 하드웨어 오결선 여부 점검 ② 채널 센서 구동 전원 확인 |
| `통신 실패 (4251 보드 CHx ID 대기 타임아웃)` | 4251 보드를 통해 제품 ID를 15초 내에 판독하지 못함 | ① 센서가 지그(Jig)에 올바르게 안착되었는지 물리적 확인 ② 접촉 단자 이물질 청소 |
| `SPEC 불일치 - 프로그램: OK, 센서: R` | 프로그램 SPEC과 센서 자체 SPEC의 판정이 다름 | ① 프로그램의 SPEC UL/LL 확인 (Parameters) ② C28 센서의 SPEC 설정 확인 ③ 양쪽 설정값 동기화 |
| `LEAK 센서 데이터 오류` | C28에서 수신된 데이터 파싱 실패 | ① 센서 통신 상태 확인 ② 케이블 접촉 불량 확인 ③ BaudRate 불일치 확인 |
| `DB 저장 실패` | 중앙 MSSQL DB 서버에 검사 데이터를 저장하지 못함 | ① PC 네트워크 케이블 및 통신 연결 확인 ② Database.ini 파일의 접속 정보(IP/비밀번호 등) 확인 ③ 로컬 일일 CSV 로그 파일(`C:\ProgramData\LeakTest\Logs/yyyy-MM-dd.csv`)에 백업이 잘 저장되었는지 확인 |
---
## 9.3 SPEC 교차 검증 경고 팝업
프로그램 판정과 센서 판정이 불일치하면 팝업 경고가 표시됩니다:
```
[!] SPEC 교차 검증 경고
"프로그램 스팩과 센서의 스팩이 서로 맞지 않습니다."
[확인]
```
이 경고는 검사 자체를 중단하지는 않지만, **프로그램의 판정 결과**가 최종 기록에 사용됩니다.
---
## 9.4 DIO 보드 오류
| 상황 | 프로그램 동작 | 영향 |
|------|-------------|------|
| PCI-7432 보드 미인식 | **시뮬레이션 모드**로 자동 전환 | DIO 입출력이 동작하지 않음 (실제 입출력 포트 제어 불가) |
| 보드 런타임 오류 | 좌/우 채널 오류 메시지에 `[DIO Board Error]` 표시 | 오류 내용에 따라 조치 |
> **시뮬레이션 모드**: ADLINK 드라이버가 신설되지 않은 개발 환경에서도 프로그램의 나머지 기능(통신 설정, 데이터 조회 등)을 테스트할 수 있도록 자동 전환됩니다.
---
## 9.5 일반적인 문제 해결
| 증상 | 가능한 원인 | 해결 방법 |
|------|-----------|----------|
| 프로그램 시작 후 양쪽 채널에 오류 메시지 | COM 포트 설정 불일치 | Comm. Settings에서 올바른 포트 선택 후 저장 |
| 시험이 시작되지 않음 | DIO 시작 신호 미수신 | 외부 PLC 또는 시작 스위치의 접점 신호 상태 확인 |
| "대기중"에서 진행되지 않음 | 다른 채널이 타임아웃 대기 중 | 최대 30초 대기 후 자동 해제. 센서 연결 확인 |
| 측정값이 표시되지 않음 | C28 센서 스트리밍 데이터 미수신 | 센서 전원, 케이블, BaudRate 확인 |
| COM 포트 목록이 비어있음 | 시리얼 장치 미연결 | USB-시리얼 케이블 연결 확인, 드라이버 설치 확인 |
---
## 9.6 프로그램 종료
### 종료 방법
1. 상단 타이틀 바 우측의 **X (빨간색)** 버튼을 클릭합니다.
2. 종료 확인 대화상자가 표시됩니다:
```
[?] 종료 확인
"프로그램을 종료하시겠습니까?"
[예] [아니오]
```
3. **"예"**를 선택하면 종료, **"아니오"**를 선택하면 취소됩니다.
### 종료 시 자동 처리 사항
아래 순서로 자동 정리가 수행됩니다:
| 순서 | 처리 내용 |
|------|----------|
| 1 | 시험 프로세스 스레드 종료 (좌/우 모두) |
| 2 | 대기 중인 세마포어 해제 |
| 3 | DIO 이벤트 구독 해제 |
| 4 | C28 센서 이벤트 구독 해제 |
| 5 | Sentinel C28 시리얼 통신 연결 해제 |
| 6 | 4251 보드 시리얼 통신 연결 해제 |
| 7 | DIO `PC_ON` 출력 **OFF** |
| 8 | DIO 보드 자원 해제 |
| 9 | 타이틀 바 시계 타이머 정지 |
> **⚠️ 주의**: 시험 진행 중에 프로그램을 종료하면 진행 중인 시험이 **즉시 중단**됩니다. 해당 시험의 결과는 로그에 기록되지 않을 수 있습니다. 가급적 시험이 완료된 후 종료하세요.
> **참고**: 프로그램 종료 시 현재 설정값은 이미 `config.xml`에 저장되어 있으므로 별도로 저장할 필요가 없습니다. 다음 실행 시 마지막 설정이 자동으로 로드됩니다.