- **온라인 인증 모드 (`OfflinePreview=false`)**: 지정된 개별 데이터베이스 접속 정보(`Db_Server`, `Db_Name`, `Db_User`, `Db_Password`)를 기반으로 데이터베이스에 접속하여 Stored Procedure(`Procedure`)로 ID/PW 존재 여부를 직접 확인합니다. DB 서버 연결 실패나 미등록 사용자일 경우 로그인이 거부됩니다.
- **온라인 인증 모드 (`OfflinePreview=false`)**: 지정된 데이터베이스 접속 정보(`Db_Server`, `Db_Name`, `Db_User`, `Db_Password`)를 기반으로 데이터베이스에 접속하여 사용자 계정의 유효성을 검증합니다. DB 서버 연결 실패나 미등록 사용자일 경우 로그인이 거부됩니다.
- **오프라인 테스트 모드 (`OfflinePreview=true`)**: 데이터베이스를 거치지 않고, 필수 입력 값을 채우면 즉시 로그인이 허용됩니다. 네트워크 연결이 안 된 시뮬레이션 및 테스트 환경에서 사용합니다.
- **오프라인 테스트 모드 (`OfflinePreview=true`)**: 데이터베이스를 거치지 않고, 필수 입력 값을 채우면 즉시 로그인이 허용됩니다. 네트워크 연결이 안 된 시뮬레이션 및 테스트 환경에서 사용합니다.
<divstyle="font-weight: bold; color: #2f3542;">DIO 시작 신호 감지 <spanstyle="font-weight: normal; font-size: 8pt; color: #747d8c;">(LEFT_START 또는 RIGHT_START: OFF➔ON)</span></div>
<divstyle="font-weight: bold; color: #2f3542;">시작 신호 감지 <spanstyle="font-weight: normal; font-size: 8pt; color: #747d8c;">(좌측/우측 시작 신호 입력 시)</span></div>
| `Sentinel C28 통신 타임아웃` | 30초 내 C28 센서 응답 없음 | ① 센서 전원 ON 확인 ② 시리얼 케이블 연결 확인 ③ BaudRate 설정 확인 (기본: 9600) |
| `Sentinel C28 통신 타임아웃` | 30초 내 C28 센서 응답 없음 | ① 센서 전원 ON 확인 ② 시리얼 케이블 연결 확인 ③ BaudRate 설정 확인 (기본: 9600) |
| `통신 실패 (4251 보드 CHx 상태 타임아웃)` | 4251 보드가 응답 시간(15초) 내에 상태 응답을 회신하지 않음 | ① 4251 보드 전원 공급 및 케이블 연결선 확인 ② 통신 노이즈 방지 조치 확인 |
| `통신 실패 (4251 보드 CHx 상태 응답 시간 초과)` | 4251 보드가 대기 시간(15초) 내에 응답하지 않음 | ① 4251 보드 전원 공급 및 케이블 연결선 확인 ② 통신 노이즈 방지 조치 확인 |
| `통신 실패 (4251 보드 CHx 상태 이상 또는 Fail)` | 4251 보드로부터 정상 응답을 받지 못했거나 오류 코드가 반환됨 | ① 하드웨어 오결선 여부 점검 ② 채널 센서 구동 전원 확인 |
| `통신 실패 (4251 보드 CHx 상태 이상 또는 Fail)` | 4251 보드로부터 정상 응답을 받지 못했거나 오류 코드가 반환됨 | ① 하드웨어 오결선 여부 점검 ② 채널 센서 구동 전원 확인 |
| `통신 실패 (4251 보드 CHx ID 대기 타임아웃)` | 4251 보드를 통해 제품 ID를 15초 내에 판독하지 못함 | ① 센서가 지그(Jig)에 올바르게 안착되었는지 물리적 확인 ② 접촉 단자 이물질 청소 |
| `통신 실패 (4251 보드 CHx ID 대기 타임아웃)` | 4251 보드를 통해 제품 ID를 15초 내에 판독하지 못함 | ① 센서가 지그(Jig)에 올바르게 안착되었는지 물리적 확인 ② 접촉 단자 이물질 청소 |
| `SPEC 불일치 - 프로그램: OK, 센서: R` | 프로그램 SPEC과 센서 자체 SPEC의 판정이 다름 | ① 프로그램의 SPEC UL/LL 확인 (Parameters) ② C28 센서의 SPEC 설정 확인 ③ 양쪽 설정값 동기화 |
| `SPEC 불일치 - 프로그램: OK, 센서: R` | 프로그램 SPEC과 센서 자체 SPEC의 판정이 다름 | ① 프로그램의 SPEC UL/LL 확인 (Parameters) ② C28 센서의 SPEC 설정 확인 ③ 양쪽 설정값 동기화 (※ 통신 설정에서 경고 알림 스위치 상태를 확인하세요) |
| `LEAK 센서 데이터 오류` | C28에서 수신된 데이터 파싱 실패 | ① 센서 통신 상태 확인 ② 케이블 접촉 불량 확인 ③ BaudRate 불일치 확인 |
| `LEAK 센서 데이터 오류` | C28에서 수신된 데이터 파싱 실패 | ① 센서 통신 상태 확인 ② 케이블 접촉 불량 확인 ③ BaudRate 불일치 확인 |
| `DB 저장 실패` | 중앙 MSSQL DB 서버에 검사 데이터를 저장하지 못함 | ① PC 네트워크 케이블 및 통신 연결 확인 ② Database.ini 파일의 접속 정보(IP/비밀번호 등) 확인 ③ 로컬 일일 CSV 로그 파일(`C:\LeakTest\Logs\yyyy-MM-dd.csv`)에 백업이 잘 저장되었는지 확인 |
| `DB 저장 실패: [오류 원인] 상세 메시지` | 데이터베이스 서버에 검사 데이터를 저장하지 못함 | ① 네트워크 케이블 및 서버 통신 연결 확인 ② Database.ini 설정 파일의 접속 정보(IP/비밀번호 등) 확인 ③ 로컬 일일 CSV 로그 파일에 백업이 정상적으로 저장되었는지 확인 |
| `바코드 매핑 실패: [오류 원인] 상세 메시지` | 데이터베이스에서 해당 `IC_SN`에 매칭되는 바코드 정보를 찾지 못함 | ① 데이터베이스 서버 네트워크 연결 확인 ② Housing_Assembly 테이블에 대상 제품의 바코드 정보 매핑 상태 점검 |
---
---
## 9.3 SPEC 교차 검증 경고 팝업
## 9.3 SPEC 교차 검증 경고 팝업
프로그램 판정과 센서 판정이 불일치하면 팝업 경고가 표시됩니다:
프로그램 판정과 센서 판정이 불일치할 때, 통신 설정 화면의 **`스펙 불일치 알림 활성화`** 옵션이 켜져(ON) 있는 경우 팝업 경고가 표시됩니다:
```
```
[!] SPEC 교차 검증 경고
[!] SPEC 교차 검증 경고
@ -41,7 +42,8 @@
[확인]
[확인]
```
```
이 경고는 검사 자체를 중단하지는 않지만, **프로그램의 판정 결과**가 최종 기록에 사용됩니다.
- 만약 이 옵션을 **해제(OFF)**한 경우, 이 팝업 경고 대화상자는 나타나지 않으며, 메인 화면 하단의 **오류 메시지** 텍스트 박스에만 불일치 로그가 기록됩니다.
- 이 경고는 검사 자체를 중단하지는 않으며, **프로그램의 판정 결과**가 최종 DB 및 로컬 로그 기록에 사용됩니다.
---
---
@ -52,7 +54,7 @@
| PCI-7432 보드 미인식 | **시뮬레이션 모드**로 자동 전환 | DIO 입출력이 동작하지 않음 (실제 입출력 포트 제어 불가) |
| PCI-7432 보드 미인식 | **시뮬레이션 모드**로 자동 전환 | DIO 입출력이 동작하지 않음 (실제 입출력 포트 제어 불가) |
| 보드 런타임 오류 | 좌/우 채널 오류 메시지에 `[DIO Board Error]` 표시 | 오류 내용에 따라 조치 |
| 보드 런타임 오류 | 좌/우 채널 오류 메시지에 `[DIO Board Error]` 표시 | 오류 내용에 따라 조치 |
> **시뮬레이션 모드**: ADLINK 드라이버가 신설되지 않은 개발 환경에서도 프로그램의 나머지 기능(통신 설정, 데이터 조회 등)을 테스트할 수 있도록 자동 전환됩니다.
> **시뮬레이션 모드**: ADLINK 드라이버가 설치되지 않은 환경에서도 프로그램의 기능(통신 설정, 데이터 조회 등)을 사전에 테스트할 수 있도록 제공되는 가상 동작 모드입니다.
5. **시험 시작** → DIO 시작 신호 또는 `ID Test (L/R)` 버튼으로 동작 확인
5. **시험 시작** → DIO 시작 신호 또는 `ID Test (L/R)` 버튼으로 동작 확인
@ -263,7 +263,7 @@ a:hover {
## 1.1 시스템 개요
## 1.1 시스템 개요
**Pressure Leak Inspect System**은 제품의 압력 누설(Leak)을 자동으로 검사하는 WPF 기반 데스크탑 애플리케이션입니다. 생산 라인에서 DIO 시작 신호를 받아 제품 ID를 판독하고, 누설 시험을 수행한 뒤 합격/불합격을 자동 판정합니다.
**Pressure Leak Inspect System**은 제품의 압력 누설(Leak)을 자동으로 검사하는 데스크탑 프로그램입니다. 생산 라인에서 DIO 시작 신호를 받아 제품 ID를 판독하고, 누설 시험을 수행한 뒤 합격/불합격을 자동 판정합니다.
### 주요 기능 요약
### 주요 기능 요약
@ -276,7 +276,7 @@ a:hover {
| **PCI-7432 DIO 보드** | 디지털 입출력 제어 (시작 신호 수신, OK/NG 출력) |
| **PCI-7432 DIO 보드** | 디지털 입출력 제어 (시작 신호 수신, OK/NG 출력) |
| **검사 기록 관리** | 날짜/판정/ID별 필터링 검색 및 CSV 파일 내보내기를 지원합니다 |
| **검사 기록 관리** | 날짜/판정/ID별 필터링 검색 및 CSV 파일 내보내기를 지원합니다 |
| **SPEC 교차 검증** | 프로그램 판정과 센서 자체 판정을 비교하여 불일치 시 경고합니다 |
| **SPEC 교차 검증** | 프로그램 판정과 센서 자체 판정을 비교하여 불일치 시 경고합니다 |
| **순차 실행 보장** | 세마포어 잠금으로 좌/우 채널 동시 시험을 방지합니다 |
| **순차 실행 보장** | 중복 실행 방지 기능으로 좌/우 채널의 동시 시험을 방지합니다 |
---
---
@ -285,7 +285,7 @@ a:hover {
| 항목 | 요구사항 | 비고 |
| 항목 | 요구사항 | 비고 |
|------|----------|------|
|------|----------|------|
| **운영체제** | Windows 10 이상 (64bit 권장) | 32bit도 지원 가능 |
| **운영체제** | Windows 10 이상 (64bit 권장) | 32bit도 지원 가능 |
| **.NET Framework** | 4.7.2 이상 | Windows 10에 기본 포함 |
| **.NET 런타임** | .NET 9 | 별도 설치 필요 없음 (자체 포함 배포) |
| **드라이버** | ADLINK PCIS-DASK 드라이버 | `PCI-Dask.dll` 필요 |
| **드라이버** | ADLINK PCIS-DASK 드라이버 | `PCI-Dask.dll` 필요 |
| **시리얼 포트** | 최소 2개의 COM 포트 | C28 센서용 + 4251 보드용 |
| **시리얼 포트** | 최소 2개의 COM 포트 | C28 센서용 + 4251 보드용 |
| **화면 해상도** | 1024×768 이상 | 최대화 실행 시 1920×1080 권장 |
| **화면 해상도** | 1024×768 이상 | 최대화 실행 시 1920×1080 권장 |
@ -427,15 +427,19 @@ a:hover {
## 2.2 프로그램 실행
## 2.2 프로그램 실행
### 실행 방법
### 실행 방법
1. `leak_test_project.exe` 파일을 **더블 클릭**하여 실행합니다.
1. 바탕화면의 **바로가기 아이콘**을 더블 클릭하여 실행합니다.
2. 프로그램이 전체화면(Maximized) 모드로 시작됩니다.
2. 프로그램이 전체화면(Maximized) 모드로 시작됩니다.
### 최초 실행 시 자동 생성되는 파일
### 최초 실행 시 자동 생성되는 파일
| 파일 | 위치 | 설명 |
| 파일 / 폴더 | 위치 | 설명 |
|------|------|------|
|-------------|------|------|
| `config.xml` | 프로그램 실행 폴더 | 통신 포트, BaudRate, SPEC 값 등 모든 설정을 저장 |
| `config.xml` | 프로그램 실행 폴더 (`C:\LeakTest\`) | 통신 포트, BaudRate, SPEC 값 등 모든 설정을 저장 |
| `Settings/DioConfig.ini` | Settings 하위 폴더 | DIO 보드 타입, 입출력 포인트 정의 |
| `Settings\DioConfig.ini` | `C:\LeakTest\Settings\` | DIO 보드 타입, 입출력 포인트 정의 |
| `Database.ini` | `C:\LeakTest\` | DB 접속 정보 및 로그인 인증 방식 설정 (최초 실행 시 기본 템플릿으로 생성) |
| `LoginOptions.json` | `C:\LeakTest\` | 로그인 화면 자동완성 드롭다운 선택지 저장 |
| `LoginHistory.json` | `C:\LeakTest\` | 최근 로그인 정보 최대 10건 자동 저장 |
| `Logs\` 폴더 | `C:\LeakTest\Logs\` | 날짜별 CSV 검사 로그 및 시스템 로그 저장 위치 |
### 프로그램 시작 시 자동 수행 동작
### 프로그램 시작 시 자동 수행 동작
@ -509,14 +513,14 @@ a:hover {
### 로그인 방식 설정 (Database.ini)
### 로그인 방식 설정 (Database.ini)
윈도우 공용 폴더(`C:\ProgramData\LeakTest\Database.ini`)에 위치한 `Database.ini` 파일 설정에 따라 로그인 인증 방식이 달라집니다. (해당 파일이 누락된 경우 프로그램 최초 실행 시 기본 템플릿 정보와 함께 경로상에 자동으로 생성됩니다. ClickOnce 배포 방식을 사용하는 경우에도 프로그램 업데이트 시 설정 데이터가 유실되지 않고 영구 보존됩니다.)
프로그램 배포 폴더(`C:\LeakTest\Database.ini`)에 위치한 `Database.ini` 파일 설정에 따라 로그인 인증 방식이 달라집니다. 해당 파일이 누락된 경우 프로그램 최초 실행 시 기본 템플릿 정보와 함께 해당 경로에 자동으로 생성됩니다. 모든 설정 파일이 배포 폴더에 함께 위치하므로 경로 관리가 단순합니다.
```ini
```ini
; [데이터베이스 접속 상세 설정]
; [데이터베이스 접속 상세 설정]
Db_Server=192.168.0.20
Db_Server=[데이터베이스_서버_IP],[포트번호]
Db_Name=NE1aW_PT_SENSOR
Db_Name=[데이터베이스_이름]
Db_User=sa
Db_User=[접속_계정_ID]
Db_Password=sa1234
Db_Password=[접속_비밀번호]
[Login]
[Login]
Procedure=dbo.CheckOperator
Procedure=dbo.CheckOperator
@ -524,7 +528,7 @@ ProcessName=EOL
OfflinePreview=false
OfflinePreview=false
```
```
- **온라인 인증 모드 (`OfflinePreview=false`)**: 지정된 개별 데이터베이스 접속 정보(`Db_Server`, `Db_Name`, `Db_User`, `Db_Password`)를 기반으로 데이터베이스에 접속하여 Stored Procedure(`Procedure`)로 ID/PW 존재 여부를 직접 확인합니다. DB 서버 연결 실패나 미등록 사용자일 경우 로그인이 거부됩니다.
- **온라인 인증 모드 (`OfflinePreview=false`)**: 지정된 데이터베이스 접속 정보(`Db_Server`, `Db_Name`, `Db_User`, `Db_Password`)를 기반으로 데이터베이스에 접속하여 사용자 계정의 유효성을 검증합니다. DB 서버 연결 실패나 미등록 사용자일 경우 로그인이 거부됩니다.
- **오프라인 테스트 모드 (`OfflinePreview=true`)**: 데이터베이스를 거치지 않고, 필수 입력 값을 채우면 즉시 로그인이 허용됩니다. 네트워크 연결이 안 된 시뮬레이션 및 테스트 환경에서 사용합니다.
- **오프라인 테스트 모드 (`OfflinePreview=true`)**: 데이터베이스를 거치지 않고, 필수 입력 값을 채우면 즉시 로그인이 허용됩니다. 네트워크 연결이 안 된 시뮬레이션 및 테스트 환경에서 사용합니다.
@ -658,20 +662,22 @@ OfflinePreview=false
- **LEFT LEAK TESTER** 또는 **RIGHT LEAK TESTER**
- **LEFT LEAK TESTER** 또는 **RIGHT LEAK TESTER**
- 짙은 남색 배경에 백색 볼드 텍스트로 채널 구분을 명시합니다.
- 짙은 남색 배경에 백색 볼드 텍스트로 채널 구분을 명시합니다.
#### ② 시작 시간 (Row 1)
#### ② 시작/종료 시간 (Row 1)
| 항목 | 설명 |
| 항목 | 설명 |
|------|------|
|------|------|
| 라벨 | `시작 시간` (회색 헤더 배경) |
| 라벨 | `시작/종료` (회색 헤더 배경) |
| 값 | `yyyy-MM-dd HH:mm:ss` 형식 (예: `2026-05-08 10:30:15`) |
| 값 | `시작시간 / 종료시간` 형식 (예: `2026-05-08 10:30:15 / -` 또는 `2026-05-08 10:30:15 / 10:30:45`) |
| 갱신 시점 | 시험이 시작될 때마다 현재 시각으로 자동 갱신 |
| 갱신 시점 | 시험이 시작될 때`시작시간 / -` 형태로 갱신되며, 시험 완료(DB 저장) 시점에 종료 시간이 함께 기록됩니다. |
#### ③ ID (Row 2)
#### ③ IC_SN / PCB_Barcode (Row 2~3) - **식별자 2행 분리 표시**
<divstyle="font-weight: bold; color: #2f3542;">DIO 시작 신호 감지 <spanstyle="font-weight: normal; font-size: 8pt; color: #747d8c;">(LEFT_START 또는 RIGHT_START: OFF➔ON)</span></div>
<divstyle="font-weight: bold; color: #2f3542;">시작 신호 감지 <spanstyle="font-weight: normal; font-size: 8pt; color: #747d8c;">(좌측/우측 시작 신호 입력 시)</span></div>
| `Result` | `NVARCHAR(5)` | 최종 판정 결과 (`OK` 또는 `NG`) | |
| `Result` | 문자형 (최대 5자) | 최종 판정 결과 (OK / NG) |
<divclass="page-break"></div>
<divclass="page-break"></div>
@ -1355,18 +1419,19 @@ BoardNumber=0
| 오류 메시지 | 원인 | 조치 방법 |
| 오류 메시지 | 원인 | 조치 방법 |
|------------|------|----------|
|------------|------|----------|
| `Sentinel C28 통신 타임아웃` | 30초 내 C28 센서 응답 없음 | ① 센서 전원 ON 확인 ② 시리얼 케이블 연결 확인 ③ BaudRate 설정 확인 (기본: 9600) |
| `Sentinel C28 통신 타임아웃` | 30초 내 C28 센서 응답 없음 | ① 센서 전원 ON 확인 ② 시리얼 케이블 연결 확인 ③ BaudRate 설정 확인 (기본: 9600) |
| `통신 실패 (4251 보드 CHx 상태 타임아웃)` | 4251 보드가 응답 시간(15초) 내에 상태 응답을 회신하지 않음 | ① 4251 보드 전원 공급 및 케이블 연결선 확인 ② 통신 노이즈 방지 조치 확인 |
| `통신 실패 (4251 보드 CHx 상태 응답 시간 초과)` | 4251 보드가 대기 시간(15초) 내에 응답하지 않음 | ① 4251 보드 전원 공급 및 케이블 연결선 확인 ② 통신 노이즈 방지 조치 확인 |
| `통신 실패 (4251 보드 CHx 상태 이상 또는 Fail)` | 4251 보드로부터 정상 응답을 받지 못했거나 오류 코드가 반환됨 | ① 하드웨어 오결선 여부 점검 ② 채널 센서 구동 전원 확인 |
| `통신 실패 (4251 보드 CHx 상태 이상 또는 Fail)` | 4251 보드로부터 정상 응답을 받지 못했거나 오류 코드가 반환됨 | ① 하드웨어 오결선 여부 점검 ② 채널 센서 구동 전원 확인 |
| `통신 실패 (4251 보드 CHx ID 대기 타임아웃)` | 4251 보드를 통해 제품 ID를 15초 내에 판독하지 못함 | ① 센서가 지그(Jig)에 올바르게 안착되었는지 물리적 확인 ② 접촉 단자 이물질 청소 |
| `통신 실패 (4251 보드 CHx ID 대기 타임아웃)` | 4251 보드를 통해 제품 ID를 15초 내에 판독하지 못함 | ① 센서가 지그(Jig)에 올바르게 안착되었는지 물리적 확인 ② 접촉 단자 이물질 청소 |
| `SPEC 불일치 - 프로그램: OK, 센서: R` | 프로그램 SPEC과 센서 자체 SPEC의 판정이 다름 | ① 프로그램의 SPEC UL/LL 확인 (Parameters) ② C28 센서의 SPEC 설정 확인 ③ 양쪽 설정값 동기화 |
| `SPEC 불일치 - 프로그램: OK, 센서: R` | 프로그램 SPEC과 센서 자체 SPEC의 판정이 다름 | ① 프로그램의 SPEC UL/LL 확인 (Parameters) ② C28 센서의 SPEC 설정 확인 ③ 양쪽 설정값 동기화 (※ 통신 설정에서 경고 알림 스위치 상태를 확인하세요) |
| `LEAK 센서 데이터 오류` | C28에서 수신된 데이터 파싱 실패 | ① 센서 통신 상태 확인 ② 케이블 접촉 불량 확인 ③ BaudRate 불일치 확인 |
| `LEAK 센서 데이터 오류` | C28에서 수신된 데이터 파싱 실패 | ① 센서 통신 상태 확인 ② 케이블 접촉 불량 확인 ③ BaudRate 불일치 확인 |
| `DB 저장 실패` | 중앙 MSSQL DB 서버에 검사 데이터를 저장하지 못함 | ① PC 네트워크 케이블 및 통신 연결 확인 ② Database.ini 파일의 접속 정보(IP/비밀번호 등) 확인 ③ 로컬 일일 CSV 로그 파일(`C:\ProgramData\LeakTest\Logs/yyyy-MM-dd.csv`)에 백업이 잘 저장되었는지 확인 |
| `DB 저장 실패: [오류 원인] 상세 메시지` | 데이터베이스 서버에 검사 데이터를 저장하지 못함 | ① 네트워크 케이블 및 서버 통신 연결 확인 ② Database.ini 설정 파일의 접속 정보(IP/비밀번호 등) 확인 ③ 로컬 일일 CSV 로그 파일에 백업이 정상적으로 저장되었는지 확인 |
| `바코드 매핑 실패: [오류 원인] 상세 메시지` | 데이터베이스에서 해당 `IC_SN`에 매칭되는 바코드 정보를 찾지 못함 | ① 데이터베이스 서버 네트워크 연결 확인 ② Housing_Assembly 테이블에 대상 제품의 바코드 정보 매핑 상태 점검 |
---
---
## 9.3 SPEC 교차 검증 경고 팝업
## 9.3 SPEC 교차 검증 경고 팝업
프로그램 판정과 센서 판정이 불일치하면 팝업 경고가 표시됩니다:
프로그램 판정과 센서 판정이 불일치할 때, 통신 설정 화면의 **`스펙 불일치 알림 활성화`** 옵션이 켜져(ON) 있는 경우 팝업 경고가 표시됩니다:
```
```
[!] SPEC 교차 검증 경고
[!] SPEC 교차 검증 경고
@ -1374,7 +1439,8 @@ BoardNumber=0
[확인]
[확인]
```
```
이 경고는 검사 자체를 중단하지는 않지만, **프로그램의 판정 결과**가 최종 기록에 사용됩니다.
- 만약 이 옵션을 **해제(OFF)**한 경우, 이 팝업 경고 대화상자는 나타나지 않으며, 메인 화면 하단의 **오류 메시지** 텍스트 박스에만 불일치 로그가 기록됩니다.
- 이 경고는 검사 자체를 중단하지는 않으며, **프로그램의 판정 결과**가 최종 DB 및 로컬 로그 기록에 사용됩니다.
---
---
@ -1385,7 +1451,7 @@ BoardNumber=0
| PCI-7432 보드 미인식 | **시뮬레이션 모드**로 자동 전환 | DIO 입출력이 동작하지 않음 (실제 입출력 포트 제어 불가) |
| PCI-7432 보드 미인식 | **시뮬레이션 모드**로 자동 전환 | DIO 입출력이 동작하지 않음 (실제 입출력 포트 제어 불가) |
| 보드 런타임 오류 | 좌/우 채널 오류 메시지에 `[DIO Board Error]` 표시 | 오류 내용에 따라 조치 |
| 보드 런타임 오류 | 좌/우 채널 오류 메시지에 `[DIO Board Error]` 표시 | 오류 내용에 따라 조치 |
> **시뮬레이션 모드**: ADLINK 드라이버가 신설되지 않은 개발 환경에서도 프로그램의 나머지 기능(통신 설정, 데이터 조회 등)을 테스트할 수 있도록 자동 전환됩니다.
> **시뮬레이션 모드**: ADLINK 드라이버가 설치되지 않은 환경에서도 프로그램의 기능(통신 설정, 데이터 조회 등)을 사전에 테스트할 수 있도록 제공되는 가상 동작 모드입니다.
3. **Line 컬럼 잘림 오류 수정**: DB의 [dbo].[EOL] 테이블 스키마 파일([dbo.EOL_Schema.sql](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/DB/dbo.EOL_Schema.sql))에서 작업 라인을 나타내는 `Line` 컬럼의 물리 데이터 형식이 `NVARCHAR(5)`로 좁게 선언되어 있어 5자를 초과하는 라인 정보(예: `"LINE-1"`은 6자) 입력 시 잘림 오류(Truncation Exception)로 인해 저장이 실패하던 버그를 확인하고, 테이블 DDL 스키마 및 문서 상의 `Line` 규격을 `NVARCHAR(30)`로 변경 및 확장 조치하였습니다.
3. **Line 컬럼 잘림 오류 수정**: DB의 [dbo].[EOL] 테이블 스키마 파일([dbo.EOL_Schema.sql](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/DB/dbo.EOL_Schema.sql))에서 작업 라인을 나타내는 `Line` 컬럼의 물리 데이터 형식이 `NVARCHAR(5)`로 좁게 선언되어 있어 5자를 초과하는 라인 정보(예: `"LINE-1"`은 6자) 입력 시 잘림 오류(Truncation Exception)로 인해 저장이 실패하던 버그를 확인하고, 테이블 DDL 스키마 및 문서 상의 `Line` 규격을 `NVARCHAR(30)`로 변경 및 확장 조치하였습니다.
4. **Line 컬럼 가공 처리 원복**: 라인 정보에 대해 숫자만 남기도록 하던 임시 정규식 필터링 코드를 제거하고, 원래 문자열 형태(예: `"LINE-1"`) 그대로 데이터베이스 및 CSV 로그에 기록되도록 소스코드를 복구하였습니다.
4. **Line 컬럼 가공 처리 원복**: 라인 정보에 대해 숫자만 남기도록 하던 임시 정규식 필터링 코드를 제거하고, 원래 문자열 형태(예: `"LINE-1"`) 그대로 데이터베이스 및 CSV 로그에 기록되도록 소스코드를 복구하였습니다.
### 📅 2026-07-03 (24시간 무중단 가동 신뢰성 정밀 진단 및 코드 리팩토링)
* **내용**: 24시간 365일 실시간 검사 라인의 무중단 가동 신뢰성을 위한 SRE 관점의 소스 코드 리팩토링을 완료했습니다.
* **기능**:
1. **Sync-over-Async 제거**: `TestProcessService.cs` 내의 `.GetAwaiter().GetResult()` 호출부를 `Task.Run` 스레드 풀 분리를 통해 격리하여 컨텍스트 데드락 요인을 원천 방지했습니다.
2. **글로벌 스레드 복구**: `TestProcessService.cs`의 `ProcessProc` 검사 루프 전체를 `try-catch` 구조로 격리하여 예외 시 스레드가 소멸하지 않고 자동 자가 치유 대기로 복구되도록 설계했습니다.
3. **TCS 동시성 및 lock 도입**: `Board4251.cs` 내부의 `_responseTcs` 할당/해제 시 `_tcsLock` 동기화 락을 사용하여 기기 수신과 송신 간의 레이스 컨디션을 완전히 방어했습니다.
4. **시리얼 버퍼 OOM 차단**: `SentinelC28Service.cs` 내 `_receiveBuffer`를 `StringBuilder` 기반의 고정 크기 제한(64KB) 관리 구조로 전환하고, `Dispose()` 내에 기기 이벤트 해제를 강제하여 메모리 누수를 제거했습니다.
5. **1GB 디스크 경고 및 소프트 경고 구현**: `LogUtils.cs` 내에 디스크 공간 감지(1GB 이하) 메커니즘을 연동하되, 공정이 멈추거나 DB 저장이 누락되지 않도록 Soft Warning 형태로 에러 이벤트를 전파하고 화면과 로그에 경고만 노출하도록 처리했습니다.
6. **DB 백프레셔 제어**: 데이터 적재 시 `_dbSemaphore`를 통해 최대 동시 쓰기 스레드를 3개로 제어하여 네트워크 지연 시 스레드 풀 기아 상태가 발생하지 않도록 억제했습니다.
7. **빌드 무결성 보장**: 리팩토링 결과 `net9.0-windows` 컴파일 환경에서 0 warnings, 0 errors로 빌드를 정상 무결 완료했습니다.
8. **스펙 불일치 알림 스위치 추가**: 통신 설정 메뉴 하단에 스펙 불일치 알림 여부를 켜고 끌 수 있는 체크박스(`CheckBox` 기반 스위치)를 추가했습니다. 해당 스위치는 기본값이 **켜짐(ON)** 상태이며, 사용자의 선택값(EnableSpecMismatchAlarm)을 `config.xml`에 영속 저장하여 교차 판정 경고창 노출 여부를 동적으로 제어하도록 구현했습니다.
### 📅 2026-07-08 (메뉴얼 정합성 검토 및 최신 기능 현행화)
* **내용**: WPF 소스코드의 최신 UI 변경사항 및 백엔드 로직에 맞춰 사용자 메뉴얼 문서(10종)와의 정합성을 확보하고 병합 문서를 갱신했습니다.
* **기능**:
1. **설정 파일 공통 경로 통일**: 메뉴얼 상에서 혼재되어 있던 데이터 경로 규격을 실제 소스코드와 배포 규격에 대응하는 **`C:\LeakTest\`**로 전면 일치시켰습니다.
2. **시작/종료 및 식별자 2행 분리 UI 반영**: 메인 화면(`03_메인_화면.md`) 메뉴얼에 `시작/종료` 시간 변경 및 가로 잘림 튜닝이 반영된 `IC_SN` / `PCB_Barcode` 2행 분리 레이아웃 명세를 현행화했습니다.
3. **스펙 불일치 체크박스 및 경고 연동**: 통신 설정(`04_통신_설정.md`)과 오류 대응(`09_오류_대응.md`)에 `EnableSpecMismatchAlarm` 체크박스 옵션을 서술하고, 해제(OFF) 시의 경고 대화상자 노출 차단 동작을 보강했습니다.
4. **1.5단계 바코드 DB 매핑 및 저장 제외 흐름 반영**: 자동 시험 프로세스(`07_시험_프로세스.md`) 흐름도에 `dbo.Housing_Assembly` 기반 바코드 쿼리 단계를 신설하고, ID 판독 실패 및 바코드 매핑 실패 시 DB 및 CSV 로그 저장을 스킵하는 무결성 처리 과정을 서술했습니다.
5. **DB 스키마 사양 현행화**: `08_로그_관리.md` DDL 변경 내용에 맞춰 `Line` 크기 확장(`NVARCHAR(30)`) 및 개별 DB 연결 주소 파싱, SSL 오류 방지(`TrustServerCertificate=True`)에 대해 설명을 추가했습니다.
6. **통합 매뉴얼 빌드**: 병합 스크립트(`build_pdf.py`) 실행을 통해 `Manual_Merged.md` 및 `Manual_Merged.html` 결과물을 최신 사양으로 성공적으로 컴파일 완료했습니다.
### 📅 2026-07-10 (데이터 조회 취소 시 메인 화면 복귀 정합성 불일치 수정, 매뉴얼 톤앤매너 고도화, 구형 8컬럼 호환성 소거 및 개발자 매뉴얼 분리 이관)
* **내용**: 측정 데이터 조회 화면의 취소 복귀 오류를 수정하고 매뉴얼의 구어체 표현을 정비했으며, 구형 로그 호환성 삭제와 함께 사용자 매뉴얼에서 상세 기술 데이터들을 개발 지식베이스인 `ob/` 폴더 하위로 완전히 분리 이관했습니다.
* **기능**:
1. **조회 취소 시 화면 강제 복귀 연동**: [DataViewModel.cs](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/leak_test_project/ViewModels/DataViewModel.cs)의 `ExecuteSearch` 비동기 태스크에서 취소 예외(`OperationCanceledException`) 발생 시, 메시지 박스가 표시된 직후 자동으로 `CloseCommand.Execute(null)`를 실행하여 사용자를 메인(홈) 화면으로 즉시 안전하게 돌려보내는 시퀀스를 보강하였습니다.
2. **매뉴얼 어투 격식화 및 병합 컴파일**: `06_데이터_조회.md` 내의 부적절한 구어체 표현(예: "콕 집어" 등) 및 과장된 톤을 명사형/서술형 설명서 어조로 다듬었으며, `build_pdf.py` 스크립트를 재구동하여 통합 매뉴얼(`Manual_Merged.md`, `Manual_Merged.html`)까지 정상 컴파일 완료하였습니다.
3. **구형 8개 컬럼 로그 호환성 로직 제거**: [LogUtils.cs](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/leak_test_project/Utils/LogUtils.cs)의 CSV 파서 엔진(`ParseLogsFromCsv`)에서 기존 8개 컬럼 포맷 분기 처리 로직을 완전히 삭제하고, 오직 EOL 신규 16개 표준 컬럼 규격만 정상 파싱하도록 단순화했습니다. 아울러 매뉴얼 문서(`06_데이터_조회.md`, `08_로그_관리.md`) 내 구형 포맷 관련 참고 사항 및 하위 호환성 설명을 삭제하였습니다.
4. **개발자 매뉴얼 분리 이관 및 사용자 매뉴얼 용어 순화**: 일반 사용자가 이해하기 어려운 C# 바인딩 프로퍼티명, 데이터베이스 기본키/외래키 제약조건(`PK/FK`, `UK`), 세마포어 잠금 등의 설계 지향적 기술 정보를 [ob/06_Developer_Manual.md](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/ob/06_Developer_Manual.md) 신규 문서로 통합 이전하여 보존하였습니다. 동시에 사용자 매뉴얼(`Manual/` 하위 파일)에 있던 관련 표현들은 모두 "순차 처리 잠금", "표 스타일" 등 쉬운 한국어 사용자 관점의 설명으로 순화하였습니다.
5. **빌드 안정성 확인**: 변경 사항 반영 후 `.NET 9.0 (WPF)` 환경에서 0 warnings, 0 errors로 빌드가 완벽히 동작하는지 검증을 완료하였습니다.
6. **타임아웃 시 누설값 기록 변경**: C28 센서 통신 타임아웃 발생 시 데이터베이스 및 CSV 로그에 강제 기입되던 누설 측정값 `"0.0000"`을 에러 상태의 시각적 명확화를 위해 데이터베이스 규격(`DECIMAL(5,4)`) 내 물리적 최댓값인 `"9.9999"`로 기록되도록 [TestProcessService.cs](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/leak_test_project/Services/TestProcessService.cs)를 수정하고, 관련 매뉴얼 문서([07_시험_프로세스.md](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/leak_test_project/Manual/07_시험_프로세스.md)) 설명을 갱신하였습니다.
7. **매뉴얼 내 프로그램 실행 경로 설명 수정**: 프로그램 실행 지침을 파일 탐색기에서 직접 exe 파일을 더블 클릭하여 실행하도록 설명된 방식에서, 바탕화면에 생성된 **바로가기 아이콘**을 사용하여 실행하도록 사용자 매뉴얼([02_초기_설정.md](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/leak_test_project/Manual/02_초기_설정.md), [사용자_메뉴얼.md](file:///c:/Users/COMPUTER1/Desktop/mobi/leak_test_project/leak_test_project/Manual/사용자_메뉴얼.md))의 설명을 갱신 및 컴파일 하였습니다.
### 📅 2026-07-21 (언인스톨 시 디렉토리 깔끔하게 삭제하도록 개선)
* **내용**: 프로그램 언인스톨(Uninstall) 시 런타임에 동적으로 생성된 설정 파일 및 설치 디렉토리를 완전히 청소하도록 배포 패키지 설정을 개선하였습니다. (단, 로그 파일은 사용자의 요청에 따라 안전하게 보존하도록 조치함)
* **기능**:
1. **CommonAppDataFolder 표준 디렉토리 연동**: `C:\ProgramData\LeakTest\` 디렉토리를 특정하여 관리하기 위해 WiX 스크립트 상에 `CommonAppDataFolder` 참조를 선언했습니다.
2. **언인스톨 시 C:\ProgramData\LeakTest 디렉토리 및 파일 완전 제거**: 언인스톨이 진행될 때 로그인 옵션(`LoginOptions.json`), 로그인 히스토리(`LoginHistory.json`) 등의 설정 파일들과 폴더 자체를 디스크에서 완전히 청소하도록 처리했습니다.
3. **로그 파일 보존 및 C:\LeakTest 루트 파일 제거**: 사용자의 요청에 따라 `C:\LeakTest\Logs\` 폴더 및 내부의 누수 검사 로그 파일(`*.csv`)들은 삭제 대상에서 철저히 배제하여 보존되도록 구현하였습니다. 동시에 `C:\LeakTest` 루트 경로 상의 실행 파일 및 설정/DLL 잔여 파일들은 와일드카드(`*`) 기반 `RemoveFile`을 사용해 말끔하게 삭제되도록 패키징 구성을 조정했습니다.
### 📅 2026-07-24 (실행 파일 및 배포 패키지 아이콘 적용)
* **내용**: 카카오톡으로 전달받은 `EOL.ico` 아이콘 파일을 프로젝트에 연동하여 실행 파일 아이콘, 각 윈도우 창(로그인 및 메인 화면), 제어판 및 바탕화면 바로가기 아이콘으로 일괄 적용하였습니다.
* **기능**:
1. **아이콘 복사 및 빌드 설정**: `EOL.ico`를 프로젝트 루트에 복사하고 `.csproj`에 `<ApplicationIcon>EOL.ico</ApplicationIcon>` 및 빌드 이관/리소스 설정을 반영하여 빌드 컴파일 시 실행 파일(.exe)에 자동 패킹되도록 하였습니다.
2. **WPF 윈도우 창 아이콘 지정**: `MainWindow.xaml` 및 `StartupLoginWindow.xaml` 에 `Icon` 속성으로 `EOL.ico` 리소스를 연결하여 프로그램 실행 시 창 타이틀바와 작업 표시줄에 아이콘이 일관성 있게 표시되도록 구현했습니다.
3. **설치 패키지(WiX) 아이콘 연동**: `Product.wxs` 에 제어판 프로그램 추가/제거용 `ARPPRODUCTICON` 프로퍼티와 바탕화면 바로가기 숏컷(`Shortcut` 요소)에 `Icon` 속성으로 `AppIcon.ico`를 매핑하고, 아이콘 파일도 설치 대상 본에 포함하여 완전하게 적용했습니다. 추가적으로 `Bundle.wxs` 에 `IconSourceFile="..\leak_test_project\EOL.ico"` 속성을 선언하여, 최종 배포 파일 자체의 아이콘도 해당 아이콘 이미지로 동일하게 적용했습니다.
4. **게시 경로 및 정화 스크립트 안전 조치 수립 (다운로드 폴더 파일 삭제 방지)**: Visual Studio 게시 프로필(`FolderProfile.pubxml`, `ClickOnceProfile.pubxml`)에 등록되어 있던 `PublishDir` / `PublishUrl` 경로가 `C:\Users\COMPUTER1\Downloads`로 설정되어 게시 정화 스크립트가 다운로드 폴더 내의 사용자의 기존 실행 파일(`*.exe`)들을 지우던 결함을 발견 및 조치하였습니다. 게시 프로필 경로를 `bin\Release\net9.0-windows\win-x86\publish\` 및 `C:\LeakTest\`로 변경하고, `.csproj` 내의 정화 로직(`FolderPublish` 타겟)이 오직 프로젝트 내부 빌드 결과물 경로(`SafePublishDir`)에 한해서만 실행되도록 엄격히 방어 로직을 수립했습니다.
5. **이전 Leak Test 명칭 및 C:\LeakTest 설치 경로 구성으로 완벽 원복**: 사용자 지시에 따라 EOL 변경 전 명칭 및 경로 체격으로 전면 롤백(Rollback)을 수행했습니다.
- 메인 어셈블리 및 실행 파일명: `leak_test_project.exe`
- 설치 및 배포 디렉터리: **`C:\LeakTest\`** 및 **`C:\ProgramData\LeakTest\`**
- 단일 설치 패키지 파일명: **`LeakTestSetup.exe`**
- 바탕화면 바로가기, 제어판 등록 이름 및 창 Title: **`Leak Test System`** / **`Pressure Leak Inspect System`**
6. **게시 출력 폴더 정화 로직 고도화 (오직 LeakTestSetup.exe 1개만 남도록 보장)**: 게시 완료 후 `publish\` 폴더 내에 `leak_test_project.exe`, `leak_test_project.pdb`, `libs` 서브 폴더 등이 파편으로 잔류하던 문제를 해결하기 위해, `CopyDllToPublish` 타겟의 실행 순서를 `BeforeTargets="FolderPublish"`로 변경하고 정화 대상을 프로젝트 내부 게시 폴더(`PublishDir` 및 `SafePublishDir`)의 모든 파일/폴더로 확충하였습니다. 이로써 게시 시 오직 최종 배포 단일 설치 파일인 **`LeakTestSetup.exe` 단 1개의 파일만 깔끔하게 보존**되도록 완벽히 조치했습니다.
7. **게시-설치 동작 전면 분리 및 독립 샌드박스 패키징 수립**:
- **게시(Publish) 시점**: 개발환경 C드라이브(`C:\LeakTest\`)로의 사전 파일 복사를 완전히 차단하고, 프로젝트 임시 샌드박스 경로(`temp_deploy\`)에서만 WiX MSI/Bundle 컴파일을 독립 수행하도록 개편했습니다. 게시 결과물 폴더(`publish\`)에는 파편 파일 없이 오직 단일 설치본인 **`LeakTestSetup.exe` 1개 파일만 깔끔하게 생성**됩니다.
- **설치(Install) 시점**: 최종 사용자가 단일 배포 파일인 `LeakTestSetup.exe`를 구동하여 설치를 진행하면, WiX 마법사를 통해 대상 PC의 C드라이브 **`C:\LeakTest\`** 폴더로 실행 파일 및 모든 설정/DLL 자원이 깔끔하게 추출 설치되도록 매핑을 완비했습니다.
8. **다운로드 폴더 기반 단일 EXE 게시 및 정화 로직 완벽 복원**: 사용자 지시에 따라 이전의 게시/설치 패키징 구조로 완벽히 원복하였습니다.
- **Visual Studio 게시 시**: 다운로드 폴더(`C:\Users\COMPUTER1\Downloads\`)로 게시가 수행되며, 게시 완료 직후 정화 스크립트가 `leak_test_project.exe`, `leak_test_project.pdb`, `libs` 서브 폴더 및 부속 파편 파일 일체를 다운로드 폴더에서 깨끗이 삭제하여 **오직 `LeakTestSetup.exe` 단 1개의 단일 설치 파일만 남도록 복구**했습니다.
- **설치 구동 시**: 다운로드 폴더에 생성된 `LeakTestSetup.exe`를 실행하면 **`C:\LeakTest\`** 경로에 프로그램 바이너리 및 설정/DLL이 설치되고, **바탕화면에 `Leak Test System` 바로가기 아이콘이 자동 생성**됩니다.