# **[생산] DUALSONIC 정보 입력 프로그램 (PRO, LUX, ALPHA)** ## 1. 프로그램 개요 | 항목 | 내용 | | --- | --- | | **프로그램 명** | `DualsonicSerialAssigner` | | **실행 파일 명** | `DUALSONIC_INFO_SET.exe` | | **설치 위치** | 6층 공장 안쪽 두 번째 책상 | | **주요 기능** | 아이/페이스 카트리지 및 본체 지그 장착 후 데이터 판독 | | **데이터 처리** | TD SN은 PCB에서 직접 읽고, 나머지 정보는 NAS DB에서 조회 | ### 접근 권한 | 사용자 구분 | ID | 패스워드 | 모드 | 권한 | | --- | --- | --- | --- | --- | | 생산 포장 | 포장 | p1234 | 쓰기모드 | 데이터 입력/수정/저장 | | 공정 품질 | 공정품질 | qc405 | 읽기모드 | 데이터 조회만 | ## 2. UI | 쓰기 모드 화면 | 읽기 모드 화면 | | --- | --- | | ![쓰기모드 화면](/docs/write-main.PNG) | ![읽기모드 화면](/docs/read-main.PNG) | | 설정 화면 | | | --- | --- | |![설정 화면](/docs/setting.png)|| ### 모드별 특징 #### 쓰기 모드 (WRITE_MODE) - **활성화된 입력 필드**: 모든 데이터 입력 가능 - **저장 버튼**: 데이터 저장 기능 활성화 - **상태 표시**: 실시간 쓰기 진행 상태 표시 - **에러 처리**: 상세한 오류 메시지 제공 #### 읽기 모드 (READ_MODE) - **비활성화된 입력 필드**: 읽기 전용 인터페이스 - **조회 버튼**: 정보 확인 기능만 제공 - **간소화된 상태**: 기본적인 상태 정보만 표시 - **제한된 피드백**: 필수 정보만 표시 ## 3. 쓰기 모드 (WRITE_MODE) | 단계 | 주요 내용 | 조건/함수 | 비고 | | --- | --- | --- | --- | | ① | 바코드 앞 2자리 확인 → 모델 유형 확인 | `tmpModelType = Val(Mid(...))` | 잘못된 형식이면 종료 | | ② | 중복 여부 확인 | `td_Compare(..., "jomtProductTbl")td_Compare(..., "jomtCartridgeTbl")` | 중복 시 → `DUPLICATION_NG`로 점프 | | ③ | 길이 검사 (12자리) | `Len(txbBarcodeNum.Text) <> 12` | 틀리면 종료 | | ④ | 바코드 파싱 및 판정 | `RET_VAL = RunSN_Parsing(...)` | 결과값: `"타입"`, `"타입,DIFFERENT"` 등 | | ⑤ | DIFF 처리 | 모델/SN/날짜 다르면 색상 빨간색으로 표시 | `DIFF_MATCH_FLAG(...)` 활용 | | ⑥ | 중복된 기기 타입이면 → 무시 | `If GetConnectStatus(RET_TYPE) = True` | 이미 연결됨 처리됨 | | ⑦ | 정상 처리되면 → 바코드 박스에 표시 + 텍스트박스 잠금 여부 결정 | `EnableBarCodeTxbToggle(...)` | | | ⑧ | 모든 장비가 다 입력되었으면 → 자동으로 `RunProcess()` 실행 | `If IsComplete() = "COMPLETE"` | | ## 4. 읽기 모드 (READ_MODE) | 단계 | 주요 내용 | 조건/함수 | 비고 | | --- | --- | --- | --- | | ① | 바코드 앞 2자리 값으로 모델 유형 판단 | `tmpModelType = Val(Mid(txbBarcodeNum.Text,1,2))` | 유효하지 않은 경우 함수 종료 | | ② | 바코드 길이 검사 (12자리) | `Len(tmpCmd) <> 12` | 조건 불충족 시 종료 | | ③ | 바코드 입력 박스 상태 변경 (읽기 중 표시, 배경색 변경) | `txbBarcodeNum.BackColor = Color.YellowGreen` 등 | UI 피드백 제공 | | ④ | 두 번째 자리 값으로 장비 타입 분류 | `tmpType = Val(Mid(tmpCmd, 2, 1))` | `DS_TYPE` 상수 기준 | | ⑤ | 텍스트박스 초기화 | `ReadModeTextBoxAllReset()` | 이전 정보 초기화 | | ⑥ | 장비 타입에 따른 처리 분기 | `If tmpType = DS_TYPE.DS_DEV Then ... Else ...` | 장비별 그룹박스 위치 조정 및 표시 | | ⑦ | DEV 타입인 경우 | `ReadDeviceInfo()` 호출하여 DB에서 장비 정보 읽기 시도 | 실패 시 바코드박스 빨간색 표시 | | ⑧ | FACE, EYE 타입 바코드 추출 및 DB 읽기 시도 | `GetProductSN()` 및 `ReadCartInfo()` 호출 | 실패 시 각 바코드박스 빨간색 표시 | | ⑨ | DEV 외 타입인 경우 해당 그룹박스 위치 설정 및 가시화 | 실패 시 해당 바코드박스 빨간색 표시 | `tmpType` 기준으로 처리 | | ⑩ | 전체 상태에 따라 바코드 박스 메시지 및 색상 변경 | 성공: 녹색 / 실패: 빨간색 | 사용자 피드백 | | ⑪ | 바코드 입력 박스에 포커스 재설정 | `SetBarCodeBoxFocus()` | |