리크 테스트 gui
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1505 lines
72 KiB

2 weeks ago
<style>
/*
* A4 용지 기준 PDF 출력을 위한 스타일시트 (pdf_style.css)
*/
@page {
size: A4;
margin: 20mm 15mm 20mm 15mm;
@top-left { content: none !important; }
@top-right { content: none !important; }
@bottom-left { content: none !important; }
@bottom-right { content: none !important; }
@bottom-center {
content: counter(page) !important;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans KR", sans-serif;
font-size: 8.5pt;
color: #7f8c8d;
}
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans KR", sans-serif;
font-size: 10pt;
line-height: 1.6;
color: #333333;
background-color: #ffffff;
-webkit-print-color-adjust: exact !important;
print-color-adjust: exact !important;
}
/* 제목 스타일 */
h1, h2, h3, h4, h5, h6 {
color: #111111;
font-weight: bold;
page-break-after: avoid;
page-break-inside: avoid;
}
h1 {
font-size: 18pt;
border-bottom: 2px solid #007acc;
padding-bottom: 4px;
margin-top: 20px;
margin-bottom: 12px;
}
h2 {
font-size: 13pt;
border-bottom: 1px solid #e1e4e8;
padding-bottom: 3px;
margin-top: 16px;
margin-bottom: 10px;
}
h3 {
font-size: 11pt;
margin-top: 12px;
margin-bottom: 6px;
}
h4 {
font-size: 10pt;
margin-top: 10px;
margin-bottom: 6px;
}
/* 문단 및 리스트 */
p {
margin-top: 0;
margin-bottom: 8px;
text-align: justify;
}
ul, ol {
margin-top: 0;
margin-bottom: 8px;
padding-left: 20px;
}
li {
margin-bottom: 3px;
}
/* 구분선 */
hr {
height: 1px;
padding: 0;
margin: 15px 0;
background-color: #e1e4e8;
border: 0;
}
/* 테이블 스타일 */
table {
width: 100%;
border-collapse: collapse;
margin-top: 0;
margin-bottom: 10px;
page-break-inside: avoid;
}
table th, table td {
padding: 4px 8px;
border: 1px solid #dfe2e5;
font-size: 8.5pt;
word-break: keep-all;
}
table th {
font-weight: 600;
background-color: #f6f8fa;
text-align: left;
}
table tr:nth-child(even) {
background-color: #f9fbfd;
}
table tr {
page-break-inside: avoid; /* 표의 중간 행이 반으로 쪼개지는 것만 방지 */
}
/* 인용구 스타일 */
blockquote {
padding: 6px 12px;
color: #6a737d;
border-left: 0.25em solid #007acc;
background-color: #f6f8fa;
margin: 0 0 10px 0;
page-break-inside: avoid;
}
blockquote p {
margin: 0;
}
/* 코드 블록 (아스키 아트 등 포함) */
pre, code {
font-family: "Consolas", "Monaco", "Andale Mono", "Ubuntu Mono", monospace;
font-size: 8.5pt;
background-color: #f6f8fa;
border-radius: 3px;
}
code {
padding: 0.2em 0.4em;
margin: 0;
border: 1px solid #eaecef;
}
pre {
padding: 12px;
overflow: auto;
line-height: 1.45;
border: 1px solid #e1e4e8;
word-wrap: normal;
white-space: pre; /* 아스키 아트 정렬 유지를 위해 강제 줄바꿈 해제 */
page-break-inside: avoid;
}
pre code {
padding: 0;
margin: 0;
background-color: transparent;
border: none;
font-size: inherit;
white-space: inherit;
}
/* 이미지 스타일 */
img {
max-width: 100%;
max-height: 100mm; /* A4 높이의 약 절반 이하로 제한 */
display: block;
margin: 15px auto;
object-fit: contain;
page-break-inside: avoid;
border: 1px solid #e1e4e8;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
/* 페이지 나누기 요소 */
.page-break {
page-break-before: always !important;
}
/* 내비게이션 숨김 (인쇄 시) */
.nav-link, .nav-links, .back-to-toc, .manual-nav,
a[href$=".md"] {
display: none !important;
}
/* 링크 스타일 */
a {
color: #007acc;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
/* 특별 배지 스타일 */
.badge {
display: inline-block;
padding: 2px 6px;
font-size: 8pt;
font-weight: 600;
line-height: 1;
border-radius: 2px;
background-color: #e1e4e8;
color: #24292e;
margin-right: 4px;
}
</style>
# Pressure Leak Inspect System - 사용자 메뉴얼
2 weeks ago
> **버전**: 1.0.0 | **최종 수정**: 2026-07-01
---
## 메뉴얼 목차
본 메뉴얼은 각 주제별로 별도 문서로 구성되어 있습니다. 아래 링크를 클릭하여 해당 문서로 이동하세요.
| 번호 | 문서 | 설명 |
|------|------|------|
| 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 weeks ago
2. **프로그램 실행 및 로그인** → 바탕화면의 **바로가기 아이콘**을 실행하여 로그인 완료 (오프라인 테스트는 `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 기준으로 작성되었습니다.*
<div class="page-break"></div>
# 1. 시스템 개요 및 요구사항
---
## 1.1 시스템 개요
2 weeks ago
**Pressure Leak Inspect System**은 제품의 압력 누설(Leak)을 자동으로 검사하는 데스크탑 프로그램입니다. 생산 라인에서 DIO 시작 신호를 받아 제품 ID를 판독하고, 누설 시험을 수행한 뒤 합격/불합격을 자동 판정합니다.
### 주요 기능 요약
| 기능 | 설명 |
| ------------------- | ---------------------------------------------------- |
| **좌/우 2채널 관리** | LEFT / RIGHT 두 개의 독립적인 시험 채널을 운영합니다 |
| **자동 시험 프로세스** | DIO 시작 신호 감지 → ID 판독 → 누설 시험 → 판정 → 결과 출력까지 전 과정 자동화 |
| **Sentinel C28 연동** | RS-232 시리얼 통신으로 누설 센서의 실시간 측정값을 수신합니다 |
| **4251 보드 연동** | 제품 ID 판독을 위한 시리얼 통신을 수행합니다 |
| **PCI-7432 DIO 보드** | 디지털 입출력 제어 (시작 신호 수신, OK/NG 출력) |
| **검사 기록 관리** | 날짜/판정/ID별 필터링 검색 및 CSV 파일 내보내기를 지원합니다 |
| **SPEC 교차 검증** | 프로그램 판정과 센서 자체 판정을 비교하여 불일치 시 경고합니다 |
2 weeks ago
| **순차 실행 보장** | 중복 실행 방지 기능으로 좌/우 채널의 동시 시험을 방지합니다 |
---
## 1.2 소프트웨어 요구사항
| 항목 | 요구사항 | 비고 |
|------|----------|------|
| **운영체제** | Windows 10 이상 (64bit 권장) | 32bit도 지원 가능 |
2 weeks ago
| **.NET 런타임** | .NET 9 | 별도 설치 필요 없음 (자체 포함 배포) |
| **드라이버** | 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 포트) |
### 케이블 연결도
<div style="display: flex; align-items: center; justify-content: center; gap: 20px; margin: 25px auto; max-width: 600px; page-break-inside: avoid; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;">
<!-- PC Box -->
<div style="border: 2px solid #2f3542; border-radius: 6px; padding: 35px 20px; background-color: #f1f2f6; text-align: center; min-width: 100px; font-weight: bold; color: #2f3542; box-shadow: 0 2px 4px rgba(0,0,0,0.06); font-size: 11pt;">
본체 PC
</div>
<!-- Connections -->
<div style="display: flex; flex-direction: column; gap: 12px; flex-grow: 1;">
<!-- C28 센서 -->
<div style="display: flex; align-items: center; justify-content: space-between; gap: 10px;">
<div style="flex-grow: 1; text-align: center; font-size: 8.5pt; border-bottom: 2px dashed #007acc; padding-bottom: 4px; color: #007acc; font-weight: 500;">
RS-232 통신 ➔
</div>
<div style="border: 1px solid #007acc; border-radius: 4px; padding: 8px 12px; background-color: #f0f7ff; min-width: 140px; text-align: center; font-size: 9pt; font-weight: bold; color: #005999; box-shadow: 0 1px 3px rgba(0,0,0,0.04);">
Sentinel C28 센서
</div>
</div>
<!-- 4251 보드 -->
<div style="display: flex; align-items: center; justify-content: space-between; gap: 10px;">
<div style="flex-grow: 1; text-align: center; font-size: 8.5pt; border-bottom: 2px dashed #007acc; padding-bottom: 4px; color: #007acc; font-weight: 500;">
RS-232 통신 ➔
</div>
<div style="border: 1px solid #007acc; border-radius: 4px; padding: 8px 12px; background-color: #f0f7ff; min-width: 140px; text-align: center; font-size: 9pt; font-weight: bold; color: #005999; box-shadow: 0 1px 3px rgba(0,0,0,0.04);">
4251 보드 (ID 리더)
</div>
</div>
<!-- ADLINK -->
<div style="display: flex; align-items: center; justify-content: space-between; gap: 10px;">
<div style="flex-grow: 1; text-align: center; font-size: 8.5pt; border-bottom: 2px solid #2ed573; padding-bottom: 4px; color: #2ed573; font-weight: 500;">
PCI 슬롯 ══➔
</div>
<div style="border: 1px solid #2ed573; border-radius: 4px; padding: 8px 12px; background-color: #f1fff5; min-width: 140px; text-align: center; font-size: 9pt; font-weight: bold; color: #157a38; box-shadow: 0 1px 3px rgba(0,0,0,0.04);">
ADLINK PCI-7432
</div>
</div>
</div>
</div>
---
## 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됩니다.
---
<div class="page-break"></div>
## 1.5 프로그램 창 구조 개요
프로그램은 3개의 영역으로 구성됩니다:
<div style="border: 1px solid #ccd0d5; border-radius: 6px; overflow: hidden; max-width: 500px; margin: 20px auto; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; box-shadow: 0 2px 6px rgba(0,0,0,0.05); page-break-inside: avoid;">
<!-- Header -->
<div style="background-color: #2f3542; color: #ffffff; padding: 12px; font-weight: bold; font-size: 9.5pt; text-align: center; border-bottom: 2px solid #ccd0d5;">
상단 타이틀 바 <span style="font-weight: normal; font-size: 8.5pt; color: #a4b0be; margin-left: 5px;">(프로그램명, 시간, 배지, 창 제어)</span>
</div>
<!-- Content -->
<div style="background-color: #ffffff; padding: 45px 15px; text-align: center; color: #2f3542; border-bottom: 2px solid #ccd0d5;">
<div style="font-weight: bold; font-size: 11pt; margin-bottom: 6px;">메인 콘텐츠 영역</div>
<div style="color: #747d8c; font-size: 9pt;">(Home / Data View 전환)</div>
</div>
<!-- Footer -->
<div style="background-color: #f1f2f6; color: #2f3542; padding: 12px; font-size: 9pt; text-align: center; font-weight: bold;">
하단 메뉴 바 <span style="font-weight: normal; font-size: 8.5pt; color: #57606f; margin-left: 5px;">(Data, Parameters, Comm.Settings, ID Test L/R)</span>
</div>
</div>
| 영역 | 설명 |
|------|------|
| 상단 타이틀 바 | 프로그램 제목, 실시간 날짜/시간, 현재 로그인된 작업자/모델/라인 정보 배지, 세션 로그아웃 버튼, 시스템 창 제어 버튼 배치 |
| 메인 콘텐츠 영역 | 선택된 기능 화면(Home 검사 모니터 또는 Data 데이터 조회)이 표시되는 주 콘텐츠 영역 |
| 하단 메뉴 바 | 각 화면 전환 및 설정을 위한 조작 버튼 영역 |
<div class="page-break"></div>
# 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 프로그램 실행
### 실행 방법
2 weeks ago
1. 바탕화면의 **바로가기 아이콘**을 더블 클릭하여 실행합니다.
2. 프로그램이 전체화면(Maximized) 모드로 시작됩니다.
### 최초 실행 시 자동 생성되는 파일
2 weeks ago
| 파일 / 폴더 | 위치 | 설명 |
|-------------|------|------|
| `config.xml` | 프로그램 실행 폴더 (`C:\LeakTest\`) | 통신 포트, BaudRate, SPEC 값 등 모든 설정을 저장 |
| `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 검사 로그 및 시스템 로그 저장 위치 |
### 프로그램 시작 시 자동 수행 동작
프로그램이 실행되면 아래 동작이 자동으로 수행됩니다:
<div style="border-left: 3px solid #007acc; padding-left: 20px; margin: 25px auto; max-width: 550px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; page-break-inside: avoid;">
<div style="margin-bottom: 15px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #007acc; border-radius: 50%;"></span>
<div style="font-weight: bold; color: #1e272e; font-size: 10pt;">프로그램 실행 시작</div>
</div>
<div style="margin-bottom: 12px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #007acc; border-radius: 50%;"></span>
<strong style="color: #007acc; font-size: 9.5pt;">1. DIO 보드 초기화</strong>
<span style="font-size: 8.5pt; color: #57606f; display: block; margin-top: 2px;">PCI-7432 보드를 확인하며, 실패 시 시뮬레이션 모드로 전환</span>
</div>
<div style="margin-bottom: 12px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #007acc; border-radius: 50%;"></span>
<strong style="color: #007acc; font-size: 9.5pt;">2. PC_ON 출력 신호 ON</strong>
<span style="font-size: 8.5pt; color: #57606f; display: block; margin-top: 2px;">외부 설비에 PC 가동 상태를 실시간 알림</span>
</div>
<div style="margin-bottom: 12px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #007acc; border-radius: 50%;"></span>
<strong style="color: #007acc; font-size: 9.5pt;">3. 설정값 로드</strong>
<span style="font-size: 8.5pt; color: #57606f; display: block; margin-top: 2px;">`config.xml` 파일로부터 통신 포트 및 판정 규격(SPEC) 로드</span>
</div>
<div style="margin-bottom: 12px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #007acc; border-radius: 50%;"></span>
<strong style="color: #007acc; font-size: 9.5pt;">4. Sentinel C28 연결</strong>
<span style="font-size: 8.5pt; color: #57606f; display: block; margin-top: 2px;">리크 센서 시리얼 통신 포트 연결 시도</span>
</div>
<div style="margin-bottom: 12px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #007acc; border-radius: 50%;"></span>
<strong style="color: #007acc; font-size: 9.5pt;">5. 4251 보드 연결</strong>
<span style="font-size: 8.5pt; color: #57606f; display: block; margin-top: 2px;">ID 판독 보드 시리얼 통신 포트 연결 시도</span>
</div>
<div style="margin-bottom: 12px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #007acc; border-radius: 50%;"></span>
<strong style="color: #007acc; font-size: 9.5pt;">6. 시험 프로세스 스레드 기동</strong>
<span style="font-size: 8.5pt; color: #57606f; display: block; margin-top: 2px;">LEFT 및 RIGHT 채널의 백그라운드 계측 제어 스레드 개시</span>
</div>
<div style="position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #2ed573; border-radius: 50%;"></span>
<strong style="color: #2ed573; font-size: 9.5pt;">7. 메인 화면(Home View) 표시</strong>
<span style="font-size: 8.5pt; color: #57606f; display: block; margin-top: 2px;">프로그램 UI 전체 활성화 및 측정 대기 상태 진입</span>
</div>
</div>
> **참고**: 시리얼 포트 연결에 실패하면 메인 화면의 **오류 메시지** 영역에 해당 오류가 표시됩니다. 이 경우 `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)
2 weeks ago
프로그램 배포 폴더(`C:\LeakTest\Database.ini`)에 위치한 `Database.ini` 파일 설정에 따라 로그인 인증 방식이 달라집니다. 해당 파일이 누락된 경우 프로그램 최초 실행 시 기본 템플릿 정보와 함께 해당 경로에 자동으로 생성됩니다. 모든 설정 파일이 배포 폴더에 함께 위치하므로 경로 관리가 단순합니다.
```ini
; [데이터베이스 접속 상세 설정]
2 weeks ago
Db_Server=[데이터베이스_서버_IP],[포트번호]
Db_Name=[데이터베이스_이름]
Db_User=[접속_계정_ID]
Db_Password=[접속_비밀번호]
[Login]
Procedure=dbo.CheckOperator
ProcessName=EOL
OfflinePreview=false
```
2 weeks ago
- **온라인 인증 모드 (`OfflinePreview=false`)**: 지정된 데이터베이스 접속 정보(`Db_Server`, `Db_Name`, `Db_User`, `Db_Password`)를 기반으로 데이터베이스에 접속하여 사용자 계정의 유효성을 검증합니다. 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`에서 마지막 저장된 설정 자동 로드 | 별도 작업 불필요 |
<div class="page-break"></div>
# 3. 메인 화면 (Home View)
---
프로그램 실행 시 기본으로 표시되는 화면입니다. 좌/우 채널의 누설 시험 결과를 실시간으로 모니터링합니다.
## 3.1 전체 화면 레이아웃
<img src="./Pasted image 20260626093617.png" alt="Pasted image 20260626093617.png" />
---
## 3.2 상단 타이틀 바
프로그램 최상단에 위치한 짙은 블랙 그레이 배경의 바입니다.
<img src="./Pasted image 20260626093648.png" alt="Pasted image 20260626093648.png" />
| 위치 | 요소 | 설명 |
|------|------|------|
| 좌측 | **프로그램 제목 & 버전** | "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`)으로 균등 분할되며, 각 채널은 동일한 구조입니다.
<img src="./Pasted image 20260626093712.png" alt="Pasted image 20260626093712.png" />
### 각 채널의 구성 요소 (위에서 아래 순서)
#### ① 채널 타이틀 (Row 0)
- **LEFT LEAK TESTER** 또는 **RIGHT LEAK TESTER**
- 짙은 남색 배경에 백색 볼드 텍스트로 채널 구분을 명시합니다.
2 weeks ago
#### ② 시작/종료 시간 (Row 1)
| 항목 | 설명 |
|------|------|
2 weeks ago
| 라벨 | `시작/종료` (회색 헤더 배경) |
| 값 | `시작시간 / 종료시간` 형식 (예: `2026-05-08 10:30:15 / -` 또는 `2026-05-08 10:30:15 / 10:30:45`) |
| 갱신 시점 | 시험이 시작될 때 `시작시간 / -` 형태로 갱신되며, 시험 완료(DB 저장) 시점에 종료 시간이 함께 기록됩니다. |
2 weeks ago
#### ③ IC_SN / PCB_Barcode (Row 2~3) - **식별자 2행 분리 표시**
| 항목 | 설명 |
|------|------|
2 weeks ago
| 라벨 | `IC_SN` / `PCB_Barcode` (각각 회색 헤더 배경, 개별 행으로 표시) |
| 값 | 각각 제품의 IC 일련번호 및 이에 매핑되는 PCB 바코드 고유 식별 정보 |
| 데이터 소스 | **IC_SN**: 4251 보드로 제품 ID 센서에서 판독한 값<br>**PCB_Barcode**: 판독한 `IC_SN`을 기준으로 데이터베이스에서 조회한 바코드 값 (오프라인 모드 시 임시 데이터 주입) |
| 갱신 시점 | 시험 시작 시 빈 값(`-`)으로 초기화, 판독 및 조회 완료 시 표시 |
> **참고**: 텍스트 잘림 방지 및 가독성 향상을 위해 IC_SN과 PCB_Barcode를 별도의 행으로 나누어 표시합니다. 프로그램 창 크기를 소형으로 조절하더라도 텍스트가 잘리지 않고 정상 표시됩니다.
#### ④ 측정값 + 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개의 버튼이 좌측부터 수평으로 배치됩니다.
<img src="./Pasted image 20260624104445.png" alt="Pasted image 20260624104445.png" />
| 순서 | BUTTON | 부제 | 동작 | 동작 방식 |
|------|------------|------|------|----------|
| 1 | **Data** | (측정 데이터) | 검사 기록 조회 화면 전환 | 토글 (다시 클릭 시 Home으로 복귀) |
| 2 | **Parameters** | (시험 설정) | 시험 설정 팝업 창 열기 | 모달 팝업 (설정 후 자동 닫힘) |
| 3 | **Comm. Settings** | (통신 설정) | 통신 설정 팝업 창 열기 | 모달 팝업 (설정 후 자동 닫힘) |
| 4 | **ID Test (L)** | (좌측 ID 테스트) | 좌측 채널 센서 ID 수동 판독 | 즉시 실행 (파란색 텍스트) |
| 5 | **ID Test (R)** | (우측 ID 테스트) | 우측 채널 센서 ID 수동 판독 | 즉시 실행 (파란색 텍스트) |
### 버튼 스타일
- 배경: 연회색, 마우스 오버 시 시각적 피드백을 위해 약간 어둡게 변함
- 테두리: 회색
- 텍스트: 볼드 (부제는 일반 텍스트)
<div class="page-break"></div>
# 4. 통신 설정 (Comm. Settings)
---
하단 메뉴에서 **Comm. Settings (통신 설정)** 버튼 클릭 시 열리는 **모달 팝업 창**입니다.
<img src="./Pasted image 20260624104506.png" alt="Pasted image 20260624104506.png" />
## 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 센서가 연결된 시리얼 포트 |
2 weeks ago
## 4.4 스펙 불일치 알림 설정 (화면 하단 영역)
| 항목 | UI 타입 | 선택 가능한 값 | 기본값 | 설명 |
|------|---------|---------------|--------|------|
| **스펙 불일치 알림 활성화** | 체크박스 | 체크(ON) / 체크 해제(OFF) | `체크(ON)` | 프로그램 판정과 센서 자체 판정이 맞지 않을 때의 알림 팝업 창 발생 여부 설정 |
> **동작 설명**:
> - **ON (기본값)**: 판정이 불일치할 때 메인 화면의 오류 메시지 창에 로그가 기재됨과 동시에, 경고 대화상자("프로그램 스펙과 센서의 스펙이 서로 맞지 않습니다.") 팝업이 출력되어 작업자 인지를 강제합니다.
> - **OFF**: 판정이 불일치하더라도 경고 팝업을 띄우지 않고, 화면의 오류 메시지 영역에만 텍스트로 기록을 남깁니다. (콘솔 로그 기록 등은 유지)
> - 이 설정은 `config.xml` 내의 `EnableSpecMismatchAlarm` 옵션에 영속 저장되어 프로그램 재작동 시에도 마지막 상태가 자동 유지됩니다.
## 4.5 버튼 설명
| 버튼 | 특징 | 동작 |
|------|------|------|
| **설정 저장** | 녹색 계열 | config.xml에 저장 → 기존 연결 해제 → 새 설정으로 재연결 → "통신 설정이 저장되었습니다." 메시지 → 창 닫힘 |
| **닫기** | 회색 계열 | 변경 사항 저장하지 않고 창 닫기 |
2 weeks ago
## 4.6 저장 시 내부 동작 순서
2 weeks ago
1. 현재 선택된 값을 `config.xml`에 저장 (스펙 불일치 알림 활성화 여부 포함)
2. 기존 Sentinel C28 시리얼 연결 해제
3. 기존 4251 보드 시리얼 연결 해제
4. 시험 프로세스 스레드 종료
5. 새 설정값으로 Sentinel C28 재연결
6. 새 설정값으로 4251 보드 재연결
7. 시험 프로세스 스레드 재시작
> **⚠️ 주의**: COM 포트를 동일하게 설정하면 충돌이 발생합니다. 4251 보드와 C28 센서는 반드시 다른 포트를 사용하세요.
<div class="page-break"></div>
# 5. 시험 설정 (Parameters)
---
하단 메뉴에서 **Parameters (시험 설정)** 버튼 클릭 시 열리는 **모달 팝업 창**입니다.
<img src="./Pasted image 20260624104531.png" alt="Pasted image 20260624104531.png" />
## 5.1 창 구성
| 속성 | 값 |
|------|-----|
| 창 크기 | 고정 (크기 변경 불가) |
| 위치 | 메인 창 중앙에 정렬되어 표시 |
| 타입 | 모달 |
## 5.2 설정 항목
| 항목 | UI 타입 | 입력 형식 | 기본값 | 설명 |
|------|---------|----------|--------|------|
| **SPEC UL (sccm)** | 텍스트 입력 | 소수점 숫자 | `1.00` | 누설 상한 규격값. 이 값 이하일 때 OK |
| **SPEC LL (sccm)** | 텍스트 입력 | 소수점 숫자 | `-1.00` | 누설 하한 규격값. 이 값 이상일 때 OK |
> **입력 팁**: 소수점 2자리까지 입력합니다 (예: `1.50`, `-0.80`). 정수도 입력 가능합니다 (예: `2`).
<div class="page-break"></div>
## 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 값 변경 후 저장하면, 이미 진행 중인 시험에는 영향을 주지 않으며, 다음 시험부터 새 값이 적용됩니다.
<div class="page-break"></div>
# 6. 측정 데이터 조회 (Data View)
---
하단 메뉴에서 **Data (측정 데이터)** 버튼을 클릭하면 표시됩니다. 다시 클릭하면 메인 화면으로 복귀합니다.
<img src="./Pasted image 20260624104558.png" alt="Pasted image 20260624104558.png" />
## 6.1 화면 구성
## 6.2 필터 조건 상세
### 1행: 공통 기본 필터
| 항목 | UI 타입 | 기본값 | 설명 |
|------|---------|--------|------|
2 weeks ago
| **조회 기간** | DatePicker (달력) x 2 | 오늘로부터 7일 전 ~ 오늘 | 조회 대상 날짜 범위를 설정합니다. (달력 확대 표시 적용) |
| **판정 결과** | 드롭다운 ComboBox | `[전체]` / `OK` / `NG` | 판정 결과에 따른 필터링을 수행합니다. (기본값: 전체) |
### 2행: 상세 검색 필터 (DB 스키마 필드 교차 검색)
| 항목 | UI 타입 | 설명 | 기본값 |
|------|---------|------|--------|
2 weeks ago
| **ID 검색** | TextBox (텍스트 입력) | `IC_SN` 또는 `PCB_Barcode` 열에 대한 부분 일치 (LIKE) 검색을 수행합니다. | (빈 값 = 필터 제외) |
| **작업자** | TextBox (텍스트 입력) | 작업자 ID (`Operator`) 열에 대한 부분 일치 검색을 수행합니다. | (빈 값 = 필터 제외) |
| **Lot No** | TextBox (텍스트 입력) | 로트 번호 (`Lot_No`) 열에 대한 부분 일치 검색을 수행합니다. | (빈 값 = 필터 제외) |
| **모델** | TextBox (텍스트 입력) | 모델명 (`Model`) 열에 대한 부분 일치 검색을 수행합니다. | (빈 값 = 필터 제외) |
## 6.3 조회 및 취소 버튼
| 버튼 | 색상 | 동작 |
|------|------|------|
2 weeks ago
| **Search** | 파란색 계열 | 설정된 필터 조건으로 로컬 로그 CSV 백업 파일을 검색하여 그리드에 표시합니다. (시스템 안정성을 위해 데이터베이스 직접 조회 대신 로컬 백업 파일을 조회하도록 설계되었습니다.) |
| **Cancel (취소)** | 빨간색 계열 | 조회 중일 때 로딩 화면 내부에 나타나며, 진행 중인 파일 검색 작업을 중단하고 이전 화면으로 복귀합니다. |
### Search 버튼 동작 상세
2 weeks ago
1. 지정된 조회 기간에 해당하는 일별 로그 CSV 파일만 조회하여 검색을 수행합니다. (불필요한 파일 스캔을 제한하여 검색 속도를 향상시켰습니다.)
2. 검색 조건(판정, ID, 작업자, Lot No, 모델)에 맞는 데이터를 인메모리 부분 일치 방식으로 검색합니다.
3. 검색 결과가 존재하지 않을 경우 "해당 조건의 데이터가 없습니다." 알림을 표시합니다.
### 조회 중 로딩 및 Cancel 버튼 동작 상세
2 weeks ago
1. Search 버튼 클릭 시 화면 전체에 "Searching Logs..." 라는 반투명 오버레이가 활성화되어 검색이 진행 중임을 나타냅니다.
2. 검색이 지연될 경우 로딩 오버레이의 **Cancel (취소)** 버튼을 누르면 즉시 조회가 중단되고, "조회가 취소되었습니다." 메시지 박스 팝업 후 자동으로 메인 화면으로 복귀합니다.
## 6.4 데이터 조회 결과 표(그리드) 항목 안내
| 컬럼 헤더명 | 정렬 | 설명 |
|------|------|------|
| **IC_SN** | 좌측 | 제품 고유 IC 시리얼 번호 |
| **PCB_Barcode** | 좌측 | PCB 바코드 고유 식별 정보 |
| **Maker** | 좌측 | 로그인 시 입력된 제조사명 |
| **Model** | 좌측 | 로그인 시 입력된 검사 모델명 |
| **Variant_1** | 좌측 | 로그인 시 입력된 세부 파생 모델 1 |
| **Variant_2** | 좌측 | 로그인 시 입력된 세부 파생 모델 2 |
| **Operator** | 좌측 | 작업 진행자 사용자 ID |
| **Production_Date** | 좌측 | 검사 수행 및 완료 일시 (yyyy-MM-dd HH:mm:ss) |
| **Line** | 좌측 | 로그인 공정 작업 라인 |
| **Lot_No** | 좌측 | 생산 Lot 번호 |
| **Jig_No** | 좌측 | 사용 지그(Jig) 번호 |
| **Channel** | 좌측 | 검사 채널 (`LEFT` 또는 `RIGHT`) |
| **Spec_UL** | 좌측 | 누설 상한 규격값 (sccm) |
| **Spec_LL** | 좌측 | 누설 하한 규격값 (sccm) |
| **Leak_Value** | **우측** | 측정된 누설 리크량 (**볼드 표시**) |
| **Result** | **중앙** | 최종 판정 결과 (`OK` 초록 / `NG` 빨강 볼드 강조) |
### 표(그리드) 스타일
- 격자선: 수평 및 수직 연회색 격자선을 표시합니다.
- 교대 행 배경: 홀수 행은 흰색, 짝수 행은 연회색 배경을 적용하여 가독성을 높였습니다.
- 선택된 행: 연파란색 배경에 파란색 텍스트로 강조합니다.
- 컬럼 헤더 정렬: 헤더 클릭 시 해당 열 기준으로 오름차순 또는 내림차순 정렬이 가능합니다. (컬럼 순서 변경은 제한됩니다.)
- 격자 유지: 조회된 데이터 개수가 50개 미만이더라도 화면 구성을 유지하기 위해 나머지 행은 빈 칸으로 채워져 표시됩니다.
## 6.5 화면 닫기
| 방법 | 설명 |
|------|------|
2 weeks ago
| 하단 **Close** 버튼 클릭 | 메인 화면으로 복귀합니다. |
| 하단 메뉴 **Data** 버튼 재클릭 | 토글 동작을 통해 메인 화면으로 복귀합니다. |
<div class="page-break"></div>
# 7. 자동 시험 프로세스
---
## 7.1 개요
2 weeks ago
자동 시험은 시작 신호(LEFT_START 또는 RIGHT_START)에 의해 작동하며, 7단계로 진행됩니다. 좌/우 채널은 각각 독립적인 백그라운드 스레드에서 실행되지만, **중복 실행 방지 기능**을 통해 동시 시험은 방지됩니다.
## 7.2 전체 프로세스 흐름도
<div style="border-left: 3px solid #1e3799; padding-left: 20px; margin: 25px auto; max-width: 600px; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; page-break-inside: avoid; font-size: 9pt; line-height: 1.5;">
<!-- Trigger -->
<div style="margin-bottom: 15px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
2 weeks ago
<div style="font-weight: bold; color: #2f3542;">시작 신호 감지 <span style="font-weight: normal; font-size: 8pt; color: #747d8c;">(좌측/우측 시작 신호 입력 시)</span></div>
</div>
<!-- Semaphore -->
<div style="margin-bottom: 20px; position: relative; background-color: #f1f2f6; padding: 10px; border-radius: 4px; border-left: 3px solid #f6b93b;">
<span style="position: absolute; left: -26px; top: 14px; width: 10px; height: 10px; background-color: #f6b93b; border-radius: 50%;"></span>
2 weeks ago
<strong>중복 실행 방지 대기</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 다른 채널이 시험 중인 경우: "대기중" 메시지를 표시하며 순서 대기<br>
• 시험 가능 상태인 경우: 다음 단계 진행 (좌/우 채널 동시 시험 방지)
</div>
</div>
<!-- Step 1 -->
<div style="margin-bottom: 15px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
<strong style="color: #1e3799;">1단계: 시험 시작 (초기화)</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 합격/불합격 신호 출력 초기화 (OFF)<br>
• 메인 화면 결과 표시 초기화 및 시작 시간 갱신<br>
2 weeks ago
• 누설 센서 수신 데이터 초기화
</div>
</div>
<!-- Step 2 -->
<div style="margin-bottom: 15px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
2 weeks ago
<strong style="color: #1e3799;">2단계: 제품 ID 판독</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 판독 장치(4251 보드)를 통해 제품 ID 센서에서 16자리 ID 판독<br>
<span style="color: #ff4757; font-weight: bold;">[실패 시]</span> "ID 읽기 실패" 오류 출력 후 시험이 종료되며 결과는 기록 및 저장에서 제외됩니다.
</div>
</div>
2 weeks ago
<!-- Step 3 -->
2 weeks ago
<div style="margin-bottom: 15px; position: relative; background-color: #f8f9fa; padding: 10px; border-radius: 4px; border-left: 3px solid #1e3799;">
<span style="position: absolute; left: -26px; top: 14px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
<strong style="color: #1e3799;">3단계: PCB 바코드 데이터베이스 조회</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 데이터베이스에서 제품 ID(`IC_SN`)에 매칭되는 `PCB_Barcode` 조회 (5초 대기 시간 초과 제한)<br>
<span style="color: #ff4757; font-weight: bold;">[실패/누락 시]</span> "바코드 매핑 실패" 오류 출력 후 즉시 종료되며 결과는 기록 및 저장에서 제외됩니다.
</div>
</div>
<!-- Step 4 -->
<div style="margin-bottom: 15px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
2 weeks ago
<strong style="color: #1e3799;">4단계: 누설 시험 수행 (계측)</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 화면에 "LEAK 시험중" 표시<br>
• 누설 센서(Sentinel C28)로부터 측정 결과 수신 대기 (최대 30초)<br>
<span style="color: #ff4757; font-weight: bold;">[시간 초과 시]</span> 통신 시간 초과 오류 발생 및 불합격(NG) 판정으로 자동 종료 (측정값 9.9999로 데이터베이스에 저장)
</div>
</div>
<!-- Step 5 -->
<div style="margin-bottom: 15px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
2 weeks ago
<strong style="color: #1e3799;">5단계: 합격 판정</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 규격 하한값 ≤ 측정값 ≤ 규격 상한값 이면 **OK (합격)**, 범위를 벗어나면 **NG (불합격)**로 판정합니다.
</div>
</div>
<!-- Step 6 -->
2 weeks ago
<div style="margin-bottom: 15px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
<strong style="color: #1e3799;">6단계: 판정 스펙 교차 검증</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
• 프로그램 판정과 센서 자체 판정을 비교 분석합니다.<br>
• 판정이 서로 다를 경우 화면에 경고 창을 표시합니다. (통신 설정에서 알림 창 표시를 끌 수 있습니다.)
</div>
</div>
<!-- Step 7 -->
<div style="margin-bottom: 20px; position: relative;">
<span style="position: absolute; left: -26px; top: 4px; width: 10px; height: 10px; background-color: #1e3799; border-radius: 50%;"></span>
2 weeks ago
<strong style="color: #1e3799;">7단계: 결과 출력 및 저장</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 로컬 CSV 백업 파일 기록 및 데이터베이스에 검사 결과 저장<br>
• 판정 결과에 따라 외부 설비에 출력 신호(OK 또는 NG 포트) 전송<br>
• 메인 화면에 최종 측정값 및 판정 출력 ("시험 완료" 표시)
</div>
</div>
<!-- End -->
<div style="position: relative; background-color: #f1fff5; padding: 10px; border-radius: 4px; border-left: 3px solid #2ed573;">
<span style="position: absolute; left: -26px; top: 14px; width: 10px; height: 10px; background-color: #2ed573; border-radius: 50%;"></span>
2 weeks ago
<strong style="color: #2f855a;">순서 잠금 해제</strong>
<div style="font-size: 8.5pt; color: #57606f; margin-top: 3px;">
2 weeks ago
• 시험 종료 후 순서 대기가 해제되며, 대기 중이던 다른 채널이 0.35초 대기 후 자동으로 시험을 개시합니다.
</div>
</div>
</div>
2 weeks ago
## 7.3 좌/우 채널 순차 실행 및 대기
2 weeks ago
좌/우 채널은 **동시에 시험을 수행할 수 없습니다**. 이는 하드웨어 통신 간섭 및 충돌을 방지하기 위함입니다.
| 상황 | 동작 |
|------|------|
2 weeks ago
| 한 채널만 시험 시작 신호 발생 | 즉시 시험을 시작합니다. |
| 양쪽 채널 동시 신호 발생 | 먼저 순서를 획득한 채널이 시험을 진행하며, 다른 채널은 "대기중"을 표시하며 대기합니다. |
| 시험 완료 후 | 대기 중이던 채널이 자동으로 시험을 시작합니다. (안정화를 위해 0.35초의 대기 시간이 적용됩니다.) |
> **참고**: 하드웨어 통신 안정화를 위해 이전 채널의 시험 종료 후 **0.35초의 여유 시간**이 자동으로 적용됩니다.
## 7.4 시간 초과 (타임아웃) 처리
누설 센서에서 30초 이내에 계측 결과 응답이 없으면 다음과 같이 처리됩니다.
1. 화면의 오류 메시지 영역에 "통신 시간 초과" 오류 메시지를 표시합니다. (데이터베이스 저장 실패 시 "DB 저장 실패" 사유도 함께 노출)
2. 해당 채널의 불합격(NG) 물리 신호를 내보냅니다.
3. 측정값 `9.9999`, 판정 `NG`로 기록을 생성합니다.
4. 로컬 CSV 로그 파일 및 데이터베이스에 검사 결과를 기록합니다. (단, 이전 단계인 제품 ID 판독에 성공한 상태여야 저장이 이루어집니다.)
2 weeks ago
## 7.5 제품 ID 및 PCB 바코드 연동 예외 처리
2 weeks ago
데이터 일관성과 무결성을 확보하기 위해 제품 식별 정보가 불완전한 상태에서의 데이터 저장을 차단하는 안전 검증 절차가 작동합니다.
2 weeks ago
### 1. 제품 ID(IC_SN) 판독 실패 시
- **동작**: 제품 ID 판독 장치(4251 보드)로부터 16자리 ID 취득을 실패하는 경우 진행 메시지에 `"ID 읽기 실패"`를 표시하고, 해당 채널의 NG 물리 신호를 즉시 출력합니다.
- **저장 제한**: 이 경우에는 로컬 CSV 로그 기록 및 데이터베이스 저장을 **완전히 건너뜁니다**.
2 weeks ago
### 2. PCB 바코드 DB 조회(매핑) 실패 시
- **동작**: 판독 완료 후 데이터베이스 서버에서 `IC_SN`에 해당하는 `PCB_Barcode`를 조회할 때, 정해진 시간(5초) 내에 응답이 없거나 일치하는 데이터가 없는 경우 화면에 `"바코드 매핑 실패"` 관련 오류를 표시하고 NG 신호를 출력합니다.
- **저장 제한**: 이 경우에도 제품 검사 자체를 진행하지 않고 즉시 스킵하며, **데이터베이스 및 로컬 CSV 로그 기록 저장을 건너뜁니다**. (오프라인 모드에서는 임시 바코드 정보를 주입하여 검사 동작을 테스트할 수 있습니다.)
2 weeks ago
## 7.6 누설 센서 측정 결과 채널 분류
2 weeks ago
누설 센서에서 수신한 데이터는 다음 채널 번호 정보를 기준으로 정렬됩니다.
| 채널 번호 | 대상 |
|----------|------|
2 weeks ago
| `C01` 또는 `1` | 좌측(LEFT) 채널 |
| `C02` 또는 `2` | 우측(RIGHT) 채널 |
| 채널 번호 식별 불가 | 현재 활성화되어 시험을 진행 중인 채널로 자동 배정 |
2 weeks ago
## 7.7 ID 수동 테스트
2 weeks ago
하단 메뉴의 **ID Test (L)** 또는 **ID Test (R)** 버튼을 사용하면 시험 시작 신호 없이 센서 ID 판독 동작만 단독으로 수행할 수 있습니다.
### 실행 흐름
2 weeks ago
1. 중복 방지 잠금 획득 (다른 채널이 시험 중인 경우 대기)
2. 결과 표시 초기화 및 0.5초 대기
3. "센서 정보 읽는 중" 메시지 표시 후 ID 판독 시작
4. 성공 시: 판독된 ID 표시 및 "ID 테스트 완료" 메시지 표시
5. 실패 시: ID 영역에 "-" 표시 및 "ID 테스트 실패" 메시지 표시
6. 잠금 해제
2 weeks ago
> **용도**: 장비 설치 후 통신 상태 확인 및 디버깅 시 사용합니다. 실제 누설 시험(압력 계측)은 수행하지 않습니다.
2 weeks ago
## 7.8 측정 판정 및 저장 기준
2 weeks ago
프로그램의 판정 스펙(상하한 규격) 기준과 누설 센서 자체의 내부 스펙 판정 기준이 일치하지 않는 경우, 저장소에는 다음과 같이 저장됩니다.
### 저장 기준 요약
2 weeks ago
* **최종 저장 판정 (Result)**: 센서 자체의 판정값과 무관하게, 항상 **프로그램 화면 판정 기준**으로 데이터베이스 및 로그에 저장됩니다.
* **동작 예시**: 프로그램 판정이 합격(`OK`)이지만 센서 자체의 내부 판정이 불합격(`NG` 등)인 경우에도, 최종 기록 및 CSV에는 **`OK` (합격)**로 기록됩니다.
2 weeks ago
### 판정 스펙 불일치 시의 동작
* 양측의 판정 스펙이 다르면 불일치 로그가 기록되며 화면에 경고 팝업이 출력되지만, **최종 저장되는 판정 결과에는 영향을 미치지 않고 프로그램 판정값을 유지**합니다.
<div class="page-break"></div>
# 8. 로그 및 데이터 관리
---
## 8.1 검사 데이터 로그 (CSV)
### 기본 정보
| 항목 | 내용 |
|------|------|
2 weeks ago
| **저장 위치** | `C:\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`로 로그에 기록됩니다.
> **참고**: CSV 값에 쉼표, 따옴표, 줄바꿈이 포함된 경우 자동으로 이스케이프 처리됩니다.
---
## 8.2 시스템 로그
### 기본 정보
| 항목 | 내용 |
|------|------|
2 weeks ago
| **저장 위치** | `C:\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
| 항목 | 내용 |
|------|------|
2 weeks ago
| **위치** | 프로그램 실행 폴더 (`C:\LeakTest\config.xml`) |
| **생성** | 최초 실행 시 기본값으로 자동 생성 |
| **수정** | Comm. Settings 또는 Parameters에서 저장 시 갱신 |
```xml
<AppConfig>
<SensorPort>COM1</SensorPort>
<SensorBaudRate>9600</SensorBaudRate>
<Board4251Port>COM3</Board4251Port>
<Board4251BaudRate>115200</Board4251BaudRate>
<Board4251Timeout>5000</Board4251Timeout>
<SpecUL>1.00</SpecUL>
<SpecLL>-1.00</SpecLL>
2 weeks ago
<EnableSpecMismatchAlarm>true</EnableSpecMismatchAlarm>
</AppConfig>
```
| 설정 키 | 기본값 | 설정 위치 | 설명 |
|---------|--------|----------|------|
| `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 | 누설 하한 규격값 |
2 weeks ago
| `EnableSpecMismatchAlarm` | true | Comm. Settings | 스펙 불일치 알림 활성화 여부 (true/false) |
### Database.ini
| 항목 | 내용 |
|------|------|
2 weeks ago
| **위치** | `C:\LeakTest\Database.ini` |
| **생성** | 최초 실행 시 해당 파일이 없으면 기본 양식으로 자동 생성. 배포 폴더(`C:\LeakTest\`)와 동일 위치에 저장되어 경로 관리가 단순함 |
| **수정** | 메모장 등의 텍스트 에디터를 통해 연결 주소 및 프로시저 정보 직접 수정 |
```ini
2 weeks ago
; =====================================================================
; Leak Test System - 데이터베이스 및 로그인 설정 파일 (Database.ini)
; =====================================================================
; [데이터베이스 접속 상세 설정]
2 weeks ago
; Db_Server : 중앙 MSSQL 데이터베이스 서버의 IP 주소 또는 호스트명
; Db_Name : 검사 데이터를 저장할 대상 데이터베이스 이름
; Db_User : 데이터베이스 접속 계정 ID (예: sa)
; Db_Password: 데이터베이스 접속 계정의 비밀번호
Db_Server=127.0.0.1, 1433
Db_Name=Test_DB
Db_User=db_user
Db_Password=db_password
[Login]
2 weeks ago
; Procedure: 로그인 검증에 사용할 DB 저장 프로시저명입니다. (공란일 경우 기본 테이블 조회 쿼리 작동)
Procedure=dbo.CheckOperator
2 weeks ago
; ProcessName: 로그인 검증 시 전달할 공정 이름입니다.
ProcessName=EOL
2 weeks ago
; OfflinePreview: 오프라인 모드 활성화 여부 (true = DB 연결 없이 로그인 통과, false = 실제 DB 인증)
OfflinePreview=false
```
2 weeks ago
| 설정 키 | 예시 / 기본값 | 설명 |
|---------|--------|------|
2 weeks ago
| `Db_Server` | `[서버IP], [포트번호]` (예: 127.0.0.1, 1433) | 데이터베이스 서버 IP 주소 및 포트 번호 |
| `Db_Name` | `[데이터베이스명]` (예: Test_DB) | 대상 데이터베이스(DB) 이름 |
| `Db_User` | `[사용자ID]` (예: db_user) | 데이터베이스 접속 계정 ID |
| `Db_Password` | `[비밀번호]` (예: db_password) | 데이터베이스 접속 계정 비밀번호 |
| `Procedure` | dbo.CheckOperator | 로그인 계정 검증용 데이터베이스 프로그램명 |
| `ProcessName` | EOL | 검증 공정명 |
| `OfflinePreview` | false | true 시 DB 연결 없이 로그인 즉시 성공 (오프라인 모드) |
2 weeks ago
> **SSL 인증 오류 방지**: DB 연결 시 SSL 인증서 신뢰 오류가 발생하는 환경을 방지하기 위해 프로그램 내부에서 자동으로 `TrustServerCertificate=True;` 옵션을 연결 문자열 끝에 추가하여 안정적인 동작을 보장합니다.
### LoginOptions.json / LoginHistory.json
| 항목 | 내용 |
|------|------|
| **위치** | `C:\LeakTest\` |
| **생성** | 최초 실행 시 자동 생성 |
| **수정** | 프로그램 내 로그인 화면 사용 시 자동 갱신 |
| 파일 | 설명 |
|------|------|
| `LoginOptions.json` | 로그인 화면 각 필드(Maker, Model, Variant_1 등)의 자동완성 드롭다운 선택지 목록 저장 |
| `LoginHistory.json` | 최근 로그인 정보(작업자 ID, 라인, 모델 등 전체 세트)를 최대 10건 저장하여 재사용 |
### 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 정도의 로그가 생성됩니다 |
---
2 weeks ago
## 8.5 데이터베이스 데이터 관리
검사가 완료되면 측정 결과와 작업 정보가 데이터베이스에 자동으로 저장됩니다.
### 데이터베이스 저장 항목 안내
* **저장 대상 테이블**: `EOL`
* **저장 항목 상세**:
| 데이터베이스 항목명 | 구분 | 설명 |
| :--- | :--- | :--- |
| **`IC_SN`** | 문자형 (최대 10자) | 제품 고유 IC 일련번호 |
| **`PCB_Barcode`** | 문자형 (최대 10자) | 조회된 PCB 바코드 정보 |
| `Maker` | 문자형 (최대 10자) | 로그인 시 입력한 제조사명 |
| `Model` | 문자형 (최대 10자) | 로그인 시 입력한 검사 모델명 |
| `Variant_1` | 문자형 (최대 10자) | 로그인 시 입력한 파생 모델명 1 |
| `Variant_2` | 문자형 (최대 10자) | 로그인 시 입력한 파생 모델명 2 |
| `Operator` | 문자형 (최대 10자) | 검사자(작업자) ID |
| `Production_Date` | 날짜/시간형 | 검사가 완료된 시간 |
| `Line` | 문자형 (최대 30자) | 로그인 시 입력한 작업 라인명 |
| `Lot_No` | 문자형 (최대 8자) | 로그인 시 입력한 Lot 번호 |
| `Jig_No` | 문자형 (최대 10자) | 로그인 시 입력한 지그 번호 |
| `Channel` | 문자형 (최대 5자) | 검사가 수행된 채널 (LEFT / RIGHT) |
| `Spec_UL` | 숫자형 | 리크 판정 상한 기준값 |
| `Spec_LL` | 숫자형 | 리크 판정 하한 기준값 |
| `Leak_Value` | 숫자형 | 측정된 누설량 |
| `Result` | 문자형 (최대 5자) | 최종 판정 결과 (OK / NG) |
<div class="page-break"></div>
# 9. 오류 대응 및 프로그램 종료
---
## 9.1 통신 연결 실패
프로그램 시작 또는 통신 설정 저장 시 발생할 수 있습니다.
| 오류 메시지 | 원인 | 조치 방법 |
|------------|------|----------|
| `Sentinel C28 포트 연결 실패 (COMx)` | C28 센서 미연결, 잘못된 포트, 다른 프로그램이 포트 점유 | ① 케이블 연결 확인 ② 장치 관리자에서 COM 포트 번호 확인 ③ Comm. Settings에서 올바른 포트 선택 후 `설정 저장` |
| `4251 보드 포트 연결 실패 (COMx)` | 4251 보드 미연결, 잘못된 포트 | ① 케이블 연결 확인 ② Comm. Settings에서 올바른 포트 선택 후 `설정 저장` |
> **참고**: 통신 설정을 저장하면 기존 연결을 모두 해제하고 새 설정으로 재연결을 시도합니다. 포트 변경 후 재시작 없이 바로 적용됩니다.
## 9.2 시험 중 오류
시험 프로세스 진행 중 발생하는 오류입니다. 메인 화면의 **오류 메시지** 영역에 표시됩니다.
| 오류 메시지 | 원인 | 조치 방법 |
|------------|------|----------|
| `Sentinel C28 통신 타임아웃` | 30초 내 C28 센서 응답 없음 | ① 센서 전원 ON 확인 ② 시리얼 케이블 연결 확인 ③ BaudRate 설정 확인 (기본: 9600) |
2 weeks ago
| `통신 실패 (4251 보드 CHx 상태 응답 시간 초과)` | 4251 보드가 대기 시간(15초) 내에 응답하지 않음 | ① 4251 보드 전원 공급 및 케이블 연결선 확인 ② 통신 노이즈 방지 조치 확인 |
| `통신 실패 (4251 보드 CHx 상태 이상 또는 Fail)` | 4251 보드로부터 정상 응답을 받지 못했거나 오류 코드가 반환됨 | ① 하드웨어 오결선 여부 점검 ② 채널 센서 구동 전원 확인 |
| `통신 실패 (4251 보드 CHx ID 대기 타임아웃)` | 4251 보드를 통해 제품 ID를 15초 내에 판독하지 못함 | ① 센서가 지그(Jig)에 올바르게 안착되었는지 물리적 확인 ② 접촉 단자 이물질 청소 |
2 weeks ago
| `SPEC 불일치 - 프로그램: OK, 센서: R` | 프로그램 SPEC과 센서 자체 SPEC의 판정이 다름 | ① 프로그램의 SPEC UL/LL 확인 (Parameters) ② C28 센서의 SPEC 설정 확인 ③ 양쪽 설정값 동기화 (※ 통신 설정에서 경고 알림 스위치 상태를 확인하세요) |
| `LEAK 센서 데이터 오류` | C28에서 수신된 데이터 파싱 실패 | ① 센서 통신 상태 확인 ② 케이블 접촉 불량 확인 ③ BaudRate 불일치 확인 |
2 weeks ago
| `DB 저장 실패: [오류 원인] 상세 메시지` | 데이터베이스 서버에 검사 데이터를 저장하지 못함 | ① 네트워크 케이블 및 서버 통신 연결 확인 ② Database.ini 설정 파일의 접속 정보(IP/비밀번호 등) 확인 ③ 로컬 일일 CSV 로그 파일에 백업이 정상적으로 저장되었는지 확인 |
| `바코드 매핑 실패: [오류 원인] 상세 메시지` | 데이터베이스에서 해당 `IC_SN`에 매칭되는 바코드 정보를 찾지 못함 | ① 데이터베이스 서버 네트워크 연결 확인 ② Housing_Assembly 테이블에 대상 제품의 바코드 정보 매핑 상태 점검 |
---
## 9.3 SPEC 교차 검증 경고 팝업
2 weeks ago
프로그램 판정과 센서 판정이 불일치할 때, 통신 설정 화면의 **`스펙 불일치 알림 활성화`** 옵션이 켜져(ON) 있는 경우 팝업 경고가 표시됩니다:
```
[!] SPEC 교차 검증 경고
"프로그램 스팩과 센서의 스팩이 서로 맞지 않습니다."
[확인]
```
2 weeks ago
- 만약 이 옵션을 **해제(OFF)**한 경우, 이 팝업 경고 대화상자는 나타나지 않으며, 메인 화면 하단의 **오류 메시지** 텍스트 박스에만 불일치 로그가 기록됩니다.
- 이 경고는 검사 자체를 중단하지는 않으며, **프로그램의 판정 결과**가 최종 DB 및 로컬 로그 기록에 사용됩니다.
---
## 9.4 DIO 보드 오류
| 상황 | 프로그램 동작 | 영향 |
|------|-------------|------|
| PCI-7432 보드 미인식 | **시뮬레이션 모드**로 자동 전환 | DIO 입출력이 동작하지 않음 (실제 입출력 포트 제어 불가) |
| 보드 런타임 오류 | 좌/우 채널 오류 메시지에 `[DIO Board Error]` 표시 | 오류 내용에 따라 조치 |
2 weeks ago
> **시뮬레이션 모드**: ADLINK 드라이버가 설치되지 않은 환경에서도 프로그램의 기능(통신 설정, 데이터 조회 등)을 사전에 테스트할 수 있도록 제공되는 가상 동작 모드입니다.
---
## 9.5 일반적인 문제 해결
| 증상 | 가능한 원인 | 해결 방법 |
|------|-----------|----------|
| 프로그램 시작 후 양쪽 채널에 오류 메시지 | COM 포트 설정 불일치 | Comm. Settings에서 올바른 포트 선택 후 저장 |
| 시험이 시작되지 않음 | DIO 시작 신호 미수신 | 외부 PLC 또는 시작 스위치의 접점 신호 상태 확인 |
| "대기중"에서 진행되지 않음 | 다른 채널이 타임아웃 대기 중 | 최대 30초 대기 후 자동 해제. 센서 연결 확인 |
| 측정값이 표시되지 않음 | C28 센서 스트리밍 데이터 미수신 | 센서 전원, 케이블, BaudRate 확인 |
| COM 포트 목록이 비어있음 | 시리얼 장치 미연결 | USB-시리얼 케이블 연결 확인, 드라이버 설치 확인 |
---
## 9.6 프로그램 종료
### 종료 방법
1. 상단 타이틀 바 우측의 **X (빨간색)** 버튼을 클릭합니다.
2. 종료 확인 대화상자가 표시됩니다:
```
[?] 종료 확인
"프로그램을 종료하시겠습니까?"
[예] [아니오]
```
3. **"예"**를 선택하면 종료, **"아니오"**를 선택하면 취소됩니다.
### 종료 시 자동 처리 사항
아래 순서로 자동 정리가 수행됩니다:
| 순서 | 처리 내용 |
|------|----------|
| 1 | 시험 프로세스 스레드 종료 (좌/우 모두) |
2 weeks ago
| 2 | 대기 중인 순서 잠금 해제 |
| 3 | 디지털 입출력(DIO) 신호 감지 중단 |
| 4 | 누설 센서 신호 감지 중단 |
| 5 | Sentinel C28 시리얼 통신 연결 해제 |
| 6 | 4251 보드 시리얼 통신 연결 해제 |
| 7 | DIO `PC_ON` 출력 **OFF** |
| 8 | DIO 보드 자원 해제 |
| 9 | 타이틀 바 시계 타이머 정지 |
> **⚠️ 주의**: 시험 진행 중에 프로그램을 종료하면 진행 중인 시험이 **즉시 중단**됩니다. 해당 시험의 결과는 로그에 기록되지 않을 수 있습니다. 가급적 시험이 완료된 후 종료하세요.
> **참고**: 프로그램 종료 시 현재 설정값은 이미 `config.xml`에 저장되어 있으므로 별도로 저장할 필요가 없습니다. 다음 실행 시 마지막 설정이 자동으로 로드됩니다.