<li>바탕화면의 <code>Marking System</code> (<code>marking_gui</code>) 프로그램을 실행한 뒤, 작업자 계정 정보를 입력하여 로그인합니다. (데이터베이스 점검 중인 경우 설정 파일을 통해 오프라인 모드로의 진입이 가능합니다.)</li>
<li><strong>통신 상태 확인 및 채널 설정</strong></li>
<li>우측 상단의 <code>통신 설정</code>메뉴에서 센서가 올바른 포트와 채널에 연결되었는지 확인합니다.</li>
<p>실제 계측기를 통해 수집된 3대 전기 파라미터 수치와 설정된 규격 범위를 표시하는 3열 구조의 카드입니다.
* <strong>측정 전압 (Voltage)</strong>: DMM 계측 장비가 측정한 실측 전압 수치 (<strong>V</strong> 단위, 기본 기준범위: <code>0.0V ~ 0.5V</code>)
* <strong>측정 전류 (Current)</strong>: Power Supply 전원공급 장치가 측정한 소모 전류 수치 (<strong>mA</strong> 단위, 기본 기준범위: <code>8.00mA ~ 10.00mA</code>)
* <strong>측정 저항 (Resistance)</strong>: DMM 측정 장비가 측정한 전기적 저항 수치 (<strong>kΩ</strong> 단위, 기본 기준범위: <code>0.400kΩ ~ 0.800kΩ</code>)
* <strong>측정 전압 (Voltage)</strong>: DMM 계측 장비가 측정한 실측 전압 수치 (<strong>V</strong> 단위, 기본 기준범위: <code>1.00V ~ 6.00V</code>)
* <strong>측정 전류 (Current)</strong>: Power Supply 전원공급 장치가 측정한 소모 전류 수치 (<strong>mA</strong> 단위, 기본 기준범위: <code>5.00mA ~ 10.00mA</code>)
* <strong>측정 저항 (Resistance)</strong>: DMM 측정 장비가 측정한 전기적 저항 수치 (<strong>kΩ</strong> 단위, 기본 기준범위: <code>8.000kΩ ~ 13.000kΩ</code>)
* <em>알림: 각 수치 카드 하단에는 설정 파일(<code>Setting.ini</code>)에서 지정한 임계 규격 범위가 표시되며, 실측값이 범위 내에 들어오면 카드 테두리가 </em><em>초록색(PASS)</em><em>으로, 범위를 벗어나면 </em><em>빨간색(FAIL)</em><em>으로 자동 전환됩니다.</em>
- <strong>검사 시간 정보</strong>: 전체 시퀀스 기동 시작 시간 및 종료 시간 표출
- <strong>일련번호 정보</strong>: <code>IC S/N</code>, <strong><code>Marking QR :</code></strong> (마킹 생성 QR 값), <strong><code>Scan QR :</code></strong> (스캐너 실측 QR 값), <code>각인 번호</code> 4개 항목을 수직 배열로 표출
- <strong>최종 판정결과</strong>: 최종 <strong>PASS/OK</strong> (초록색) / <strong>FAIL/NG</strong> (빨간색) 대형 배지 표출 (성능 합격 후 마킹 QR 검증 실패 시에도 <strong>NG</strong>로 자동 반영됨)
- <strong>최종 판정결과</strong>: 최종 <strong><code>OK</code></strong> (초록색) / <strong><code>NG</code></strong> (빨간색) 대형 배지 표출 (성능 합격 후 마킹 QR 검증 실패 시에도 <strong><code>NG</code></strong>로 자동 반영됨)
- <strong>시스템 상태</strong>: 통신 및 디바이스 가동 상태 또는 에러/검증 실패 사유 메시지 배너 표출
K -- 1개 이상 이탈 FAIL --> L[대형 FAIL 표시 & 마킹 제외 & DB 불합격 적재]
K -- 모두 통과 PASS --> M[대형 PASS 표시 & DB 합격 적재 & LMC1 레이저 QR 각인]
K -- 1개 이상 이탈 NG --> L[대형 NG 표시 & 마킹 제외 & DB NG 적재]
K -- 모두 통과 OK --> M[대형 OK 표시 & DB OK 적재 & LMC1 레이저 QR 각인]
L --> Z
M --> Z
</code></pre>
@ -961,15 +961,15 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
<h2>7.3 최종 판정 및 마킹 실행 조건</h2>
<p>계측이 완료되면 측정된 전압(V), 저항(kΩ), 전류(mA) 값을 설정한 기준 규격값(SPEC)과 비교하여 최종 판정을 내립니다.</p>
<ol>
<li><strong>기준 규격을 벗어난 경우 (FAIL)</strong>:<ul>
<li>전압, 전류, 저항 중 하나라도 기준을 벗어나면 최종 불합격(FAIL) 판정이 내려집니다.</li>
<li>이 경우 레이저 마킹 장비 구동은 자동으로 제외(Skip)되며, 불합격 내역으로 DB에 기록됩니다.</li>
<li><strong>기준 규격을 벗어난 경우 (NG)</strong>:<ul>
<li>전압, 전류, 저항 중 하나라도 기준을 벗어나면 최종 불합격(<strong><code>NG</code></strong>) 판정이 내려집니다.</li>
<li>이 경우 레이저 마킹 장비 구동은 자동으로 제외(Skip)되며, <code>NG</code> 내역으로 DB에 기록됩니다.</li>
</ul>
</li>
<li><strong>모든 항목이 합격인 경우 (PASS)</strong>:<ul>
<li>모든 수치가 기준치 내에 들어오면 최종 합격(PASS) 판정이 내려집니다.</li>
<li>합격 판정과 동시에 레이저 마킹기에 각인 데이터가 전달되어 QR 코드 및 제품 일련번호 각인이 자동으로 실행됩니다.</li>
<li>마킹 완료 후 QR 스캔 검증 팝업이 활성화되어 각인 상태를 교차 검증합니다.</li>
<li><strong>모든 항목이 합격인 경우 (OK)</strong>:<ul>
<li>모든 수치가 기준치 내에 들어오면 최종 합격(<strong><code>OK</code></strong>) 판정이 내려집니다.</li>
<li>합격 판정과 동시에 선택된 EZD 도안 파일(.ezd)에서 도면품번 및 HKMC품번을 실시간으로 추출하여 각인 및 QR 코드가 자동으로 조합되어 레이저 마킹이 실행됩니다.</li>
<li>마킹 완료 후 EZD 파싱 품번 기반의 QR 스캔 검증 팝업이 활성화되어 각인 상태를 교차 검증하고, 검증 완료 시 해당 품번 데이터로 DB 저장을 완료합니다.</li>
</ul>
</li>
</ol>
@ -977,15 +977,17 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
<h2>7.4 레이저 각인 QR 검증 팝업 및 결과 연동</h2>
<p>레이저 마킹이 완료되면 검증을 위해 <strong>QR 검증 팝업 창</strong>이 화면에 활성화되며 바코드 스캐너 또는 가상 키보드로 각인된 QR 코드를 읽어 들입니다.</p>
<ol>
<li><strong>QR 스캔 검증 성공 (즉시 자동 닫힘)</strong></li>
<li><strong>QR 스캔 검증 성공 (즉시 자동 닫힘 및 DB OK 적재)</strong></li>
<li>
<p>스캔된 QR 코드가 예상 QR 코드와 정확히 일치하면 팝업 창이 지연 없이 <strong>즉시 자동으로 닫히며</strong> DB에 <code>OK</code> 상태로 최종 저장을 완료하고 대기 상태로 복구됩니다.</p>
</li>
<li>
<p><strong>QR 스캔 검증 실패 (NG 판정 및 설명 표출)</strong></p>
<p><strong>QR 스캔 검증 실패 (팝업 유지 및 연속 재스캔 지원)</strong></p>
</li>
<li>스캔된 QR 코드가 불일치하거나 검증을 취소하는 경우, 작업자가 [확인] 버튼을 누르면 팝업 창이 닫힙니다.</li>
<li>팝업이 닫힘과 동시에 메인 화면의 대형 판정 카드가 <strong><code>OK</code></strong>에서 <strong><code>NG</code></strong> (빨간색 테두리 및 배경)로 즉시 전환됩니다.</li>
<li>스캔된 QR 코드가 불일치(대조 실패)할 경우, 팝업 창이 <strong>자동으로 닫히지 않고 열린 상태를 유지</strong>하며 "QR 바코드 불일치" 경고 상태를 표출합니다.</li>
<li>팝업이 열려 있는 동안 바코드/QR 스캐너 또는 키보드 입력을 통해 올바른 QR 코드로 <strong>연속 재스캔</strong>할 수 있으며, 재스캔에서 대조 성공 시 자동으로 통과(닫힘) 및 DB <code>OK</code> 저장 처리됩니다.</li>
<li>대조 불일치 상태에서 작업자가 <strong>[확인]</strong> 또는 <strong>[취소]</strong> (ESC 키) 버튼을 누르면 팝업 창이 닫히며, 판정 결과 <strong><code>NG</code></strong>로 데이터베이스 저장을 완료합니다.</li>
<li>팝업이 닫힘과 동시에 메인 화면의 대형 판정 카드가 <strong><code>OK</code></strong>에서 <strong><code>NG</code></strong> (빨간색 테두리 및 배경)로 전환됩니다.</li>
<li>공정 진행 상태 및 시스템 상태 바에 <code>"마킹 완료 / 각인 QR 검증 NG"</code>, <code>"상태: 검사 불합격 (각인 QR 검증 실패)"</code>, <code>"각인 QR 검증 실패 (DB NG 저장 완료)"</code> 등 구체적인 원인 설명이 표시되며, DB에 최종 <code>NG</code> 결과로 기록됩니다.</li>
</ol>
<divclass="page-break"></div>
@ -996,7 +998,7 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
<p>본 제어 프로그램은 설비 가동 중에 발생하는 계측기와의 통신 상태, 측정값 정보 및 각종 예외 오류 상황을 로그 파일로 기록합니다.</p>
<h3>8.1.1 로그 파일 보관 방법</h3>
<ul>
<li><strong>보관 폴더</strong>: 프로그램 실행 파일 경로의 하위 <strong><code>Logs</code></strong> 폴더에 저장됩니다.</li>
<li><strong>보관 폴더</strong>: 프로그램 설치 경로(<code>C:\marking\</code>) 하위 <strong><code>logs/</code></strong> 폴더에 저장됩니다. (예: <code>C:\marking\logs\2026-08-05.log</code>)</li>
<li><strong>파일명 규칙</strong>: 날짜별로 파일이 자동으로 생성되어 보관됩니다.</li>
<li><strong>로그 중요도 분류</strong>:<ul>
<li><strong>정보 (INFO)</strong>: 정상적인 검사 프로세스 시작, 계측기 연결 성공, 레이저 인쇄 성공 및 데이터베이스 저장 완료 기록.</li>
@ -1070,7 +1072,7 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
<ul>
<li><strong>현상</strong>: 성능 검사는 합격(PASS)했으나, 레이저 장비로의 데이터 전송 단계에서 경고 에러가 발생함.</li>
<li><strong>원인 및 해결</strong>:<ol>
<li><strong>도면 파일 점검</strong>: <code>시험 설정</code>화면에서 세팅해 놓은 작업 도면 파일이 실제 해당 경로에 존재하는지 점검하십시오.</li>
<li><strong>도면 파일 점검</strong>: 메인 화면의 <code>파일 선택</code>버튼을 통해 선택한 작업 도면 파일(.ezd)이 실제 해당 경로에 존재하는지 점검하십시오.</li>
<li><strong>마킹기 전원/연결 점검</strong>: 레이저 마킹기의 전원이 켜져 있는지 확인하고, 제어 PC와 마킹기 간의 연결 케이블 상태를 확인하십시오.</li>
</ol>
</li>
@ -1092,8 +1094,8 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
<ul>
<li><strong>현상</strong>: 로그인 화면에서 [로그인] 버튼 클릭 시 "DB 연결 상태 또는 ID/PW를 확인해 주십시오." 경고 팝업이 발생하며 로그인되지 않음.</li>
<li><strong>원인 및 해결</strong>:<ol>
<li><strong>네트워크/DB 서버 점검</strong>: 중앙 MSSQL 서버와의 통신이 단선되었거나 서버 전원이 꺼진 경우 타임아웃(1초)에 의해 경고가 표출됩니다. <code>Database.ini</code> 파일의 IP 설정 및 데이터베이스 서버 연결 상태를 점검하십시오.</li>
<li><strong>계정 정보 확인</strong>: 입력한 사용자 ID 및 비밀번호가 DB 계정 테이블 및<code>LoginOptions.json</code>계정 목록에 올바르게 등록되어 있는지 재확인하십시오.</li>
<li><strong>네트워크/DB 서버 점검</strong>: 중앙 MSSQL 서버와의 통신이 단선되었거나 서버 전원이 꺼진 경우 타임아웃(3초)에 의해 경고가 표출됩니다. <code>Database.ini</code> 파일의 IP 설정 및 데이터베이스 서버 연결 상태를 점검하십시오.</li>
<li><strong>계정 정보 확인</strong>: 입력한 사용자 ID 및 비밀번호가 MSSQL <code>Users</code> 테이블에 활성 상태(<code>IsActive=1</code>)로 등록되어 있는지 확인하십시오. (DB 접속 실패 시에도<code>LoginOptions.json</code>파일의 <code>loginAccounts</code> 배열에 등록된 계정으로 1차 인증을 진행할 수 있으므로, 필요시 해당 파일의 계정 설정도 함께 점검하십시오.)</li>
Title=$"📷 [스캐너 포트 {scannerPort} / {scannerBaud} Baud] 연동 테스트"
};
bool?testResult=qrTestWin.ShowDialog();
if(testResult==true)
{
MessageBox.Show($"스캐너 (포트: {scannerPort}) 통신 및 QR 대조 검증 성공!\n\n현재 선택한 포트로 스캐너가 정상 작동합니다.","스캔 테스트 성공",MessageBoxButton.OK,MessageBoxImage.Information);
}
else
{
MessageBox.Show($"스캔 테스트가 중단되었거나 취소되었습니다.","스캔 테스트 종료",MessageBoxButton.OK,MessageBoxImage.Information);
returnnewMarkingResult{Success=false,ErrorCode=-98,ErrorMessage="레이저 각인 하드웨어 응답 타임아웃 (30초)",MarkedAt=DateTime.Now};
}
intmarkResult=markingTask.Result;
if(markResult==0)
{
System.Diagnostics.Debug.WriteLine("[EzdMarking] 마킹 기계 동작 완료 (성공)");
returnnewMarkingResult
{
Success=true,
ErrorCode=0,
ErrorMessage="마킹 완료",
MarkedAt=DateTime.Now
MarkedAt=DateTime.Now,
DrawingNo=request.DrawingNo,
HkmcNo=request.HkmcNo,
QrString=request.QrString
};
}
else
{
System.Diagnostics.Debug.WriteLine("[EzdMarking] 마킹 기계 동작 에러 발생: "+markResult);
returnnewMarkingResult
{
Success=false,
ErrorCode=markResult,
ErrorMessage=string.Format("레이저 각인 하드웨어 동작 에러 (에러코드: {0})",markResult),
MarkedAt=DateTime.Now
};
_isInitialized=false;
_markingHandle=IntPtr.Zero;
_lastLoadedEzdPath=string.Empty;
returnnewMarkingResult{Success=false,ErrorCode=markResult,ErrorMessage=string.Format("레이저 각인 하드웨어 동작 에러 (에러코드: {0})",markResult),MarkedAt=DateTime.Now};
}
}
catch(Exceptionex)
{
System.Diagnostics.Debug.WriteLine("[EzdMarking] RequestMarking 실행 중 예외 발생: "+ex.Message);
returnnewMarkingResult
{
Success=false,
ErrorCode=-99,
ErrorMessage="마킹 처리 중 예외 발생: "+ex.Message,
MarkedAt=DateTime.Now
};
_isInitialized=false;
_markingHandle=IntPtr.Zero;
_lastLoadedEzdPath=string.Empty;
returnnewMarkingResult{Success=false,ErrorCode=-99,ErrorMessage="마킹 처리 중 예외 발생: "+ex.Message,MarkedAt=DateTime.Now};