Browse Source

도안 변경 적용

master
seuuung 1 week ago
parent
commit
dfa1ad9291
  1. BIN
      .vs/marking_gui.slnx/v18/.suo
  2. 17
      marking_gui/MainWindow.xaml.cs
  3. 24
      marking_gui/Manual/.obsidian/workspace.json
  4. 14
      marking_gui/Manual/01_시스템_개요.md
  5. 40
      marking_gui/Manual/02_초기_설정.md
  6. 101
      marking_gui/Manual/03_메인_화면.md
  7. 20
      marking_gui/Manual/04_통신_설정.md
  8. 25
      marking_gui/Manual/05_시험_설정.md
  9. 2
      marking_gui/Manual/06_데이터_조회.md
  10. 2
      marking_gui/Manual/07_시험_프로세스.md
  11. 2
      marking_gui/Manual/08_로그_관리.md
  12. 2
      marking_gui/Manual/09_오류_대응.md
  13. 602
      marking_gui/Manual/Manual_Merged.md
  14. 641
      marking_gui/Manual/Manual_for_pdf.html
  15. BIN
      marking_gui/Manual/Pasted image 20260728095417.png
  16. BIN
      marking_gui/Manual/Pasted image 20260728095455.png
  17. BIN
      marking_gui/Manual/Pasted image 20260728095535.png
  18. BIN
      marking_gui/Manual/Pasted image 20260728095555.png
  19. BIN
      marking_gui/Manual/Pasted image 20260728095618.png
  20. BIN
      marking_gui/Manual/Pasted image 20260728095624.png
  21. BIN
      marking_gui/Manual/Pasted image 20260728100308.png
  22. BIN
      marking_gui/Manual/Pasted image 20260728100343.png
  23. BIN
      marking_gui/Manual/Pasted image 20260728100354.png
  24. BIN
      marking_gui/Manual/Pasted image 20260728100404.png
  25. BIN
      marking_gui/Manual/Pasted image 20260728100413.png
  26. BIN
      marking_gui/Manual/Pasted image 20260728100445.png
  27. BIN
      marking_gui/Manual/Pasted image 20260728100748.png
  28. BIN
      marking_gui/Manual/Pasted image 20260728100828.png
  29. BIN
      marking_gui/Manual/Pasted image 20260728100846.png
  30. BIN
      marking_gui/Manual/Pasted image 20260728100910.png
  31. 7
      marking_gui/Manual/build_pdf.py
  32. 130
      marking_gui/Manual/pdf_style.css
  33. 88
      marking_gui/Manual/사용자_메뉴얼.md
  34. 34
      marking_gui/Services/DatabaseService.cs
  35. 38
      marking_gui/Services/EzdMarkingService.cs
  36. 30
      marking_gui/Services/MarkingConfigService.cs
  37. 12
      marking_gui/Setting.ini
  38. BIN
      사용자 메뉴얼.pdf

BIN
.vs/marking_gui.slnx/v18/.suo

Binary file not shown.

17
marking_gui/MainWindow.xaml.cs

@ -119,13 +119,10 @@ namespace marking_gui
// MainWindow의 실제 Win32 윈도우 핸들(HWND) 획득
IntPtr windowHandle = new System.Windows.Interop.WindowInteropHelper(this).Handle;
// Setting.ini 또는 EzCad 설정 폴더 경로 지정하여 디바이스 초기화 (1회 시도)
// Setting.ini 또는 EzCad 설정 폴더 경로 지정하여 디바이스 초기화 (메인 UI 스레드에서 직접 호출하여 HWND/C++ P/Invoke 호환성 보장)
string iniPath = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Setting.ini");
bool initResult = await System.Threading.Tasks.Task.Run(() =>
{
LoggerService.Info("마킹 디바이스 LMC 초기화 시도...");
return _markingService.Initialize(iniPath, windowHandle);
});
LoggerService.Info("마킹 디바이스 LMC 초기화 시도 (UI 스레드)...");
bool initResult = _markingService.Initialize(iniPath, windowHandle);
if (initResult)
{
@ -1535,7 +1532,7 @@ namespace marking_gui
{
Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
// 기본 파일 탐색 경로 설정: C:\EzCad\EasyCfg 폴더를 기본 탐색 경로로 지정
// 기본 파일 탐색 경로 설정: C:\EzCad\EasyCfg 폴더를 디폴트 경로로 지정
string initialDir = @"c:\EzCad\EasyCfg";
if (!System.IO.Directory.Exists(initialDir))
{
@ -1543,7 +1540,11 @@ namespace marking_gui
}
if (!System.IO.Directory.Exists(initialDir))
{
initialDir = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "EasyCfg");
initialDir = @"c:\EzCad";
}
if (!System.IO.Directory.Exists(initialDir))
{
initialDir = AppDomain.CurrentDomain.BaseDirectory;
}
if (System.IO.Directory.Exists(initialDir))
{

24
marking_gui/Manual/.obsidian/workspace.json

@ -13,12 +13,12 @@
"state": {
"type": "markdown",
"state": {
"file": "02_초기_설정.md",
"file": "07_시험_프로세스.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "02_초기_설정"
"title": "07_시험_프로세스"
}
}
]
@ -185,12 +185,28 @@
},
"active": "b98d55f22f4d8058",
"lastOpenFiles": [
"Manual_for_pdf.html",
"08_로그_관리.md",
"06_데이터_조회.md",
"07_시험_프로세스.md",
"09_오류_대응.md",
"사용자_메뉴얼.md",
"05_시험_설정.md",
"Pasted image 20260728100910.png",
"Pasted image 20260728100846.png",
"04_통신_설정.md",
"Pasted image 20260728100828.png",
"Pasted image 20260728100748.png",
"03_메인_화면.md",
"Pasted image 20260728100445.png",
"Pasted image 20260728100413.png",
"Pasted image 20260728100404.png",
"Pasted image 20260728100354.png",
"Pasted image 20260728100343.png",
"Pasted image 20260728100308.png",
"02_초기_설정.md",
"01_시스템_개요.md",
"06_데이터_조회.md"
"Manual.docx",
"build_docx.py",
"Manual_for_pdf.html"
]
}

14
marking_gui/Manual/01_시스템_개요.md

@ -17,8 +17,8 @@
| **일련번호(S/N) 자동 추출** | 센서 판독 보드를 통해 제품 안착 시 제품 내부 메모리로부터 일련번호를 추출합니다. |
| **선행 공정 검사 교차 조회** | 이전 단계(하우징 조립, 센서 보정, 1차 EOL 성능 검사)가 모두 합격 판정되었는지 생산 데이터베이스에서 조회합니다. |
| **자동 계측 시퀀스** | 전원 공급 장치와 전압/저항 측정 장비들과 연동하여 제품에 테스트 전원을 투입하고 전압, 저항, 전류 값을 차례대로 계측합니다. |
| **실제 저항값 측정** | 전압/저항 DMM 측정기를 통해 센서의 실제 저항값(Ω)을 측정합니다. |
| **전류 측정** | 전원 공급 장치(Power Supply)의 출력 채널 1을 통해 제품의 소모 전류를 계측합니다. |
| **실제 저항값 측정** | 전압/저항 DMM 측정기를 통해 센서의 실제 저항값(kΩ)을 측정합니다. |
| **전류 측정** | 전원 공급 장치(Power Supply)의 출력 채널 1을 통해 제품의 소모 전류(mA)를 계측합니다. |
| **레이저 각인 연동** | 성능 검사가 모두 통과된 합격품에 대해 제품 표면에 2D QR 코드 및 단축 일련번호(생산일자 + 순번)를 마킹합니다. |
| **결과 기록** | 계측 판정 규격(전압, 전류, 저항)과 마킹 성공 여부를 최종 판정하여 생산 데이터베이스에 저장합니다. |
@ -42,10 +42,9 @@
| 장비 | 역할 | 통신 방식 |
|------|------|-----------|
| **센서 판독 보드 (4251 보드)** | 제품 내부 칩의 일련번호(IC_SN)를 인식합니다. | RS-232 시리얼 통신 |
| **전압 및 저항 측정 장비 (DMM)** | 제품의 전압(V) 및 전기적 저항(Ω)을 측정합니다. (예: 192.168.1.100) | TCP/IP 네트워크 통신 |
| **전류 측정 및 전원 공급 장비 (PSU)** | 제품 구동을 위한 전원 공급 및 소모 전류(A)를 측정합니다. (예: 192.168.1.101) | TCP/IP 네트워크 통신 |
| **전압 및 저항 측정 장비 (DMM)** | 제품의 전압(V) 및 전기적 저항(kΩ)을 측정합니다. | TCP/IP 네트워크 통신 |
| **전류 측정 및 전원 공급 장비 (PSU)** | 제품 구동을 위한 전원 공급 및 소모 전류(mA)를 측정합니다. | TCP/IP 네트워크 통신 |
| **레이저 마킹기** | 2D QR 코드 및 텍스트 일련번호를 제품 표면에 인쇄합니다. | 마킹 제어 보드 연동 |
| *(전류 측정 DMM)* | *설정 파일(예: 192.168.1.102)에 존재하나 현재 제어 시퀀스에서는 사용하지 않습니다.* | *(미사용)* |
## 1.4 설치 경로(`C:\marking\`) 구조 및 생성 파일 역할
@ -56,12 +55,11 @@
| **실행 프로그램** | `marking_gui.exe` | 메인 성능 검사 및 레이저 마킹 GUI 제어 실행 파일 |
| **종속 라이브러리** | `marking_gui.dll`, `*.deps.json`, `*.runtimeconfig.json` | .NET 9.0 (WPF) 자립형 런타임 및 종속 구성 바이너리 |
| **통합 설정 파일** | `Setting.ini` | 마킹기 폴더 경로, 테스트 모드, 도안 태그 매핑, 계측기 LAN IP, SCPI 전원 커맨드, 계측 판정 규격 임계치(`[Limits]`) 종합 설정 파일 |
| **DB 설정 파일** | `Database.ini` | MS-SQL 데이터베이스 접속 주소, DB명, 사용자 계정/PW, 오프라인 모드(`OfflineMode=true`) 설정 파일 |
| **DB 설정 파일** | `Database.ini` | MS-SQL 데이터베이스 접속 주소, DB명, 사용자 계정/PW, 오프라인 모드(`OfflinePreview=true`) 및 로그인 프로시저 설정 파일 |
| **센서 설정 파일** | `Sensor.ini` | 4251 센서 통신 보드 시리얼 포트(`Port=COM3`), 통신 속도(`BaudRate=115200`), 통신 채널(`Channel=1`) 설정 파일 |
| **드라이버 폴더** | `libs/` | C++ LMC 각인 드라이버 격리 디렉터리 (`MarkEzdWrapper.dll`, `DataMgr.dll`, `MarkEzd.dll`, `haspms32.dll` 등) |
| **로그 저장 폴더** | `logs/` *(자동 생성)* | 시스템 운용 중 발생하는 일별 이벤트 로그, 통신 이력, 각인 성공/실패 기록 텍스트 저장 디렉터리 (예: `logs/2026-07-23.log`) |
| **백업 보관 폴더** | `publish_backup/` | 프로그램 업데이트 및 빌드 배포 시 이전 릴리즈 바이너리/설정 자동 백업 폴더 |
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

40
marking_gui/Manual/02_초기_설정.md

@ -55,36 +55,41 @@
EzdFolderPath=c:\EzCad\EasyCfg ; EZD 도안 파일 기본 탐색/저장 폴더 경로
test=false ; 테스트 마킹 버튼 및 개발 모드 노출 여부 (true/false)
[Equipment]
Timeout=5000 ; 계측기 통신 타임아웃 (ms)
SettleMilliseconds=2000 ; 테스트 전원 인가 후 측정 안정화 대기 시간 (ms)
[DMM]
VoltageHost=192.168.1.100 ; 전압/저항 측정용 계측기(DMM) IP 주소
VoltageHost=192.168.10.100 ; 전압(Voltage) 측정용 계측기 IP 주소(예시)
[CurrentDMM]
CurrentDMMHost=192.168.1.102 ; 전류 측정용 계측기(DMM) IP 주소
[ResistanceDMM]
ResistanceDMMHost=192.168.10.101 ; 저항(Resistance) 측정용 계측기 IP 주소(예시)
[PowerSupply]
CurrentHost=192.168.1.101 ; 전원 공급기(Power Supply) IP 주소
CurrentHost=192.168.10.102 ; 전원 공급기(Power Supply) 및 전류 측정 장치 IP 주소(예시)
[Limits]
MinVoltage=4.0 ; 전압 하한 판정 기준값 (V)
MaxVoltage=6.0 ; 전압 상한 판정 기준값 (V)
MinCurrent=8.0 ; 전류 하한 판정 기준값 (mA)
MaxCurrent=10.0 ; 전류 상한 판정 기준값 (mA)
MinResistance=0.4 ; 저항 하한 판정 기준값 (kΩ)
MaxResistance=0.8 ; 저항 상한 판정 기준값 (kΩ)
MinVoltage=1.00 ; 전압 하한 판정 기준값 (V)
MaxVoltage=6.00 ; 전압 상한 판정 기준값 (V)
MinCurrent=5.00 ; 전류 하한 판정 기준값 (mA)
MaxCurrent=10.00 ; 전류 상한 판정 기준값 (mA)
MinResistance=8.000 ; 저항 하한 판정 기준값 (kΩ)
MaxResistance=13.000 ; 저항 상한 판정 기준값 (kΩ)
```
#### 2) Database.ini (주요 변경 가능 설정)
DB 서버 접속 주소 및 점검용 오프라인 모드 변경 시 수정하는 항목입니다.
```ini
[Database]
Db_Server=192.168.1.200 ; MSSQL 데이터베이스 서버 IP 주소
Db_Name=MarkingDb ; 연결할 데이터베이스 이름
Db_User=db_user ; DB 접속 사용자 계정
Db_Password=db_password ; DB 접속 비밀번호
OfflineMode=False ; DB 미연결 점검 모드 (True: DB 저장 생략, False: 정상 검증/적재)
Db_Server=192.168.10.10, 1433 ; MSSQL 데이터베이스 서버 IP 주소 및 포트
Db_Name=NE1aW_PT_Sensor ; 연결할 데이터베이스 이름
Db_User=su ; DB 접속 사용자 계정
Db_Password=amotech821 ; DB 접속 비밀번호
[Login]
OfflinePreview=False ; 로그인 DB 검증 우회 여부 (True: 로그인 생략, False: 정상 검증)
Procedure=dbo.CheckOperator ; 작업자 로그인 검증용 저장 프로시저명
ProcessName=Marking ; 공정 구분 코드
OfflinePreview=false ; DB 연결 우회 오프라인 모드 (true: DB 생략, false: 실제 DB 검증)
```
#### 3) Sensor.ini (주요 변경 가능 설정)
@ -92,6 +97,7 @@ OfflinePreview=False ; 로그인 DB 검증 우회 여부 (True: 로
```ini
[Sensor]
Port=COM3 ; 바코드 스캐너 시리얼 포트 (장치 관리자 COM 포트 번호)
BaudRate=115200 ; 시리얼 통신 속도 (기본값: 115200)
Channel=1 ; 통신 채널 번호 (1 또는 2)
```
@ -112,6 +118,4 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
- 프로그램 실행 후 작업자 계정으로 로그인을 시도합니다.
- 로그인이 완료되면 전원 공급 장치의 상시전원 채널 전원 램프가 자동으로 켜지는지 확인합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

101
marking_gui/Manual/03_메인_화면.md

@ -6,58 +6,69 @@
## 3.1 메인 화면 레이아웃 구성
본 프로그램은 작업자가 화면 구성 및 각 항목 상태를 파악할 수 있도록 4개의 카드 레이아웃으로 화면을 구성했습니다.
본 프로그램은 작업자가 전체 검사 및 마킹 진행 상황을 직관적으로 파악할 수 있도록 역할별 카드 레이아웃으로 화면을 구성했습니다.
### 3.1.1 상단 헤더 영역 (Header Bar)
프로그램 최상단 영역에는 시스템 정보 배지와 제어 버튼이 배치되어 있습니다.
* **실시간 시계**: 좌측 상단에 날짜와 시간이 표시됩니다.
프로그램 최상단 영역에는 시스템 로고, 실시간 시계, 작업 정보 배지 및 시스템 제어 버튼이 배치되어 있습니다.
* **시스템 로고 및 버젼**: 좌측 상단에 `Marking v1.0.0` 시스템 명칭이 배치되어 있습니다.
* **실시간 시계**: 로고 우측에 현재 날짜와 시간(`YYYY-MM-DD HH:mm:ss`)이 실시간으로 표시됩니다.
* **작업 정보 배지**:
* **공정 라인**: 로그인 단계에서 지정한 생산 라인 코드 (`Line No`)
* **로트 번호**: 로그인 단계에서 지정한 생산 로트 번호 (`Lot No`)
* **모델명**: 현재 가동 중인 제품의 사양 모델 (`Model`)
* **작업자**: 로그인한 작업자의 이름 (`Operator`)
* **제어 버튼**: 우측 상단에 `로그아웃` 버튼이 위치하며 최하단 바에 설정 관련 버튼이 배치됩니다.
* **작업자**: 로그인한 작업자의 이름 또는 계정 ID (`Operator`)
* **모델**: 현재 적용 중인 레이저 각인 도안 모델명 (`Model`)
* **라인**: 로그인 단계에서 지정한 생산 라인 코드 (`Line No`)
* **제어 버튼**: 우측 상단에 `로그아웃` 버튼과 윈도우 창 제어(최소화, 창 모드, 프로그램 종료) 버튼이 위치합니다.
![[Pasted image 20260728100308.png]]
---
## 3.2 상태 및 제어 카드 영역
화면 중앙에는 역할을 구분한 4개의 상태 카드가 배치되어 있어, 제품 상태와 계측 단계를 모니터링할 수 있습니다.
### 3.2.1 [카드 1] 제품 정보 및 이전 결과 (좌측 상단)
제품의 일련번호와 이전 생산 공정에서의 합격 이력을 대조하는 영역입니다.
* **작업 모델 설정**:
- `파일 선택` 버튼을 사용하여 각인용 도면 파일을 불러옵니다.
- 도면 파일 선택이 완료되면 상단 헤더 영역의 모델명(Model) 배지 텍스트가 선택한 도면명으로 자동 변경됩니다.
* **일련번호 (IC_SN)**: 제품이 안착되면 센서 판독기를 통해 자동으로 인식되어 표시됩니다. (읽기 전용)
* **이전 공정 이력 배지**:
* **Housing**: 하우징 조립 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* **Calibration**: 압력 보정 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* **EOL**: EOL 1차 성능 평가 판정 상태 (`PASS` / `FAIL` / `대기`)
* *주의: 이전 공정 이력 배지 중 하나라도 `FAIL` 상태인 경우 성능 검사를 시작할 수 없습니다.*
### 3.2.2 [카드 2] 측정 결과 (우측 상단)
현재 장비에서 실제 계측한 3대 전기 파라미터(전압, 전류, 저항) 수치와 설정된 기준 규격 범위를 표시하는 영역입니다.
* **측정 전압 (Voltage)**: 전압 측정 장치가 측정한 전압 수치 (**V** 단위)
* **측정 전류 (Current)**: 전원 공급 장치가 측정한 소모 전류 수치 (**mA** 단위)
* **측정 저항 (Resistance)**: 저항 측정 장치가 측정한 전기적 저항 수치 (**kΩ** 단위)
* *알림: 각 물리량의 하단에는 현재 적용 중인 기준 규격 범위가 문구(`기준범위: X ~ Y`)로 표출되며, 실측값이 규격 범위 내에 도달하면 카드 테두리가 **초록색(PASS)**으로 표시되고, 범위를 벗어나면 테두리가 **빨간색(FAIL)**으로 바뀝니다.*
### 3.2.3 [카드 3] 진행상황 (좌측 하단)
현재 설비가 수행하고 있는 단계별 자동 제어 시퀀스를 보여주는 안내 창입니다.
* "대기 상태", "제품 정보 수집 중...", "이전 공정 검사 결과 조회 중...", "측정 계측기 데이터 수집 중...", "제품 합격 - 레이저 각인 중..." 등 작동 상태를 실시간 텍스트로 표출합니다.
### 3.2.4 [카드 4] 판정결과 (우측 하단)
제품의 최종 합격(PASS) 및 불합격(FAIL) 상태를 표시합니다.
* 계측 검사와 데이터 저장, 레이저 각인이 완료되었을 때 최종 합격인 경우 카드 배경이 **초록색(PASS)**으로 전환되며, 불합격인 경우 카드 배경이 **빨간색(FAIL)**으로 변경됩니다.
### 3.2.5 최하단 제어 영역 (Control Box)
* **검사 시작 (START)**: 전체 검사 시퀀스를 기동하는 메인 버튼입니다. 이 버튼을 누르면 이전 계측 수치들이 초기화되고 새로운 측정 프로세스가 개시됩니다.
* **강제 검사 (스킵)**: 이전 가공 공정의 합격 이력이 없더라도 검증 단계를 건너뛰고 성능 계측 및 각인 시퀀스를 기동하는 버튼입니다.
* **테스트 마킹**: 성능 계측 없이 즉시 각인기에 테스트 마킹 신호를 전송하는 버튼입니다.
* *참고: `강제 검사 (스킵)``테스트 마킹` 버튼은 환경 설정에서 테스트 모드가 활성화된 상태에서만 화면 하단에 노출됩니다.*
화면 중앙은 효율적인 검사 구성을 위해 **좌측 패널**과 **우측 패널**로 구분되어 있습니다.
### 3.2.1 [카드 1] 작업 모델 설정 & IC_SN 및 각인 정보 (좌측 상단)
제품의 일련번호와 실시간 각인 정보를 확인하고 레이저 마킹 도면을 관리하는 영역입니다.
* **작업 모델 설정 (EZD 파일)**:
- `📁 파일 선택` 버튼을 통해 제품 각인용 도면 파일(.ezd)을 불러올 수 있습니다.
- 도면 파일 선택 시 상단 헤더 영역의 모델(`Model`) 배지 텍스트가 선택한 도면명으로 자동 반영됩니다.
* **일련번호 (IC_SN)**: 4251 센서 판독기를 통해 읽어온 제품 내부 칩의 고유 일련번호가 표시됩니다. (읽기 전용)
* **실시간 각인 정보 패널**:
- **현재 Lot No**: 로그인 시 설정된 생산 로트 번호 (`Lot No`)
- **다음 각인 순번**: 당일 해당 로트에서 각인될 제품의 차례 순번 (`예: 0001 차례`)
![[Pasted image 20260728100343.png]]
### 3.2.2 [카드 2] 이전 시험 단계 결과 (좌측 하단)
생산 데이터베이스(MS-SQL)를 조회하여 선행 공정의 합격 여부를 판정하는 카드입니다.
* **1. Housing**: 하우징 조립 공정 검사 판정 상태 (`PASS` / `FAIL` / `대기`)
* **2. Calibration**: 센서 압력 보정 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* **3. EOL**: EOL 1차 성능 평가 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* *주의: 이전 공정 이력 중 하나라도 `FAIL` 상태이거나 이력이 없는 경우 메인 성능 검사를 시작할 수 없습니다. (강제 검사 스킵 버튼 미사용 시)*
![[Pasted image 20260728100354.png]]
### 3.2.3 [카드 3] 측정 데이터 수치 카드 (우측 상단)
실제 계측기를 통해 수집된 3대 전기 파라미터 수치와 설정된 규격 범위를 표시하는 3열 구조의 카드입니다.
* **측정 전압 (Voltage)**: DMM 계측 장비가 측정한 실측 전압 수치 (**V** 단위, 기본 기준범위: `0.0V ~ 0.5V`)
* **측정 전류 (Current)**: Power Supply 전원공급 장치가 측정한 소모 전류 수치 (**mA** 단위, 기본 기준범위: `8.00mA ~ 10.00mA`)
* **측정 저항 (Resistance)**: DMM 측정 장비가 측정한 전기적 저항 수치 (**kΩ** 단위, 기본 기준범위: `0.400kΩ ~ 0.800kΩ`)
* *알림: 각 수치 카드 하단에는 설정 파일(`Setting.ini`)에서 지정한 임계 규격 범위가 표시되며, 실측값이 범위 내에 들어오면 카드 테두리가 **초록색(PASS)**으로, 범위를 벗어나면 **빨간색(FAIL)**으로 자동 전환됩니다.*
![[Pasted image 20260728100404.png]]
### 3.2.4 [카드 4] 최종 판정 및 종합 상태 영역 (우측 하단)
진행 상황 및 최종 판정 결과를 통합 표시하는 영역입니다.
* **💬 진행 상황 뱃지**: "대기 상태", "제품 정보 수집 중...", "측정 계측기 데이터 수집 중...", "제품 합격 - 레이저 각인 중..." 등 설비 시퀀스 동작을 실시간 텍스트로 표출합니다.
* **세부 정보 그리드**:
- **검사 시간 정보**: 전체 시퀀스 기동 시작 시간 및 종료 시간 표출
- **일련번호 정보**: IC S/N, PCB 바코드, 실제 각인 완료 번호 표출
- **최종 판정결과**: 최종 **PASS** (초록색) / **FAIL** (빨간색) 대형 배지 표출
- **시스템 상태**: 통신 및 디바이스 가동 상태 또는 에러 메시지 배너 표출
![[Pasted image 20260728100413.png]]
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
## 3.3 하단 제어 영역 (Control Box & Footer)
* **▶ 검사 시작 (START) 버튼**: 화면 하단에 위치한 대형 버튼으로, 전체 계측 및 각인 시퀀스를 개시합니다.
* **최하단 버튼 그룹**:
* **파라미터 설정**: 계측 임계 규격치 및 마킹 파라미터 설정 창을 호출합니다.
* **포트 설정**: 센서 통신 보드의 시리얼 COM 포트 및 채널 설정 창을 호출합니다.
* **강제 검사 (스킵)**: 이전 공정 이력이 없어도 검증을 건너뛰고 계측 및 마킹을 수행합니다.
* **테스트 마킹**: 계측 과정 없이 레이저 각인 장비 동작을 테스트합니다.
* *참고: `강제 검사 (스킵)``테스트 마킹` 버튼은 설정 파일(`Setting.ini`)에서 `TestMode=true`로 활성화된 경우에만 화면에 노출됩니다.*
![[Pasted image 20260728100445.png]]

20
marking_gui/Manual/04_통신_설정.md

@ -6,22 +6,22 @@
## 4.1 포트 설정 화면 사용법
프로그램 상단의 `통신 설정` 버튼을 클릭하면 포트 설정 대화 상자가 나타납니다. 이 대화 상자에서 센서 판독 장치(4251 보드)의 연결 포트 및 채널을 설정할 수 있습니다.
메인 화면 최하단 바의 `포트 설정` 버튼을 클릭하면 포트 설정 대화 상자가 나타납니다. 이 대화 상자에서 센서 판독 장치(4251 보드)의 연결 포트, 통신 속도 및 채널을 설정할 수 있습니다.
![[Pasted image 20260728100828.png]]
### 주요 설정 항목 및 설명
1. **통신 포트 (Port)**:
- 센서 판독기가 연결되어 있는 PC의 연결 포트를 선택합니다. (예: `COM1`, `COM3`, `COM4` 등)
- 현재 PC에 인식되어 있는 포트 목록이 자동으로 표시됩니다.
- 센서 판독기가 연결되어 있는 PC의 시리얼 포트를 선택합니다. (예: `COM1`, `COM3`, `COM4` 등)
- 현재 PC 장치 관리자에 인식되어 있는 유효한 COM 포트 목록이 자동으로 조회되어 드롭다운에 추가됩니다.
2. **통신 속도 (BaudRate)**:
- 센서 판독 장치와의 데이터 송수신 속도를 설정합니다.
- 기본 설정값은 **`115200`** 이며, 특수한 경우가 아니면 변경하지 않는 것을 권장합니다.
- 센서 판독 장치와의 시리얼 송수신 속도(Baud Rate)를 설정합니다. (옵션: `9600`, `19200`, `38400`, `57600`, `115200`)
- 4251 센서 보드 통신의 기본 규격 설정값은 **`115200`** 니다.
3. **통신 채널 (Channel)**:
- 센서 판독기 내부의 연결 채널을 결정합니다.
- 드롭다운 메뉴를 통해 **`CH1`** 또는 **`CH2`**를 선택할 수 있습니다.
- 선택된 채널에 따라 센서 인식 모드가 변경됩니다.
- 센서 판독기 내부의 연동 채널 번호를 결정합니다.
- 드롭다운 메뉴를 통해 **`1`** 또는 **`2`** 채널을 선택할 수 있습니다.
- 선택된 채널 및 포트 정보는 `Sensor.ini` 파일에 저장됩니다.
---
@ -32,6 +32,4 @@
- 저장 시 기존 센서 연결을 해제하고 새로운 설정값으로 센서 인식 서비스를 다시 시작합니다. 프로그램을 재시작할 필요 없이 변경 사항이 즉시 적용됩니다.
- 저장하지 않고 창을 닫으려면 `취소` 버튼을 누릅니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

25
marking_gui/Manual/05_시험_설정.md

@ -6,21 +6,18 @@
## 5.1 판정 기준 설정
프로그램 상단 우측의 `시험 설정` 버튼을 클릭하면 판정 기준을 구성하는 대화 상자가 나타납니다. 이 화면에서 제품 합불 판정에 사용되는 전압, 전류, 저항의 기준값을 입력할 수 있습니다.
메인 화면 최하단 바의 `파라미터 설정` 버튼을 클릭하면 기준 범위 설정 대화 상자가 나타납니다. 이 화면에서 제품 합불 판정에 사용되는 전압, 전류, 저항의 규격 임계 범위를 수동으로 변경할 수 있습니다.
![[Pasted image 20260728100846.png]]
### 5.1.1 각 항목별 한계치 입력 가이드
* **전압 판정 범위**:
* **하한값**: 합격 전압 하한 규격 (V 단위)
* **상한값**: 합격 전압 상한 규격 (V 단위)
* **전류 판정 범위**:
* **하한값**: 합격 전류 하한 규격 (설정창 표기 단위 참조, 기본 mA/A)
* **상한값**: 합격 전류 상한 규격 (설정창 표기 단위 참조, 기본 mA/A)
* **저항 판정 범위**:
* **하한값**: 합격 저항 하한 규격 (설정창 표기 단위 참조, 기본 Ω/kΩ)
* **상한값**: 합격 저항 상한 규격 (설정창 표기 단위 참조, 기본 Ω/kΩ)
* **전압 (V)**:
* **하한값 ~ 상한값**: 합격 전압 하한 규격 ~ 상한 규격 (V 단위, 기본 예: `1.00V ~ 6.00V`)
* **전류 (A / mA)**:
* **하한값 ~ 상한값**: 합격 소모 전류 하한 규격 ~ 상한 규격 (설정창 단위 V/A/mA, 기본 예: `5.00mA ~ 10.00mA`)
* **저항 (Ω / kΩ)**:
* **하한값 ~ 상한값**: 합격 전기적 저항 하한 규격 ~ 상한 규격 (기본 예: `8.000kΩ ~ 13.000kΩ`)
*참고: 저장 버튼을 클릭하면 메인 화면의 하단 가이드 문구(`기준범위: X ~ Y`)가 즉시 갱신되어 새로 입력한 한계치가 다음 검사 시퀀스부터 반영됩니다.*
*참고: 저장 버튼을 클릭하면 메인 화면의 수치 카드 하단 가이드 문구(`기준범위: X ~ Y`)가 즉시 갱신되어 새로 입력한 한계치가 다음 검사 시퀀스부터 반영되며, `Setting.ini` 파일의 `[Limits]` 섹션에 자동 저장됩니다.*
---
@ -31,7 +28,7 @@
* 도면이 선택되면 상단 헤더 배지의 모델명 정보도 해당 도면 파일명으로 자동으로 변경됩니다.
* **유의 사항**:
* 지정해 놓은 도면 파일이 실제 경로에 존재하지 않는 경우, 계측 성능 검사가 합격하더라도 각인 단계에서 에러가 납니다. 검사 전 파일 경로 상태를 확인하십시오.
![[Pasted image 20260728100910.png]]
---
## 5.3 설정 저장 및 적용
@ -39,6 +36,4 @@
* 설정 창의 `저장` 버튼을 클릭하면 변경된 파라미터가 시스템 설정에 저장됩니다.
* 저장 완료 즉시 **메인 화면 하단에 표시되는 판정 기준 가이드 텍스트**가 업데이트되며, 이후에 새로 시작하는 성능 검사 시퀀스부터 새로운 규격치가 적용됩니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

2
marking_gui/Manual/06_데이터_조회.md

@ -48,6 +48,4 @@
- **임시 일련번호 생성**: 일련번호가 비어 있는 상태에서 테스트를 개시하는 경우 현재 시간 기반의 임시 일련번호가 자동으로 부여되어 진행합니다.
- **각인 모사**: 실제 각인기에 데이터를 전송하는 단계를 가상 성공 처리하여 전체 흐름을 테스트합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

2
marking_gui/Manual/07_시험_프로세스.md

@ -70,6 +70,4 @@ graph TD
* 합격 판정과 동시에 레이저 마킹기에 각인 데이터가 전달되어 2D QR 코드 및 제품 일련번호 각인이 자동으로 실행됩니다.
* 마킹 완료 기록과 계측 수치는 최종 PASS 상태로 데이터베이스에 저장됩니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

2
marking_gui/Manual/08_로그_관리.md

@ -34,6 +34,4 @@
4. **레이저 마킹 도면 파일 백업**:
* 제품 표면에 각인할 마킹 도면 파일입니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

2
marking_gui/Manual/09_오류_대응.md

@ -54,6 +54,4 @@
* **프로그램 완전 종료**:
- 화면 우측 상단의 `닫기(X)` 버튼을 눌러 프로그램을 최종 종료할 때도, 자동으로 상시전원 차단 명령을 장비에 인계한 뒤 레이저 각인 드라이버 리소스를 닫고 메모리를 환원합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

602
marking_gui/Manual/Manual_Merged.md

@ -167,18 +167,21 @@ pre code {
white-space: inherit;
}
/* 이미지 스타일 */
img {
max-width: 100%;
max-height: 100mm; /* A4 높이의 약 절반 이하로 제한 */
/* 이미지 스타일 (스크린샷 크기 조절) */
img, .img-screenshot {
max-width: 65%;
max-height: 70mm; /* A4 용지 및 화면 출력 시 적당한 크기로 한정 */
display: block;
margin: 15px auto;
margin: 16px auto;
object-fit: contain;
page-break-inside: avoid;
border: 1px solid #e1e4e8;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
border: 1px solid #d1d5db;
border-radius: 6px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
/* 페이지 나누기 요소 */
.page-break {
page-break-before: always !important;
@ -213,31 +216,362 @@ a:hover {
margin-right: 4px;
}
</style>
/* ==========================================
표지 (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;
}
# Performance Inspect & Laser Marking System - 사용자 메뉴얼
.cover-header {
margin-top: 20px;
}
> **버전**: 1.0.0 | **최종 수정**: 2026-07-14
.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;
}
본 메뉴얼은 각 주제별로 별도 문서로 구성되어 있습니다. 아래 링크를 클릭하여 해당 문서로 이동하세요.
| 번호 | 문서 | 설명 |
|------|------|------|
| 1 | [시스템 개요 및 요구사항](#1-시스템-개요-및-요구사항) | 프로그램 소개, 주요 기능, 하드웨어/소프트웨어 요구사항, 장비 구성 |
| 2 | [초기 설정 가이드](#2-초기-설정-가이드) | 설정 파일의 구성 요소 안내 및 최초 장비 가동 시 점검 순서 |
| 3 | [메인 화면 (Home View)](#3-메인-화면-home-view) | 상단 정보 표시, 제품 정보 카드, 검사 결과 화면, 진행 상황 확인 및 버튼 제어 가이드 |
| 4 | [통신 설정 (Comm. Settings)](#4-통신-설정-comm-settings) | 4251 센서 통신 채널 설정 및 PC 통신 포트 연동 방법 |
| 5 | [시험 설정 (Parameters)](#5-시험-설정-parameters) | 제품 규격치(전압, 전류, 저항 범위) 및 레이저 마킹 도면 파일 연동 |
| 6 | [측정 데이터 조회 (Data View)](#6-측정-데이터-조회-및-데이터베이스-연동) | 생산 데이터베이스를 통한 이전 공정 이력 자동 조회 및 최종 결과 저장 원리 |
| 7 | [자동 시험 프로세스](#7-자동-시험-프로세스-및-14단계-시퀀스) | 자동 계측 시퀀스 기동, 마킹 수행 및 최종 합격 판정 흐름 |
| 8 | [로그 및 데이터 관리](#8-로그-및-데이터-관리) | 시스템 로그 파일 확인 방법 및 장비 설정 파일 백업 방법 |
| 9 | [오류 대응 및 프로그램 종료](#9-오류-대응-및-프로그램-종료) | 센서 통신 오류, DB 조회 에러, 마킹 불량 등 현장 장애 대응 및 안전한 프로그램 종료 방법 |
/* ==========================================
점선 리더 목차 (Dot Leader TOC) 스타일
========================================== */
.toc-container {
padding: 10px 0;
}
---
.toc-heading {
font-size: 22pt !important;
font-weight: 700 !important;
color: #111827 !important;
border-bottom: 2px solid #007acc !important;
padding-bottom: 8px !important;
margin-bottom: 28px !important;
}
.toc-list {
display: flex;
flex-direction: column;
gap: 10px;
}
.toc-item {
display: flex;
align-items: baseline;
font-size: 11pt;
line-height: 1.5;
margin-top: 6px;
}
.toc-sub-item {
display: flex;
align-items: baseline;
font-size: 9.5pt;
line-height: 1.4;
padding-left: 18px;
}
.toc-sub2-item {
display: flex;
align-items: baseline;
font-size: 9pt;
line-height: 1.3;
padding-left: 36px;
color: #6b7280;
}
.toc-title {
font-weight: 600;
color: #1f2937;
white-space: nowrap;
padding-right: 6px;
}
.toc-sub-item .toc-title {
font-weight: 500;
color: #374151;
}
.toc-sub2-item .toc-title {
font-weight: 400;
color: #4b5563;
}
.toc-title a {
color: #1f2937 !important;
text-decoration: none !important;
}
.toc-sub-item .toc-title a {
color: #374151 !important;
}
.toc-sub2-item .toc-title a {
color: #4b5563 !important;
}
.toc-title a:hover {
color: #007acc !important;
}
.toc-leader {
flex-grow: 1;
border-bottom: 1.5px dotted #9ca3af;
margin: 0 4px;
position: relative;
top: -4px;
}
.toc-sub-item .toc-leader {
border-bottom: 1px dotted #cbd5e1;
}
.toc-sub2-item .toc-leader {
border-bottom: 1px dotted #e2e8f0;
}
.toc-page {
font-weight: 700;
color: #374151;
padding-left: 6px;
white-space: nowrap;
}
.toc-sub-item .toc-page {
font-weight: 600;
color: #4b5563;
}
.toc-sub2-item .toc-page {
font-weight: 400;
color: #6b7280;
}
</style>
<div class="toc-container">
<h1 class="toc-heading">목차</h1>
<div class="toc-list">
<div class="toc-item">
<span class="toc-title"><a href="#빠른-시작-가이드-quick-start">빠른 시작 가이드 (Quick Start)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">2</span>
</div>
<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-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#11-시스템-개요">1.1 시스템 개요</a></span>
<span class="toc-leader"></span>
<span class="toc-page">3</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#12-소프트웨어-요구사항">1.2 소프트웨어 요구사항</a></span>
<span class="toc-leader"></span>
<span class="toc-page">3</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#13-하드웨어-요구사항">1.3 하드웨어 요구사항</a></span>
<span class="toc-leader"></span>
<span class="toc-page">4</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#14-설치-경로-및-파일-배치-구조">1.4 설치 경로 및 파일 배치 구조</a></span>
<span class="toc-leader"></span>
<span class="toc-page">4</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-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#21-프로그램-설정-구성-개요">2.1 프로그램 설정 구성 개요</a></span>
<span class="toc-leader"></span>
<span class="toc-page">5</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#22-메인-설정-settingini-세부-규격">2.2 메인 설정 (Setting.ini) 세부 규격</a></span>
<span class="toc-leader"></span>
<span class="toc-page">6</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#23-데이터베이스-설정-databaseini">2.3 데이터베이스 설정 (Database.ini)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">7</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#24-센서-통신-설정-sensorini">2.4 센서 통신 설정 (Sensor.ini)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">7</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">8</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="03_메인_화면.md#31-메인-화면-레이아웃-구성">3.1 메인 화면 레이아웃 구성</a></span>
<span class="toc-leader"></span>
<span class="toc-page">8</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="03_메인_화면.md#32-상태-및-제어-카드-영역">3.2 상태 및 제어 카드 영역</a></span>
<span class="toc-leader"></span>
<span class="toc-page">8</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="03_메인_화면.md#33-하단-제어-영역">3.3 하단 제어 영역 (Control Box & Footer)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">10</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">11</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="04_통신_설정.md#41-포트-설정-화면-사용법">4.1 포트 설정 화면 사용법</a></span>
<span class="toc-leader"></span>
<span class="toc-page">11</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="04_통신_설정.md#42-설정-저장">4.2 설정 저장</a></span>
<span class="toc-leader"></span>
<span class="toc-page">11</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">12</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="05_시험_설정.md#51-판정-기준-설정">5.1 판정 기준 설정</a></span>
<span class="toc-leader"></span>
<span class="toc-page">12</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="05_시험_설정.md#52-레이저-각인-도면-지정">5.2 레이저 각인 도면 지정</a></span>
<span class="toc-leader"></span>
<span class="toc-page">13</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="05_시험_설정.md#53-설정-저장-및-적용">5.3 설정 저장 및 적용</a></span>
<span class="toc-leader"></span>
<span class="toc-page">13</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#6-측정-데이터-조회-및-데이터베이스-연동">6. 측정 데이터 조회 (Data View)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">14</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="06_데이터_조회.md#61-선행-공정-결과-조회">6.1 선행 공정 결과 조회 (이력 확인)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">14</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="06_데이터_조회.md#62-검사-결과-자동-적재-및-최종-판정-기록">6.2 검사 결과 자동 적재 및 최종 판정 기록</a></span>
<span class="toc-leader"></span>
<span class="toc-page">15</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="06_데이터_조회.md#63-오프라인-모드-운용">6.3 오프라인 모드 운용</a></span>
<span class="toc-leader"></span>
<span class="toc-page">15</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#7-자동-시험-프로세스-및-14단계-시퀀스">7. 자동 시험 프로세스</a></span>
<span class="toc-leader"></span>
<span class="toc-page">16</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="07_시험_프로세스.md#71-자동-시험-및-마킹-프로세스-개요">7.1 자동 시험 및 마킹 프로세스 개요</a></span>
<span class="toc-leader"></span>
<span class="toc-page">16</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="07_시험_프로세스.md#72-상세-15단계-자동-제어-시퀀스">7.2 상세 15단계 자동 제어 시퀀스</a></span>
<span class="toc-leader"></span>
<span class="toc-page">16</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="07_시험_프로세스.md#73-최종-판정-및-마킹-실행-조건">7.3 최종 판정 및 마킹 실행 조건</a></span>
<span class="toc-leader"></span>
<span class="toc-page">17</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">18</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="08_로그_관리.md#81-시스템-로그-수집-및-관리">8.1 시스템 로그 수집 및 관리</a></span>
<span class="toc-leader"></span>
<span class="toc-page">18</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="08_로그_관리.md#82-장비-교체-및-프로그램-백업-방법">8.2 장비 교체 및 프로그램 백업 방법</a></span>
<span class="toc-leader"></span>
<span class="toc-page">18</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">19</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="09_오류_대응.md#91-현장-장애-유형별-점검-및-예외-조치-요령">9.1 현장 장애 유형별 점검 및 예외 조치 요령</a></span>
<span class="toc-leader"></span>
<span class="toc-page">19</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="09_오류_대응.md#92-프로그램-정상-종료-및-전원-자동-차단-규칙">9.2 프로그램 정상 종료 및 전원 자동 차단 규칙</a></span>
<span class="toc-leader"></span>
<span class="toc-page">20</span>
</div>
</div>
</div>
<div class="page-break"></div>
## 빠른 시작 가이드 (Quick Start)
@ -249,17 +583,13 @@ a:hover {
- 계측 장비들과 제어용 PC 간의 네트워크(LAN)선 및 센서 리더용 시리얼 포트 케이블 연결을 확인합니다.
3. **프로그램 실행 및 로그인**
- 바탕화면의 `Marking System` (`marking_gui`) 프로그램을 실행한 뒤, 작업자 계정 정보를 입력하여 로그인합니다. (데이터베이스 점검 중인 경우 설정 파일을 통해 오프라인 모드로의 진입이 가능합니다.)
3. **통신 상태 확인 및 채널 설정**
4. **통신 상태 확인 및 채널 설정**
- 우측 상단의 `통신 설정` 메뉴에서 센서가 올바른 포트와 채널에 연결되었는지 확인합니다.
4. **검사 규격값 검증**
5. **검사 규격값 검증**
- 우측 상단의 `시험 설정` 메뉴를 열고, 전압/전류/저항 검사 기준치와 각인 템플릿 도면 파일의 경로가 올바른지 점검합니다.
5. **성능 검사 및 마킹 시작**
6. **성능 검사 및 마킹 시작**
- 안착 지그에 제품을 바르게 장착한 뒤 메인 화면 하단의 `검사 시작 (START)` 버튼을 눌러 계측 및 마킹을 수행합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -281,8 +611,8 @@ a:hover {
| **일련번호(S/N) 자동 추출** | 센서 판독 보드를 통해 제품 안착 시 제품 내부 메모리로부터 일련번호를 추출합니다. |
| **선행 공정 검사 교차 조회** | 이전 단계(하우징 조립, 센서 보정, 1차 EOL 성능 검사)가 모두 합격 판정되었는지 생산 데이터베이스에서 조회합니다. |
| **자동 계측 시퀀스** | 전원 공급 장치와 전압/저항 측정 장비들과 연동하여 제품에 테스트 전원을 투입하고 전압, 저항, 전류 값을 차례대로 계측합니다. |
| **실제 저항값 측정** | 전압/저항 DMM 측정기를 통해 센서의 실제 저항값(Ω)을 측정합니다. |
| **전류 측정** | 전원 공급 장치(Power Supply)의 출력 채널 1을 통해 제품의 소모 전류를 계측합니다. |
| **실제 저항값 측정** | 전압/저항 DMM 측정기를 통해 센서의 실제 저항값(kΩ)을 측정합니다. |
| **전류 측정** | 전원 공급 장치(Power Supply)의 출력 채널 1을 통해 제품의 소모 전류(mA)를 계측합니다. |
| **레이저 각인 연동** | 성능 검사가 모두 통과된 합격품에 대해 제품 표면에 2D QR 코드 및 단축 일련번호(생산일자 + 순번)를 마킹합니다. |
| **결과 기록** | 계측 판정 규격(전압, 전류, 저항)과 마킹 성공 여부를 최종 판정하여 생산 데이터베이스에 저장합니다. |
@ -306,10 +636,9 @@ a:hover {
| 장비 | 역할 | 통신 방식 |
|------|------|-----------|
| **센서 판독 보드 (4251 보드)** | 제품 내부 칩의 일련번호(IC_SN)를 인식합니다. | RS-232 시리얼 통신 |
| **전압 및 저항 측정 장비 (DMM)** | 제품의 전압(V) 및 전기적 저항(Ω)을 측정합니다. (예: 192.168.1.100) | TCP/IP 네트워크 통신 |
| **전류 측정 및 전원 공급 장비 (PSU)** | 제품 구동을 위한 전원 공급 및 소모 전류(A)를 측정합니다. (예: 192.168.1.101) | TCP/IP 네트워크 통신 |
| **전압 및 저항 측정 장비 (DMM)** | 제품의 전압(V) 및 전기적 저항(kΩ)을 측정합니다. | TCP/IP 네트워크 통신 |
| **전류 측정 및 전원 공급 장비 (PSU)** | 제품 구동을 위한 전원 공급 및 소모 전류(mA)를 측정합니다. | TCP/IP 네트워크 통신 |
| **레이저 마킹기** | 2D QR 코드 및 텍스트 일련번호를 제품 표면에 인쇄합니다. | 마킹 제어 보드 연동 |
| *(전류 측정 DMM)* | *설정 파일(예: 192.168.1.102)에 존재하나 현재 제어 시퀀스에서는 사용하지 않습니다.* | *(미사용)* |
## 1.4 설치 경로(`C:\marking\`) 구조 및 생성 파일 역할
@ -320,15 +649,14 @@ a:hover {
| **실행 프로그램** | `marking_gui.exe` | 메인 성능 검사 및 레이저 마킹 GUI 제어 실행 파일 |
| **종속 라이브러리** | `marking_gui.dll`, `*.deps.json`, `*.runtimeconfig.json` | .NET 9.0 (WPF) 자립형 런타임 및 종속 구성 바이너리 |
| **통합 설정 파일** | `Setting.ini` | 마킹기 폴더 경로, 테스트 모드, 도안 태그 매핑, 계측기 LAN IP, SCPI 전원 커맨드, 계측 판정 규격 임계치(`[Limits]`) 종합 설정 파일 |
| **DB 설정 파일** | `Database.ini` | MS-SQL 데이터베이스 접속 주소, DB명, 사용자 계정/PW, 오프라인 모드(`OfflineMode=true`) 설정 파일 |
| **DB 설정 파일** | `Database.ini` | MS-SQL 데이터베이스 접속 주소, DB명, 사용자 계정/PW, 오프라인 모드(`OfflinePreview=true`) 및 로그인 프로시저 설정 파일 |
| **센서 설정 파일** | `Sensor.ini` | 4251 센서 통신 보드 시리얼 포트(`Port=COM3`), 통신 속도(`BaudRate=115200`), 통신 채널(`Channel=1`) 설정 파일 |
| **드라이버 폴더** | `libs/` | C++ LMC 각인 드라이버 격리 디렉터리 (`MarkEzdWrapper.dll`, `DataMgr.dll`, `MarkEzd.dll`, `haspms32.dll` 등) |
| **로그 저장 폴더** | `logs/` *(자동 생성)* | 시스템 운용 중 발생하는 일별 이벤트 로그, 통신 이력, 각인 성공/실패 기록 텍스트 저장 디렉터리 (예: `logs/2026-07-23.log`) |
| **백업 보관 폴더** | `publish_backup/` | 프로그램 업데이트 및 빌드 배포 시 이전 릴리즈 바이너리/설정 자동 백업 폴더 |
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -389,36 +717,41 @@ a:hover {
EzdFolderPath=c:\EzCad\EasyCfg ; EZD 도안 파일 기본 탐색/저장 폴더 경로
test=false ; 테스트 마킹 버튼 및 개발 모드 노출 여부 (true/false)
[Equipment]
Timeout=5000 ; 계측기 통신 타임아웃 (ms)
SettleMilliseconds=2000 ; 테스트 전원 인가 후 측정 안정화 대기 시간 (ms)
[DMM]
VoltageHost=192.168.1.100 ; 전압/저항 측정용 계측기(DMM) IP 주소
VoltageHost=192.168.10.100 ; 전압(Voltage) 측정용 계측기 IP 주소(예시)
[CurrentDMM]
CurrentDMMHost=192.168.1.102 ; 전류 측정용 계측기(DMM) IP 주소
[ResistanceDMM]
ResistanceDMMHost=192.168.10.101 ; 저항(Resistance) 측정용 계측기 IP 주소(예시)
[PowerSupply]
CurrentHost=192.168.1.101 ; 전원 공급기(Power Supply) IP 주소
CurrentHost=192.168.10.102 ; 전원 공급기(Power Supply) 및 전류 측정 장치 IP 주소(예시)
[Limits]
MinVoltage=4.0 ; 전압 하한 판정 기준값 (V)
MaxVoltage=6.0 ; 전압 상한 판정 기준값 (V)
MinCurrent=8.0 ; 전류 하한 판정 기준값 (mA)
MaxCurrent=10.0 ; 전류 상한 판정 기준값 (mA)
MinResistance=0.4 ; 저항 하한 판정 기준값 (kΩ)
MaxResistance=0.8 ; 저항 상한 판정 기준값 (kΩ)
MinVoltage=1.00 ; 전압 하한 판정 기준값 (V)
MaxVoltage=6.00 ; 전압 상한 판정 기준값 (V)
MinCurrent=5.00 ; 전류 하한 판정 기준값 (mA)
MaxCurrent=10.00 ; 전류 상한 판정 기준값 (mA)
MinResistance=8.000 ; 저항 하한 판정 기준값 (kΩ)
MaxResistance=13.000 ; 저항 상한 판정 기준값 (kΩ)
```
#### 2) Database.ini (주요 변경 가능 설정)
DB 서버 접속 주소 및 점검용 오프라인 모드 변경 시 수정하는 항목입니다.
```ini
[Database]
Db_Server=192.168.1.200 ; MSSQL 데이터베이스 서버 IP 주소
Db_Name=MarkingDb ; 연결할 데이터베이스 이름
Db_User=db_user ; DB 접속 사용자 계정
Db_Password=db_password ; DB 접속 비밀번호
OfflineMode=False ; DB 미연결 점검 모드 (True: DB 저장 생략, False: 정상 검증/적재)
Db_Server=192.168.10.10, 1433 ; MSSQL 데이터베이스 서버 IP 주소 및 포트
Db_Name=NE1aW_PT_Sensor ; 연결할 데이터베이스 이름
Db_User=su ; DB 접속 사용자 계정
Db_Password=amotech821 ; DB 접속 비밀번호
[Login]
OfflinePreview=False ; 로그인 DB 검증 우회 여부 (True: 로그인 생략, False: 정상 검증)
Procedure=dbo.CheckOperator ; 작업자 로그인 검증용 저장 프로시저명
ProcessName=Marking ; 공정 구분 코드
OfflinePreview=false ; DB 연결 우회 오프라인 모드 (true: DB 생략, false: 실제 DB 검증)
```
#### 3) Sensor.ini (주요 변경 가능 설정)
@ -426,6 +759,7 @@ OfflinePreview=False ; 로그인 DB 검증 우회 여부 (True: 로
```ini
[Sensor]
Port=COM3 ; 바코드 스캐너 시리얼 포트 (장치 관리자 COM 포트 번호)
BaudRate=115200 ; 시리얼 통신 속도 (기본값: 115200)
Channel=1 ; 통신 채널 번호 (1 또는 2)
```
@ -446,9 +780,7 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
- 프로그램 실행 후 작업자 계정으로 로그인을 시도합니다.
- 로그인이 완료되면 전원 공급 장치의 상시전원 채널 전원 램프가 자동으로 켜지는지 확인합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -460,61 +792,72 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
## 3.1 메인 화면 레이아웃 구성
본 프로그램은 작업자가 화면 구성 및 각 항목 상태를 파악할 수 있도록 4개의 카드 레이아웃으로 화면을 구성했습니다.
본 프로그램은 작업자가 전체 검사 및 마킹 진행 상황을 직관적으로 파악할 수 있도록 역할별 카드 레이아웃으로 화면을 구성했습니다.
### 3.1.1 상단 헤더 영역 (Header Bar)
프로그램 최상단 영역에는 시스템 정보 배지와 제어 버튼이 배치되어 있습니다.
* **실시간 시계**: 좌측 상단에 날짜와 시간이 표시됩니다.
프로그램 최상단 영역에는 시스템 로고, 실시간 시계, 작업 정보 배지 및 시스템 제어 버튼이 배치되어 있습니다.
* **시스템 로고 및 버젼**: 좌측 상단에 `Marking v1.0.0` 시스템 명칭이 배치되어 있습니다.
* **실시간 시계**: 로고 우측에 현재 날짜와 시간(`YYYY-MM-DD HH:mm:ss`)이 실시간으로 표시됩니다.
* **작업 정보 배지**:
* **공정 라인**: 로그인 단계에서 지정한 생산 라인 코드 (`Line No`)
* **로트 번호**: 로그인 단계에서 지정한 생산 로트 번호 (`Lot No`)
* **모델명**: 현재 가동 중인 제품의 사양 모델 (`Model`)
* **작업자**: 로그인한 작업자의 이름 (`Operator`)
* **제어 버튼**: 우측 상단에 `로그아웃` 버튼이 위치하며 최하단 바에 설정 관련 버튼이 배치됩니다.
* **작업자**: 로그인한 작업자의 이름 또는 계정 ID (`Operator`)
* **모델**: 현재 적용 중인 레이저 각인 도안 모델명 (`Model`)
* **라인**: 로그인 단계에서 지정한 생산 라인 코드 (`Line No`)
* **제어 버튼**: 우측 상단에 `로그아웃` 버튼과 윈도우 창 제어(최소화, 창 모드, 프로그램 종료) 버튼이 위치합니다.
<img src="./Pasted image 20260728100308.png" alt="Pasted image 20260728100308.png" class="img-screenshot" />
---
## 3.2 상태 및 제어 카드 영역
화면 중앙에는 역할을 구분한 4개의 상태 카드가 배치되어 있어, 제품 상태와 계측 단계를 모니터링할 수 있습니다.
### 3.2.1 [카드 1] 제품 정보 및 이전 결과 (좌측 상단)
제품의 일련번호와 이전 생산 공정에서의 합격 이력을 대조하는 영역입니다.
* **작업 모델 설정**:
- `파일 선택` 버튼을 사용하여 각인용 도면 파일을 불러옵니다.
- 도면 파일 선택이 완료되면 상단 헤더 영역의 모델명(Model) 배지 텍스트가 선택한 도면명으로 자동 변경됩니다.
* **일련번호 (IC_SN)**: 제품이 안착되면 센서 판독기를 통해 자동으로 인식되어 표시됩니다. (읽기 전용)
* **이전 공정 이력 배지**:
* **Housing**: 하우징 조립 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* **Calibration**: 압력 보정 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* **EOL**: EOL 1차 성능 평가 판정 상태 (`PASS` / `FAIL` / `대기`)
* *주의: 이전 공정 이력 배지 중 하나라도 `FAIL` 상태인 경우 성능 검사를 시작할 수 없습니다.*
### 3.2.2 [카드 2] 측정 결과 (우측 상단)
현재 장비에서 실제 계측한 3대 전기 파라미터(전압, 전류, 저항) 수치와 설정된 기준 규격 범위를 표시하는 영역입니다.
* **측정 전압 (Voltage)**: 전압 측정 장치가 측정한 전압 수치 (**V** 단위)
* **측정 전류 (Current)**: 전원 공급 장치가 측정한 소모 전류 수치 (**mA** 단위)
* **측정 저항 (Resistance)**: 저항 측정 장치가 측정한 전기적 저항 수치 (**kΩ** 단위)
* *알림: 각 물리량의 하단에는 현재 적용 중인 기준 규격 범위가 문구(`기준범위: X ~ Y`)로 표출되며, 실측값이 규격 범위 내에 도달하면 카드 테두리가 **초록색(PASS)**으로 표시되고, 범위를 벗어나면 테두리가 **빨간색(FAIL)**으로 바뀝니다.*
### 3.2.3 [카드 3] 진행상황 (좌측 하단)
현재 설비가 수행하고 있는 단계별 자동 제어 시퀀스를 보여주는 안내 창입니다.
* "대기 상태", "제품 정보 수집 중...", "이전 공정 검사 결과 조회 중...", "측정 계측기 데이터 수집 중...", "제품 합격 - 레이저 각인 중..." 등 작동 상태를 실시간 텍스트로 표출합니다.
### 3.2.4 [카드 4] 판정결과 (우측 하단)
제품의 최종 합격(PASS) 및 불합격(FAIL) 상태를 표시합니다.
* 계측 검사와 데이터 저장, 레이저 각인이 완료되었을 때 최종 합격인 경우 카드 배경이 **초록색(PASS)**으로 전환되며, 불합격인 경우 카드 배경이 **빨간색(FAIL)**으로 변경됩니다.
### 3.2.5 최하단 제어 영역 (Control Box)
* **검사 시작 (START)**: 전체 검사 시퀀스를 기동하는 메인 버튼입니다. 이 버튼을 누르면 이전 계측 수치들이 초기화되고 새로운 측정 프로세스가 개시됩니다.
* **강제 검사 (스킵)**: 이전 가공 공정의 합격 이력이 없더라도 검증 단계를 건너뛰고 성능 계측 및 각인 시퀀스를 기동하는 버튼입니다.
* **테스트 마킹**: 성능 계측 없이 즉시 각인기에 테스트 마킹 신호를 전송하는 버튼입니다.
* *참고: `강제 검사 (스킵)``테스트 마킹` 버튼은 환경 설정에서 테스트 모드가 활성화된 상태에서만 화면 하단에 노출됩니다.*
화면 중앙은 효율적인 검사 구성을 위해 **좌측 패널**과 **우측 패널**로 구분되어 있습니다.
### 3.2.1 [카드 1] 작업 모델 설정 & IC_SN 및 각인 정보 (좌측 상단)
제품의 일련번호와 실시간 각인 정보를 확인하고 레이저 마킹 도면을 관리하는 영역입니다.
* **작업 모델 설정 (EZD 파일)**:
- `📁 파일 선택` 버튼을 통해 제품 각인용 도면 파일(.ezd)을 불러올 수 있습니다.
- 도면 파일 선택 시 상단 헤더 영역의 모델(`Model`) 배지 텍스트가 선택한 도면명으로 자동 반영됩니다.
* **일련번호 (IC_SN)**: 4251 센서 판독기를 통해 읽어온 제품 내부 칩의 고유 일련번호가 표시됩니다. (읽기 전용)
* **실시간 각인 정보 패널**:
- **현재 Lot No**: 로그인 시 설정된 생산 로트 번호 (`Lot No`)
- **다음 각인 순번**: 당일 해당 로트에서 각인될 제품의 차례 순번 (`예: 0001 차례`)
<img src="./Pasted image 20260728100343.png" alt="Pasted image 20260728100343.png" class="img-screenshot" />
### 3.2.2 [카드 2] 이전 시험 단계 결과 (좌측 하단)
생산 데이터베이스(MS-SQL)를 조회하여 선행 공정의 합격 여부를 판정하는 카드입니다.
* **1. Housing**: 하우징 조립 공정 검사 판정 상태 (`PASS` / `FAIL` / `대기`)
* **2. Calibration**: 센서 압력 보정 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* **3. EOL**: EOL 1차 성능 평가 공정 판정 상태 (`PASS` / `FAIL` / `대기`)
* *주의: 이전 공정 이력 중 하나라도 `FAIL` 상태이거나 이력이 없는 경우 메인 성능 검사를 시작할 수 없습니다. (강제 검사 스킵 버튼 미사용 시)*
<img src="./Pasted image 20260728100354.png" alt="Pasted image 20260728100354.png" class="img-screenshot" />
### 3.2.3 [카드 3] 측정 데이터 수치 카드 (우측 상단)
실제 계측기를 통해 수집된 3대 전기 파라미터 수치와 설정된 규격 범위를 표시하는 3열 구조의 카드입니다.
* **측정 전압 (Voltage)**: DMM 계측 장비가 측정한 실측 전압 수치 (**V** 단위, 기본 기준범위: `0.0V ~ 0.5V`)
* **측정 전류 (Current)**: Power Supply 전원공급 장치가 측정한 소모 전류 수치 (**mA** 단위, 기본 기준범위: `8.00mA ~ 10.00mA`)
* **측정 저항 (Resistance)**: DMM 측정 장비가 측정한 전기적 저항 수치 (**kΩ** 단위, 기본 기준범위: `0.400kΩ ~ 0.800kΩ`)
* *알림: 각 수치 카드 하단에는 설정 파일(`Setting.ini`)에서 지정한 임계 규격 범위가 표시되며, 실측값이 범위 내에 들어오면 카드 테두리가 **초록색(PASS)**으로, 범위를 벗어나면 **빨간색(FAIL)**으로 자동 전환됩니다.*
<img src="./Pasted image 20260728100404.png" alt="Pasted image 20260728100404.png" class="img-screenshot" />
### 3.2.4 [카드 4] 최종 판정 및 종합 상태 영역 (우측 하단)
진행 상황 및 최종 판정 결과를 통합 표시하는 영역입니다.
* **💬 진행 상황 뱃지**: "대기 상태", "제품 정보 수집 중...", "측정 계측기 데이터 수집 중...", "제품 합격 - 레이저 각인 중..." 등 설비 시퀀스 동작을 실시간 텍스트로 표출합니다.
* **세부 정보 그리드**:
- **검사 시간 정보**: 전체 시퀀스 기동 시작 시간 및 종료 시간 표출
- **일련번호 정보**: IC S/N, PCB 바코드, 실제 각인 완료 번호 표출
- **최종 판정결과**: 최종 **PASS** (초록색) / **FAIL** (빨간색) 대형 배지 표출
- **시스템 상태**: 통신 및 디바이스 가동 상태 또는 에러 메시지 배너 표출
<img src="./Pasted image 20260728100413.png" alt="Pasted image 20260728100413.png" class="img-screenshot" />
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
## 3.3 하단 제어 영역 (Control Box & Footer)
* **▶ 검사 시작 (START) 버튼**: 화면 하단에 위치한 대형 버튼으로, 전체 계측 및 각인 시퀀스를 개시합니다.
* **최하단 버튼 그룹**:
* **파라미터 설정**: 계측 임계 규격치 및 마킹 파라미터 설정 창을 호출합니다.
* **포트 설정**: 센서 통신 보드의 시리얼 COM 포트 및 채널 설정 창을 호출합니다.
* **강제 검사 (스킵)**: 이전 공정 이력이 없어도 검증을 건너뛰고 계측 및 마킹을 수행합니다.
* **테스트 마킹**: 계측 과정 없이 레이저 각인 장비 동작을 테스트합니다.
* *참고: `강제 검사 (스킵)``테스트 마킹` 버튼은 설정 파일(`Setting.ini`)에서 `TestMode=true`로 활성화된 경우에만 화면에 노출됩니다.*
<img src="./Pasted image 20260728100445.png" alt="Pasted image 20260728100445.png" class="img-screenshot" />
<div class="page-break"></div>
@ -526,22 +869,22 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
## 4.1 포트 설정 화면 사용법
프로그램 상단의 `통신 설정` 버튼을 클릭하면 포트 설정 대화 상자가 나타납니다. 이 대화 상자에서 센서 판독 장치(4251 보드)의 연결 포트 및 채널을 설정할 수 있습니다.
메인 화면 최하단 바의 `포트 설정` 버튼을 클릭하면 포트 설정 대화 상자가 나타납니다. 이 대화 상자에서 센서 판독 장치(4251 보드)의 연결 포트, 통신 속도 및 채널을 설정할 수 있습니다.
<img src="./Pasted image 20260728100828.png" alt="Pasted image 20260728100828.png" class="img-screenshot" />
### 주요 설정 항목 및 설명
1. **통신 포트 (Port)**:
- 센서 판독기가 연결되어 있는 PC의 연결 포트를 선택합니다. (예: `COM1`, `COM3`, `COM4` 등)
- 현재 PC에 인식되어 있는 포트 목록이 자동으로 표시됩니다.
- 센서 판독기가 연결되어 있는 PC의 시리얼 포트를 선택합니다. (예: `COM1`, `COM3`, `COM4` 등)
- 현재 PC 장치 관리자에 인식되어 있는 유효한 COM 포트 목록이 자동으로 조회되어 드롭다운에 추가됩니다.
2. **통신 속도 (BaudRate)**:
- 센서 판독 장치와의 데이터 송수신 속도를 설정합니다.
- 기본 설정값은 **`115200`** 이며, 특수한 경우가 아니면 변경하지 않는 것을 권장합니다.
- 센서 판독 장치와의 시리얼 송수신 속도(Baud Rate)를 설정합니다. (옵션: `9600`, `19200`, `38400`, `57600`, `115200`)
- 4251 센서 보드 통신의 기본 규격 설정값은 **`115200`** 니다.
3. **통신 채널 (Channel)**:
- 센서 판독기 내부의 연결 채널을 결정합니다.
- 드롭다운 메뉴를 통해 **`CH1`** 또는 **`CH2`**를 선택할 수 있습니다.
- 선택된 채널에 따라 센서 인식 모드가 변경됩니다.
- 센서 판독기 내부의 연동 채널 번호를 결정합니다.
- 드롭다운 메뉴를 통해 **`1`** 또는 **`2`** 채널을 선택할 수 있습니다.
- 선택된 채널 및 포트 정보는 `Sensor.ini` 파일에 저장됩니다.
---
@ -552,9 +895,7 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
- 저장 시 기존 센서 연결을 해제하고 새로운 설정값으로 센서 인식 서비스를 다시 시작합니다. 프로그램을 재시작할 필요 없이 변경 사항이 즉시 적용됩니다.
- 저장하지 않고 창을 닫으려면 `취소` 버튼을 누릅니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -566,21 +907,18 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
## 5.1 판정 기준 설정
프로그램 상단 우측의 `시험 설정` 버튼을 클릭하면 판정 기준을 구성하는 대화 상자가 나타납니다. 이 화면에서 제품 합불 판정에 사용되는 전압, 전류, 저항의 기준값을 입력할 수 있습니다.
메인 화면 최하단 바의 `파라미터 설정` 버튼을 클릭하면 기준 범위 설정 대화 상자가 나타납니다. 이 화면에서 제품 합불 판정에 사용되는 전압, 전류, 저항의 규격 임계 범위를 수동으로 변경할 수 있습니다.
<img src="./Pasted image 20260728100846.png" alt="Pasted image 20260728100846.png" class="img-screenshot" />
### 5.1.1 각 항목별 한계치 입력 가이드
* **전압 판정 범위**:
* **하한값**: 합격 전압 하한 규격 (V 단위)
* **상한값**: 합격 전압 상한 규격 (V 단위)
* **전류 판정 범위**:
* **하한값**: 합격 전류 하한 규격 (설정창 표기 단위 참조, 기본 mA/A)
* **상한값**: 합격 전류 상한 규격 (설정창 표기 단위 참조, 기본 mA/A)
* **저항 판정 범위**:
* **하한값**: 합격 저항 하한 규격 (설정창 표기 단위 참조, 기본 Ω/kΩ)
* **상한값**: 합격 저항 상한 규격 (설정창 표기 단위 참조, 기본 Ω/kΩ)
* **전압 (V)**:
* **하한값 ~ 상한값**: 합격 전압 하한 규격 ~ 상한 규격 (V 단위, 기본 예: `1.00V ~ 6.00V`)
* **전류 (A / mA)**:
* **하한값 ~ 상한값**: 합격 소모 전류 하한 규격 ~ 상한 규격 (설정창 단위 V/A/mA, 기본 예: `5.00mA ~ 10.00mA`)
* **저항 (Ω / kΩ)**:
* **하한값 ~ 상한값**: 합격 전기적 저항 하한 규격 ~ 상한 규격 (기본 예: `8.000kΩ ~ 13.000kΩ`)
*참고: 저장 버튼을 클릭하면 메인 화면의 하단 가이드 문구(`기준범위: X ~ Y`)가 즉시 갱신되어 새로 입력한 한계치가 다음 검사 시퀀스부터 반영됩니다.*
*참고: 저장 버튼을 클릭하면 메인 화면의 수치 카드 하단 가이드 문구(`기준범위: X ~ Y`)가 즉시 갱신되어 새로 입력한 한계치가 다음 검사 시퀀스부터 반영되며, `Setting.ini` 파일의 `[Limits]` 섹션에 자동 저장됩니다.*
---
@ -591,7 +929,7 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
* 도면이 선택되면 상단 헤더 배지의 모델명 정보도 해당 도면 파일명으로 자동으로 변경됩니다.
* **유의 사항**:
* 지정해 놓은 도면 파일이 실제 경로에 존재하지 않는 경우, 계측 성능 검사가 합격하더라도 각인 단계에서 에러가 납니다. 검사 전 파일 경로 상태를 확인하십시오.
<img src="./Pasted image 20260728100910.png" alt="Pasted image 20260728100910.png" class="img-screenshot" />
---
## 5.3 설정 저장 및 적용
@ -599,9 +937,7 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
* 설정 창의 `저장` 버튼을 클릭하면 변경된 파라미터가 시스템 설정에 저장됩니다.
* 저장 완료 즉시 **메인 화면 하단에 표시되는 판정 기준 가이드 텍스트**가 업데이트되며, 이후에 새로 시작하는 성능 검사 시퀀스부터 새로운 규격치가 적용됩니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -655,9 +991,7 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
- **임시 일련번호 생성**: 일련번호가 비어 있는 상태에서 테스트를 개시하는 경우 현재 시간 기반의 임시 일련번호가 자동으로 부여되어 진행합니다.
- **각인 모사**: 실제 각인기에 데이터를 전송하는 단계를 가상 성공 처리하여 전체 흐름을 테스트합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -733,9 +1067,7 @@ graph TD
* 합격 판정과 동시에 레이저 마킹기에 각인 데이터가 전달되어 2D QR 코드 및 제품 일련번호 각인이 자동으로 실행됩니다.
* 마킹 완료 기록과 계측 수치는 최종 PASS 상태로 데이터베이스에 저장됩니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -775,9 +1107,7 @@ graph TD
4. **레이저 마킹 도면 파일 백업**:
* 제품 표면에 각인할 마킹 도면 파일입니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*
<div class="page-break"></div>
@ -837,8 +1167,6 @@ graph TD
* **프로그램 완전 종료**:
- 화면 우측 상단의 `닫기(X)` 버튼을 눌러 프로그램을 최종 종료할 때도, 자동으로 상시전원 차단 명령을 장비에 인계한 뒤 레이저 각인 드라이버 리소스를 닫고 메모리를 환원합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

641
marking_gui/Manual/Manual_for_pdf.html

@ -172,18 +172,21 @@ pre code {
white-space: inherit;
}
/* 이미지 스타일 */
img {
max-width: 100%;
max-height: 100mm; /* A4 높이의 약 절반 이하로 제한 */
/* 이미지 스타일 (스크린샷 크기 조절) */
img, .img-screenshot {
max-width: 65%;
max-height: 70mm; /* A4 용지 및 화면 출력 시 적당한 크기로 한정 */
display: block;
margin: 15px auto;
margin: 16px auto;
object-fit: contain;
page-break-inside: avoid;
border: 1px solid #e1e4e8;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
border: 1px solid #d1d5db;
border-radius: 6px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
/* 페이지 나누기 요소 */
.page-break {
page-break-before: always !important;
@ -218,73 +221,364 @@ a:hover {
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: 700 !important;
color: #111827 !important;
border-bottom: 2px solid #007acc !important;
padding-bottom: 8px !important;
margin-bottom: 28px !important;
}
.toc-list {
display: flex;
flex-direction: column;
gap: 10px;
}
.toc-item {
display: flex;
align-items: baseline;
font-size: 11pt;
line-height: 1.5;
margin-top: 6px;
}
.toc-sub-item {
display: flex;
align-items: baseline;
font-size: 9.5pt;
line-height: 1.4;
padding-left: 18px;
}
.toc-sub2-item {
display: flex;
align-items: baseline;
font-size: 9pt;
line-height: 1.3;
padding-left: 36px;
color: #6b7280;
}
.toc-title {
font-weight: 600;
color: #1f2937;
white-space: nowrap;
padding-right: 6px;
}
.toc-sub-item .toc-title {
font-weight: 500;
color: #374151;
}
.toc-sub2-item .toc-title {
font-weight: 400;
color: #4b5563;
}
.toc-title a {
color: #1f2937 !important;
text-decoration: none !important;
}
.toc-sub-item .toc-title a {
color: #374151 !important;
}
.toc-sub2-item .toc-title a {
color: #4b5563 !important;
}
.toc-title a:hover {
color: #007acc !important;
}
.toc-leader {
flex-grow: 1;
border-bottom: 1.5px dotted #9ca3af;
margin: 0 4px;
position: relative;
top: -4px;
}
.toc-sub-item .toc-leader {
border-bottom: 1px dotted #cbd5e1;
}
.toc-sub2-item .toc-leader {
border-bottom: 1px dotted #e2e8f0;
}
.toc-page {
font-weight: 700;
color: #374151;
padding-left: 6px;
white-space: nowrap;
}
.toc-sub-item .toc-page {
font-weight: 600;
color: #4b5563;
}
.toc-sub2-item .toc-page {
font-weight: 400;
color: #6b7280;
}
</style>
</head>
<body>
<h1>Performance Inspect &amp; Laser Marking System - 사용자 메뉴얼</h1>
<blockquote>
<p><strong>버전</strong>: 1.0.0 | <strong>최종 수정</strong>: 2026-07-14</p>
</blockquote>
<hr />
<h2>메뉴얼 목차</h2>
<p>본 메뉴얼은 각 주제별로 별도 문서로 구성되어 있습니다. 아래 링크를 클릭하여 해당 문서로 이동하세요.</p>
<table>
<thead>
<tr>
<th>번호</th>
<th>문서</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><a href="#1-시스템-개요-및-요구사항">시스템 개요 및 요구사항</a></td>
<td>프로그램 소개, 주요 기능, 하드웨어/소프트웨어 요구사항, 장비 구성</td>
</tr>
<tr>
<td>2</td>
<td><a href="#2-초기-설정-가이드">초기 설정 가이드</a></td>
<td>설정 파일의 구성 요소 안내 및 최초 장비 가동 시 점검 순서</td>
</tr>
<tr>
<td>3</td>
<td><a href="#3-메인-화면-home-view">메인 화면 (Home View)</a></td>
<td>상단 정보 표시, 제품 정보 카드, 검사 결과 화면, 진행 상황 확인 및 버튼 제어 가이드</td>
</tr>
<tr>
<td>4</td>
<td><a href="#4-통신-설정-comm-settings">통신 설정 (Comm. Settings)</a></td>
<td>4251 센서 통신 채널 설정 및 PC 통신 포트 연동 방법</td>
</tr>
<tr>
<td>5</td>
<td><a href="#5-시험-설정-parameters">시험 설정 (Parameters)</a></td>
<td>제품 규격치(전압, 전류, 저항 범위) 및 레이저 마킹 도면 파일 연동</td>
</tr>
<tr>
<td>6</td>
<td><a href="#6-측정-데이터-조회-및-데이터베이스-연동">측정 데이터 조회 (Data View)</a></td>
<td>생산 데이터베이스를 통한 이전 공정 이력 자동 조회 및 최종 결과 저장 원리</td>
</tr>
<tr>
<td>7</td>
<td><a href="#7-자동-시험-프로세스-및-14단계-시퀀스">자동 시험 프로세스</a></td>
<td>자동 계측 시퀀스 기동, 마킹 수행 및 최종 합격 판정 흐름</td>
</tr>
<tr>
<td>8</td>
<td><a href="#8-로그-및-데이터-관리">로그 및 데이터 관리</a></td>
<td>시스템 로그 파일 확인 방법 및 장비 설정 파일 백업 방법</td>
</tr>
<tr>
<td>9</td>
<td><a href="#9-오류-대응-및-프로그램-종료">오류 대응 및 프로그램 종료</a></td>
<td>센서 통신 오류, DB 조회 에러, 마킹 불량 등 현장 장애 대응 및 안전한 프로그램 종료 방법</td>
</tr>
</tbody>
</table>
<hr />
<div class="toc-container">
<h1 class="toc-heading">목차</h1>
<div class="toc-list">
<div class="toc-item">
<span class="toc-title"><a href="#빠른-시작-가이드-quick-start">빠른 시작 가이드 (Quick Start)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">2</span>
</div>
<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-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#11-시스템-개요">1.1 시스템 개요</a></span>
<span class="toc-leader"></span>
<span class="toc-page">3</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#12-소프트웨어-요구사항">1.2 소프트웨어 요구사항</a></span>
<span class="toc-leader"></span>
<span class="toc-page">3</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#13-하드웨어-요구사항">1.3 하드웨어 요구사항</a></span>
<span class="toc-leader"></span>
<span class="toc-page">4</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="01_시스템_개요.md#14-설치-경로-및-파일-배치-구조">1.4 설치 경로 및 파일 배치 구조</a></span>
<span class="toc-leader"></span>
<span class="toc-page">4</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-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#21-프로그램-설정-구성-개요">2.1 프로그램 설정 구성 개요</a></span>
<span class="toc-leader"></span>
<span class="toc-page">5</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#22-메인-설정-settingini-세부-규격">2.2 메인 설정 (Setting.ini) 세부 규격</a></span>
<span class="toc-leader"></span>
<span class="toc-page">6</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#23-데이터베이스-설정-databaseini">2.3 데이터베이스 설정 (Database.ini)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">7</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="02_초기_설정.md#24-센서-통신-설정-sensorini">2.4 센서 통신 설정 (Sensor.ini)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">7</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">8</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="03_메인_화면.md#31-메인-화면-레이아웃-구성">3.1 메인 화면 레이아웃 구성</a></span>
<span class="toc-leader"></span>
<span class="toc-page">8</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="03_메인_화면.md#32-상태-및-제어-카드-영역">3.2 상태 및 제어 카드 영역</a></span>
<span class="toc-leader"></span>
<span class="toc-page">8</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="03_메인_화면.md#33-하단-제어-영역">3.3 하단 제어 영역 (Control Box & Footer)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">10</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">11</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="04_통신_설정.md#41-포트-설정-화면-사용법">4.1 포트 설정 화면 사용법</a></span>
<span class="toc-leader"></span>
<span class="toc-page">11</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="04_통신_설정.md#42-설정-저장">4.2 설정 저장</a></span>
<span class="toc-leader"></span>
<span class="toc-page">11</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">12</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="05_시험_설정.md#51-판정-기준-설정">5.1 판정 기준 설정</a></span>
<span class="toc-leader"></span>
<span class="toc-page">12</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="05_시험_설정.md#52-레이저-각인-도면-지정">5.2 레이저 각인 도면 지정</a></span>
<span class="toc-leader"></span>
<span class="toc-page">13</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="05_시험_설정.md#53-설정-저장-및-적용">5.3 설정 저장 및 적용</a></span>
<span class="toc-leader"></span>
<span class="toc-page">13</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#6-측정-데이터-조회-및-데이터베이스-연동">6. 측정 데이터 조회 (Data View)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">14</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="06_데이터_조회.md#61-선행-공정-결과-조회">6.1 선행 공정 결과 조회 (이력 확인)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">14</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="06_데이터_조회.md#62-검사-결과-자동-적재-및-최종-판정-기록">6.2 검사 결과 자동 적재 및 최종 판정 기록</a></span>
<span class="toc-leader"></span>
<span class="toc-page">15</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="06_데이터_조회.md#63-오프라인-모드-운용">6.3 오프라인 모드 운용</a></span>
<span class="toc-leader"></span>
<span class="toc-page">15</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="#7-자동-시험-프로세스-및-14단계-시퀀스">7. 자동 시험 프로세스</a></span>
<span class="toc-leader"></span>
<span class="toc-page">16</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="07_시험_프로세스.md#71-자동-시험-및-마킹-프로세스-개요">7.1 자동 시험 및 마킹 프로세스 개요</a></span>
<span class="toc-leader"></span>
<span class="toc-page">16</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="07_시험_프로세스.md#72-상세-15단계-자동-제어-시퀀스">7.2 상세 15단계 자동 제어 시퀀스</a></span>
<span class="toc-leader"></span>
<span class="toc-page">16</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="07_시험_프로세스.md#73-최종-판정-및-마킹-실행-조건">7.3 최종 판정 및 마킹 실행 조건</a></span>
<span class="toc-leader"></span>
<span class="toc-page">17</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">18</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="08_로그_관리.md#81-시스템-로그-수집-및-관리">8.1 시스템 로그 수집 및 관리</a></span>
<span class="toc-leader"></span>
<span class="toc-page">18</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="08_로그_관리.md#82-장비-교체-및-프로그램-백업-방법">8.2 장비 교체 및 프로그램 백업 방법</a></span>
<span class="toc-leader"></span>
<span class="toc-page">18</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">19</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="09_오류_대응.md#91-현장-장애-유형별-점검-및-예외-조치-요령">9.1 현장 장애 유형별 점검 및 예외 조치 요령</a></span>
<span class="toc-leader"></span>
<span class="toc-page">19</span>
</div>
<div class="toc-sub-item">
<span class="toc-title"><a href="09_오류_대응.md#92-프로그램-정상-종료-및-전원-자동-차단-규칙">9.2 프로그램 정상 종료 및 전원 자동 차단 규칙</a></span>
<span class="toc-leader"></span>
<span class="toc-page">20</span>
</div>
</div>
</div>
<div class="page-break"></div>
<h2>빠른 시작 가이드 (Quick Start)</h2>
<p>처음 시스템을 가동하여 검사를 진행하는 경우 다음 순서에 따라 작업을 수행해 주십시오.</p>
<ol>
@ -301,8 +595,6 @@ a:hover {
<li><strong>성능 검사 및 마킹 시작</strong></li>
<li>안착 지그에 제품을 바르게 장착한 뒤 메인 화면 하단의 <code>검사 시작 (START)</code> 버튼을 눌러 계측 및 마킹을 수행합니다.</li>
</ol>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>1. 시스템 개요 및 요구사항</h1>
@ -333,11 +625,11 @@ a:hover {
</tr>
<tr>
<td><strong>실제 저항값 측정</strong></td>
<td>전압/저항 DMM 측정기를 통해 센서의 실제 저항값(Ω)을 측정합니다.</td>
<td>전압/저항 DMM 측정기를 통해 센서의 실제 저항값(kΩ)을 측정합니다.</td>
</tr>
<tr>
<td><strong>전류 측정</strong></td>
<td>전원 공급 장치(Power Supply)의 출력 채널 1을 통해 제품의 소모 전류를 계측합니다.</td>
<td>전원 공급 장치(Power Supply)의 출력 채널 1을 통해 제품의 소모 전류(mA)를 계측합니다.</td>
</tr>
<tr>
<td><strong>레이저 각인 연동</strong></td>
@ -410,12 +702,12 @@ a:hover {
</tr>
<tr>
<td><strong>전압 및 저항 측정 장비 (DMM)</strong></td>
<td>제품의 전압(V) 및 전기적 저항(Ω)을 측정합니다. (예: 192.168.1.100)</td>
<td>제품의 전압(V) 및 전기적 저항(kΩ)을 측정합니다.</td>
<td>TCP/IP 네트워크 통신</td>
</tr>
<tr>
<td><strong>전류 측정 및 전원 공급 장비 (PSU)</strong></td>
<td>제품 구동을 위한 전원 공급 및 소모 전류(A)를 측정합니다. (예: 192.168.1.101)</td>
<td>제품 구동을 위한 전원 공급 및 소모 전류(mA)를 측정합니다.</td>
<td>TCP/IP 네트워크 통신</td>
</tr>
<tr>
@ -423,11 +715,6 @@ a:hover {
<td>2D QR 코드 및 텍스트 일련번호를 제품 표면에 인쇄합니다.</td>
<td>마킹 제어 보드 연동</td>
</tr>
<tr>
<td><em>(전류 측정 DMM)</em></td>
<td><em>설정 파일(예: 192.168.1.102)에 존재하나 현재 제어 시퀀스에서는 사용하지 않습니다.</em></td>
<td><em>(미사용)</em></td>
</tr>
</tbody>
</table>
<h2>1.4 설치 경로(<code>C:\marking\</code>) 구조 및 생성 파일 역할</h2>
@ -459,7 +746,7 @@ a:hover {
<tr>
<td><strong>DB 설정 파일</strong></td>
<td><code>Database.ini</code></td>
<td>MS-SQL 데이터베이스 접속 주소, DB명, 사용자 계정/PW, 오프라인 모드(<code>OfflineMode=true</code>) 설정 파일</td>
<td>MS-SQL 데이터베이스 접속 주소, DB명, 사용자 계정/PW, 오프라인 모드(<code>OfflinePreview=true</code>) 및 로그인 프로시저 설정 파일</td>
</tr>
<tr>
<td><strong>센서 설정 파일</strong></td>
@ -483,8 +770,6 @@ a:hover {
</tr>
</tbody>
</table>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>2. 초기 설정 가이드</h1>
@ -542,39 +827,45 @@ a:hover {
EzdFolderPath=c:\EzCad\EasyCfg ; EZD 도안 파일 기본 탐색/저장 폴더 경로
test=false ; 테스트 마킹 버튼 및 개발 모드 노출 여부 (true/false)
[Equipment]
Timeout=5000 ; 계측기 통신 타임아웃 (ms)
SettleMilliseconds=2000 ; 테스트 전원 인가 후 측정 안정화 대기 시간 (ms)
[DMM]
VoltageHost=192.168.1.100 ; 전압/저항 측정용 계측기(DMM) IP 주소
VoltageHost=192.168.10.100 ; 전압(Voltage) 측정용 계측기 IP 주소(예시)
[CurrentDMM]
CurrentDMMHost=192.168.1.102 ; 전류 측정용 계측기(DMM) IP 주소
[ResistanceDMM]
ResistanceDMMHost=192.168.10.101 ; 저항(Resistance) 측정용 계측기 IP 주소(예시)
[PowerSupply]
CurrentHost=192.168.1.101 ; 전원 공급기(Power Supply) IP 주소
CurrentHost=192.168.10.102 ; 전원 공급기(Power Supply) 및 전류 측정 장치 IP 주소(예시)
[Limits]
MinVoltage=4.0 ; 전압 하한 판정 기준값 (V)
MaxVoltage=6.0 ; 전압 상한 판정 기준값 (V)
MinCurrent=8.0 ; 전류 하한 판정 기준값 (mA)
MaxCurrent=10.0 ; 전류 상한 판정 기준값 (mA)
MinResistance=0.4 ; 저항 하한 판정 기준값 (kΩ)
MaxResistance=0.8 ; 저항 상한 판정 기준값 (kΩ)
MinVoltage=1.00 ; 전압 하한 판정 기준값 (V)
MaxVoltage=6.00 ; 전압 상한 판정 기준값 (V)
MinCurrent=5.00 ; 전류 하한 판정 기준값 (mA)
MaxCurrent=10.00 ; 전류 상한 판정 기준값 (mA)
MinResistance=8.000 ; 저항 하한 판정 기준값 (kΩ)
MaxResistance=13.000 ; 저항 상한 판정 기준값 (kΩ)
</code></pre>
<h4>2) Database.ini (주요 변경 가능 설정)</h4>
<p>DB 서버 접속 주소 및 점검용 오프라인 모드 변경 시 수정하는 항목입니다.</p>
<pre><code class="language-ini">[Database]
Db_Server=192.168.1.200 ; MSSQL 데이터베이스 서버 IP 주소
Db_Name=MarkingDb ; 연결할 데이터베이스 이름
Db_User=db_user ; DB 접속 사용자 계정
Db_Password=db_password ; DB 접속 비밀번호
OfflineMode=False ; DB 미연결 점검 모드 (True: DB 저장 생략, False: 정상 검증/적재)
Db_Server=192.168.10.10, 1433 ; MSSQL 데이터베이스 서버 IP 주소 및 포트
Db_Name=NE1aW_PT_Sensor ; 연결할 데이터베이스 이름
Db_User=su ; DB 접속 사용자 계정
Db_Password=amotech821 ; DB 접속 비밀번호
[Login]
OfflinePreview=False ; 로그인 DB 검증 우회 여부 (True: 로그인 생략, False: 정상 검증)
Procedure=dbo.CheckOperator ; 작업자 로그인 검증용 저장 프로시저명
ProcessName=Marking ; 공정 구분 코드
OfflinePreview=false ; DB 연결 우회 오프라인 모드 (true: DB 생략, false: 실제 DB 검증)
</code></pre>
<h4>3) Sensor.ini (주요 변경 가능 설정)</h4>
<p>바코드 스캐너 시리얼 포트 및 채널 설정 항목입니다.</p>
<pre><code class="language-ini">[Sensor]
Port=COM3 ; 바코드 스캐너 시리얼 포트 (장치 관리자 COM 포트 번호)
BaudRate=115200 ; 시리얼 통신 속도 (기본값: 115200)
Channel=1 ; 통신 채널 번호 (1 또는 2)
</code></pre>
<hr />
@ -592,84 +883,99 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
<li>프로그램 실행 후 작업자 계정으로 로그인을 시도합니다.</li>
<li>로그인이 완료되면 전원 공급 장치의 상시전원 채널 전원 램프가 자동으로 켜지는지 확인합니다.</li>
</ol>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>3. 메인 화면 (Home View)</h1>
<hr />
<h2>3.1 메인 화면 레이아웃 구성</h2>
<p>본 프로그램은 작업자가 화면 구성 및 각 항목 상태를 파악할 수 있도록 4개의 카드 레이아웃으로 화면을 구성했습니다.</p>
<p>본 프로그램은 작업자가 전체 검사 및 마킹 진행 상황을 직관적으로 파악할 수 있도록 역할별 카드 레이아웃으로 화면을 구성했습니다.</p>
<h3>3.1.1 상단 헤더 영역 (Header Bar)</h3>
<p>프로그램 최상단 영역에는 시스템 정보 배지와 제어 버튼이 배치되어 있습니다.
* <strong>실시간 시계</strong>: 좌측 상단에 날짜와 시간이 표시됩니다.
<p>프로그램 최상단 영역에는 시스템 로고, 실시간 시계, 작업 정보 배지 및 시스템 제어 버튼이 배치되어 있습니다.
* <strong>시스템 로고 및 버젼</strong>: 좌측 상단에 <code>Marking v1.0.0</code> 시스템 명칭이 배치되어 있습니다.
* <strong>실시간 시계</strong>: 로고 우측에 현재 날짜와 시간(<code>YYYY-MM-DD HH:mm:ss</code>)이 실시간으로 표시됩니다.
* <strong>작업 정보 배지</strong>:
* <strong>공정 라인</strong>: 로그인 단계에서 지정한 생산 라인 코드 (<code>Line No</code>)
* <strong>로트 번호</strong>: 로그인 단계에서 지정한 생산 로트 번호 (<code>Lot No</code>)
* <strong>모델명</strong>: 현재 가동 중인 제품의 사양 모델 (<code>Model</code>)
* <strong>작업자</strong>: 로그인한 작업자의 이름 (<code>Operator</code>)
* <strong>제어 버튼</strong>: 우측 상단에 <code>로그아웃</code> 버튼이 위치하며 최하단 바에 설정 관련 버튼이 배치됩니다.</p>
* <strong>작업자</strong>: 로그인한 작업자의 이름 또는 계정 ID (<code>Operator</code>)
* <strong>모델</strong>: 현재 적용 중인 레이저 각인 도안 모델명 (<code>Model</code>)
* <strong>라인</strong>: 로그인 단계에서 지정한 생산 라인 코드 (<code>Line No</code>)
* <strong>제어 버튼</strong>: 우측 상단에 <code>로그아웃</code> 버튼과 윈도우 창 제어(최소화, 창 모드, 프로그램 종료) 버튼이 위치합니다.
<img src="./Pasted image 20260728100308.png" alt="Pasted image 20260728100308.png" class="img-screenshot" /></p>
<hr />
<h2>3.2 상태 및 제어 카드 영역</h2>
<p>화면 중앙에는 역할을 구분한 4개의 상태 카드가 배치되어 있어, 제품 상태와 계측 단계를 모니터링할 수 있습니다.</p>
<h3>3.2.1 [카드 1] 제품 정보 및 이전 결과 (좌측 상단)</h3>
<p>제품의 일련번호와 이전 생산 공정에서의 합격 이력을 대조하는 영역입니다.
* <strong>작업 모델 설정</strong>:
- <code>파일 선택</code> 버튼을 사용하여 각인용 도면 파일을 불러옵니다.
- 도면 파일 선택이 완료되면 상단 헤더 영역의 모델명(Model) 배지 텍스트가 선택한 도면명으로 자동 변경됩니다.
* <strong>일련번호 (IC_SN)</strong>: 제품이 안착되면 센서 판독기를 통해 자동으로 인식되어 표시됩니다. (읽기 전용)
* <strong>이전 공정 이력 배지</strong>:
* <strong>Housing</strong>: 하우징 조립 공정 판정 상태 (<code>PASS</code> / <code>FAIL</code> / <code>대기</code>)
* <strong>Calibration</strong>: 압력 보정 공정 판정 상태 (<code>PASS</code> / <code>FAIL</code> / <code>대기</code>)
* <strong>EOL</strong>: EOL 1차 성능 평가 판정 상태 (<code>PASS</code> / <code>FAIL</code> / <code>대기</code>)
* <em>주의: 이전 공정 이력 배지 중 하나라도 <code>FAIL</code> 상태인 경우 성능 검사를 시작할 수 없습니다.</em></p>
<h3>3.2.2 [카드 2] 측정 결과 (우측 상단)</h3>
<p>현재 장비에서 실제 계측한 3대 전기 파라미터(전압, 전류, 저항) 수치와 설정된 기준 규격 범위를 표시하는 영역입니다.
* <strong>측정 전압 (Voltage)</strong>: 전압 측정 장치가 측정한 전압 수치 (<strong>V</strong> 단위)
* <strong>측정 전류 (Current)</strong>: 전원 공급 장치가 측정한 소모 전류 수치 (<strong>mA</strong> 단위)
* <strong>측정 저항 (Resistance)</strong>: 저항 측정 장치가 측정한 전기적 저항 수치 (<strong></strong> 단위)
* <em>알림: 각 물리량의 하단에는 현재 적용 중인 기준 규격 범위가 문구(<code>기준범위: X ~ Y</code>)로 표출되며, 실측값이 규격 범위 내에 도달하면 카드 테두리가 </em><em>초록색(PASS)</em><em>으로 표시되고, 범위를 벗어나면 테두리가 </em><em>빨간색(FAIL)</em><em>으로 바뀝니다.</em></p>
<h3>3.2.3 [카드 3] 진행상황 (좌측 하단)</h3>
<p>현재 설비가 수행하고 있는 단계별 자동 제어 시퀀스를 보여주는 안내 창입니다.
* "대기 상태", "제품 정보 수집 중...", "이전 공정 검사 결과 조회 중...", "측정 계측기 데이터 수집 중...", "제품 합격 - 레이저 각인 중..." 등 작동 상태를 실시간 텍스트로 표출합니다.</p>
<h3>3.2.4 [카드 4] 판정결과 (우측 하단)</h3>
<p>제품의 최종 합격(PASS) 및 불합격(FAIL) 상태를 표시합니다.
* 계측 검사와 데이터 저장, 레이저 각인이 완료되었을 때 최종 합격인 경우 카드 배경이 <strong>초록색(PASS)</strong>으로 전환되며, 불합격인 경우 카드 배경이 <strong>빨간색(FAIL)</strong>으로 변경됩니다.</p>
<h3>3.2.5 최하단 제어 영역 (Control Box)</h3>
<p>화면 중앙은 효율적인 검사 구성을 위해 <strong>좌측 패널</strong><strong>우측 패널</strong>로 구분되어 있습니다.</p>
<h3>3.2.1 [카드 1] 작업 모델 설정 &amp; IC_SN 및 각인 정보 (좌측 상단)</h3>
<p>제품의 일련번호와 실시간 각인 정보를 확인하고 레이저 마킹 도면을 관리하는 영역입니다.
* <strong>작업 모델 설정 (EZD 파일)</strong>:
- <code>📁 파일 선택</code> 버튼을 통해 제품 각인용 도면 파일(.ezd)을 불러올 수 있습니다.
- 도면 파일 선택 시 상단 헤더 영역의 모델(<code>Model</code>) 배지 텍스트가 선택한 도면명으로 자동 반영됩니다.
* <strong>일련번호 (IC_SN)</strong>: 4251 센서 판독기를 통해 읽어온 제품 내부 칩의 고유 일련번호가 표시됩니다. (읽기 전용)
* <strong>실시간 각인 정보 패널</strong>:
- <strong>현재 Lot No</strong>: 로그인 시 설정된 생산 로트 번호 (<code>Lot No</code>)
- <strong>다음 각인 순번</strong>: 당일 해당 로트에서 각인될 제품의 차례 순번 (<code>예: 0001 차례</code>)
<img src="./Pasted image 20260728100343.png" alt="Pasted image 20260728100343.png" class="img-screenshot" /></p>
<h3>3.2.2 [카드 2] 이전 시험 단계 결과 (좌측 하단)</h3>
<p>생산 데이터베이스(MS-SQL)를 조회하여 선행 공정의 합격 여부를 판정하는 카드입니다.
* <strong>1. Housing</strong>: 하우징 조립 공정 검사 판정 상태 (<code>PASS</code> / <code>FAIL</code> / <code>대기</code>)
* <strong>2. Calibration</strong>: 센서 압력 보정 공정 판정 상태 (<code>PASS</code> / <code>FAIL</code> / <code>대기</code>)
* <strong>3. EOL</strong>: EOL 1차 성능 평가 공정 판정 상태 (<code>PASS</code> / <code>FAIL</code> / <code>대기</code>)
* <em>주의: 이전 공정 이력 중 하나라도 <code>FAIL</code> 상태이거나 이력이 없는 경우 메인 성능 검사를 시작할 수 없습니다. (강제 검사 스킵 버튼 미사용 시)</em>
<img src="./Pasted image 20260728100354.png" alt="Pasted image 20260728100354.png" class="img-screenshot" /></p>
<h3>3.2.3 [카드 3] 측정 데이터 수치 카드 (우측 상단)</h3>
<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></strong> 단위, 기본 기준범위: <code>0.400kΩ ~ 0.800kΩ</code>)
* <em>알림: 각 수치 카드 하단에는 설정 파일(<code>Setting.ini</code>)에서 지정한 임계 규격 범위가 표시되며, 실측값이 범위 내에 들어오면 카드 테두리가 </em><em>초록색(PASS)</em><em>으로, 범위를 벗어나면 </em><em>빨간색(FAIL)</em><em>으로 자동 전환됩니다.</em>
<img src="./Pasted image 20260728100404.png" alt="Pasted image 20260728100404.png" class="img-screenshot" /></p>
<h3>3.2.4 [카드 4] 최종 판정 및 종합 상태 영역 (우측 하단)</h3>
<p>진행 상황 및 최종 판정 결과를 통합 표시하는 영역입니다.
* <strong>💬 진행 상황 뱃지</strong>: "대기 상태", "제품 정보 수집 중...", "측정 계측기 데이터 수집 중...", "제품 합격 - 레이저 각인 중..." 등 설비 시퀀스 동작을 실시간 텍스트로 표출합니다.
* <strong>세부 정보 그리드</strong>:
- <strong>검사 시간 정보</strong>: 전체 시퀀스 기동 시작 시간 및 종료 시간 표출
- <strong>일련번호 정보</strong>: IC S/N, PCB 바코드, 실제 각인 완료 번호 표출
- <strong>최종 판정결과</strong>: 최종 <strong>PASS</strong> (초록색) / <strong>FAIL</strong> (빨간색) 대형 배지 표출
- <strong>시스템 상태</strong>: 통신 및 디바이스 가동 상태 또는 에러 메시지 배너 표출
<img src="./Pasted image 20260728100413.png" alt="Pasted image 20260728100413.png" class="img-screenshot" /></p>
<hr />
<h2>3.3 하단 제어 영역 (Control Box &amp; Footer)</h2>
<ul>
<li><strong>검사 시작 (START)</strong>: 전체 검사 시퀀스를 기동하는 메인 버튼입니다. 이 버튼을 누르면 이전 계측 수치들이 초기화되고 새로운 측정 프로세스가 개시됩니다.</li>
<li><strong>강제 검사 (스킵)</strong>: 이전 가공 공정의 합격 이력이 없더라도 검증 단계를 건너뛰고 성능 계측 및 각인 시퀀스를 기동하는 버튼입니다.</li>
<li><strong>테스트 마킹</strong>: 성능 계측 없이 즉시 각인기에 테스트 마킹 신호를 전송하는 버튼입니다.</li>
<li><em>참고: <code>강제 검사 (스킵)</code><code>테스트 마킹</code> 버튼은 환경 설정에서 테스트 모드가 활성화된 상태에서만 화면 하단에 노출됩니다.</em></li>
<li><strong>▶ 검사 시작 (START) 버튼</strong>: 화면 하단에 위치한 대형 버튼으로, 전체 계측 및 각인 시퀀스를 개시합니다.</li>
<li><strong>최하단 버튼 그룹</strong>:<ul>
<li><strong>파라미터 설정</strong>: 계측 임계 규격치 및 마킹 파라미터 설정 창을 호출합니다.</li>
<li><strong>포트 설정</strong>: 센서 통신 보드의 시리얼 COM 포트 및 채널 설정 창을 호출합니다.</li>
<li><strong>강제 검사 (스킵)</strong>: 이전 공정 이력이 없어도 검증을 건너뛰고 계측 및 마킹을 수행합니다.</li>
<li><strong>테스트 마킹</strong>: 계측 과정 없이 레이저 각인 장비 동작을 테스트합니다.</li>
<li><em>참고: <code>강제 검사 (스킵)</code><code>테스트 마킹</code> 버튼은 설정 파일(<code>Setting.ini</code>)에서 <code>TestMode=true</code>로 활성화된 경우에만 화면에 노출됩니다.</em>
<img src="./Pasted image 20260728100445.png" alt="Pasted image 20260728100445.png" class="img-screenshot" /></li>
</ul>
</li>
</ul>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>4. 통신 설정 (Comm. Settings)</h1>
<hr />
<h2>4.1 포트 설정 화면 사용법</h2>
<p>프로그램 상단의 <code>통신 설정</code> 버튼을 클릭하면 포트 설정 대화 상자가 나타납니다. 이 대화 상자에서 센서 판독 장치(4251 보드)의 연결 포트 및 채널을 설정할 수 있습니다.</p>
<p>메인 화면 최하단 바의 <code>포트 설정</code> 버튼을 클릭하면 포트 설정 대화 상자가 나타납니다. 이 대화 상자에서 센서 판독 장치(4251 보드)의 연결 포트, 통신 속도 및 채널을 설정할 수 있습니다.
<img src="./Pasted image 20260728100828.png" alt="Pasted image 20260728100828.png" class="img-screenshot" /></p>
<h3>주요 설정 항목 및 설명</h3>
<ol>
<li><strong>통신 포트 (Port)</strong>:</li>
<li>센서 판독기가 연결되어 있는 PC의 연결 포트를 선택합니다. (예: <code>COM1</code>, <code>COM3</code>, <code>COM4</code> 등)</li>
<li>센서 판독기가 연결되어 있는 PC의 시리얼 포트를 선택합니다. (예: <code>COM1</code>, <code>COM3</code>, <code>COM4</code> 등)</li>
<li>
<p>현재 PC에 인식되어 있는 포트 목록이 자동으로 표시됩니다.</p>
<p>현재 PC 장치 관리자에 인식되어 있는 유효한 COM 포트 목록이 자동으로 조회되어 드롭다운에 추가됩니다.</p>
</li>
<li>
<p><strong>통신 속도 (BaudRate)</strong>:</p>
</li>
<li>센서 판독 장치와의 데이터 송수신 속도를 설정합니다.</li>
<li>센서 판독 장치와의 시리얼 송수신 속도(Baud Rate)를 설정합니다. (옵션: <code>9600</code>, <code>19200</code>, <code>38400</code>, <code>57600</code>, <code>115200</code>)</li>
<li>
<p>기본 설정값은 <strong><code>115200</code></strong> 이며, 특수한 경우가 아니면 변경하지 않는 것을 권장합니다.</p>
<p>4251 센서 보드 통신의 기본 규격 설정값은 <strong><code>115200</code></strong> 니다.</p>
</li>
<li>
<p><strong>통신 채널 (Channel)</strong>:</p>
</li>
<li>센서 판독기 내부의 연결 채널을 결정합니다.</li>
<li>드롭다운 메뉴를 통해 <strong><code>CH1</code></strong> 또는 <strong><code>CH2</code></strong> 선택할 수 있습니다.</li>
<li>선택된 채널에 따라 센서 인식 모드가 변경됩니다.</li>
<li>센서 판독기 내부의 연동 채널 번호를 결정합니다.</li>
<li>드롭다운 메뉴를 통해 <strong><code>1</code></strong> 또는 <strong><code>2</code></strong> 채널을 선택할 수 있습니다.</li>
<li>선택된 채널 및 포트 정보는 <code>Sensor.ini</code> 파일에 저장됩니다.</li>
</ol>
<hr />
<h2>4.2 설정 저장</h2>
@ -681,33 +987,29 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
</ul>
</li>
</ul>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>5. 시험 설정 (Parameters)</h1>
<hr />
<h2>5.1 판정 기준 설정</h2>
<p>프로그램 상단 우측의 <code>시험 설정</code> 버튼을 클릭하면 판정 기준을 구성하는 대화 상자가 나타납니다. 이 화면에서 제품 합불 판정에 사용되는 전압, 전류, 저항의 기준값을 입력할 수 있습니다.</p>
<p>메인 화면 최하단 바의 <code>파라미터 설정</code> 버튼을 클릭하면 기준 범위 설정 대화 상자가 나타납니다. 이 화면에서 제품 합불 판정에 사용되는 전압, 전류, 저항의 규격 임계 범위를 수동으로 변경할 수 있습니다.
<img src="./Pasted image 20260728100846.png" alt="Pasted image 20260728100846.png" class="img-screenshot" /></p>
<h3>5.1.1 각 항목별 한계치 입력 가이드</h3>
<ul>
<li><strong>전압 판정 범위</strong>:<ul>
<li><strong>하한값</strong>: 합격 전압 하한 규격 (V 단위)</li>
<li><strong>상한값</strong>: 합격 전압 상한 규격 (V 단위)</li>
<li><strong>전압 (V)</strong>:<ul>
<li><strong>하한값 ~ 상한값</strong>: 합격 전압 하한 규격 ~ 상한 규격 (V 단위, 기본 예: <code>1.00V ~ 6.00V</code>)</li>
</ul>
</li>
<li><strong>전류 판정 범위</strong>:<ul>
<li><strong>하한값</strong>: 합격 전류 하한 규격 (설정창 표기 단위 참조, 기본 mA/A)</li>
<li><strong>상한값</strong>: 합격 전류 상한 규격 (설정창 표기 단위 참조, 기본 mA/A)</li>
<li><strong>전류 (A / mA)</strong>:<ul>
<li><strong>하한값 ~ 상한값</strong>: 합격 소모 전류 하한 규격 ~ 상한 규격 (설정창 단위 V/A/mA, 기본 예: <code>5.00mA ~ 10.00mA</code>)</li>
</ul>
</li>
<li><strong>저항 판정 범위</strong>:<ul>
<li><strong>하한값</strong>: 합격 저항 하한 규격 (설정창 표기 단위 참조, 기본 Ω/kΩ)</li>
<li><strong>상한값</strong>: 합격 저항 상한 규격 (설정창 표기 단위 참조, 기본 Ω/kΩ)</li>
<li><strong>저항 (Ω / kΩ)</strong>:<ul>
<li><strong>하한값 ~ 상한값</strong>: 합격 전기적 저항 하한 규격 ~ 상한 규격 (기본 예: <code>8.000kΩ ~ 13.000kΩ</code>)</li>
</ul>
</li>
</ul>
<p><em>참고: 저장 버튼을 클릭하면 메인 화면의 하단 가이드 문구(<code>기준범위: X ~ Y</code>)가 즉시 갱신되어 새로 입력한 한계치가 다음 검사 시퀀스부터 반영됩니다.</em></p>
<p><em>참고: 저장 버튼을 클릭하면 메인 화면의 수치 카드 하단 가이드 문구(<code>기준범위: X ~ Y</code>)가 즉시 갱신되어 새로 입력한 한계치가 다음 검사 시퀀스부터 반영되며, <code>Setting.ini</code> 파일의 <code>[Limits]</code> 섹션에 자동 저장됩니다.</em></p>
<hr />
<h2>5.2 레이저 각인 도면 지정</h2>
<ul>
@ -717,7 +1019,8 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
</ul>
</li>
<li><strong>유의 사항</strong>:<ul>
<li>지정해 놓은 도면 파일이 실제 경로에 존재하지 않는 경우, 계측 성능 검사가 합격하더라도 각인 단계에서 에러가 납니다. 검사 전 파일 경로 상태를 확인하십시오.</li>
<li>지정해 놓은 도면 파일이 실제 경로에 존재하지 않는 경우, 계측 성능 검사가 합격하더라도 각인 단계에서 에러가 납니다. 검사 전 파일 경로 상태를 확인하십시오.
<img src="./Pasted image 20260728100910.png" alt="Pasted image 20260728100910.png" class="img-screenshot" /></li>
</ul>
</li>
</ul>
@ -727,8 +1030,6 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
<li>설정 창의 <code>저장</code> 버튼을 클릭하면 변경된 파라미터가 시스템 설정에 저장됩니다.</li>
<li>저장 완료 즉시 <strong>메인 화면 하단에 표시되는 판정 기준 가이드 텍스트</strong>가 업데이트되며, 이후에 새로 시작하는 성능 검사 시퀀스부터 새로운 규격치가 적용됩니다.</li>
</ul>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>6. 측정 데이터 조회 및 데이터베이스 연동</h1>
@ -780,8 +1081,6 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
</ul>
</li>
</ul>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>7. 자동 시험 프로세스 및 15단계 시퀀스</h1>
@ -850,8 +1149,6 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
</ul>
</li>
</ol>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>8. 로그 및 데이터 관리</h1>
@ -891,8 +1188,6 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
</ul>
</li>
</ol>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
<div class="page-break"></div>
<h1>9. 오류 대응 및 프로그램 종료</h1>
@ -968,7 +1263,5 @@ Channel=1 ; 통신 채널 번호 (1 또는 2)
</ul>
</li>
</ul>
<hr />
<p><em>본 문서는 Performance Inspect &amp; Laser Marking System v1.0.0 기준으로 작성되었습니다.</em></p>
</body>
</html>

BIN
marking_gui/Manual/Pasted image 20260728095417.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
marking_gui/Manual/Pasted image 20260728095455.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
marking_gui/Manual/Pasted image 20260728095535.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
marking_gui/Manual/Pasted image 20260728095555.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
marking_gui/Manual/Pasted image 20260728095618.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
marking_gui/Manual/Pasted image 20260728095624.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
marking_gui/Manual/Pasted image 20260728100308.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

BIN
marking_gui/Manual/Pasted image 20260728100343.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
marking_gui/Manual/Pasted image 20260728100354.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
marking_gui/Manual/Pasted image 20260728100404.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
marking_gui/Manual/Pasted image 20260728100413.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
marking_gui/Manual/Pasted image 20260728100445.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
marking_gui/Manual/Pasted image 20260728100748.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
marking_gui/Manual/Pasted image 20260728100828.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
marking_gui/Manual/Pasted image 20260728100846.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
marking_gui/Manual/Pasted image 20260728100910.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

7
marking_gui/Manual/build_pdf.py

@ -24,12 +24,13 @@ def clean_markdown_content(filename, content, link_mapping):
content = '\n'.join(cleaned_lines)
# 2. Obsidian 위키링크 이미지 문법 -> HTML img 태그로 치환
content = re.sub(r'!\[\[(.*?)\]\]', r'<img src="./\1" alt="\1" />', content)
# 2. Obsidian 위키링크 이미지 문법 -> HTML img 태그로 치환 (크기 제한 및 중앙 정렬)
content = re.sub(r'!\[\[(.*?)\]\]', r'<img src="./\1" alt="\1" class="img-screenshot" />', content)
# 3. 마크다운 파일 참조 링크 -> 로컬 앵커로 치환
for md_file, anchor in link_mapping.items():
content = content.replace(f"({md_file})", f"({anchor})")
content = content.replace(f'"{md_file}"', f'"{anchor}"')
# 4. 각 파일 시작 전에 페이지 나누기 추가 (표지 파일은 제외)
is_cover = "사용자" in filename or "메뉴얼" in filename
@ -88,7 +89,7 @@ def main():
link_mapping = {}
for f in final_file_list:
if "사용자" in f or "메뉴얼" in f:
link_mapping[f] = "#performance-inspect--laser-marking-system---사용자-메뉴얼"
link_mapping[f] = "#메뉴얼-목차-table-of-contents"
elif f.startswith("01"):
link_mapping[f] = "#1-시스템-개요-및-요구사항"
elif f.startswith("02"):

130
marking_gui/Manual/pdf_style.css

@ -166,18 +166,21 @@ pre code {
white-space: inherit;
}
/* 이미지 스타일 */
img {
max-width: 100%;
max-height: 100mm; /* A4 높이의 약 절반 이하로 제한 */
/* 이미지 스타일 (스크린샷 크기 조절) */
img, .img-screenshot {
max-width: 65%;
max-height: 70mm; /* A4 용지 및 화면 출력 시 적당한 크기로 한정 */
display: block;
margin: 15px auto;
margin: 16px auto;
object-fit: contain;
page-break-inside: avoid;
border: 1px solid #e1e4e8;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
border: 1px solid #d1d5db;
border-radius: 6px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
/* 페이지 나누기 요소 */
.page-break {
page-break-before: always !important;
@ -211,3 +214,116 @@ a:hover {
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: 700 !important;
color: #111827 !important;
border-bottom: 2px solid #007acc !important;
padding-bottom: 8px !important;
margin-bottom: 28px !important;
}
.toc-list {
display: flex;
flex-direction: column;
gap: 16px;
}
.toc-item {
display: flex;
align-items: baseline;
font-size: 11pt;
line-height: 1.5;
}
.toc-title {
font-weight: 600;
color: #1f2937;
white-space: nowrap;
padding-right: 6px;
}
.toc-title a {
color: #1f2937 !important;
text-decoration: none !important;
}
.toc-title a:hover {
color: #007acc !important;
}
.toc-leader {
flex-grow: 1;
border-bottom: 1.5px dotted #9ca3af;
margin: 0 4px;
position: relative;
top: -4px;
}
.toc-page {
font-weight: 700;
color: #374151;
padding-left: 6px;
white-space: nowrap;
}

88
marking_gui/Manual/사용자_메뉴얼.md

@ -1,26 +1,60 @@
# Performance Inspect & Laser Marking System - 사용자 메뉴얼
<div class="toc-container">
<h1 class="toc-heading">목차</h1>
<div class="toc-list">
<div class="toc-item">
<span class="toc-title"><a href="#빠른-시작-가이드-quick-start">빠른 시작 가이드 (Quick Start)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">2</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="01_시스템_개요.md">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="02_초기_설정.md">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="03_메인_화면.md">3. 메인 화면 (Home View)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">8</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="04_통신_설정.md">4. 통신 설정 (Comm. Settings)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">11</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="05_시험_설정.md">5. 시험 설정 (Parameters)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">12</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="06_데이터_조회.md">6. 측정 데이터 조회 (Data View)</a></span>
<span class="toc-leader"></span>
<span class="toc-page">14</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="07_시험_프로세스.md">7. 자동 시험 프로세스</a></span>
<span class="toc-leader"></span>
<span class="toc-page">16</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="08_로그_관리.md">8. 로그 및 데이터 관리</a></span>
<span class="toc-leader"></span>
<span class="toc-page">18</span>
</div>
<div class="toc-item">
<span class="toc-title"><a href="09_오류_대응.md">9. 오류 대응 및 프로그램 종료</a></span>
<span class="toc-leader"></span>
<span class="toc-page">19</span>
</div>
</div>
</div>
> **버전**: 1.0.0 | **최종 수정**: 2026-07-14
---
## 메뉴얼 목차
본 메뉴얼은 각 주제별로 별도 문서로 구성되어 있습니다. 아래 링크를 클릭하여 해당 문서로 이동하세요.
| 번호 | 문서 | 설명 |
|------|------|------|
| 1 | [시스템 개요 및 요구사항](01_시스템_개요.md) | 프로그램 소개, 주요 기능, 하드웨어/소프트웨어 요구사항, 장비 구성 |
| 2 | [초기 설정 가이드](02_초기_설정.md) | 설정 파일의 구성 요소 안내 및 최초 장비 가동 시 점검 순서 |
| 3 | [메인 화면 (Home View)](03_메인_화면.md) | 상단 정보 표시, 제품 정보 카드, 검사 결과 화면, 진행 상황 확인 및 버튼 제어 가이드 |
| 4 | [통신 설정 (Comm. Settings)](04_통신_설정.md) | 4251 센서 통신 채널 설정 및 PC 통신 포트 연동 방법 |
| 5 | [시험 설정 (Parameters)](05_시험_설정.md) | 제품 규격치(전압, 전류, 저항 범위) 및 레이저 마킹 도면 파일 연동 |
| 6 | [측정 데이터 조회 (Data View)](06_데이터_조회.md) | 생산 데이터베이스를 통한 이전 공정 이력 자동 조회 및 최종 결과 저장 원리 |
| 7 | [자동 시험 프로세스](07_시험_프로세스.md) | 자동 계측 시퀀스 기동, 마킹 수행 및 최종 합격 판정 흐름 |
| 8 | [로그 및 데이터 관리](08_로그_관리.md) | 시스템 로그 파일 확인 방법 및 장비 설정 파일 백업 방법 |
| 9 | [오류 대응 및 프로그램 종료](09_오류_대응.md) | 센서 통신 오류, DB 조회 에러, 마킹 불량 등 현장 장애 대응 및 안전한 프로그램 종료 방법 |
---
<div class="page-break"></div>
## 빠른 시작 가이드 (Quick Start)
@ -32,13 +66,9 @@
- 계측 장비들과 제어용 PC 간의 네트워크(LAN)선 및 센서 리더용 시리얼 포트 케이블 연결을 확인합니다.
3. **프로그램 실행 및 로그인**
- 바탕화면의 `Marking System` (`marking_gui`) 프로그램을 실행한 뒤, 작업자 계정 정보를 입력하여 로그인합니다. (데이터베이스 점검 중인 경우 설정 파일을 통해 오프라인 모드로의 진입이 가능합니다.)
3. **통신 상태 확인 및 채널 설정**
4. **통신 상태 확인 및 채널 설정**
- 우측 상단의 `통신 설정` 메뉴에서 센서가 올바른 포트와 채널에 연결되었는지 확인합니다.
4. **검사 규격값 검증**
5. **검사 규격값 검증**
- 우측 상단의 `시험 설정` 메뉴를 열고, 전압/전류/저항 검사 기준치와 각인 템플릿 도면 파일의 경로가 올바른지 점검합니다.
5. **성능 검사 및 마킹 시작**
6. **성능 검사 및 마킹 시작**
- 안착 지그에 제품을 바르게 장착한 뒤 메인 화면 하단의 `검사 시작 (START)` 버튼을 눌러 계측 및 마킹을 수행합니다.
---
*본 문서는 Performance Inspect & Laser Marking System v1.0.0 기준으로 작성되었습니다.*

34
marking_gui/Services/DatabaseService.cs

@ -8,6 +8,7 @@ namespace marking_gui.Services
{
private readonly string _connectionString;
private readonly bool _offlineMode = false;
private readonly System.Collections.Concurrent.ConcurrentDictionary<string, int> _offlineLotSequences = new System.Collections.Concurrent.ConcurrentDictionary<string, int>(StringComparer.OrdinalIgnoreCase);
public bool OfflineMode => _offlineMode;
@ -289,6 +290,15 @@ namespace marking_gui.Services
// 오프라인 모드인 경우 실제 DB 저장을 생략하고 정상 통과 처리
if (_offlineMode)
{
if (!string.IsNullOrWhiteSpace(safeLotNo) && !string.IsNullOrWhiteSpace(markedSerial) && markedSerial.Length >= 4)
{
string seqStr = markedSerial.Substring(markedSerial.Length - 4);
if (int.TryParse(seqStr, out int seqNum))
{
_offlineLotSequences.AddOrUpdate(safeLotNo, seqNum, (key, oldVal) => Math.Max(oldVal, seqNum));
}
}
System.Diagnostics.Debug.WriteLine(string.Format(
"[OfflineMode] DB 저장 생략 (오프라인 모드 활성화) S/N: {0} | 각인번호: {1} | QR: {2} | Maker: {3} | Model: {4} | Line: {5} | LotNo: {6} | Vol_1: {7:F2}V | Cur_1: {8:F2}mA | Res_1: {9:F3}kΩ | 결과: {10} | 시작:{11} | 종료:{12}",
serial, markedSerial, markingQr, safeMaker, safeModel, safeLine, safeLotNo, roundedVoltage, roundedCurrent, roundedResistance, result,
@ -371,28 +381,40 @@ namespace marking_gui.Services
}
}
/// <summary>
/// 지정한 LotNo로 기존에 저장 완료(PASS)된 제품들의 개수를 카운트하여 다음 각인 일련번호를 구합니다.
/// 지정한 LotNo로 기존에 저장된 제품들의 각인 순번 중 최대값을 구하여 다음 각인 일련번호(MAX + 1)를 구합니다.
/// 동일 시료 재검사 시 DB 행이 MERGE UPDATE 되어 레코드 수(COUNT)가 증가하지 않더라도 순번은 지속 증가합니다.
/// </summary>
public int GetNextMarkingSequence(string lotNo)
{
if (string.IsNullOrWhiteSpace(lotNo)) return 1;
if (_offlineMode)
{
return 1;
_offlineLotSequences.TryGetValue(lotNo.Trim(), out int maxSeq);
return maxSeq + 1;
}
try
{
string query = "SELECT COUNT(*) FROM [dbo].[Marking] WHERE [Lot_No] = @LotNo AND ([Result] = 'PASS' OR [Result] = 'OK')";
// Marking_QR (형식: [IC_SN];[도면품번];[HKMC품번];[markedSerial];)에서 맨 뒤 세미콜론 직전의 markedSerial 마지막 4자리를 정수로 추출하여 MAX 산출
string query = @"
SELECT ISNULL(MAX(CAST(RIGHT(RTRIM(SUBSTRING([Marking_QR], 1, LEN([Marking_QR]) - 1)), 4) AS INT)), 0)
FROM [dbo].[Marking]
WHERE [Lot_No] = @LotNo
AND [Marking_QR] LIKE '%;%'
AND LEN([Marking_QR]) >= 5
AND ISNUMERIC(RIGHT(RTRIM(SUBSTRING([Marking_QR], 1, LEN([Marking_QR]) - 1)), 4)) = 1";
using (var conn = new System.Data.SqlClient.SqlConnection(_connectionString))
{
using (var cmd = new System.Data.SqlClient.SqlCommand(query, conn))
{
cmd.CommandTimeout = 5; // DB 응답 대기 최대 5초
cmd.Parameters.AddWithValue("@LotNo", lotNo);
cmd.Parameters.AddWithValue("@LotNo", lotNo.Trim());
conn.Open();
int count = (int)cmd.ExecuteScalar();
return count + 1;
object resultObj = cmd.ExecuteScalar();
int maxSeq = (resultObj != null && resultObj != DBNull.Value) ? Convert.ToInt32(resultObj) : 0;
return maxSeq + 1;
}
}
}

38
marking_gui/Services/EzdMarkingService.cs

@ -52,28 +52,55 @@ namespace marking_gui.Services
[DllImport("MarkEzdWrapper.dll", EntryPoint = "Close", CallingConvention = CallingConvention.Cdecl)]
private static extern int Close(IntPtr hHandle);
private IntPtr _lastWindowHandle = IntPtr.Zero;
private string _lastConfigPath = string.Empty;
public bool Initialize(string configPath, IntPtr windowHandle)
{
try
{
_lastConfigPath = configPath;
if (windowHandle != IntPtr.Zero) _lastWindowHandle = windowHandle;
_lastInitErrorMessage = string.Empty;
_config = new MarkingConfigService();
_ezdFolderPath = _config.EzdFolderPath;
if (string.IsNullOrEmpty(_ezdFolderPath))
{
_lastInitErrorMessage = "Marking.ini 내 EzdFolderPath 경로가 비어 있습니다.";
_lastInitErrorMessage = "Setting.ini 내 EzdFolderPath 경로가 비어 있습니다.";
_isInitialized = false;
return false;
}
// EZCAD.CFG 파일 유무 검증 및 상위/하위 경로 자동 탐색
string cfgFile = Path.Combine(_ezdFolderPath, "EZCAD.CFG");
if (!File.Exists(cfgFile))
{
if (File.Exists(@"c:\EzCad\EZCAD.CFG"))
{
_ezdFolderPath = @"c:\EzCad";
}
else if (File.Exists(@"c:\EzCad\EasyCfg\EZCAD.CFG"))
{
_ezdFolderPath = @"c:\EzCad\EasyCfg";
}
}
if (!Directory.Exists(_ezdFolderPath))
{
_lastInitErrorMessage = string.Format("EzCad 폴더가 존재하지 않습니다: {0} (Marking.ini 설정 확인 필요)", _ezdFolderPath);
_lastInitErrorMessage = string.Format("EzCad 폴더가 존재하지 않습니다: {0} (Setting.ini 설정 확인 필요)", _ezdFolderPath);
_isInitialized = false;
return false;
}
// 기존 핸들이 열려 있다면 정리
if (_markingHandle != IntPtr.Zero)
{
try { Close(_markingHandle); } catch { }
_markingHandle = IntPtr.Zero;
}
System.Diagnostics.Debug.WriteLine("[EzdMarking] 마킹 기계 LMC 초기화 시도. EzCadPath: " + _ezdFolderPath + ", WindowHandle: " + windowHandle);
// 1. InitMarkEzd() 호출로 디바이스 전역 제어 핸들 획득
@ -126,6 +153,13 @@ namespace marking_gui.Services
[System.Security.SecurityCritical]
public MarkingResult RequestMarking(MarkingRequest request)
{
if (!_isInitialized || _markingHandle == IntPtr.Zero)
{
// 각인 요청 시 미초기화 상태이면 1회 자동 재시도(Retry) 수행
System.Diagnostics.Debug.WriteLine("[EzdMarking] 디바이스 미초기화 상태 감지. 재연결 시도...");
Initialize(_lastConfigPath, _lastWindowHandle);
}
if (!_isInitialized || _markingHandle == IntPtr.Zero)
{
return new MarkingResult

30
marking_gui/Services/MarkingConfigService.cs

@ -13,24 +13,40 @@ namespace marking_gui.Services
{
get
{
string path = GetSetting("EzdFolderPath", @"c:\EzCad\EasyCfg");
string path = GetSetting("EzdFolderPath", @"c:\EzCad");
// 1. C:\EzCad\EasyCfg 및 설정 경로 체크, 없으면 실행 파일 기준 폴더 사용
string defaultFallback = Directory.Exists(@"c:\EzCad\EasyCfg") ? @"c:\EzCad\EasyCfg" : AppDomain.CurrentDomain.BaseDirectory;
// 1. 설정된 경로에 EZCAD.CFG가 존재하는지 체크
if (!string.IsNullOrWhiteSpace(path) && Directory.Exists(path) && File.Exists(Path.Combine(path, "EZCAD.CFG")))
{
return path;
}
// 2. C:\EzCad 경로에 EZCAD.CFG가 존재하는지 자동 Fallback 탐색
if (Directory.Exists(@"c:\EzCad") && File.Exists(@"c:\EzCad\EZCAD.CFG"))
{
return @"c:\EzCad";
}
// 3. C:\EzCad\EasyCfg 경로 탐색
if (Directory.Exists(@"c:\EzCad\EasyCfg") && File.Exists(@"c:\EzCad\EasyCfg\EZCAD.CFG"))
{
return @"c:\EzCad\EasyCfg";
}
// 4. 기존 경로 기본 Fallback
string defaultFallback = Directory.Exists(@"c:\EzCad") ? @"c:\EzCad" : AppDomain.CurrentDomain.BaseDirectory;
// 1. 설정값이 비어있을 시 실행 파일 기준 폴더 사용
if (string.IsNullOrWhiteSpace(path))
{
return defaultFallback;
}
// 2. 상대 경로일 시 실행 파일 디렉토리 기준으로 절대 경로 병합
if (!Path.IsPathRooted(path))
{
return Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, path));
string fullPath = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, path));
if (Directory.Exists(fullPath)) return fullPath;
}
// 3. 절대 경로이지만 타깃 경로가 실재하지 않는 경우 실행 파일 폴더로 Fallback
if (!Directory.Exists(path))
{
return defaultFallback;

12
marking_gui/Setting.ini

@ -4,16 +4,16 @@
[Settings]
; 마킹 제어 라이브러리 및 드라이버(EzCad) 폴더 경로
EzdFolderPath=c:\EzCad\EasyCfg
EzdFolderPath=c:\EzCad
; 테스트 모드 여부 (true 시 하단 테스트 마킹, 강제 검사 버튼 노출)
test=false
; 도면품번 (EZD 도안의 도면품번 태그에 채워질 값 — DrawingNoTag에 매핑)
DrawingNo=
DrawingNo=APTSL04A
; HKMC 품번 (EZD 도안의 HKMC 품번 태그에 채워질 값 — HkmcNoTag에 매핑)
HkmcNo=
HkmcNo=254H1-QI080
[Tags]
@ -30,13 +30,13 @@ LotNoTag=YYMMDD
ProductTag=PRODUCT
; DMC 치환 태그
QrCodeTag=QRCODETAG
QrCodeTag=DATAMATRIX
; 도면품번 치환 태그 (EZD 도안 내 도면품번 오브젝트명)
DrawingNoTag=DRAWING_NO
DrawingNoTag=PARTNO
; HKMC 품번 치환 태그 (EZD 도안 내 HKMC 품번 오브젝트명)
HkmcNoTag=HKMC_NO
HkmcNoTag=HKMCPO
; =================================================================

BIN
사용자 메뉴얼.pdf

Binary file not shown.
Loading…
Cancel
Save