diff --git a/.vs/marking_gui.slnx/v18/.suo b/.vs/marking_gui.slnx/v18/.suo index 6307935..67c01aa 100644 Binary files a/.vs/marking_gui.slnx/v18/.suo and b/.vs/marking_gui.slnx/v18/.suo differ diff --git a/docs/developer_manual.md b/docs/developer_manual.md index 8b1f1c9..acb42a2 100644 --- a/docs/developer_manual.md +++ b/docs/developer_manual.md @@ -46,24 +46,22 @@ test=false [Tags] ; 도안(.ezd) 파일 내의 텍스트 오브젝트 치환용 태그명 매핑 리스트 ; (도안에 정의된 오브젝트명과 동일하게 설정해야 정상 작동합니다) +; ※ 아래 5개 태그만 치환됩니다. 불필요 태그는 사용하지 않습니다. -; 일련번호 (Serial Number) 치환 태그 +; 일련번호 4자리 순번 치환 태그 (예: 0001) SerialTag=SERIAL -; 작업 년월일 (Lot No) 치환 태그 +; 작업 Lot No 치환 태그 (로그인 입력값 YYMMDDLL 전체 전달, 예: 26080401) LotNoTag=YYMMDD -; 제품 모델명 (Product Name) 치환 태그 -ProductTag=PRODUCT +; QR 코드 데이터 치환 태그 (IC_SN;도면품번;HKMC품번;각인번호; 포맷) +QrCodeTag=DATAMATRIX -; QR 코드 데이터 치환 태그 -QrCodeTag=QRCODETAG +; 도면 품번 치환 태그 +DrawingNoTag=PARTNO -; 검사 라인 코드 치환 태그 -LineTag=LCODE - -; 작업 조 (Shift) 치환 태그 -ShiftTag=BAN +; HKMC 품번 치환 태그 +HkmcNoTag=HKMCPO ; ================================================================= @@ -188,18 +186,18 @@ Channel=1 - `IsActive` (BIT): 활성 상태 여부 - **`[dbo].[Marking]` (최종 성능 계측값 및 마킹 결과 저장 테이블)** - - `IC_SN` (VARCHAR(50), PRIMARY KEY): 센서 일련번호 - - `Marking_QR` (VARCHAR(100), UNIQUE): 고유 QR 코드 문자열 (yyMMdd + 일련번호) - - `Maker` (VARCHAR(50)), `Model` (VARCHAR(50)): 제품 사양 정보 - - `Variant_1`, `Variant_2` (VARCHAR(50)) - - `Operator` (VARCHAR(50)): 담당 작업자 ID + - `IC_SN` (NVARCHAR(30), PRIMARY KEY, NOT NULL): 센서 IC 일련번호 (30자 초과 시 코드 내에서 절삭) + - `PCB_Barcode` (NVARCHAR(30), NOT NULL): PCB 바코드 — 정상 검사 시 스캔값, 강제검사(BYPASS) 시 `IC_SN` 값으로 대체 저장 + - `Marking_QR` (NVARCHAR(60), NOT NULL): 각인 QR 코드 전체 문자열 (`IC_SN;도면품번;HKMC품번;각인번호;` 포맷, 60자 초과 시 절삭) + - `Maker` (VARCHAR(10)), `Model` (VARCHAR(10)): 제품 사양 정보 (10자 초과 시 코드 내에서 절삭) + - `Variant_1`, `Variant_2` (VARCHAR(10)): 제품 변형 코드 (10자 초과 시 절삭) + - `Operator` (VARCHAR(10)): 담당 작업자 ID (10자 초과 시 절삭) - `Production_Date` (DATETIME): 생산 일자 및 계측 시간 - `Line` (VARCHAR(10)): 생산 라인 (최대 10자 제한, 초과 시 코드 내에서 절삭) - - `Lot_No` (VARCHAR(8)): 로트 번호 (최대 8자 제한, 초과 시 코드 내에서 절삭) - - `Jig_No` (VARCHAR(10)): 지그 번호 - - `PT_Vol_1` (DECIMAL(18,2)), `PT_Current_1` (DECIMAL(18,2)), `PT_Resistance_1` (DECIMAL(18,3)): 실측 전압, 전류, 저항값 - - `Result` (VARCHAR(10)): 최종 종합 판정 (`PASS` 또는 `FAIL`) - - `MarkedSerial` (VARCHAR(50)): 최종 마킹된 시퀀스 코드 + - `Lot_No` (VARCHAR(10)): 로트 번호 — `YYMMDDLL` 형식 입력 (최대 10자 제한, 초과 시 코드 내에서 절삭) + - `Jig_No` (VARCHAR(10)): 지그 번호 (10자 초과 시 절삭) + - `PT_Vol_1` (DECIMAL(4,2)), `PT_Current_1` (DECIMAL(4,2)), `PT_Resistance_1` (DECIMAL(5,3)): 실측 전압(V), 전류(mA), 저항(kΩ) — 소수점 이하 2~3자리로 반올림 적재 + - `Result` (VARCHAR(10)): 최종 종합 판정 — **`OK`** (QR 검증 통과) 또는 **`NG`** (불합격 또는 QR 검증 실패) ### 3.2 이전 공정 결과 교차 검증 (Subquery) 검사 개시 시점, 제품의 S/N(`IC_SN`)을 기반으로 선행 공정이 완료되었는지 조회합니다. diff --git a/docs/knowledge_base.md b/docs/knowledge_base.md index e3e1cd0..e27b41a 100644 --- a/docs/knowledge_base.md +++ b/docs/knowledge_base.md @@ -31,7 +31,7 @@ 전압과 전류에 국한되었던 기존 시스템에 저항 검사 프로세스를 추가하여 3대 전기 파라미터를 완성했습니다. - **물리적 개연성 반영:** V = I * R 연계를 고려하여, 전압(4~6V) 및 전류(8~10A) 조건에서 저항 기본 범위를 **0.4Ω ~ 0.8Ω**으로 세팅했습니다. - **UI 및 환경설정 연동:** 메인 화면에 세 번째 Column으로 `측정 저항 (Resistance)` 카드를 시각적으로 추가하고 설정 창(SettingsWindow)의 세로 크기를 늘려 저항 판정 임계치 입력란을 통합했습니다. -- **판정 결합:** `isFinalPass = isVoltageOk && isCurrentOk && isResistanceOk` 조건을 통해 세 항목 중 하나라도 이탈 시 자동으로 빨간색 텍스트 및 대형 FAIL 판정이 출력되도록 비즈니스 로직을 보강했습니다. +- **판정 결합:** `isFinalPass = isVoltageOk && isCurrentOk && isResistanceOk` 조건을 통해 세 항목 중 하나라도 이탈 시 자동으로 빨간색 텍스트 및 대형 **`NG`** 판정이 출력되도록 비즈니스 로직을 보강했습니다. ### 2.2. 로그인 저장 프로시저 호출 연동 인라인 SQL 질의 구조를 탈피하여 외부 설정에 명시된 SQL Server 저장 프로시저를 직접 호출하도록 구현했습니다. @@ -105,10 +105,13 @@ - 작업자의 고유 ID(`OperatorId`), 패스워드(`Password`), 이름(`Name`) 및 계정 상태(`IsActive`)를 관리합니다. - 로그인 조회 속도를 향상시키기 위해 `OperatorId` 컬럼에 UNIQUE 제약 조건을 할당했습니다. - **[dbo].[Marking] (공정 메타데이터 및 성능 계측값 저장 테이블):** - - 바코드 S/N(`IC_SN`, 기본키)을 키로 하며, 고유 식별을 위해 메타데이터와 날짜 조합의 고유 키 `Marking_QR` (Unique Key)이 생성됩니다. - - 공정 정보(`Maker`, `Model`, `Variant_1`, `Variant_2`, `Operator`, `Production_Date`, `Line`, `Lot_No`, `Jig_No`) 및 최종 판정(`Result`)이 통합 적재됩니다. - - 3단계에 걸친 전압/전류/저항 컬럼(`PT_Vol_1~3`, `PT_Current_1~3`, `PT_Resistance_1~3`)이 존재하며, 현재는 1번 컬럼들에 최종 계측 수치(소수점 2자리 반올림)를 저장하고 2, 3번 컬럼은 `0.00`으로 기본값을 보정하여 저장합니다. - - DB 필드 크기 한계를 초과하여 적재 에러가 나지 않도록, `Line` 컬럼은 최대 5자, `Lot_No` 컬럼은 최대 8자 등으로 자르는(Truncate) 방어적 코드 처리가 수행됩니다. + - 바코드 S/N(`IC_SN`, NVARCHAR(30), 기본키, NOT NULL)을 키로 하며, 30자 초과 시 코드 내에서 절삭합니다. + - `PCB_Barcode` (NVARCHAR(30), NOT NULL): 정상 검사 시 PCB 바코드 스캔값, 강제검사(BYPASS) 시 `IC_SN` 값으로 자동 대체 저장됩니다. + - 고유 QR 코드 문자열 `Marking_QR` (NVARCHAR(60)): `IC_SN;도면품번;HKMC품번;각인번호;` 포맷으로 구성되며, 60자 초과 시 절삭합니다. + - 공정 정보(`Maker`, `Model`, `Variant_1`, `Variant_2`, `Operator`, `Production_Date`, `Line`, `Lot_No`, `Jig_No`) 및 최종 판정(`Result`)이 통합 적재됩니다. 각 문자열 컬럼은 최대 10자로 초과 시 절삭 처리됩니다. + - 3단계에 걸친 전압/전류/저항 컬럼(`PT_Vol_1~3`, `PT_Current_1~3`, `PT_Resistance_1~3`)이 존재하며, 현재는 1번 컬럼들에 최종 계측 수치(소수점 2~3자리 반올림)를 저장하고 2, 3번 컬럼은 `0.00`으로 기본값을 보정하여 저장합니다. + - `Result` 컬럼에는 **`OK`** (QR 검증 통과 시) 또는 **`NG`** (불합격 또는 QR 검증 실패 시) 두 가지 값만 저장됩니다. + - `Lot_No` 컬럼은 `YYMMDDLL` 형식(예: `26080401`)으로 입력되며 최대 **10자**까지 허용됩니다. ### 4.2. 로그인 검증 저장 프로시저 ([CheckOperator]) - **프로시저 기능:** 입력된 ID와 패스워드가 활성 상태인 작업자 테이블에 매칭되는지 대소문자 구분 없이 카운팅합니다. diff --git a/marking_gui/MainWindow.xaml b/marking_gui/MainWindow.xaml index a4c8c69..d4eb44c 100644 --- a/marking_gui/MainWindow.xaml +++ b/marking_gui/MainWindow.xaml @@ -11,6 +11,12 @@ WindowStartupLocation="CenterScreen" Background="#F3F4F6" ContentRendered="Window_ContentRendered"> + + + + + + + + + +