리크 테스트 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.
 
 
 
 
 

2604 lines
75 KiB

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Pressure Leak Inspect System - 사용자 메뉴얼</title>
<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"]:not(.toc-title a) {
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;
}
/* ==========================================
표지 (Cover Page) 스타일 (Minimal & Clean)
========================================== */
.cover-page {
text-align: center;
padding: 70mm 0 30mm 0;
page-break-after: always !important;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
min-height: 220mm;
}
.cover-header {
margin-top: 20px;
}
.cover-title {
font-size: 28pt !important;
font-weight: 700 !important;
color: #1a1a1a !important;
margin: 0 0 16px 0 !important;
padding: 0 !important;
border: none !important;
letter-spacing: -0.5px;
line-height: 1.2;
}
.cover-subtitle {
font-size: 16pt;
font-weight: 500;
color: #007acc;
margin: 0;
letter-spacing: 2px;
text-transform: uppercase;
}
.cover-meta {
margin-top: 100px;
font-size: 9.5pt;
color: #666666;
letter-spacing: 0.5px;
border-top: 1px solid #eaeaea;
padding-top: 20px;
width: 60%;
margin-left: auto;
margin-right: auto;
}
/* ==========================================
점선 리더 목차 (Dot Leader TOC) 스타일
========================================== */
.toc-container {
padding: 10px 0;
}
.toc-heading {
font-size: 22pt !important;
font-weight: 800 !important;
color: #0f2942 !important;
border-bottom: none !important;
padding-bottom: 0 !important;
margin-top: 10px !important;
margin-bottom: 24px !important;
}
.toc-list {
display: flex;
flex-direction: column;
gap: 13px;
}
.toc-item {
display: flex;
align-items: baseline;
font-size: 11pt;
line-height: 1.5;
}
.toc-title {
font-weight: 700 !important;
color: #111827;
white-space: nowrap;
padding-right: 6px;
}
.toc-title a {
color: #111827 !important;
font-weight: 700 !important;
text-decoration: none !important;
display: inline !important;
}
.toc-title a:hover {
color: #007acc !important;
}
.toc-leader {
flex-grow: 1;
border-bottom: 1.2px dotted #4b5563;
margin: 0 4px;
position: relative;
top: -4px;
}
.toc-page {
font-weight: 700 !important;
color: #111827;
padding-left: 6px;
white-space: nowrap;
}
</style>
</head>
<body>
<div class="page-break"></div>
<div class="toc-container">
<h1 class="toc-heading">목차</h1>
<div class="toc-list">
<div class="toc-item">
<span class="toc-title"><a href="#1-시스템-개요-및-요구사항">1. 시스템 개요 및 요구사항</a></span>
<span class="toc-leader"></span>
<span class="toc-page">3</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#2-초기-설정-가이드">2. 초기 설정 가이드</a></span>
<span class="toc-leader"></span>
<span class="toc-page">5</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#3-메인-화면-home-view">3. 메인 화면 (Home View)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">9</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#4-통신-설정-comm-settings">4. 통신 설정 (Comm. Settings)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">13</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#5-시험-설정-parameters">5. 시험 설정 (Parameters)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">15</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#6-측정-데이터-조회-data-view">6. 측정 데이터 조회 (Data View)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">17</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#7-자동-시험-프로세스">7. 자동 시험 프로세스</a></span>
<span class="toc-leader"></span>
<span class="toc-page">19</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#8-로그-및-데이터-관리">8. 로그 및 데이터 관리</a></span>
<span class="toc-leader"></span>
<span class="toc-page">22</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#9-오류-대응-및-프로그램-종료">9. 오류 대응 및 프로그램 종료</a></span>
<span class="toc-leader"></span>
<span class="toc-page">27</span>
</div>
</div>
</div>
<div class="page-break"></div>
<h2>빠른 시작 가이드 (Quick Start)</h2>
<p>처음 사용하는 경우 아래 순서를 따르세요:</p>
<ol>
<li><strong>하드웨어 연결 확인</strong><a href="#1-시스템-개요-및-요구사항">시스템 개요 및 요구사항</a> 참조</li>
<li><strong>프로그램 실행 및 로그인</strong> → 바탕화면의 <strong>바로가기 아이콘</strong>을 실행하여 로그인 완료 (오프라인 테스트는 <code>Database.ini</code>에서 <code>OfflinePreview=true</code> 설정)</li>
<li><strong>통신 설정</strong> → 하단 메뉴 <code>Comm. Settings</code> → COM 포트 선택 → <code>설정 저장</code></li>
<li><strong>시험 설정</strong> → 하단 메뉴 <code>Parameters</code> → SPEC UL/LL 입력 → <code>설정 저장</code></li>
<li><strong>시험 시작</strong> → DIO 시작 신호 또는 <code>ID Test (L/R)</code> 버튼으로 동작 확인</li>
</ol>
<div class="page-break"></div>
<h1>1. 시스템 개요 및 요구사항</h1>
<hr />
<h2>1.1 시스템 개요</h2>
<p><strong>Pressure Leak Inspect System</strong>은 제품의 압력 누설(Leak)을 자동으로 검사하는 데스크탑 프로그램입니다. 생산 라인에서 DIO 시작 신호를 받아 제품 ID를 판독하고, 누설 시험을 수행한 뒤 합격/불합격을 자동 판정합니다.</p>
<hr />
<h2>1.2 소프트웨어 요구사항</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>요구사항</th>
<th>비고</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>운영체제</strong></td>
<td>Windows 10 이상 (64bit 권장)</td>
<td>32bit도 지원 가능</td>
</tr>
<tr>
<td><strong>.NET 런타임</strong></td>
<td>.NET 9</td>
<td>별도 설치 필요 없음 (자체 포함 배포)</td>
</tr>
<tr>
<td><strong>드라이버</strong></td>
<td>ADLINK PCIS-DASK 드라이버</td>
<td><code>PCI-Dask.dll</code> 필요</td>
</tr>
<tr>
<td><strong>시리얼 포트</strong></td>
<td>최소 2개의 COM 포트</td>
<td>C28 센서용 + 4251 보드용</td>
</tr>
<tr>
<td><strong>화면 해상도</strong></td>
<td>1024×768 이상</td>
<td>최대화 실행 시 1920×1080 권장</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>참고</strong>: ADLINK 드라이버가 설치되지 않은 환경에서는 프로그램이 <strong>시뮬레이션 모드</strong>로 자동 전환됩니다. 이 경우 DIO 입출력은 동작하지 않지만, 프로그램의 나머지 기능은 정상적으로 사용할 수 있습니다.</p>
</blockquote>
<hr />
<h2>1.3 하드웨어 구성</h2>
<table>
<thead>
<tr>
<th>장비</th>
<th>모델명</th>
<th>용도</th>
<th>통신 방식</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>DIO 보드</strong></td>
<td>ADLINK PCI-7432</td>
<td>디지털 입출력 (시작 신호 수신, OK/NG 결과 출력)</td>
<td>PCI 슬롯 장착</td>
</tr>
<tr>
<td><strong>ID 판독 보드</strong></td>
<td>4251</td>
<td>제품 ID 데이터 판독</td>
<td>RS-232 시리얼 (COM 포트)</td>
</tr>
<tr>
<td><strong>누설 센서</strong></td>
<td>Sentinel C28</td>
<td>압력 누설량(sccm) 측정</td>
<td>RS-232 시리얼 (COM 포트)</td>
</tr>
</tbody>
</table>
<h3>케이블 연결도</h3>
<div style="display: flex; align-items: center; justify-content: center; gap: 20px; margin: 25px auto; max-width: 600px; page-break-inside: avoid;">
<!-- PC Box -->
<div style="border: 2px solid #2f3542; border-radius: 6px; padding: 35px 20px; text-align: center; min-width: 100px; font-weight: bold; color: #2f3542; box-shadow: 0 2px 4px rgba(0,0,0,0.06);">
본체 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; 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; min-width: 140px; text-align: center; 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; 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; min-width: 140px; text-align: center; 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; 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; min-width: 140px; text-align: center; font-weight: bold; color: #157a38; box-shadow: 0 1px 3px rgba(0,0,0,0.04);">
ADLINK PCI-7432
</div>
</div>
</div>
</div>
<hr />
<h2>1.4 DIO 신호 매핑</h2>
<h3>입력 신호 (Inputs) - PCI-7432</h3>
<table>
<thead>
<tr>
<th>주소</th>
<th>신호명</th>
<th>동작</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td><code>LEFT_START</code></td>
<td>OFF→ON 감지</td>
<td>좌측 채널 시험 시작 트리거</td>
</tr>
<tr>
<td>1</td>
<td><code>RIGHT_START</code></td>
<td>OFF→ON 감지</td>
<td>우측 채널 시험 시작 트리거</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>동작 원리</strong>: 시작 신호가 OFF→ON으로 전환되는 순간(Rising Edge)을 감지하여 시험을 시작합니다.</p>
</blockquote>
<h3>출력 신호 (Outputs) - PCI-7432</h3>
<table>
<thead>
<tr>
<th>주소</th>
<th>신호명</th>
<th>초기값</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>0</td>
<td><code>LEFT_OK</code></td>
<td>OFF</td>
<td>좌측 합격 시 ON 출력</td>
</tr>
<tr>
<td>1</td>
<td><code>RIGHT_OK</code></td>
<td>OFF</td>
<td>우측 합격 시 ON 출력</td>
</tr>
<tr>
<td>2</td>
<td><code>PC_ON</code></td>
<td><strong>ON</strong></td>
<td>PC 가동 상태 신호 (프로그램 실행 시 자동 ON)</td>
</tr>
<tr>
<td>3</td>
<td><code>LEFT_NG</code></td>
<td>OFF</td>
<td>좌측 불합격 시 ON 출력</td>
</tr>
<tr>
<td>4</td>
<td><code>RIGHT_NG</code></td>
<td>OFF</td>
<td>우측 불합격 시 ON 출력</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>참고</strong>: <code>PC_ON</code> 신호는 프로그램 시작 시 자동으로 ON이 되며, 프로그램 종료 시 자동으로 OFF됩니다. 이를 통해 외부 시스템이 PC의 가동 상태를 확인할 수 있습니다.</p>
<p><strong>참고</strong>: 시험이 시작되면 해당 채널의 OK/NG 출력이 모두 OFF로 초기화된 후, 판정 완료 시 해당 결과에 맞는 출력만 ON됩니다.</p>
</blockquote>
<div class="page-break"></div>
<h1>2. 초기 설정 가이드</h1>
<hr />
<h2>2.1 설치 전 준비사항 체크리스트</h2>
<p>프로그램을 실행하기 전에 아래 항목을 모두 확인하세요:</p>
<table>
<thead>
<tr>
<th>#</th>
<th>확인 항목</th>
<th>확인 방법</th>
<th>비고</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>ADLINK PCIS-DASK 드라이버 설치 완료</td>
<td>Windows 장치 관리자에서 PCI-7432 인식 확인</td>
<td>미설치 시 시뮬레이션 모드로 동작</td>
</tr>
<tr>
<td>2</td>
<td>Sentinel C28 센서 시리얼 케이블 연결</td>
<td>장치 관리자 → 포트(COM &amp; LPT)에서 COM 포트 번호 확인</td>
<td>RS-232 케이블 사용</td>
</tr>
<tr>
<td>3</td>
<td>4251 보드 시리얼 케이블 연결</td>
<td>장치 관리자 → 포트(COM &amp; LPT)에서 COM 포트 번호 확인</td>
<td>RS-232 케이블 사용</td>
</tr>
<tr>
<td>4</td>
<td>PCI-7432 DIO 보드 장착</td>
<td>장치 관리자에서 ADLINK PCI-7432 인식 확인</td>
<td>PCI 슬롯에 장착</td>
</tr>
<tr>
<td>5</td>
<td>COM 포트 번호 메모</td>
<td>C28 센서와 4251 보드 각각의 COM 포트 번호를 기록</td>
<td>설정 시 필요</td>
</tr>
</tbody>
</table>
<hr />
<h2>2.2 프로그램 실행</h2>
<h3>실행 방법</h3>
<ol>
<li>바탕화면의 <strong>바로가기 아이콘</strong>을 더블 클릭하여 실행합니다.</li>
<li>프로그램이 전체화면(Maximized) 모드로 시작됩니다.</li>
</ol>
<h3>최초 실행 시 자동 생성되는 파일</h3>
<table>
<thead>
<tr>
<th>파일 / 폴더</th>
<th>위치</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>config.xml</code></td>
<td>프로그램 실행 폴더 (<code>C:\LeakTest\</code>)</td>
<td>통신 포트, BaudRate, SPEC 값 등 모든 설정을 저장</td>
</tr>
<tr>
<td><code>Settings\DioConfig.ini</code></td>
<td><code>C:\LeakTest\Settings\</code></td>
<td>DIO 보드 타입, 입출력 포인트 정의</td>
</tr>
<tr>
<td><code>Database.ini</code></td>
<td><code>C:\LeakTest\</code></td>
<td>DB 접속 정보 및 로그인 인증 방식 설정 (최초 실행 시 기본 템플릿으로 생성)</td>
</tr>
<tr>
<td><code>LoginOptions.json</code></td>
<td><code>C:\LeakTest\</code></td>
<td>로그인 화면 자동완성 드롭다운 선택지 저장</td>
</tr>
<tr>
<td><code>LoginHistory.json</code></td>
<td><code>C:\LeakTest\</code></td>
<td>최근 로그인 정보 최대 10건 자동 저장</td>
</tr>
<tr>
<td><code>Logs\</code> 폴더</td>
<td><code>C:\LeakTest\Logs\</code></td>
<td>날짜별 CSV 검사 로그 및 시스템 로그 저장 위치</td>
</tr>
</tbody>
</table>
<hr />
<h2>2.3 프로그램 로그인 및 오프라인 모드 설정</h2>
<p>프로그램 실행이 완료되면 메인 화면이 활성화되기 전, <strong>작업 정보 입력 및 로그인 창</strong>이 모달로 표시됩니다. 로그인을 성공적으로 마쳐야 메인 화면을 조작할 수 있습니다.</p>
<h3>로그인 필드 구성</h3>
<table>
<thead>
<tr>
<th>입력 필드</th>
<th>예시</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Maker</strong></td>
<td><code>MOBIS</code></td>
<td>제조사 정보</td>
</tr>
<tr>
<td><strong>Model</strong></td>
<td><code>C28_TEST</code></td>
<td>검사 모델명</td>
</tr>
<tr>
<td><strong>Variant 1</strong></td>
<td><code>V1</code></td>
<td>세부 파생 모델 정보 1</td>
</tr>
<tr>
<td><strong>Variant 2</strong></td>
<td><code>V2</code></td>
<td>세부 파생 모델 정보 2</td>
</tr>
<tr>
<td><strong>ID (Operator)</strong></td>
<td><code>sa</code></td>
<td>작업자 ID</td>
</tr>
<tr>
<td><strong>PW (Password)</strong></td>
<td><code>****</code></td>
<td>비밀번호</td>
</tr>
<tr>
<td><strong>Line</strong></td>
<td><code>EOL_01</code></td>
<td>생산 라인 번호</td>
</tr>
<tr>
<td><strong>Lot No</strong></td>
<td><code>LOT001</code></td>
<td>로트 번호</td>
</tr>
<tr>
<td><strong>Jig No</strong></td>
<td><code>JIG_L</code></td>
<td>지그 번호</td>
</tr>
</tbody>
</table>
<h3>로그인 설정 관리 (LoginOptions.json)</h3>
<p>프로그램 실행 폴더 내의 <code>LoginOptions.json</code> 파일을 편집하여 로그인 계정 정보(<code>loginAccounts</code>)를 관리하고, 로그인 화면의 옵션 목록(제조사, 모델, 라인, 지그 번호 등)을 추가하거나 변경할 수 있습니다.</p>
<pre><code class="language-json">{
&quot;loginAccounts&quot;: [
{
&quot;id&quot;: &quot;su&quot;,
&quot;password&quot;: &quot;su&quot;
}
],
&quot;makers&quot;: [
&quot;AMO&quot;,
&quot;ABC&quot;
],
&quot;models&quot;: [
&quot;MODEL-1&quot;
],
&quot;lineValues&quot;: [
&quot;LINE-1&quot;
],
&quot;jigNoValues&quot;: [
&quot;JIG-1&quot;
]
}
</code></pre>
<ul>
<li><strong>계정 추가/변경</strong>: <code>loginAccounts</code> 배열에 ID(<code>id</code>)와 비밀번호(<code>password</code>)를 추가하거나 수정하여 접속 가능한 계정을 설정합니다.</li>
<li><strong>드롭다운 항목 변경</strong>: <code>makers</code>, <code>models</code>, <code>lineValues</code>, <code>jigNoValues</code> 등의 배열 항목을 수정하면 로그인 화면의 선택 항목 목록이 자동으로 업데이트됩니다.</li>
</ul>
<hr />
<h2>2.4 최초 설정 순서 (Step-by-Step)</h2>
<p>프로그램을 처음 사용할 때는 반드시 아래 순서로 설정을 진행하세요.</p>
<h3>Step 1: 통신 설정 (가장 먼저 수행)</h3>
<blockquote>
<p>하드웨어와의 통신이 설정되어야 이후 모든 기능이 정상 동작합니다.</p>
</blockquote>
<ol>
<li>하단 메뉴 바에서 <strong><code>Comm. Settings (통신 설정)</code></strong> 버튼을 클릭합니다.</li>
<li><strong>통신 설정</strong> 팝업 창이 메인 창 중앙에 표시됩니다.</li>
</ol>
<p><strong>4251 보드 설정 (좌측 영역):</strong></p>
<table>
<thead>
<tr>
<th>설정 항목</th>
<th>설명</th>
<th>선택 방법</th>
<th>기본값</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>4251 BaudRate</code></td>
<td>통신 속도</td>
<td>드롭다운에서 선택 (9600/19200/38400/115200)</td>
<td><code>115200</code></td>
</tr>
<tr>
<td><code>4251 Port</code></td>
<td>COM 포트</td>
<td>드롭다운에서 연결된 포트 선택</td>
<td><code>COM3</code></td>
</tr>
</tbody>
</table>
<p><strong>Sentinel C28 설정 (우측 영역):</strong></p>
<table>
<thead>
<tr>
<th>설정 항목</th>
<th>설명</th>
<th>선택 방법</th>
<th>기본값</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Sensor BaudRate</code></td>
<td>통신 속도</td>
<td>드롭다운에서 선택 (9600/19200/38400/115200)</td>
<td><code>9600</code></td>
</tr>
<tr>
<td><code>Sensor Port</code></td>
<td>COM 포트</td>
<td>드롭다운에서 연결된 포트 선택</td>
<td><code>COM1</code></td>
</tr>
</tbody>
</table>
<ol>
<li>모든 항목을 설정한 후 <strong><code>설정 저장</code></strong> 버튼을 클릭합니다.</li>
<li>"통신 설정이 저장되었습니다." 메시지가 표시되면 설정 완료입니다.</li>
</ol>
<blockquote>
<p><strong>참고</strong>: COM 포트 목록에는 현재 PC에 물리적으로 연결된 시리얼 장치만 표시됩니다. 원하는 포트가 보이지 않으면:</p>
<ul>
<li>
<p>USB-시리얼 케이블이 PC에 연결되어 있는지 확인</p>
</li>
<li>
<p>장치 관리자에서 해당 포트의 드라이버가 정상 설치되었는지 확인</p>
</li>
<li>
<p>다른 프로그램이 해당 포트를 점유하고 있지 않은지 확인</p>
</li>
</ul>
</blockquote>
<hr />
<h3>Step 2: 시험 설정 (SPEC 규격값 입력)</h3>
<ol>
<li>하단 메뉴 바에서 <strong><code>Parameters (시험 설정)</code></strong> 버튼을 클릭합니다.</li>
<li><strong>시험 설정</strong> 팝업 창이 표시됩니다.</li>
</ol>
<table>
<thead>
<tr>
<th>설정 항목</th>
<th>설명</th>
<th>입력 형식</th>
<th>기본값</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>SPEC UL (sccm)</code></td>
<td>누설 상한 규격값</td>
<td>소수점 포함 숫자 (예: <code>1.00</code>)</td>
<td><code>1.00</code></td>
</tr>
<tr>
<td><code>SPEC LL (sccm)</code></td>
<td>누설 하한 규격값</td>
<td>소수점 포함 숫자 (예: <code>-1.00</code>)</td>
<td><code>-1.00</code></td>
</tr>
</tbody>
</table>
<ol>
<li>값을 입력한 후 <strong><code>설정 저장</code></strong> 버튼을 클릭합니다.</li>
<li>"파라미터 설정이 저장되었습니다." 메시지가 표시되면 완료입니다.</li>
</ol>
<blockquote>
<p><strong>참고</strong>: SPEC UL/LL 값은 좌/우 양쪽 채널에 <strong>공통으로 적용</strong>됩니다.</p>
<p><strong>판정 기준</strong>: <code>SPEC LL ≤ 측정값 ≤ SPEC UL</code> 이면 <strong>OK</strong>, 범위를 벗어나면 <strong>NG</strong>로 판정됩니다.</p>
</blockquote>
<hr />
<h3>Step 3: 동작 테스트 (선택사항)</h3>
<p>모든 설정이 완료되면 하단 메뉴의 <strong><code>ID Test (L)</code></strong> 또는 <strong><code>ID Test (R)</code></strong> 버튼으로 간단한 동작 테스트를 수행할 수 있습니다.</p>
<ol>
<li><strong><code>ID Test (L)</code></strong> 버튼을 클릭합니다.</li>
<li>좌측 채널의 진행 메시지가 순서대로 표시됩니다:</li>
<li><code>시험 시작</code><code>센서 정보 읽는 중</code><code>ID 테스트 완료</code> (또는 <code>ID 테스트 실패</code>)</li>
<li>좌측 채널의 <strong>ID</strong> 영역에 읽은 제품 ID가 표시되면 정상입니다.</li>
</ol>
<blockquote>
<p><strong>참고</strong>: ID Test는 DIO 시작 신호 없이도 4251 보드의 센서 판독 기능만 단독으로 테스트합니다. 실제 LEAK 시험은 수행하지 않습니다.</p>
</blockquote>
<hr />
<h2>2.5 설정 변경 시 주의사항</h2>
<table>
<thead>
<tr>
<th>상황</th>
<th>동작</th>
<th>주의</th>
</tr>
</thead>
<tbody>
<tr>
<td>통신 설정 저장</td>
<td>모든 시리얼 연결 해제 → 새 설정으로 재연결</td>
<td>시험 중 변경 시 시험 중단</td>
</tr>
<tr>
<td>시험 설정 저장</td>
<td>즉시 메인 화면의 SPEC 표시 갱신</td>
<td>진행 중인 시험에는 영향 없음</td>
</tr>
<tr>
<td>프로그램 재시작</td>
<td><code>config.xml</code>에서 마지막 저장된 설정 자동 로드</td>
<td>별도 작업 불필요</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<h1>3. 메인 화면 (Home View)</h1>
<hr />
<p>프로그램 실행 시 기본으로 표시되는 화면입니다. 좌/우 채널의 누설 시험 결과를 실시간으로 모니터링합니다.</p>
<h2>3.1 전체 화면 레이아웃</h2>
<p><img src="./Pasted image 20260626093617.png" alt="Pasted image 20260626093617.png" /></p>
<hr />
<h2>3.2 상단 타이틀 바</h2>
<p>프로그램 최상단에 위치한 타이틀 영역입니다.
<img src="./Pasted image 20260626093648.png" alt="Pasted image 20260626093648.png" /></p>
<table>
<thead>
<tr>
<th>위치</th>
<th>요소</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>좌측</td>
<td><strong>프로그램 제목 &amp; 버전</strong></td>
<td><code>Pressure Leak System</code> 및 버전 정보 표시</td>
</tr>
<tr>
<td>중앙</td>
<td><strong>현재 날짜/시간</strong></td>
<td><code>yyyy-MM-dd [요일] HH:mm:ss</code> 형식, 1초 주기로 실시간 갱신</td>
</tr>
<tr>
<td>우측</td>
<td><strong>작업 정보 배지</strong></td>
<td>현재 로그인된 <code>작업자 ID</code>, <code>검사 모델</code>, <code>생산 라인</code> 정보 표시</td>
</tr>
<tr>
<td>우측</td>
<td><strong>로그아웃 버튼</strong></td>
<td>현재 세션을 로그아웃하고 로그인 창을 호출합니다</td>
</tr>
<tr>
<td>최우측</td>
<td><strong>창 제어 버튼</strong></td>
<td>최소화(─) / 최대화·복원(□) / 종료(X) 창 제어 아이콘</td>
</tr>
</tbody>
</table>
<h3>타이틀 바 조작</h3>
<table>
<thead>
<tr>
<th>조작</th>
<th>동작</th>
</tr>
</thead>
<tbody>
<tr>
<td>타이틀 바 <strong>드래그</strong></td>
<td>창 이동</td>
</tr>
<tr>
<td>타이틀 바 <strong>더블 클릭</strong></td>
<td>최대화 ↔ 일반 크기 전환</td>
</tr>
<tr>
<td><strong></strong> 버튼 클릭</td>
<td>작업표시줄로 최소화</td>
</tr>
<tr>
<td><strong></strong> 버튼 클릭</td>
<td>최대화 ↔ 일반 크기 전환</td>
</tr>
<tr>
<td><strong>X</strong> 버튼 클릭</td>
<td>종료 확인 대화상자 표시 → "예" 선택 시 종료</td>
</tr>
</tbody>
</table>
<hr />
<h2>3.3 메인 영역 - 채널 모니터링</h2>
<p>화면은 좌측(<code>LEFT LEAK TESTER</code>)과 우측(<code>RIGHT LEAK TESTER</code>)으로 균등 분할되며, 각 채널은 동일한 구조입니다.
<img src="./Pasted image 20260626093712.png" alt="Pasted image 20260626093712.png" /></p>
<h3>각 채널의 구성 요소 (위에서 아래 순서)</h3>
<h4>① 채널 타이틀</h4>
<ul>
<li><strong>LEFT LEAK TESTER</strong> 또는 <strong>RIGHT LEAK TESTER</strong> 채널 구분을 명시합니다.</li>
</ul>
<h4>② 시작/종료 시간</h4>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>라벨</td>
<td><code>시작/종료</code></td>
</tr>
<tr>
<td></td>
<td><code>시작시간 / 종료시간</code> 형식 (예: <code>2026-05-08 10:30:15 / -</code> 또는 <code>2026-05-08 10:30:15 / 10:30:45</code>)</td>
</tr>
<tr>
<td>갱신 시점</td>
<td>시험이 시작될 때 <code>시작시간 / -</code> 형태로 갱신되며, 시험 완료(DB 저장) 시점에 종료 시간이 기록됩니다.</td>
</tr>
</tbody>
</table>
<h4>③ IC_SN / PCB_Barcode</h4>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>라벨</td>
<td><code>IC_SN</code> / <code>PCB_Barcode</code></td>
</tr>
<tr>
<td></td>
<td>제품의 IC 일련번호 및 이에 매핑되는 PCB 바코드 고유 식별 정보</td>
</tr>
<tr>
<td>데이터 소스</td>
<td><strong>IC_SN</strong>: 4251 보드로 제품 ID 센서에서 판독한 값<br><strong>PCB_Barcode</strong>: 판독한 <code>IC_SN</code>을 기준으로 데이터베이스에서 조회한 바코드 값</td>
</tr>
<tr>
<td>갱신 시점</td>
<td>시험 시작 시 빈 값(<code>-</code>)으로 초기화, 판독 및 조회 완료 시 표시</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>참고</strong>: IC_SN과 PCB_Barcode를 별도의 행으로 나누어 표시합니다.</p>
</blockquote>
<h4>④ 측정값 + SPEC</h4>
<p>좌측에 측정값, 우측에 SPEC 규격이 함께 표시됩니다.</p>
<p><strong>측정값 영역:</strong></p>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>라벨</td>
<td><code>측정값</code></td>
</tr>
<tr>
<td></td>
<td>Sentinel C28에서 수신한 누설량 (소수점 4자리, 예: <code>0.5234</code>)</td>
</tr>
<tr>
<td>단위</td>
<td><code>sccm</code> (우측 하단에 표시)</td>
</tr>
<tr>
<td>갱신 시점</td>
<td>C28 센서 스트리밍 데이터 수신 시 실시간 갱신</td>
</tr>
</tbody>
</table>
<p><strong>SPEC 영역 (우측):</strong></p>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>UL</code></td>
<td>상한 규격값 (예: <code>1.00</code>)</td>
</tr>
<tr>
<td><code>LL</code></td>
<td>하한 규격값 (예: <code>-1.00</code>)</td>
</tr>
<tr>
<td>갱신 시점</td>
<td>Parameters에서 저장 시 즉시 반영</td>
</tr>
</tbody>
</table>
<h4>⑤ 판정</h4>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>라벨</td>
<td><code>판정</code></td>
</tr>
<tr>
<td></td>
<td><strong>OK</strong> 또는 <strong>NG</strong></td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>판정 기준</strong>: <code>SPEC LL ≤ 측정값 ≤ SPEC UL</code><strong>OK</strong>, 그 외 → <strong>NG</strong></p>
</blockquote>
<h4>⑥ 진행 메시지</h4>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>라벨</td>
<td><code>진행 메시지</code></td>
</tr>
<tr>
<td></td>
<td>현재 시험 단계 메시지 표시</td>
</tr>
</tbody>
</table>
<p>표시되는 메시지 목록:</p>
<table>
<thead>
<tr>
<th>메시지</th>
<th>의미</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>시험 시작</code></td>
<td>DIO 시작 신호 감지, 시험 프로세스 시작</td>
</tr>
<tr>
<td><code>대기중</code></td>
<td>다른 채널이 시험 중이어서 순서 대기</td>
</tr>
<tr>
<td><code>센서 정보 읽는 중</code></td>
<td>4251 보드를 통해 제품 ID 판독 중</td>
</tr>
<tr>
<td><code>LEAK 시험중</code></td>
<td>Sentinel C28 센서의 측정 결과 대기 중</td>
</tr>
<tr>
<td><code>시험 완료</code></td>
<td>판정 완료 및 결과 출력 완료</td>
</tr>
<tr>
<td><code>오류 발생</code></td>
<td>시험 중 오류 발생 (상세 내용은 오류 메시지 참조)</td>
</tr>
<tr>
<td><code>ID 테스트 완료</code></td>
<td>수동 ID 테스트 정상 완료</td>
</tr>
<tr>
<td><code>ID 테스트 실패</code></td>
<td>수동 ID 테스트 실패</td>
</tr>
<tr>
<td><code>통신 대기 중</code></td>
<td>통신 설정 변경 후 재연결 대기</td>
</tr>
</tbody>
</table>
<h4>⑦ 오류 메시지</h4>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>라벨</td>
<td><code>오류 메시지</code></td>
</tr>
<tr>
<td></td>
<td>발생한 오류 상세 내용 표시</td>
</tr>
<tr>
<td>초기화 시점</td>
<td>새 시험 시작 시 자동 초기화</td>
</tr>
</tbody>
</table>
<hr />
<h2>3.4 SPEC 교차 검증 경고</h2>
<p>프로그램의 판정 결과(SPEC UL/LL 기준)와 Sentinel C28 센서의 자체 판정 결과가 서로 다를 경우:</p>
<ol>
<li>해당 채널의 <strong>오류 메시지</strong> 영역에 <code>SPEC 불일치 - 프로그램: OK, 센서: NG</code> 등의 메시지가 표시됩니다.</li>
<li><strong>팝업 경고 대화상자</strong>가 표시됩니다: "프로그램 스팩과 센서의 스팩이 서로 맞지 않습니다."</li>
</ol>
<blockquote>
<p><strong>조치</strong>: 센서 측의 SPEC 설정과 프로그램의 SPEC UL/LL 설정이 동일한지 확인하세요. (통신설정 참조)</p>
</blockquote>
<hr />
<h2>3.5 하단 메뉴 바</h2>
<p>프로그램 하단 메뉴 영역입니다. 5개의 버튼이 수평으로 배치됩니다.
<img src="./Pasted image 20260624104445.png" alt="Pasted image 20260624104445.png" /></p>
<table>
<thead>
<tr>
<th>순서</th>
<th>BUTTON</th>
<th>부제</th>
<th>동작</th>
<th>동작 방식</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><strong>Data</strong></td>
<td>(측정 데이터)</td>
<td>검사 기록 조회 화면 전환</td>
<td>토글 (다시 클릭 시 Home으로 복귀)</td>
</tr>
<tr>
<td>2</td>
<td><strong>Parameters</strong></td>
<td>(시험 설정)</td>
<td>시험 설정 팝업 창 열기</td>
<td>모달 팝업 (설정 후 자동 닫힘)</td>
</tr>
<tr>
<td>3</td>
<td><strong>Comm. Settings</strong></td>
<td>(통신 설정)</td>
<td>통신 설정 팝업 창 열기</td>
<td>모달 팝업 (설정 후 자동 닫힘)</td>
</tr>
<tr>
<td>4</td>
<td><strong>ID Test (L)</strong></td>
<td>(좌측 ID 테스트)</td>
<td>좌측 채널 센서 ID 수동 판독</td>
<td>즉시 실행</td>
</tr>
<tr>
<td>5</td>
<td><strong>ID Test (R)</strong></td>
<td>(우측 ID 테스트)</td>
<td>우측 채널 센서 ID 수동 판독</td>
<td>즉시 실행</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<h1>4. 통신 설정 (Comm. Settings)</h1>
<hr />
<p>하단 메뉴에서 <strong>Comm. Settings (통신 설정)</strong> 버튼 클릭 시 열리는 <strong>모달 팝업 창</strong>입니다.
<img src="./Pasted image 20260624104506.png" alt="Pasted image 20260624104506.png" /></p>
<h2>4.1 창 구성</h2>
<table>
<thead>
<tr>
<th>속성</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>창 크기</td>
<td>고정 (크기 변경 불가)</td>
</tr>
<tr>
<td>위치</td>
<td>메인 창 중앙에 정렬되어 표시</td>
</tr>
<tr>
<td>타입</td>
<td>모달 (이 창이 열려있으면 메인 창 조작 불가)</td>
</tr>
</tbody>
</table>
<h2>4.2 4251 보드 설정 (좌측 영역)</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>선택 가능 값</th>
<th>기본값</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>4251 BaudRate</strong></td>
<td>9600 / 19200 / 38400 / 115200</td>
<td><code>115200</code></td>
<td>4251 보드 통신 속도. 보드 설정과 일치해야 함</td>
</tr>
<tr>
<td><strong>4251 Port</strong></td>
<td>시스템 감지 COM 포트 목록</td>
<td><code>COM3</code></td>
<td>4251 보드가 연결된 시리얼 포트</td>
</tr>
</tbody>
</table>
<h2>4.3 Sentinel C28 설정 (우측 영역)</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>선택 가능 값</th>
<th>기본값</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Sensor BaudRate</strong></td>
<td>9600 / 19200 / 38400 / 115200</td>
<td><code>9600</code></td>
<td>C28 센서 통신 속도. 센서 설정과 일치해야 함</td>
</tr>
<tr>
<td><strong>Sensor Port</strong></td>
<td>시스템 감지 COM 포트 목록</td>
<td><code>COM1</code></td>
<td>C28 센서가 연결된 시리얼 포트</td>
</tr>
</tbody>
</table>
<h2>4.4 스펙 불일치 알림 설정 (화면 하단 영역)</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>선택 가능한 값</th>
<th>기본값</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>스펙 불일치 알림 활성화</strong></td>
<td>체크(ON) / 체크 해제(OFF)</td>
<td><code>체크(ON)</code></td>
<td>프로그램 판정과 센서 자체 판정이 맞지 않을 때의 알림 팝업 창 발생 여부 설정</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>동작 설명</strong>:
- <strong>ON (기본값)</strong>: 판정이 불일치할 때 메인 화면의 오류 메시지 창에 로그가 기재됨과 동시에, 경고 대화상자("프로그램 스펙과 센서의 스펙이 서로 맞지 않습니다.") 팝업이 출력되어 작업자 인지를 강제합니다.
- <strong>OFF</strong>: 판정이 불일치하더라도 경고 팝업을 띄우지 않고, 화면의 오류 메시지 영역에만 텍스트로 기록을 남깁니다.</p>
</blockquote>
<h2>4.5 버튼 설명</h2>
<table>
<thead>
<tr>
<th>버튼</th>
<th>동작</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>설정 저장</strong></td>
<td>config.xml에 저장 → 기존 연결 해제 → 새 설정으로 재연결 → "통신 설정이 저장되었습니다." 메시지 → 창 닫힘</td>
</tr>
<tr>
<td><strong>닫기</strong></td>
<td>변경 사항 저장하지 않고 창 닫기</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>⚠️ 주의</strong>: COM 포트를 동일하게 설정하면 충돌이 발생합니다. 4251 보드와 C28 센서는 반드시 다른 포트를 사용하세요.</p>
</blockquote>
<div class="page-break"></div>
<h1>5. 시험 설정 (Parameters)</h1>
<hr />
<p>하단 메뉴에서 <strong>Parameters (시험 설정)</strong> 버튼 클릭 시 열리는 <strong>모달 팝업 창</strong>입니다.
<img src="./Pasted image 20260624104531.png" alt="Pasted image 20260624104531.png" /></p>
<h2>5.1 창 구성</h2>
<table>
<thead>
<tr>
<th>속성</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>창 크기</td>
<td>고정 (크기 변경 불가)</td>
</tr>
<tr>
<td>위치</td>
<td>메인 창 중앙에 정렬되어 표시</td>
</tr>
<tr>
<td>타입</td>
<td>모달</td>
</tr>
</tbody>
</table>
<h2>5.2 설정 항목</h2>
<table>
<thead>
<tr>
<th>항목</th>
<th>입력 형식</th>
<th>기본값</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>SPEC UL (sccm)</strong></td>
<td>소수점 숫자</td>
<td><code>1.00</code></td>
<td>누설 상한 규격값. 이 값 이하일 때 OK</td>
</tr>
<tr>
<td><strong>SPEC LL (sccm)</strong></td>
<td>소수점 숫자</td>
<td><code>-1.00</code></td>
<td>누설 하한 규격값. 이 값 이상일 때 OK</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>입력 팁</strong>: 소수점 2자리까지 입력합니다 (예: <code>1.50</code>, <code>-0.80</code>). 정수도 입력 가능합니다 (예: <code>2</code>).</p>
</blockquote>
<div class="page-break"></div>
<h2>5.3 판정 로직 상세</h2>
<ul>
<li><strong>합격 판정 기준</strong>: <code>SPEC LL ≤ 측정값 ≤ SPEC UL</code></li>
<li><strong>불합격 판정 기준</strong>: <code>측정값 &lt; SPEC LL</code> 또는 <code>측정값 &gt; SPEC UL</code></li>
</ul>
<p><strong>예시</strong>:</p>
<table>
<thead>
<tr>
<th style="text-align: center;">SPEC LL</th>
<th style="text-align: center;">SPEC UL</th>
<th style="text-align: center;">측정값</th>
<th style="text-align: center;">판정</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center;">-1.00</td>
<td style="text-align: center;">1.00</td>
<td style="text-align: center;">0.523</td>
<td style="text-align: center;">✅ OK</td>
</tr>
<tr>
<td style="text-align: center;">-1.00</td>
<td style="text-align: center;">1.00</td>
<td style="text-align: center;">1.200</td>
<td style="text-align: center;">❌ NG</td>
</tr>
<tr>
<td style="text-align: center;">-1.00</td>
<td style="text-align: center;">1.00</td>
<td style="text-align: center;">-1.500</td>
<td style="text-align: center;">❌ NG</td>
</tr>
<tr>
<td style="text-align: center;">-1.00</td>
<td style="text-align: center;">1.00</td>
<td style="text-align: center;">-1.00</td>
<td style="text-align: center;">✅ OK (경계값 포함)</td>
</tr>
</tbody>
</table>
<h2>5.4 버튼 설명</h2>
<table>
<thead>
<tr>
<th>버튼</th>
<th>동작</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>설정 저장</strong></td>
<td>config.xml에 저장 → 메인 화면의 SPEC 표시 즉시 갱신 → "파라미터 설정이 저장되었습니다." 메시지 → 창 닫힘</td>
</tr>
<tr>
<td><strong>닫기</strong></td>
<td>변경 사항 저장하지 않고 창 닫기</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>참고</strong>: SPEC 값은 좌/우 양쪽 채널에 <strong>공통으로 적용</strong>됩니다. 채널별 개별 설정은 지원하지 않습니다.</p>
<p><strong>참고</strong>: SPEC 값 변경 후 저장하면, 이미 진행 중인 시험에는 영향을 주지 않으며, 다음 시험부터 새 값이 적용됩니다.</p>
</blockquote>
<div class="page-break"></div>
<h1>6. 측정 데이터 조회 (Data View)</h1>
<hr />
<p>하단 메뉴에서 <strong>Data (측정 데이터)</strong> 버튼을 클릭하면 표시됩니다. 다시 클릭하면 메인 화면으로 복귀합니다.</p>
<p>로컬 PC의 CSV 데이터를 기준으로 조회됩니다. (데이터베이스는 서버 PC에서 조회)</p>
<h2>6.1 화면 구성</h2>
<p><img src="./Pasted image 20260624104558.png" alt="Pasted image 20260624104558.png" /></p>
<h2>6.2 필터 조건 상세</h2>
<h3>1행: 공통 기본 필터</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>기본값</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>조회 기간</strong></td>
<td>오늘로부터 7일 전 ~ 오늘</td>
<td>조회 대상 날짜 범위를 설정합니다.</td>
</tr>
<tr>
<td><strong>판정 결과</strong></td>
<td><code>[전체]</code> / <code>OK</code> / <code>NG</code></td>
<td>판정 결과에 따른 필터링을 수행합니다.</td>
</tr>
</tbody>
</table>
<h3>2행: 상세 검색 필터 (DB 스키마 필드 교차 검색)</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>설명</th>
<th>기본값</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>ID 검색</strong></td>
<td><code>IC_SN</code> 또는 <code>PCB_Barcode</code> 열에 대한 부분 일치 검색을 수행합니다.</td>
<td>(빈 값 = 필터 제외)</td>
</tr>
<tr>
<td><strong>작업자</strong></td>
<td>작업자 ID (<code>Operator</code>) 열에 대한 부분 일치 검색을 수행합니다.</td>
<td>(빈 값 = 필터 제외)</td>
</tr>
<tr>
<td><strong>Lot No</strong></td>
<td>로트 번호 (<code>Lot_No</code>) 열에 대한 부분 일치 검색을 수행합니다.</td>
<td>(빈 값 = 필터 제외)</td>
</tr>
<tr>
<td><strong>모델</strong></td>
<td>모델명 (<code>Model</code>) 열에 대한 부분 일치 검색을 수행합니다.</td>
<td>(빈 값 = 필터 제외)</td>
</tr>
</tbody>
</table>
<h2>6.3 조회 및 취소 버튼</h2>
<table>
<thead>
<tr>
<th>버튼</th>
<th>동작</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Search</strong></td>
<td>설정된 필터 조건으로 로컬 로그 CSV 백업 파일을 검색하여 그리드에 표시합니다.</td>
</tr>
<tr>
<td><strong>Cancel (취소)</strong></td>
<td>조회 중일 때 로딩 화면 내부에 나타나며, 진행 중인 파일 검색 작업을 중단하고 이전 화면으로 복귀합니다.</td>
</tr>
</tbody>
</table>
<h3>Search 버튼 동작 상세</h3>
<ol>
<li>지정된 조회 기간에 해당하는 일별 로그 CSV 파일만 조회하여 검색을 수행합니다.</li>
<li>검색 조건(판정, ID, 작업자, Lot No, 모델)에 맞는 데이터를 부분 일치 방식으로 검색합니다.</li>
<li>검색 결과가 존재하지 않을 경우 "해당 조건의 데이터가 없습니다." 알림을 표시합니다.</li>
</ol>
<h2>6.4 데이터 조회 결과 표(그리드) 항목 안내</h2>
<table>
<thead>
<tr>
<th>컬럼 헤더명</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>IC_SN</strong></td>
<td>제품 고유 IC 시리얼 번호</td>
</tr>
<tr>
<td><strong>PCB_Barcode</strong></td>
<td>PCB 바코드 고유 식별 정보</td>
</tr>
<tr>
<td><strong>Maker</strong></td>
<td>로그인 시 입력된 제조사명</td>
</tr>
<tr>
<td><strong>Model</strong></td>
<td>로그인 시 입력된 검사 모델명</td>
</tr>
<tr>
<td><strong>Variant_1</strong></td>
<td>로그인 시 입력된 세부 파생 모델 1</td>
</tr>
<tr>
<td><strong>Variant_2</strong></td>
<td>로그인 시 입력된 세부 파생 모델 2</td>
</tr>
<tr>
<td><strong>Operator</strong></td>
<td>작업 진행자 사용자 ID</td>
</tr>
<tr>
<td><strong>Production_Date</strong></td>
<td>검사 수행 및 완료 일시 (yyyy-MM-dd HH:mm:ss)</td>
</tr>
<tr>
<td><strong>Line</strong></td>
<td>로그인 공정 작업 라인</td>
</tr>
<tr>
<td><strong>Lot_No</strong></td>
<td>생산 Lot 번호</td>
</tr>
<tr>
<td><strong>Jig_No</strong></td>
<td>사용 지그(Jig) 번호</td>
</tr>
<tr>
<td><strong>Channel</strong></td>
<td>검사 채널 (<code>LEFT</code> 또는 <code>RIGHT</code>)</td>
</tr>
<tr>
<td><strong>Spec_UL</strong></td>
<td>누설 상한 규격값 (sccm)</td>
</tr>
<tr>
<td><strong>Spec_LL</strong></td>
<td>누설 하한 규격값 (sccm)</td>
</tr>
<tr>
<td><strong>Leak_Value</strong></td>
<td>측정된 누설 리크량</td>
</tr>
<tr>
<td><strong>Result</strong></td>
<td>최종 판정 결과 (<code>OK</code> / <code>NG</code>)</td>
</tr>
</tbody>
</table>
<h3>표(그리드) 기능</h3>
<ul>
<li>컬럼 정렬: 헤더 클릭 시 해당 열 기준으로 오름차순 또는 내림차순 정렬이 가능합니다.</li>
</ul>
<div class="page-break"></div>
<h1>7. 자동 시험 프로세스</h1>
<hr />
<h2>7.1 개요</h2>
<p>자동 시험은 시작 신호(LEFT_START 또는 RIGHT_START)에 의해 작동하며, 7단계로 진행됩니다. 좌/우 채널은 각각 독립적인 백그라운드 스레드에서 실행되지만, <strong>중복 실행 방지 기능</strong>을 통해 동시 시험은 방지됩니다.</p>
<h2>7.2 전체 프로세스 흐름도</h2>
<div style="display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 15px 0; page-break-inside: avoid; line-height: 1.4;">
<!-- 좌측 컬럼: 시작 ~ 3단계 -->
<div style="border-left: 2px solid #1e3799; padding-left: 14px;">
<!-- Trigger -->
<div style="margin-bottom: 10px; position: relative;">
<span style="position: absolute; left: -19px; top: 4px; width: 8px; height: 8px; border-radius: 50%;"></span>
<div style="font-weight: bold; color: #2f3542;">시작 신호 감지 <span style="font-weight: normal; color: #747d8c;">(좌/우 시작 신호)</span></div>
</div>
<!-- Semaphore -->
<div style="margin-bottom: 10px; padding: 6px 8px; border-radius: 4px; border-left: 3px solid #f6b93b;">
<strong style="color: #d97706;">중복 실행 방지 대기</strong>
<div style="color: #57606f; margin-top: 2px;">
• 타 채널 시험 중 시 "대기중" 메시지 및 순서 대기<br>
• 시험 가능 시 개시 (좌/우 동시 시험 방지)
</div>
</div>
<!-- Step 1 -->
<div style="margin-bottom: 10px; position: relative;">
<span style="position: absolute; left: -19px; top: 4px; width: 8px; height: 8px; border-radius: 50%;"></span>
<strong style="color: #1e3799;">1단계: 시험 시작 (초기화)</strong>
<div style="color: #57606f; margin-top: 2px;">
• OK/NG 판정 출력 초기화 (OFF)<br>
• 메인 화면 결과 표시 초기화 및 시작 시간 갱신<br>
• 누설 센서 수신 데이터 초기화
</div>
</div>
<!-- Step 2 -->
<div style="margin-bottom: 10px; position: relative;">
<span style="position: absolute; left: -19px; top: 4px; width: 8px; height: 8px; border-radius: 50%;"></span>
<strong style="color: #1e3799;">2단계: 제품 ID 판독</strong>
<div style="color: #57606f; margin-top: 2px;">
• 4251 보드를 통해 16자리 ID 판독<br>
<span style="color: #ff4757; font-weight: bold;">[실패 시]</span> "ID 읽기 실패" 출력 후 기록/저장 제외 종료
</div>
</div>
<!-- Step 3 -->
<div style="padding: 6px 8px; border-radius: 4px; border-left: 3px solid #1e3799;">
<strong style="color: #1e3799;">3단계: PCB 바코드 DB 조회</strong>
<div style="color: #57606f; margin-top: 2px;">
• DB에서 `IC_SN` 매칭 `PCB_Barcode` 조회 (5초 제한)<br>
<span style="color: #ff4757; font-weight: bold;">[실패/누락 시]</span> "바코드 매핑 실패" 출력 후 즉시 종료
</div>
</div>
</div>
<!-- 우측 컬럼: 4단계 ~ 종료 -->
<div style="border-left: 2px solid #1e3799; padding-left: 14px;">
<!-- Step 4 -->
<div style="margin-bottom: 10px; position: relative;">
<span style="position: absolute; left: -19px; top: 4px; width: 8px; height: 8px; border-radius: 50%;"></span>
<strong style="color: #1e3799;">4단계: 누설 시험 수행 (계측)</strong>
<div style="color: #57606f; margin-top: 2px;">
• "LEAK 시험중" 표시 & C28 센서 수신 대기 (최대 30초)<br>
<span style="color: #ff4757; font-weight: bold;">[초과 시]</span> 통신 초과 NG 자동 종료 (측정값 9.9999 DB 저장)
</div>
</div>
<!-- Step 5 -->
<div style="margin-bottom: 10px; position: relative;">
<span style="position: absolute; left: -19px; top: 4px; width: 8px; height: 8px; border-radius: 50%;"></span>
<strong style="color: #1e3799;">5단계: 합격 판정</strong>
<div style="color: #57606f; margin-top: 2px;">
• 규격 하한값 ≤ 측정값 ≤ 규격 상한값 범위 내 OK, 이외 NG
</div>
</div>
<!-- Step 6 -->
<div style="margin-bottom: 10px; position: relative;">
<span style="position: absolute; left: -19px; top: 4px; width: 8px; height: 8px; border-radius: 50%;"></span>
<strong style="color: #1e3799;">6단계: 판정 스펙 교차 검증</strong>
<div style="color: #57606f; margin-top: 2px;">
• SW 판정과 센서 자체 판정 비교 분석 (상이 시 경고 창 표시)
</div>
</div>
<!-- Step 7 -->
<div style="margin-bottom: 10px; position: relative;">
<span style="position: absolute; left: -19px; top: 4px; width: 8px; height: 8px; border-radius: 50%;"></span>
<strong style="color: #1e3799;">7단계: 결과 출력 및 저장</strong>
<div style="color: #57606f; margin-top: 2px;">
• 로컬 CSV 및 DB 저장, 외부 설비 출력 신호(OK/NG) 전송<br>
• 메인 화면 결과 및 "시험 완료" 표시
</div>
</div>
<!-- End -->
<div style="padding: 6px 8px; border-radius: 4px; border-left: 3px solid #2ed573;">
<strong style="color: #2f855a;">순서 잠금 해제</strong>
<div style="color: #57606f; margin-top: 2px;">
• 순서 대기 해제, 대기 중 타 채널 0.35초 후 자동 시험 개시
</div>
</div>
</div>
</div>
<h2>7.3 좌/우 채널 순차 실행 및 대기</h2>
<p>좌/우 채널은 <strong>동시에 시험을 수행할 수 없습니다</strong>. 이는 하드웨어 통신 간섭 및 충돌을 방지하기 위함입니다.</p>
<table>
<thead>
<tr>
<th>상황</th>
<th>동작</th>
</tr>
</thead>
<tbody>
<tr>
<td>한 채널만 시험 시작 신호 발생</td>
<td>즉시 시험을 시작합니다.</td>
</tr>
<tr>
<td>양쪽 채널 동시 신호 발생</td>
<td>먼저 순서를 획득한 채널이 시험을 진행하며, 다른 채널은 "대기중"을 표시하며 대기합니다.</td>
</tr>
<tr>
<td>시험 완료 후</td>
<td>대기 중이던 채널이 자동으로 시험을 시작합니다. (안정화를 위해 0.35초의 대기 시간이 적용됩니다.)</td>
</tr>
</tbody>
</table>
<h2>7.4 시간 초과 (타임아웃) 처리</h2>
<p>누설 센서에서 30초 이내에 계측 결과 응답이 없으면 다음과 같이 처리됩니다.</p>
<ol>
<li>화면의 오류 메시지 영역에 "통신 시간 초과" 오류 메시지를 표시합니다. (데이터베이스 저장 실패 시 "DB 저장 실패" 사유도 함께 노출)</li>
<li>해당 채널의 불합격(NG) 물리 신호를 내보냅니다.</li>
<li>측정값 <code>9.9999</code>, 판정 <code>NG</code>로 기록을 생성합니다.</li>
<li>로컬 CSV 로그 파일 및 데이터베이스에 검사 결과를 기록합니다. (단, 이전 단계인 제품 ID 판독에 성공한 상태여야 저장이 이루어집니다.)</li>
</ol>
<h2>7.5 제품 ID 및 PCB 바코드 연동 예외 처리</h2>
<h3>1. 제품 ID(IC_SN) 판독 실패 시</h3>
<ul>
<li><strong>동작</strong>: 제품 ID 판독 장치(4251 보드)로부터 16자리 ID 취득을 실패하는 경우 진행 메시지에 <code>"ID 읽기 실패"</code>를 표시하고, 해당 채널의 NG 물리 신호를 즉시 출력합니다.</li>
<li><strong>저장 제한</strong>: 이 경우에는 로컬 CSV 로그 기록 및 데이터베이스 저장을 <strong>완전히 건너뜁니다</strong>.</li>
</ul>
<h3>2. PCB 바코드 DB 조회(매핑) 실패 시</h3>
<ul>
<li><strong>동작</strong>: 판독 완료 후 데이터베이스 서버에서 <code>IC_SN</code>에 해당하는 <code>PCB_Barcode</code>를 조회할 때, 정해진 시간(5초) 내에 응답이 없거나 일치하는 데이터가 없는 경우 화면에 <code>"바코드 매핑 실패"</code> 관련 오류를 표시하고 NG 신호를 출력합니다.</li>
<li><strong>저장 제한</strong>: 이 경우에도 제품 검사 자체를 진행하지 않고 즉시 스킵하며, <strong>데이터베이스 및 로컬 CSV 로그 기록 저장을 건너뜁니다</strong>. (오프라인 모드에서는 임시 바코드 정보를 주입하여 검사 동작을 테스트할 수 있습니다.)</li>
</ul>
<h2>7.6 누설 센서 측정 결과 채널 분류</h2>
<p>누설 센서에서 수신한 데이터는 다음 채널 번호 정보를 기준으로 정렬됩니다.</p>
<table>
<thead>
<tr>
<th>채널 번호</th>
<th>대상</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>C01</code> 또는 <code>1</code></td>
<td>좌측(LEFT) 채널</td>
</tr>
<tr>
<td><code>C02</code> 또는 <code>2</code></td>
<td>우측(RIGHT) 채널</td>
</tr>
<tr>
<td>채널 번호 식별 불가</td>
<td>현재 활성화되어 시험을 진행 중인 채널로 자동 배정</td>
</tr>
</tbody>
</table>
<h2>7.7 ID 수동 테스트</h2>
<p>하단 메뉴의 <strong>ID Test (L)</strong> 또는 <strong>ID Test (R)</strong> 버튼을 사용하면 시험 시작 신호 없이 센서 ID 판독 동작만 단독으로 수행할 수 있습니다.</p>
<blockquote>
<p><strong>용도</strong>: 장비 설치 후 통신 상태 확인 및 디버깅 시 사용합니다. 실제 누설 시험(압력 계측)은 수행하지 않습니다.</p>
</blockquote>
<h2>7.8 측정 판정 및 저장 기준</h2>
<p>프로그램의 판정 스펙(상하한 규격) 기준과 누설 센서 자체의 내부 스펙 판정 기준이 일치하지 않는 경우, 저장소에는 다음과 같이 저장됩니다.</p>
<h3>저장 기준 요약</h3>
<ul>
<li><strong>최종 저장 판정 (Result)</strong>: 센서 자체의 판정값과 무관하게, 항상 <strong>프로그램 화면 판정 기준</strong>으로 데이터베이스 및 로그에 저장됩니다.</li>
<li><strong>동작 예시</strong>: 프로그램 판정이 합격(<code>OK</code>)이지만 센서 자체의 내부 판정이 불합격(<code>NG</code> 등)인 경우에도, 최종 기록 및 CSV에는 <strong><code>OK</code> (합격)</strong>로 기록됩니다.</li>
</ul>
<h3>판정 스펙 불일치 시의 동작</h3>
<ul>
<li>양측의 판정 스펙이 다르면 불일치 로그가 기록되며 화면에 경고 팝업이 출력되지만, <strong>최종 저장되는 판정 결과에는 영향을 미치지 않고 프로그램 판정값을 유지</strong>합니다.</li>
</ul>
<div class="page-break"></div>
<h1>8. 로그 및 데이터 관리</h1>
<hr />
<h2>8.1 검사 데이터 로그 (CSV)</h2>
<h3>기본 정보</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>저장 위치</strong></td>
<td><code>C:\LeakTest\Logs\yyyy-MM-dd.csv</code></td>
</tr>
<tr>
<td><strong>파일 형식</strong></td>
<td>CSV (UTF-8 인코딩)</td>
</tr>
<tr>
<td><strong>파일 생성</strong></td>
<td>날짜별 자동 생성 (해당 날짜 첫 시험 시)</td>
</tr>
<tr>
<td><strong>데이터 추가</strong></td>
<td>매 시험 완료 시 자동으로 해당 날짜 파일에 1행 추가</td>
</tr>
</tbody>
</table>
<h3>CSV 헤더 및 컬럼</h3>
<table>
<thead>
<tr>
<th>컬럼</th>
<th>예시</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>IC_SN</code></td>
<td><code>260508A00123B01C</code></td>
<td>제품 고유 시리얼 번호 (PK/FK)</td>
</tr>
<tr>
<td><code>PCB_Barcode</code></td>
<td><code>260508A00123B01C</code></td>
<td>PCB 바코드 고유 식별 정보 (UK)</td>
</tr>
<tr>
<td><code>Maker</code></td>
<td><code>Hyundai</code></td>
<td>메이커 정보</td>
</tr>
<tr>
<td><code>Model</code></td>
<td><code>NE1aW</code></td>
<td>모델 정보</td>
</tr>
<tr>
<td><code>Variant_1</code></td>
<td><code>PT</code></td>
<td>변형1 정보</td>
</tr>
<tr>
<td><code>Variant_2</code></td>
<td><code>SENSOR</code></td>
<td>변형2 정보</td>
</tr>
<tr>
<td><code>Operator</code></td>
<td><code>op001</code></td>
<td>작업자 ID</td>
</tr>
<tr>
<td><code>Production_Date</code></td>
<td><code>2026-05-08 10:30:15</code></td>
<td>검사 수행 일시</td>
</tr>
<tr>
<td><code>Line</code></td>
<td><code>L1</code></td>
<td>작업 라인 번호</td>
</tr>
<tr>
<td><code>Lot_No</code></td>
<td><code>LOT001</code></td>
<td>Lot 번호</td>
</tr>
<tr>
<td><code>Jig_No</code></td>
<td><code>JIG01</code></td>
<td>지그 번호</td>
</tr>
<tr>
<td><code>Channel</code></td>
<td><code>LEFT</code></td>
<td>검사 채널 (LEFT 또는 RIGHT)</td>
</tr>
<tr>
<td><code>Spec_UL</code></td>
<td><code>1.00</code></td>
<td>규격 상한값</td>
</tr>
<tr>
<td><code>Spec_LL</code></td>
<td><code>-1.00</code></td>
<td>규격 하한값</td>
</tr>
<tr>
<td><code>Leak_Value</code></td>
<td><code>0.5234</code></td>
<td>측정된 릭 측정값 (소수점 4자리)</td>
</tr>
<tr>
<td><code>Result</code></td>
<td><code>OK</code></td>
<td>최종 판정 결과 (OK 또는 NG)</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>참고</strong>: 타임아웃 발생 시에도 측정값 <code>9.9999</code>, 판정 <code>NG</code>로 로그에 기록됩니다.</p>
</blockquote>
<hr />
<h2>8.2 시스템 로그</h2>
<h3>기본 정보</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>저장 위치</strong></td>
<td><code>C:\LeakTest\Logs\yyyy-MM-dd_system.log</code></td>
</tr>
<tr>
<td><strong>파일 형식</strong></td>
<td>텍스트 파일 (UTF-8 인코딩)</td>
</tr>
<tr>
<td><strong>내용</strong></td>
<td>통신 오류, 시스템 이벤트 등</td>
</tr>
</tbody>
</table>
<h3>로그 형식</h3>
<pre><code>[HH:mm:ss.fff] [TAG] 메시지 내용
</code></pre>
<hr />
<h2>8.3 설정 파일</h2>
<h3>config.xml</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>위치</strong></td>
<td>프로그램 실행 폴더 (<code>C:\LeakTest\config.xml</code>)</td>
</tr>
<tr>
<td><strong>생성</strong></td>
<td>최초 실행 시 기본값으로 자동 생성</td>
</tr>
<tr>
<td><strong>수정</strong></td>
<td>Comm. Settings 또는 Parameters에서 저장 시 갱신</td>
</tr>
</tbody>
</table>
<pre><code class="language-xml">&lt;AppConfig&gt;
&lt;SensorPort&gt;COM1&lt;/SensorPort&gt;
&lt;SensorBaudRate&gt;9600&lt;/SensorBaudRate&gt;
&lt;Board4251Port&gt;COM3&lt;/Board4251Port&gt;
&lt;Board4251BaudRate&gt;115200&lt;/Board4251BaudRate&gt;
&lt;Board4251Timeout&gt;5000&lt;/Board4251Timeout&gt;
&lt;SpecUL&gt;1.00&lt;/SpecUL&gt;
&lt;SpecLL&gt;-1.00&lt;/SpecLL&gt;
&lt;EnableSpecMismatchAlarm&gt;true&lt;/EnableSpecMismatchAlarm&gt;
&lt;/AppConfig&gt;
</code></pre>
<table>
<thead>
<tr>
<th>설정 키</th>
<th>기본값</th>
<th>설정 위치</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>SensorPort</code></td>
<td>COM1</td>
<td>Comm. Settings</td>
<td>C28 센서 COM 포트</td>
</tr>
<tr>
<td><code>SensorBaudRate</code></td>
<td>9600</td>
<td>Comm. Settings</td>
<td>C28 센서 통신 속도</td>
</tr>
<tr>
<td><code>Board4251Port</code></td>
<td>COM3</td>
<td>Comm. Settings</td>
<td>4251 보드 COM 포트</td>
</tr>
<tr>
<td><code>Board4251BaudRate</code></td>
<td>115200</td>
<td>Comm. Settings</td>
<td>4251 보드 통신 속도</td>
</tr>
<tr>
<td><code>Board4251Timeout</code></td>
<td>5000</td>
<td>(코드 내 고정)</td>
<td>4251 보드 응답 대기 시간(ms)</td>
</tr>
<tr>
<td><code>SpecUL</code></td>
<td>1.00</td>
<td>Parameters</td>
<td>누설 상한 규격값</td>
</tr>
<tr>
<td><code>SpecLL</code></td>
<td>-1.00</td>
<td>Parameters</td>
<td>누설 하한 규격값</td>
</tr>
<tr>
<td><code>EnableSpecMismatchAlarm</code></td>
<td>true</td>
<td>Comm. Settings</td>
<td>스펙 불일치 알림 활성화 여부 (true/false)</td>
</tr>
</tbody>
</table>
<h3>Database.ini</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>위치</strong></td>
<td><code>C:\LeakTest\Database.ini</code></td>
</tr>
<tr>
<td><strong>생성</strong></td>
<td>최초 실행 시 해당 파일이 없으면 기본 양식으로 자동 생성. 배포 폴더(<code>C:\LeakTest\</code>)와 동일 위치에 저장되어 경로 관리가 단순함</td>
</tr>
<tr>
<td><strong>수정</strong></td>
<td>메모장 등의 텍스트 에디터를 통해 연결 주소 및 프로시저 정보 직접 수정</td>
</tr>
</tbody>
</table>
<pre><code class="language-ini">Db_Server=127.0.0.1, 1433
Db_Name=Test_DB
Db_User=db_user
Db_Password=db_password
[Login]
Procedure=dbo.CheckOperator
ProcessName=EOL
OfflinePreview=false
</code></pre>
<table>
<thead>
<tr>
<th>설정 키</th>
<th>예시 / 기본값</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Db_Server</code></td>
<td><code>[서버IP], [포트번호]</code> (예: 127.0.0.1, 1433)</td>
<td>데이터베이스 서버 IP 주소 및 포트 번호</td>
</tr>
<tr>
<td><code>Db_Name</code></td>
<td><code>[데이터베이스명]</code> (예: Test_DB)</td>
<td>대상 데이터베이스(DB) 이름</td>
</tr>
<tr>
<td><code>Db_User</code></td>
<td><code>[사용자ID]</code> (예: db_user)</td>
<td>데이터베이스 접속 계정 ID</td>
</tr>
<tr>
<td><code>Db_Password</code></td>
<td><code>[비밀번호]</code> (예: db_password)</td>
<td>데이터베이스 접속 계정 비밀번호</td>
</tr>
<tr>
<td><code>Procedure</code></td>
<td>dbo.CheckOperator</td>
<td>로그인 계정 검증용 데이터베이스 프로그램명</td>
</tr>
<tr>
<td><code>ProcessName</code></td>
<td>EOL</td>
<td>검증 공정명</td>
</tr>
<tr>
<td><code>OfflinePreview</code></td>
<td>false</td>
<td>true 시 DB 연결 없이 로그인 즉시 성공 (오프라인 모드)</td>
</tr>
</tbody>
</table>
<h3>LoginOptions.json / LoginHistory.json</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>위치</strong></td>
<td><code>C:\LeakTest\</code></td>
</tr>
<tr>
<td><strong>생성</strong></td>
<td>최초 실행 시 자동 생성</td>
</tr>
<tr>
<td><strong>수정</strong></td>
<td>프로그램 내 로그인 화면 사용 시 자동 갱신</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th>파일</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>LoginOptions.json</code></td>
<td>로그인 화면 각 필드(Maker, Model, Variant_1 등)의 자동완성 드롭다운 선택지 목록 저장</td>
</tr>
<tr>
<td><code>LoginHistory.json</code></td>
<td>최근 로그인 정보(작업자 ID, 라인, 모델 등 전체 세트)를 최대 10건 저장하여 재사용</td>
</tr>
</tbody>
</table>
<h3>DioConfig.ini</h3>
<table>
<thead>
<tr>
<th>항목</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>위치</strong></td>
<td><code>[프로그램 폴더]\Settings\DioConfig.ini</code></td>
</tr>
<tr>
<td><strong>생성</strong></td>
<td>최초 실행 시 자동 생성</td>
</tr>
<tr>
<td><strong>수정</strong></td>
<td>일반적으로 수정 불필요 (하드웨어 변경 시에만)</td>
</tr>
</tbody>
</table>
<hr />
<h2>8.4 파일 관리 주의사항</h2>
<table>
<thead>
<tr>
<th>주의사항</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>Logs 폴더 삭제 금지</td>
<td>검사 기록이 영구 삭제됩니다</td>
</tr>
<tr>
<td>CSV 파일 직접 편집</td>
<td>Excel 등으로 편집 시 인코딩이 변경될 수 있으므로 주의</td>
</tr>
<tr>
<td>config.xml 직접 편집</td>
<td>잘못된 값 입력 시 프로그램 오작동 가능. 프로그램 내 설정 화면 사용 권장</td>
</tr>
<tr>
<td>디스크 용량</td>
<td>일일 수백 건 검사 기준, 연간 약 50~100MB 정도의 로그가 생성됩니다</td>
</tr>
</tbody>
</table>
<hr />
<div class="page-break"></div>
<h2>8.5 데이터베이스 데이터 관리 (dbo.EOL)</h2>
<p>매 시험 완료 시 검사 결과 및 로그인 정보가 데이터베이스에 실시간으로 저장(MERGE/UPSERT)됩니다.</p>
<h3>데이터베이스 저장 항목 안내</h3>
<ul>
<li><strong>대상 테이블</strong>: <code>[dbo].[EOL]</code></li>
<li><strong>매핑 상세</strong>:</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left;">데이터베이스 항목명</th>
<th style="text-align: left;">구분</th>
<th style="text-align: left;">설명</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;"><strong><code>IC_SN</code></strong></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">제품 고유 IC 일련번호</td>
</tr>
<tr>
<td style="text-align: left;"><strong><code>PCB_Barcode</code></strong></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">조회된 PCB 바코드 정보</td>
</tr>
<tr>
<td style="text-align: left;"><code>Maker</code></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">로그인 시 입력한 제조사명</td>
</tr>
<tr>
<td style="text-align: left;"><code>Model</code></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">로그인 시 입력한 검사 모델명</td>
</tr>
<tr>
<td style="text-align: left;"><code>Variant_1</code></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">로그인 시 입력한 파생 모델명 1</td>
</tr>
<tr>
<td style="text-align: left;"><code>Variant_2</code></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">로그인 시 입력한 파생 모델명 2</td>
</tr>
<tr>
<td style="text-align: left;"><code>Operator</code></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">검사자(작업자) ID</td>
</tr>
<tr>
<td style="text-align: left;"><code>Production_Date</code></td>
<td style="text-align: left;">날짜/시간형</td>
<td style="text-align: left;">검사가 완료된 시간</td>
</tr>
<tr>
<td style="text-align: left;"><code>Line</code></td>
<td style="text-align: left;">문자형 (최대 30자)</td>
<td style="text-align: left;">로그인 시 입력한 작업 라인명</td>
</tr>
<tr>
<td style="text-align: left;"><code>Lot_No</code></td>
<td style="text-align: left;">문자형 (최대 8자)</td>
<td style="text-align: left;">로그인 시 입력한 Lot 번호</td>
</tr>
<tr>
<td style="text-align: left;"><code>Jig_No</code></td>
<td style="text-align: left;">문자형 (최대 10자)</td>
<td style="text-align: left;">로그인 시 입력한 지그 번호</td>
</tr>
<tr>
<td style="text-align: left;"><code>Channel</code></td>
<td style="text-align: left;">문자형 (최대 5자)</td>
<td style="text-align: left;">검사가 수행된 채널 (LEFT / RIGHT)</td>
</tr>
<tr>
<td style="text-align: left;"><code>Spec_UL</code></td>
<td style="text-align: left;">숫자형</td>
<td style="text-align: left;">리크 판정 상한 기준값</td>
</tr>
<tr>
<td style="text-align: left;"><code>Spec_LL</code></td>
<td style="text-align: left;">숫자형</td>
<td style="text-align: left;">리크 판정 하한 기준값</td>
</tr>
<tr>
<td style="text-align: left;"><code>Leak_Value</code></td>
<td style="text-align: left;">숫자형</td>
<td style="text-align: left;">측정된 누설량</td>
</tr>
<tr>
<td style="text-align: left;"><code>Result</code></td>
<td style="text-align: left;">문자형 (최대 5자)</td>
<td style="text-align: left;">최종 판정 결과 (OK / NG)</td>
</tr>
</tbody>
</table>
<div class="page-break"></div>
<h1>9. 오류 대응 및 프로그램 종료</h1>
<hr />
<h2>9.1 통신 연결 실패</h2>
<p>프로그램 시작 또는 통신 설정 저장 시 발생할 수 있습니다.</p>
<table>
<thead>
<tr>
<th>오류 메시지</th>
<th>원인</th>
<th>조치 방법</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Sentinel C28 포트 연결 실패 (COMx)</code></td>
<td>C28 센서 미연결, 잘못된 포트, 다른 프로그램이 포트 점유</td>
<td>① 케이블 연결 확인 ② 장치 관리자에서 COM 포트 번호 확인 ③ Comm. Settings에서 올바른 포트 선택 후 <code>설정 저장</code></td>
</tr>
<tr>
<td><code>4251 보드 포트 연결 실패 (COMx)</code></td>
<td>4251 보드 미연결, 잘못된 포트</td>
<td>① 케이블 연결 확인 ② Comm. Settings에서 올바른 포트 선택 후 <code>설정 저장</code></td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>참고</strong>: 통신 설정을 저장하면 기존 연결을 모두 해제하고 새 설정으로 재연결을 시도합니다. 포트 변경 후 재시작 없이 바로 적용됩니다.</p>
</blockquote>
<h2>9.2 시험 중 오류</h2>
<p>시험 프로세스 진행 중 발생하는 오류입니다. 메인 화면의 <strong>오류 메시지</strong> 영역에 표시됩니다.</p>
<table>
<thead>
<tr>
<th>오류 메시지</th>
<th>원인</th>
<th>조치 방법</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Sentinel C28 통신 타임아웃</code></td>
<td>30초 내 C28 센서 응답 없음</td>
<td>① 센서 전원 ON 확인 ② 시리얼 케이블 연결 확인 ③ BaudRate 설정 확인 (기본: 9600)</td>
</tr>
<tr>
<td><code>통신 실패 (4251 보드 CHx 상태 응답 시간 초과)</code></td>
<td>4251 보드가 대기 시간(15초) 내에 응답하지 않음</td>
<td>① 4251 보드 전원 공급 및 케이블 연결선 확인 ② 통신 노이즈 방지 조치 확인</td>
</tr>
<tr>
<td><code>통신 실패 (4251 보드 CHx 상태 이상 또는 Fail)</code></td>
<td>4251 보드로부터 정상 응답을 받지 못했거나 오류 코드가 반환됨</td>
<td>① 하드웨어 오결선 여부 점검 ② 채널 센서 구동 전원 확인</td>
</tr>
<tr>
<td><code>통신 실패 (4251 보드 CHx ID 대기 타임아웃)</code></td>
<td>4251 보드를 통해 제품 ID를 15초 내에 판독하지 못함</td>
<td>① 센서가 지그(Jig)에 올바르게 안착되었는지 물리적 확인 ② 접촉 단자 이물질 청소</td>
</tr>
<tr>
<td><code>SPEC 불일치 - 프로그램: OK, 센서: R</code></td>
<td>프로그램 SPEC과 센서 자체 SPEC의 판정이 다름</td>
<td>① 프로그램의 SPEC UL/LL 확인 (Parameters) ② C28 센서의 SPEC 설정 확인 ③ 양쪽 설정값 동기화 (※ 통신 설정에서 경고 알림 스위치 상태를 확인하세요)</td>
</tr>
<tr>
<td><code>LEAK 센서 데이터 오류</code></td>
<td>C28에서 수신된 데이터 파싱 실패</td>
<td>① 센서 통신 상태 확인 ② 케이블 접촉 불량 확인 ③ BaudRate 불일치 확인</td>
</tr>
<tr>
<td><code>DB 저장 실패: [오류 원인] 상세 메시지</code></td>
<td>데이터베이스 서버에 검사 데이터를 저장하지 못함</td>
<td>① 네트워크 케이블 및 서버 통신 연결 확인 ② Database.ini 설정 파일의 접속 정보(IP/비밀번호 등) 확인 ③ 로컬 일일 CSV 로그 파일에 백업이 정상적으로 저장되었는지 확인</td>
</tr>
<tr>
<td><code>바코드 매핑 실패: [오류 원인] 상세 메시지</code></td>
<td>데이터베이스에서 해당 <code>IC_SN</code>에 매칭되는 바코드 정보를 찾지 못함</td>
<td>① 데이터베이스 서버 네트워크 연결 확인 ② Housing_Assembly 테이블에 대상 제품의 바코드 정보 매핑 상태 점검</td>
</tr>
</tbody>
</table>
<hr />
<h2>9.3 SPEC 교차 검증 경고 팝업</h2>
<p>프로그램 판정과 센서 판정이 불일치할 때, 통신 설정 화면의 <strong><code>스펙 불일치 알림 활성화</code></strong> 옵션이 켜져(ON) 있는 경우 팝업 경고가 표시됩니다:</p>
<ul>
<li>
<p>만약 이 옵션을 <strong>해제(OFF)</strong>한 경우, 이 팝업 경고 대화상자는 나타나지 않으며, 메인 화면 하단의 <strong>오류 메시지</strong> 텍스트 박스에만 불일치 로그가 기록됩니다.</p>
</li>
<li>
<p>이 경고는 검사 자체를 중단하지는 않으며, <strong>프로그램의 판정 결과</strong>가 최종 DB 및 로컬 로그 기록에 사용됩니다.</p>
</li>
</ul>
<hr />
<h2>9.4 DIO 보드 오류</h2>
<table>
<thead>
<tr>
<th>상황</th>
<th>프로그램 동작</th>
<th>영향</th>
</tr>
</thead>
<tbody>
<tr>
<td>PCI-7432 보드 미인식</td>
<td><strong>시뮬레이션 모드</strong>로 자동 전환</td>
<td>DIO 입출력이 동작하지 않음 (실제 입출력 포트 제어 불가)</td>
</tr>
<tr>
<td>보드 런타임 오류</td>
<td>좌/우 채널 오류 메시지에 <code>[DIO Board Error]</code> 표시</td>
<td>오류 내용에 따라 조치</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>시뮬레이션 모드</strong>: ADLINK 드라이버가 설치되지 않은 환경에서도 프로그램의 기능(통신 설정, 데이터 조회 등)을 사전에 테스트할 수 있도록 제공되는 가상 동작 모드입니다.</p>
</blockquote>
<hr />
<h2>9.5 일반적인 문제 해결</h2>
<table>
<thead>
<tr>
<th>증상</th>
<th>가능한 원인</th>
<th>해결 방법</th>
</tr>
</thead>
<tbody>
<tr>
<td>프로그램 시작 후 양쪽 채널에 오류 메시지</td>
<td>COM 포트 설정 불일치</td>
<td>Comm. Settings에서 올바른 포트 선택 후 저장</td>
</tr>
<tr>
<td>시험이 시작되지 않음</td>
<td>DIO 시작 신호 미수신</td>
<td>외부 PLC 또는 시작 스위치의 접점 신호 상태 확인</td>
</tr>
<tr>
<td>"대기중"에서 진행되지 않음</td>
<td>다른 채널이 타임아웃 대기 중</td>
<td>최대 30초 대기 후 자동 해제. 센서 연결 확인</td>
</tr>
<tr>
<td>측정값이 표시되지 않음</td>
<td>C28 센서 스트리밍 데이터 미수신</td>
<td>센서 전원, 케이블, BaudRate 확인</td>
</tr>
<tr>
<td>COM 포트 목록이 비어있음</td>
<td>시리얼 장치 미연결</td>
<td>USB-시리얼 케이블 연결 확인, 드라이버 설치 확인</td>
</tr>
</tbody>
</table>
<hr />
<h2>9.6 프로그램 종료</h2>
<h3>종료 방법</h3>
<ol>
<li>상단 타이틀 바 우측의 <strong>X (빨간색)</strong> 버튼을 클릭합니다.</li>
<li>종료 확인 대화상자가 표시됩니다</li>
<li><strong>"예"</strong>를 선택하면 종료, <strong>"아니오"</strong>를 선택하면 취소됩니다.</li>
</ol>
</body>
</html>