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.
136 lines
5.9 KiB
136 lines
5.9 KiB
|
1 month ago
|
# [1단계] 아키텍처 및 기술 스택 정의 (System Architecture)
|
||
|
|
|
||
|
|
본 문서는 누수 시험 장비 제어 및 모니터링 시스템(WPF Leak Test Project)의 전체적인 시스템 구조, 데이터 흐름, 그리고 사용되는 기술 스택을 정의합니다.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. 기술 스택 정의 및 채택 이유 (Technology Stack)
|
||
|
|
|
||
|
|
본 시스템은 공장 생산 라인(EOL)의 실시간 누수 테스트 장비 제어 및 신뢰성 데이터 수집을 목적으로 하므로, 장비 제어의 실시간성, Windows OS 환경에서의 하드웨어 통신 드라이버 호환성, 폐쇄망 환경의 안정적인 데이터 보관을 고려하여 기술 스택을 정의합니다.
|
||
|
|
|
||
|
|
| 분류 | 기술 스택 | 채택 이유 |
|
||
|
|
| :--- | :--- | :--- |
|
||
|
|
| **클라이언트 (데스크톱 제어 앱)** | **WPF (.NET Framework 4.7.2 / C#)** | Windows 기반 하드웨어 및 계측 장비 제어 API(DASK, Serial) 호환성 확보. MVVM 패턴을 통한 데이터 바인딩 및 시각 효과 구현 극대화. |
|
||
|
|
| **데이터베이스 (DB)** | **Microsoft SQL Server (MSSQL)** | 현장 계측 데이터의 트랜잭션 보장 및 공장 내 타 ERP/MES 시스템과의 데이터 호환 용이성. UPSERT(MERGE) 구문을 통한 중복 데이터 방지. |
|
||
|
|
| **하드웨어 인터페이스** | **RS-232 Serial (COM Port) / PCI DASK API** | Sentinel C28 누수 측정기 및 ADLINK 4251 컨트롤러 보드와의 직접 제어 프로토콜 통신. |
|
||
|
|
| **로그 시스템 (로컬 이중화)** | **CSV / Raw Text File System** | 네트워크 단절(DB 오프라인) 상황에서도 계측 데이터 유실을 방지하기 위한 로컬 디스크 이중 백업. |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 시스템 아키텍처 구조도 (System Architecture Diagram)
|
||
|
|
|
||
|
|
생산 현장에 위치한 제어 PC 내부의 컴포넌트 구조와 외부 물리 장비 및 데이터베이스 간의 연결 형태는 다음과 같습니다.
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
graph TD
|
||
|
|
%% 외부 물리 디바이스 영역
|
||
|
|
subgraph HW ["Physical Hardware Devices"]
|
||
|
|
C28["Sentinel C28 (Leak Sensor)"]
|
||
|
|
DioBoard["ADLINK 4251 Board (DIO & ID Reader)"]
|
||
|
|
end
|
||
|
|
|
||
|
|
%% WPF 클라이언트 영역
|
||
|
|
subgraph Client ["WPF Desktop Application (Client)"]
|
||
|
|
%% UI Layer
|
||
|
|
subgraph ViewLayer ["UI (View) Layer"]
|
||
|
|
HomeV["Home View (Real-time Test)"]
|
||
|
|
DataV["Data View (Query & CSV Export)"]
|
||
|
|
LoginW["Startup Login Window"]
|
||
|
|
end
|
||
|
|
|
||
|
|
%% ViewModel Layer
|
||
|
|
subgraph VMLayer ["ViewModel Layer"]
|
||
|
|
HomeVM["Home ViewModel"]
|
||
|
|
DataVM["Data ViewModel"]
|
||
|
|
end
|
||
|
|
|
||
|
|
%% Service Layer
|
||
|
|
subgraph ServiceLayer ["Business / Service Layer"]
|
||
|
|
TPS["TestProcessService (Test Loop Control)"]
|
||
|
|
B4251["Board4251Service (ID Reader & IO)"]
|
||
|
|
C28S["SentinelC28Service (C28 Protocol)"]
|
||
|
|
DBS["EolDatabaseService (DB Adapter)"]
|
||
|
|
end
|
||
|
|
|
||
|
|
%% Utils / Models
|
||
|
|
subgraph Common ["Utils & Models"]
|
||
|
|
FL["FileLogger (Local CSV Backup)"]
|
||
|
|
DS["IDialogService (Message Popups)"]
|
||
|
|
Config["ConfigManager (Settings)"]
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
%% 영속화 스토리지 영역
|
||
|
|
subgraph Storage ["Persistence Storage Layer"]
|
||
|
|
DB[("MSSQL Database Server\n[dbo].[EOL]")]
|
||
|
|
Disk[("Local Disk\nLogs/yyyy-MM-dd.csv")]
|
||
|
|
end
|
||
|
|
|
||
|
|
%% 연결 관계 정의
|
||
|
|
C28 <-->|RS-232 Serial| C28S
|
||
|
|
DioBoard <-->|RS-232 / PCI Dask| B4251
|
||
|
|
|
||
|
|
C28S -->|Parsed Stream Data| HomeVM
|
||
|
|
B4251 -->|ID / IO State| TPS
|
||
|
|
C28S -->|Final Result Event| TPS
|
||
|
|
TPS -->|Test Progress & Result| HomeVM
|
||
|
|
|
||
|
|
HomeVM -->|Data Binding| HomeV
|
||
|
|
DataVM -->|Data Binding| DataV
|
||
|
|
|
||
|
|
TPS -->|Save Command| DBS
|
||
|
|
TPS -->|Backup Command| FL
|
||
|
|
|
||
|
|
DBS -->|ADO.NET SQL Write| DB
|
||
|
|
FL -->|File Append| Disk
|
||
|
|
DataVM -->|Read DB / Fallback CSV| Disk
|
||
|
|
DataVM -.->|Read DB| DB
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 3. 데이터 흐름 (Data Flow)
|
||
|
|
|
||
|
|
시험 시작부터 DB 및 로컬 저장까지의 계측 데이터 흐름은 다음 단계를 따릅니다.
|
||
|
|
|
||
|
|
```mermaid
|
||
|
|
sequenceDiagram
|
||
|
|
autonumber
|
||
|
|
actor Operator as 작업자
|
||
|
|
participant HW_IO as ADLINK 4251 (DIO)
|
||
|
|
participant TPS as TestProcessService (WPF Thread)
|
||
|
|
participant Sensor as ID Sensor (Board4251)
|
||
|
|
participant C28 as Sentinel C28 (Leak Sensor)
|
||
|
|
participant DBS as EolDatabaseService
|
||
|
|
participant LocalFile as FileLogger (Local Disk)
|
||
|
|
participant DB as MSSQL Database
|
||
|
|
|
||
|
|
Operator->>HW_IO: 물리 기동 스위치 조작 (START 신호)
|
||
|
|
HW_IO->>TPS: InputChanged 이벤트 발생 (LEFT_START / RIGHT_START)
|
||
|
|
Note over TPS: AutoResetEvent.Set() 으로 대기 스레드 기상
|
||
|
|
TPS->>Sensor: ID 판독 명령 (x00c_... 송신)
|
||
|
|
Sensor-->>TPS: 16자리 ID 문자열 반환 (제품 일련번호)
|
||
|
|
TPS->>TPS: 시험 대기 상태 진입 (최대 30초)
|
||
|
|
C28-->>TPS: Sentinel C28 측정 완료 최종 데이터 패킷 송신
|
||
|
|
Note over TPS: 프로그램 판정 vs 센서 판정 스펙 교차 검증 수행
|
||
|
|
TPS->>LocalFile: InspectData 로컬 CSV 이중 백업 저장 (UTF-8)
|
||
|
|
TPS->>DBS: 비동기 데이터 저장 요청 (SaveEolDataAsync)
|
||
|
|
DBS->>DB: MERGE INTO [dbo].[EOL] 쿼리 실행 (UPSERT)
|
||
|
|
DBS-->>TPS: 저장 결과 반환 (네트워크 오류 시 로컬 캐시 동작)
|
||
|
|
TPS->>HW_IO: 합격(OK) 또는 불합격(NG) 물리 디지털 출력 제어
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 4. 데이터 수집 항목 (Core Data Fields)
|
||
|
|
|
||
|
|
시스템에서 계측하고 외부로 영속화하는 데이터의 기본 규격은 다음과 같습니다.
|
||
|
|
* **IC_SN / PCB_Barcode**: 판독된 16자리 제품 고유 식별자
|
||
|
|
* **Maker / Model / Variant_1 / Variant_2**: 현재 가동 중인 제품 및 생산 기종 정보
|
||
|
|
* **Operator**: 로그인된 작업자 ID
|
||
|
|
* **Production_Date**: 검사 일시 (DateTime)
|
||
|
|
* **Line / Lot_No / Jig_No / Channel**: 작업 라인, 로트 번호, 지그 위치, 검사 채널(좌/우)
|
||
|
|
* **Spec_UL / Spec_LL**: 검사 스펙 상한/하한값
|
||
|
|
* **Leak_Value**: 실제 계측된 누출값 (Decimal)
|
||
|
|
* **Result**: 합격(OK) 또는 불합격(NG) 판정 결과
|