# **\[입고] TD 검사기 C 값 납땜 공정 프로그램**

## 1. 프로그램 개요

| 항목          | 내용                                                         |
| ----------- | ---------------------------------------------------------- |
| **프로그램 명**  | TDTestExecutor                                             |
| **실행 파일 명** | DUALSONIC TD Select Tester.exe                             |
| **설치 위치**   | 9층 입구 정면 (수입 검사용), 6층 공장 입구 오른쪽 안쪽 (납땜 공정용)                |
| **용도**      | Transducer(TD)의 검사 및 납땜 전 전류값 측정, 기준 등급(C값) 결정 및 PCB 정보 기록 |

---

## 2. 프로그램 UI

| 품질 화면                         | 생산1 화면                         |
| ----------------------------- | ------------------------------ |
| ![메인 화면](docs/td_1.png) | ![실행 화면](docs/td_2.png) |

| 생산3 화면                        | 설정 화면                          |
| ----------------------------- | ------------------------------ |
| ![메인 화면](docs/td_3.png) | ![실행 화면](docs/td_setting.png) |

---

## 3. 기능 요약

| 기능                | 설명                                                |
| ----------------- | ------------------------------------------------- |
| **검사 모드 선택**      | 품질 / 생산1 / 생산3 등 검사 목적에 따라 라디오 버튼으로 모드 분기         |
| **TD 측정**         | 시리얼 넘버 입력 → 스코프 설정 → 전류값 측정 → 등급(C값) 판정           |
| **C값 계산 및 등급 판정** | 측정된 전류값(R1\~R10) 중 최대값 기준 등급: pro > lux > eye     |
| **DB 저장**         | 측정 결과를 MES(NAS) 서버에 업로드: 결과, 측정값, 기준값 등 포함        |
| **설정 저장 기능**      | 검사 기준값 및 장비 설정을 config 파일 및 DB에 저장                |
| **시리얼 통신**        | 장비 및 릴레이 제어: CLS 명령어, 주파수 세팅, 릴레이 on/off, 측정 요청 등 |

### ● 모드 1번: 품질 **수입 검사 (IQC)**

- `RunProcessIQC()` → `MeasureTime()` → `RunMeasure()` → `"Judgment start"`
- **측정 후, 최대 전류값 → 등급 비교 → DB 저장 (MES : TD 측정 결과 저장[transducers]/ NAS: TD 측정 정보 저장[jomtCartridgeTbl], 오늘 측정 TD 수량 저장[jomtMES_IQCTbl])**

### ● 모드 2번: 생산 1 **PD1**

- `RunCartInfoReadPD1()`
- 이미 저장된 측정값을 읽어오고, 색상별로 전류값을 구분해서 표시
- 별도 측정 없이 **정보 확인 및 저장 위주 [jomtCartridgeTbl]에서 시리얼넘버로 TD정보, IQC 검사 결과 가져오기**

### ● 모드 3번: 생산 3 **PD3**

- `RunProcessPD3()`
- 생산 과정 중 설정값 확인, 릴레이 설정, 모드 정보 등 포함
- 별도 측정 없이 **정보 확인 및 저장 위주 [jomtCartridgeTbl]에서 시리얼넘버로 TD정보, IQC 검사 결과 가져오기**

→ 용도는 다르지만 구조는 비슷하게 `RunProcess()`에서 분기 처리

---

## 4. 검사 순서 흐름

```
[프로그램 실행] 
    ↓
[frmTD_JIG_Load()]
    → Config 파일 로딩, 스코프 초기화, DB 연결
    ↓
[로그인 및 검사 모드 선택]
    ↓
[시리얼 넘버(S/N) 입력]
    ↓
[RunProcess() 호출]
    → LoadDB() → ResetRegMeasure() → LoadRegTD()
    ↓
[스코프 설정 / 주파수 설정 / 릴레이 설정]
    ↓
[더미샷 → 측정샷]
    ↓
[RunMeasure()] → 측정값 반환
    ↓
[Judgment start] → 측정값 분석 → 등급 판단 (pro/lux/eye)
    ↓
[DB 저장]
    → MES: 측정 결과 등록
    → NAS: 측정 정보 저장
    → 오늘 측정 수량 업데이트
```

---
## 5. DB

### (1) MES DB (`transducers`)

| 항목       | 변수명           | 예시         |
| -------- | ------------- | ---------- |
| 지그 번호    | `jig_num`     | 1          |
| 측정일      | `test_date`   | 2025-05-21 |
| 측정시간     | `test_time`   | 16:12:23   |
| TD 시리얼번호 | `td_serial`   | J124300004 |
| 주파수      | `td_freq`     | 7070       |
| 임피던스     | `td_imp`      | 108.2      |
| 합불 판정    | `test_result` | 합격         |
| 등급       | `td_grade`    | PRO        |
| 측정 C값    | `td_c`        | 82         |

### (2) NAS DB (`jomtCartridgeTbl`, `jomtMES_IQCTbl`, `jomtMES_PD1Tbl`)

#### \[IQC 초기 등록] `LoadRegTD()` (SELECT)

* `PV_Date`, `PV_Frequency`, `PV_Impedance`, `PV_Capacitance`, `PV_Resistance`, `TestStep`

#### \[IQC 결과 저장] `UploadDB_IQC()` (UPDATE)

* `QC_LastDate`, `TestStep = 11`, `QC_Frequency`, `QC_Current`, `QC_Capacitor`, `QC_Grade`, `QC_R1Value`\~`R10Value`, `QC_Date`, `QC_Time`

#### \[PD1 값 읽기] `RunCartInfoReadPD1()` (SELECT)

* `TestStep`, `QC_Grade`, `QC_Capacitor`

#### \[PD1 결과 저장] `UploadDB_PD1()` (UPDATE)

* `TestStep = 21 or 31`, `P1_Frequency`, `P1_Model`, `P1_CartType`, `P1_Date`, `P1_Time` 또는 `P0_Model`, `P0_Type`, `P0_Date`, `P0_Time`

#### \[IQC 수량 저장] `UploadCntDB_IQC()` (UPDATE)

* `IQC_TotalCnt`, `IQC_OkCnt`, `IQC_NgCnt`, `IQC_ProCnt`, `IQC_LuxCnt`, `IQC_EyeCnt`, `IQC_R1Cnt~R10Cnt`, `IQC_ReTotalCnt`, `IQC_ReOkCnt`, `IQC_ReNgCnt`

#### \[PD1 수량 저장] `UploadCntDB_PD1()` (UPDATE)

* `PD1_TotalCnt`, `PD1_OkCnt`, `PD1_NgCnt`, `PD1_ProCnt`, `PD1_LuxCnt`, `PD1_EyeCnt`, `PD1_MAXCnt`, `PD1_R1Cnt~R10Cnt`

---

## 📎 기타 참고 자료 (흐름도)

```mermaid
flowchart TD
    A[프로그램 실행] --> B[사용자 설정]
    B --> C[frmLogin_Load]
    C --> D[사용자 인증 후 설정 진입]
    D --> E[RunProcess 호출]

    %% 1. IQC 검사 흐름
    E --> F1[모드 1: IQC T/D 수입 검사]
    F1 --> F2[시리얼번호 스캔 → 측정 시작]
    F2 --> F3[TD 정보 로드]
    F3 --> F4[ runbeep1 삐 소리 내기]
    F4 --> F5[장비 상태 클리어 CLS]

    F5 --> F6{측정 유형}
    F6 -->|더미샷| F6a[SetFrequency]
    F6a --> F6b[SetRelay 1,1]
    F6b --> F6c[단일 측정 :Single]
    F6c --> F6d[RunShot]
    F6d --> F6e[RunMeasure]

    F6 -->|측정샷| F6f[SetFrequency]
    F6f --> F6g[SetRelay Relay_C,1]
    F6g --> F6h[단일 측정:Single]
    F6h --> F6i[RunShot]
    F6i --> F6j[RunMeasure]
    F6j --> F6k[측정값 분석<br>Judgment start]
    F6k --> F6l[최대값 저장 및 등급 결정]

    F6l --> F7[DB 저장]
    F7 --> F7a[→ MES transducers]
    F7 --> F7b[→ NAS jomtCartridgeTbl]
    F7 --> F7c[→ NAS jomtMES_IQCTbl]

    %% 2. PD1 공정
    E --> G1[모드 2: 캐패시터 값 확인]
    G1 --> G2[TD 정보 로드 LoadRegTD]
    G2 --> G3[RunProcessPD1]
    G3 --> G4[RunCartInfoReadPD1]
    G4 --> G5[RELAY 별 최대 전류값 → 색상 표시]
    G5 --> G6[보드 장착 수량 계산 후 DB 저장]

    %% 3. PD2 (미사용)
    E --> H1[모드 3: PD2 카트리지 조립 성능검사]
    H1 --> H2[현재 미사용 주석처리]

    %% 4. 도트 검사
    E --> I1[모드 4: 도트 검사]
    I1 --> I2[TD 정보 로드< LoadRegTD]
    I2 --> I3[RunCartInfoReadPD3]
    I3 --> I4[RunProcessPD3]
    I4 --> I5[SetRelay Cnt, 1]

    %% 종료
    F7c --> Z[종료 버튼 클릭 → 종료]
    G6 --> Z
    I5 --> Z

```
