diff --git a/README.md b/README.md index ce0c401..e69de29 100644 --- a/README.md +++ b/README.md @@ -1,162 +0,0 @@ -# **[품질] AGING 프로그램** - -## 1. 프로그램 개요 - -| 항목 | 내용 | -| ---------- | ---------------------------------------------------------------- | -| **프로그램 명** | `AgingTester` | -| **실행 파일 명** | `DUALSONIC Asing.exe` | -| **설치 위치** | 6층 공장 라인 Aging 공정 구역 | -| **용도** | 완제품을 온도 유지 장치에 넣고 장시간 동작 테스트 수행샷 발사 명령 전송 → 기기에서 반복 샷 작동1초 간격 온도 수집 및 기준 초과 시 불량 처리 | - ---- - -## 2. 프로그램 UI - -| 메인 화면 | 실행 화면 | -| ------------------------ | --------------------------- | -| ![메인 화면](docs/aging_main.png) | ![실행 화면](docs/aging_start.png) | - ---- - -## 3. UI 구성요소 및 파일 - -### (1) **UI 구성요소** - -- 상단: 현재시간, 시험 장소 온도, 판별온도 설정, 통신 설정, 합격범위지정 버튼, 샷 리미트 지정 버튼, 지그번호 콤보박스, 시작버튼 -- 설정 UI 및 버튼 동작 - - **샷(Shot) 합격 범위 설정 UI 및 버튼 동작** - 1. **btn_shot 클릭 시** → - - `gb_shot_range` 그룹박스를 `(1180,12)` 위치, `(533,75)` 크기 표시 (`Visible = True`) - - `gb_limit` 그룹박스는 숨김 (`Visible = False`) - 2. **btn_shot_ok 클릭 시** → - - `gb_shot_range` 그룹 박스를 숨김 (`Visible = False`) - - `Save_ini()` 함수 호출 → 설정 값 저장 - 3. **최소·최대 값 입력 (txb_minimum, txb_maximum)** → - - 클릭 시 `ReadOnly = False`면 텍스트 비움 (`Text = ""`) - - → 이 값들이 결국 **샷 합격 범위 (최소/최대)** 값으로 저장됨 - - - **샷(Shot) 리미트 지정 UI 및 버튼 동작** - 1. **btn_limit 클릭 시** - - `gb_limit` 그룹박스를 `(1180,12)` 위치, `(533,75)` 크기로 보이게 표시 - - `gb_shot_range` 그룹박스는 숨김 (`Visible = False`) - 2. **btn_limit_save 클릭 시** - - `gb_limit` 그룹박스를 숨김 (`Visible = False`) - - `Save_ini()` 호출 → **리미트 설정값 저장** - - 지그번호 콤보박스 - 1. **nudJigNum 값 변경 시** - - `StartSwitch` 값이 `True`이면 → `Save_ini()` 호출 (설정 저장) - - `StartSwitch` 값이 `False`이면 → `StartSwitch = True`로 설정 (다음 변경부터 저장 동작 활성화) - - 즉, 처음에는 `StartSwitch`를 `True`로 만들어 준비 그 이후부터 값 변경 시 자동으로 설정을 저장하는 역할 -- 중단: 채널 별 본체SN, 카트리지SN, 시작시간, 실행시간, Shot 카운터, 본체 카트리지 시작/현재온도 - -### (2) 파일 `DS_Config.ini` - -- 판별 온도 설정 - 본체 온도: 48.0, 카트리지 온도 : 48.0 `txbDevTemp`, `txbCartTemp` -- 샷 리미티드 지정 - 제한 샷수 : 330 `txb_limit`, 오차 범위 : 1 `nudErrRange` -- 샷 합격 범위 지정 - 최소 200 ~ 최대 300 `txb_minimum`, `txb_maximum` -- JIG 번호 : 1 `nudJigNum` ---- - -## 4. 검사 순서 흐름 - -``` -[시작 버튼 클릭] - ↓ -[cmdRunButton() 실행] → [설정값 저장 및 초기화] → [펌웨어 명령어 전송: agenable chNum, 1] → [SendData() 호출] - ↓ -[타이머 실행 (cmdTimer_Tick())] - ↓ -[ReceiveData() 호출] → [펌웨어로부터 데이터 수신] - ↓ -[메시지 해석] → [UI 업데이트] (예: [avalue], [aerror], [dsfwver]) - ↓ -[자동 종료 조건 체크] - ├── [온도 기준 충족 시 → 테스트 자동 종료] - ├── [샷 수 기준 충족 시 → 테스트 자동 종료] - └── [에러 발생 시 → 에러 메시지 출력 및 UI 반영] - ↓ -[결과 저장] → [PostgreUpdateReg() 호출] → [결과 PostgreSQL에 저장] - ↓ -[중지 버튼 클릭 시] - ↓ -[agenable chNum, 0] → [펌웨어에 테스트 중지 명령 전송] → [테스트 종료] - -``` - ---- - -## 5. MES 데이터 저장 구조 (temperature_chambers: 온도 에이징 검사기) - -| 필드 이름 | 값 예시 | 설명 | PostgreSQL 컬럼명 | PostgreSQL 값/코드 | Null 허용 | -| --- | --- | --- | --- | --- | --- | -| jig_num | 1 | 지그 번호 (nudJigNum.Value) | chNum | chNum | O | -| jig_ch | 0 | 채널 번호 (0~10) | chNum | chNum | O | -| test_date | 2025-05-09 | 테스트 날짜 (AG_DATE) | AG_DATE | AG_DATE(chNum) | O | -| start_time | 14:32:10 | 테스트 시작 시간 (AG_StartTime) | AG_StartTime | AG_StartTime(chNum) | O | -| run_time | 0:27:50 | 테스트 경과 시간 (txbEndTime) | txbEndTime | txbEndTime((cmdVal(1))).Text | O | -| end_time | 15:00:00 | 테스트 종료 시간 (시스템 시간) | endtime | now | O | -| div_num | DIV001 | 메인 장비 SN (AG_Device_SN) | AG_Device_SN | AG_Device_SN(chNum) | O | -| cart_num | CART001 | 카트리지 SN (AG_Cart_SN) | AG_Cart_SN | AG_Cart_SN(chNum) | O | -| test_result | PASS | 테스트 결과 (PASS / FAIL) | OkNg | OkNg | O | -| limit_div_temp | 60 | 디바이스 온도 기준 (txbDevTemp) | txbDevTemp | txbDevTemp.Text | O | -| limit_cart_temp | 50 | 카트리지 온도 기준 (txbCartTemp) | txbCartTemp | txbCartTemp.Text | O | -| limit_shot | 200 | 샷 수 기준 (txb_limit) | txb_limit | txb_limit.Text | O | -| divtemp_start | 36.5 | 디바이스 시작 온도 (txtMain...) | txtMainStartTemp | txtMainStartTemp(Val(cmdVal(1))).Text | O | -| divtemp_end | 38.1 | 디바이스 종료 온도 (txtMain...) | txtMainEndTemp | txtMainEndTemp(Val(cmdVal(1))).Text | O | -| carttemp_start | 40 | 카트리지 시작 온도 | txtCartStartTemp | txtCartStartTemp(Val(cmdVal(1))).Text | O | -| carttemp_end | 48 | 카트리지 종료 온도 | txtCartEndTemp | txtCartEndTemp(Val(cmdVal(1))).Text | O | -| run_shot | 201 | 총 샷 수 (txbShotCnt) | txbShotCnt | txbShotCnt(Val(cmdVal(1))).Text | O | -| error_code | 0 | 에러 코드 (빈 값 또는 코드, 0=정상) | AG_ERROR | AG_ERROR(chNum) | O | -| created_at | 2025-05-09 15:00:00 | 등록 시간 (NOW()) | created_at | NOW() | O | -| updated_at | 2025-05-09 15:00:00 | 수정 시간 (NOW()) | updated_at | NOW() | O | - - ---- - -## 📎 기타 참고 자료 (흐름도) - -```mermaid -flowchart TD - - A[프로그램 시작] --> B[설정 파일 읽기] - B --> C[설정값 UI 반영
or 기본값 저장] - - C --> D[시작 버튼 클릭] - D --> E[채널별 반복 실행] - - E --> F[버튼 텍스트 '중지'로 변경] - F --> G[통신 플래그 및 UI 상태 초기화] - G --> H[JSON 데이터 초기화] - H --> I[장비 시작 명령 전송
agenable chNum, 1] - - I --> J[타이머 실행 시작] - J --> K[타이머 tick 발생] - K --> L[ReceiveData 호출
펌웨어 데이터 수신] - L --> M[샷 수/온도 UI 갱신] - - M --> N{자동 종료 조건 충족?} - N -->|예| O[중지 버튼 클릭 처리 시나리오로 진입] - N -->|아니오| K - - O[중지 버튼 클릭 시작 텍스트로 변경] --> P[타이머 중지 및 상태 초기화] - P --> Q[테스트 중지 명령 전송
agenable chNum, 0] - Q --> R[샷 수 / 온도 기준 판정] - - R --> S{합격 기준 충족?} - S -->|PASS| T[결과 표시: PASS
UI 초록색, 로그 저장] - S -->|FAIL| U[결과 표시: FAIL
UI 빨간색, 로그 저장] - - T --> V[PostgreSQL 등록] - U --> V - - V --> W[SQL INSERT 실행
temperature_chambers 테이블 기록] - W --> X[UI 및 로그 갱신] - - X --> Y{다른 채널 남았는가?} - Y -->|예| E - Y -->|아니오| Z[프로그램 종료 or 대기 상태] - -``` -