You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
8.4 KiB
137 lines
8.4 KiB
|
4 weeks ago
|
# Pressure Leak Inspect System (기밀 시험 시스템 GUI)
|
||
|
|
|
||
|
|
Windows 기반 Air Leak Test 장비를 위한 제어 및 모니터링 GUI 프로그램입니다. WPF(C#)를 사용하여 제작되었으며, MVVM 패턴을 적용하여 하드웨어 통신 계층과 UI 계층이 분리된 구조를 가지고 있습니다.
|
||
|
|
|
||
|
|
## 📂 프로젝트 파일 구조
|
||
|
|
|
||
|
|
```text
|
||
|
|
leak_test_project/
|
||
|
|
├── Infrastructure/ # 하드웨어 통신 계층 (Low-Level Communication)
|
||
|
|
│ ├── ICommunication.cs # 통신 방식(Serial, TCP) 추상화 인터페이스
|
||
|
|
│ └── SerialProvider.cs # RS232 시리얼 통신 구현체 (8N1, IDisposable)
|
||
|
|
├── Models/ # 데이터 모델
|
||
|
|
│ ├── AppConfig.cs # 앱 설정 (Port, BaudRate, Spec UL/LL)
|
||
|
|
│ ├── InOutItem.cs # I/O 항목 모델 (Address, Name, Description)
|
||
|
|
│ ├── InspectData.cs # 검사 결과 데이터 모델
|
||
|
|
│ └── ParsedData.cs # Sentinel C28 파싱 결과 모델
|
||
|
|
├── Services/ # 비즈니스 로직 및 기기 제어
|
||
|
|
│ ├── IoBoardService.cs # I/O 보드 서비스 (더미 데이터, LEFT/RIGHT 구분)
|
||
|
|
│ └── SentinelC28Service.cs # Sentinel C28 프로토콜 (자동 재연결 포함)
|
||
|
|
├── Utils/ # 유틸리티
|
||
|
|
│ ├── ConfigManager.cs # XML 기반 설정 관리 (Load/Save)
|
||
|
|
│ ├── CsvExporter.cs # 범용 CSV 내보내기
|
||
|
|
│ ├── FileLogger.cs # 일일 CSV 로그 자동 저장 + 시스템 로그
|
||
|
|
│ ├── LogParser.cs # CSV 로그 파싱 및 검색 필터링
|
||
|
|
│ ├── SentinelCrc8.cs # CRC-8 체크섬 계산
|
||
|
|
│ └── SentinelParser.cs # C28 데이터 파싱 (스트리밍/최종결과)
|
||
|
|
├── ViewModels/ # MVVM ViewModel
|
||
|
|
│ ├── Core/
|
||
|
|
│ │ ├── ObservableObject.cs # INotifyPropertyChanged 베이스 클래스
|
||
|
|
│ │ └── RelayCommand.cs # ICommand 구현
|
||
|
|
│ ├── DataViewModel.cs # 데이터 조회/CSV 내보내기 로직
|
||
|
|
│ ├── HomeViewModel.cs # 2채널 통신, 측정, 판정, 로그 기록
|
||
|
|
│ ├── InOutViewModel.cs # I/O 모니터 페이징 로직
|
||
|
|
│ ├── MainViewModel.cs # 화면 전환 및 앱 생명주기 관리
|
||
|
|
│ └── ParametersViewModel.cs # 파라미터 설정 (예비)
|
||
|
|
├── Views/ # UI 화면
|
||
|
|
│ ├── CommunicationWindow.xaml(.cs) # 통신 설정 (포트/보드레이트)
|
||
|
|
│ ├── DataView.xaml(.cs) # 검사 이력 조회/검색/CSV 저장
|
||
|
|
│ ├── HomeView.xaml(.cs) # 좌/우 2채널 시험 모니터링
|
||
|
|
│ ├── InOutView.xaml(.cs) # I/O 모니터 (LEFT/RIGHT 구분)
|
||
|
|
│ └── ParametersWindow.xaml(.cs) # SPEC UL/LL 설정
|
||
|
|
├── App.xaml # DataTemplate 매핑 + 공통 스타일
|
||
|
|
├── MainWindow.xaml # 메인 Shell (상단바 + 하단 메뉴)
|
||
|
|
└── MainWindow.xaml.cs # 시계, 창 관리, 종료 확인
|
||
|
|
```
|
||
|
|
|
||
|
|
## ✨ 주요 기능
|
||
|
|
|
||
|
|
### 1. 메인 시험 화면 (Home)
|
||
|
|
- 좌(LEFT) / 우(RIGHT) 독립 2채널 기밀 시험 상태 실시간 표시
|
||
|
|
- 측정값(sccm), SPEC 범위(UL/LL), 판정(OK/NG) 실시간 확인
|
||
|
|
- 판정 결과에 따른 배경색 자동 변경 (OK=녹색, NG=빨간색)
|
||
|
|
- 하단 제품/센서 통신 로그 출력 (최대 500줄 유지, 자동 스크롤)
|
||
|
|
|
||
|
|
### 2. Sentinel C28 통신 제어
|
||
|
|
- **RS-232 시리얼 통신**: 기본 115200 baud, 8N1
|
||
|
|
- **표준 프로토콜 준수**: 헤더(XXYYZZZ H) + CRC-8 체크섬 자동 생성
|
||
|
|
- **다중 데이터 처리**: 최종 결과(R), 실시간 스트리밍(S), 메시지(M) 구분 수신
|
||
|
|
- **자동 재연결**: 연결 끊김 시 5초 간격 자동 재연결 시도
|
||
|
|
- **확장성**: ICommunication 인터페이스 기반으로 TCP/IP 등 통신 방식 변경 가능
|
||
|
|
|
||
|
|
### 3. 입출력 모니터 (In/Out Monitor)
|
||
|
|
- INPUT / OUTPUT 신호 상태 확인 (LEFT/RIGHT 구분)
|
||
|
|
- 페이지당 30개씩 데이터 표시 및 페이징 기능 (FIRST/PREV/NEXT/LAST)
|
||
|
|
|
||
|
|
### 4. 데이터 이력 조회 (Data)
|
||
|
|
- 기간별, 판정 결과별(OK/NG/전체), 시리얼 번호별 필터링 검색
|
||
|
|
- 일일 CSV 로그 자동 저장 (검사 완료 시 `Logs/yyyy-MM-dd.csv`에 즉시 기록)
|
||
|
|
- 조회된 데이터를 별도 CSV 파일로 내보내기 가능
|
||
|
|
- 빈 화면에서도 엑셀 시트처럼 항상 표 격자(GridLines)가 유동적으로 유지되도록 표출 전용 패딩 적용
|
||
|
|
- 로그 파일이 없는 경우 더미 데이터 자동 생성
|
||
|
|
|
||
|
|
### 5. 설정 관리
|
||
|
|
- **파라미터 설정**: SPEC UL/LL (sccm) 값 설정 및 저장
|
||
|
|
- **통신 설정**: 좌/우 메인(ZMDI) 장비 포트와 센서(Leak Sensor) 포트의 통신 속도를 각각 독립적으로 분리 설정 (ZMDI 기본 19200, 센서 기본 9600)
|
||
|
|
- **XML 설정 파일**: `config.xml`에 자동 저장/로드, 설정 변경 시 실시간 반영
|
||
|
|
|
||
|
|
### 6. 일일 CSV 로그 자동 저장
|
||
|
|
- 검사 완료 시 `Logs/yyyy-MM-dd.csv` 파일에 자동 기록
|
||
|
|
- CSV 헤더: Date, Time, Channel, ID, Value, Judgment, Mode, LineNo, ProductType, SpecUL, SpecLL, Retest
|
||
|
|
- CSV 값 이스케이프 처리 (쉼표/따옴표/줄바꿈 안전 처리)
|
||
|
|
- 시스템 텍스트 로그는 `yyyy-MM-dd_system.log`로 별도 관리
|
||
|
|
|
||
|
|
### 7. 프로그램 안정성
|
||
|
|
- 프로그램 종료 전 확인 대화상자 표시
|
||
|
|
- 시리얼 포트, 타이머 등 리소스 종료 시 안전 해제
|
||
|
|
- 모든 통신/파일 I/O 구간에 예외 처리 적용
|
||
|
|
- UI 로그 메모리 누수 방지 (최대 500줄 제한)
|
||
|
|
|
||
|
|
## 📡 기기 통신 프로토콜 및 명령어 (Command Details)
|
||
|
|
|
||
|
|
프로그램에서 사용하는 주요 하드웨어 통신 명령어 및 절차입니다.
|
||
|
|
|
||
|
|
### 1. ZMDI 센서 (ID 읽기 및 파싱)
|
||
|
|
ZMDI 센서와의 통신은 `19200 Baud, 8N1` 시리얼 통신을 사용하며, 총 4단계의 명령어 시퀀스로 구성됩니다. 모든 명령어는 `\r\n`을 포함하여 전송됩니다.
|
||
|
|
|
||
|
|
| 단계 | 역할 | 주요 명령어 리스트 |
|
||
|
|
| :--- | :--- | :--- |
|
||
|
|
| **1단계** | 초기화 및 통신 확인 | `V`, `Pr_D7`, `Pr_D6`, `Pr_D5`, `r` |
|
||
|
|
| **2단계** | 메모리 접근 준비 | `tso31150` |
|
||
|
|
| **3단계** | 데이터 수집 설정 | `os_10`, `t11005`, `OWT7800272D1`, `OR_78002`, `OW_78003...` |
|
||
|
|
| **4단계** | ID 메모리 읽기 | `OW_7800140`, `OR_78002`, `OW_7800141`, `OR_78002` 등 |
|
||
|
|
|
||
|
|
- **읽기 종료**: 모든 데이터를 읽은 후 `x9c_990:x` 명령으로 세션을 종료합니다.
|
||
|
|
- **데이터 파싱**: `OR_78002`의 응답값들을 조합하여 12자리 이상의 `LowID`를 생성하고, 이를 디코딩 테이블에 따라 년/월/일/시리얼/라인/아이템 정보를 추출합니다.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. Sentinel C28 (Leak Test 장비)
|
||
|
|
Sentinel C28과의 통신은 `115200 Baud, 8N1` 시리얼 통신을 사용하며, 전용 바이너리/텍스트 혼합 프로토콜을 사용합니다.
|
||
|
|
|
||
|
|
- **명령어 구조**: `[CRC-8][Sequence][Length] [Type][Command]\r\n`
|
||
|
|
- `CRC-8`: 헤더와 페이로드를 포함한 8비트 체크섬 (2자리 Hex)
|
||
|
|
- `Sequence`: 명령어 순차 번호 (01~FF, 2자리 Hex)
|
||
|
|
- `Length`: 명령어 페이로드 길이 (3자리 Hex)
|
||
|
|
- `Type`: 데이터 종류 (예: `R`=Result, `S`=Streaming, `M`=Message)
|
||
|
|
- `Command`: 실제 제어 명령어 또는 수신된 데이터 본문
|
||
|
|
|
||
|
|
- **주요 데이터 수신**:
|
||
|
|
- `R (Result)`: 최종 검사 완료 후 수신되는 결과 데이터 (채널#, 시리얼, 측정값, 판정 등 포함)
|
||
|
|
- `S (Streaming)`: 시험 진행 중 실시간으로 수신되는 압력/유량 데이터
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🛠 유지보수 가이드
|
||
|
|
|
||
|
|
- **통신 방식 변경**: `Infrastructure/` 폴더에 `TcpProvider` 등을 추가하고 `ICommunication`을 구현하면 UI 수정 없이 변경 가능
|
||
|
|
- **프로토콜 수정**: Sentinel C28의 명령어나 데이터 형식이 바뀌면 `Services/SentinelC28Service.cs`와 `Utils/SentinelParser.cs` 수정
|
||
|
|
- **CRC 알고리즘**: 제조사 사양서에 정확한 다항식이 명시되어 있다면 `Utils/SentinelCrc8.cs` 교체 필요
|
||
|
|
- **화면 및 스타일**: `Views/`의 `.xaml` 파일과 `App.xaml`에서 통합 관리
|
||
|
|
- **설정 항목 추가**: `Models/AppConfig.cs`에 프로퍼티 추가 후 해당 설정 화면 UI 수정
|
||
|
|
|
||
|
|
## 🚀 실행 방법
|
||
|
|
1. Visual Studio에서 `leak_test_project.slnx` 파일을 엽니다.
|
||
|
|
2. `F5` 키를 눌러 실행하거나 빌드 후 `bin/Debug/leak_test_project.exe`를 실행합니다.
|
||
|
|
3. 로그 파일은 실행 파일과 동일한 경로의 `Logs/` 폴더에 자동 생성됩니다.
|