리크 테스트 gui
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.
 
 
 
 
 
 

22 KiB

Pressure Leak Inspect System (기밀 시험 시스템 GUI)

Windows 기반 Air Leak Test 장비를 위한 제어 및 모니터링 GUI 프로그램입니다. WPF(C#)를 사용하여 제작되었으며, MVVM 패턴을 적용하여 하드웨어 통신 계층과 UI 계층이 분리된 구조를 가지고 있습니다.

📂 프로젝트 파일 구조

leak_test_project/
├── Infrastructure/            # 하드웨어 통신 및 DIO 계층 (Low-Level Communication)
│   ├── ICommunication.cs      # 통신 방식(Serial, TCP) 추상화 인터페이스
│   ├── SerialProvider.cs      # RS232 시리얼 통신 구현체 (8N1, IDisposable)
│   ├── IDioBoard.cs           # DIO 보드 추상화 인터페이스 (입출력 제어, 이벤트)
│   ├── RealDioBoard.cs        # ADLINK PCI DIO 보드 실제 구현체 (10ms 폴링)
│   └── Dask.cs                # ADLINK PCIS-DASK API P/Invoke 래퍼
├── Models/                    # 데이터 모델
│   ├── AppConfig.cs           # 앱 설정 (Left/Right/SensorPort, Zmdi/SensorBaudRate, SpecUL/LL)
│   ├── DioPoint.cs            # DIO 포인트 모델 (Name, IsInput, Value) + DioEventArgs
│   ├── InOutItem.cs           # I/O 항목 모델 (Address, Name, Description, Value)
│   ├── InspectData.cs         # 검사 결과 데이터 모델 (12개 필드)
│   ├── ParsedData.cs          # Sentinel C28 파싱 결과 모델 (MeasuredValue, SensorJudgment 등)
│   └── SensorIdData.cs        # 센서 ID 데이터 모델 (LowID, Year/Month/Day, Serial 등)
├── Services/                  # 비즈니스 로직 및 기기 제어
│   ├── Board4253Service.cs    # [신규] 4253 보드 통신 서비스 (<end> 기반 프로토콜)
│   ├── Board4253SensorService.cs # [신규] 4253 보드 ID 센서 서비스 (IIdSensorService 구현)
│   ├── Board4253DioBoard.cs   # [신규] 4253 보드 DIO 구현체 (IDioBoard 구현)
│   ├── IIdSensorService.cs    # [신규] ID 센서 추상화 인터페이스 (ZMDI/4253 공통)
│   ├── DioBoardFactory.cs     # DIO 보드 팩토리 (DioConfig.ini 기반 보드 생성)
│   ├── IoBoardService.cs      # I/O 보드 서비스 (IDioBoard 연동, 상태 갱신/출력 제어)
│   ├── SentinelC28Service.cs  # Sentinel C28 프로토콜 (자동 재연결 포함)
│   ├── TestProcessService.cs  # 자동 시험 프로세스 (DIO→센서→시험→판정→출력 사이클)
│   └── ZmdiSensorService.cs   # ZMDI 센서 시리얼 통신 (ID 읽기/파싱, 4단계 명령)
├── Utils/                     # 유틸리티
│   ├── ConfigManager.cs       # XML 기반 설정 관리 (Load/Save, ConfigChanged 이벤트)
│   ├── CsvExporter.cs         # 범용 CSV 내보내기
│   ├── DioConfigParser.cs     # INI 형식 DIO 설정 파서 (보드 타입, 포인트 매핑)
│   ├── 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채널 자동 시험, ZMDI/C28 통신, SPEC 교차 검증
│   ├── InOutViewModel.cs      # I/O 모니터 페이징 로직
│   ├── MainViewModel.cs       # 화면 전환, DIO 보드 생성, 앱 생명주기 관리
│   └── ParametersViewModel.cs # 파라미터 설정 (빈 클래스, 로직은 Window에서 직접 처리)
├── Views/                     # UI 화면
│   ├── CommunicationWindow.xaml(.cs) # 통신 설정 (포트/보드레이트)
│   ├── DataView.xaml(.cs)            # 검사 이력 조회/검색/CSV 저장
│   ├── HomeView.xaml(.cs)            # 좌/우 2채널 시험 모니터링
│   ├── InOutView.xaml(.cs)           # I/O 모니터 (INPUT/OUTPUT 구분)
│   └── ParametersWindow.xaml(.cs)    # SPEC UL/LL 설정
├── Manual/                    # 사용자 매뉴얼
│   ├── Communication_Manual.md      # 통신 설정 매뉴얼
│   ├── DataView_Manual.md           # 데이터 조회 매뉴얼
│   ├── HomeView_Manual.md           # 메인 화면 매뉴얼
│   ├── IO_Monitor_Manual.md         # I/O 모니터 매뉴얼
│   └── Parameter_Manual.md          # 파라미터 설정 매뉴얼
├── PCI-Dask.dll               # ADLINK PCIS-DASK 네이티브 DLL
├── App.xaml                   # DataTemplate 매핑 + 공통 스타일
├── MainWindow.xaml            # 메인 Shell (상단바 + 하단 메뉴)
└── MainWindow.xaml.cs         # 시계, 창 관리, 종료 확인

leak_test_project.Tests/       # 단위 테스트 프로젝트 (xUnit/NUnit)

주요 기능

1. 메인 시험 화면 (Home)

  • 좌(LEFT) / 우(RIGHT) 독립 2채널 기밀 시험 상태 실시간 표시
  • 측정값(sccm), SPEC 범위(UL/LL), 판정(OK/NG) 실시간 확인
  • 판정 결과에 따른 배경색 자동 변경 (OK=녹색, NG=빨간색)
  • 좌/우 채널별 상태(Status) 및 오류(Error) 메시지 표시
  • 센서 ID 정보 (LowID, 제조일, 시리얼, 라인, 제품 구분) 실시간 표시
  • ID 테스트 (L/R) 버튼을 통한 센서 단독 통신 테스트 기능

2. 자동 시험 프로세스 (TestProcessService)

DIO 시작 신호를 기반으로 좌/우 독립 백그라운드 스레드에서 아래 사이클을 반복합니다:

  1. DIO 시작 신호 대기: LEFT_START / RIGHT_START 입력 신호 OFF→ON 감지
  2. 센서 ID 읽기: IIdSensorService를 통해 제품 ID 파싱 (ZMDI 또는 4253 보드)
  3. 불량 제품 필터링: 센서의 이전 검사 결과(PrevResult) 확인
  4. LEAK 시험 수행: Sentinel C28 최종 결과 수신 대기 (60초 타임아웃)
  5. 판정: 프로그램 SPEC(UL/LL) 기반 OK/NG 판정
  6. SPEC 교차 검증: 프로그램 판정과 센서 자체 판정(A/R) 비교, 불일치 시 경고
  7. 로그 기록: 일일 CSV 파일에 검사 결과 자동 저장
  8. DIO 출력: 판정 결과에 따라 OK/NG 출력 신호 전송

판정 로직 상세

프로그램 판정 (SentinelParser.EvaluateJudgment)

측정값(sccm)이 하한(SpecLL) ≤ 값 ≤ 상한(SpecUL) 범위 내 → OK
범위 밖 → NG

센서 판정 (C28 장비 내장)

  • C28 장비가 자체적으로 Accept(A) / Reject(R) 판정을 내려 전송

SPEC 교차 검증

  • 프로그램 판정(OK→A, NG→R)과 센서 판정(A/R)을 정규화하여 비교
  • 불일치 시 SpecMismatch 플래그를 활성화하고 콘솔/로그에 경고 출력

타임아웃 처리

  • 60초 내 C28 결과 미수신 시 자동으로 NG 판정 처리
  • 타임아웃 시에도 UI 그리드와 CSV 로그에 NG(센서판정: T/O) 기록 남김
  • DIO NG 출력 신호도 정상적으로 전송
  • ADLINK PCI DIO 보드 연동 (PCIS-DASK API 사용)
  • INI 설정 기반 입출력 포인트 매핑 (Settings/DioConfig.ini)
  • 10ms 입력 폴링: 백그라운드 Task에서 입력 상태 주기적 감시
  • PC_ON 출력: 프로그램 시작 시 가동 신호 ON, 종료 시 OFF
  • 지원 보드 타입: PCI_7230, PCI_7432, PCI_7433, PCI_7434, PCI_7250

4. Sentinel C28 통신 제어

  • RS-232 시리얼 통신: 기본 9600 baud, 8N1
  • 표준 프로토콜 준수: 헤더(XXYYZZZ H) + CRC-8 체크섬 자동 생성
  • 다중 데이터 처리: 최종 결과(R), 실시간 스트리밍(S), 메시지(M) 구분 수신
  • 자동 재연결: 연결 끊김 시 1초(1000ms) 간격으로 모든 통신(C28, 센서)의 자동 복구를 시도하여 사용자 개입 최소화
  • 확장성: ICommunication 인터페이스 기반으로 TCP/IP 등 통신 방식 변경 가능

5. 입출력 모니터 (In/Out Monitor)

  • INPUT / OUTPUT 신호 상태 확인 (실제 DIO 보드 연동)
  • 500ms 주기 자동 갱신: 별도의 새로고침 버튼 없이 DIO 상태가 실시간 업데이트
  • 페이지당 30개씩 데이터 표시 및 페이징 기능 (FIRST/PREV/NEXT/LAST)
  • 화면 닫기(Close) 시 자동 갱신 타이머 정지

6. 데이터 이력 조회 (Data)

  • 기간별, 판정 결과별(OK/NG/전체), 시리얼 번호별 필터링 검색
  • 일일 CSV 로그 자동 저장 (검사 완료 시 Logs/yyyy-MM-dd.csv에 즉시 기록)
  • 조회된 데이터를 별도 CSV 파일로 내보내기 가능
  • 빈 화면에서도 엑셀 시트처럼 항상 표 격자(GridLines)가 유동적으로 유지되도록 최소 50행 표출
  • 테스트용 더미 데이터 수동 로드 기능 (버튼 클릭으로 10건 샘플 데이터 생성)

7. 설정 관리

  • 파라미터 설정: SPEC UL/LL (sccm) 값 설정 및 저장
  • 통신 설정: 좌/우 센서 장비 포트(기본 COM9/COM8, 보드레이트 공유 19200)와 C28 센서 포트(기본 COM1, 보드레이트 9600)를 각각 독립 설정
  • XML 설정 파일: config.xml에 자동 저장/로드, 설정 변경 시 ConfigChanged 이벤트를 통해 모든 통신 서비스(Sentinel C28, 센서)와 자동 시험 프로세스가 재시작되어 즉시 반영
  • DIO 설정 파일: Settings/DioConfig.ini에서 보드 타입, 입출력 포인트 이름/설명 관리

8. 일일 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로 별도 관리

9. 프로그램 안정성

  • 프로그램 종료 전 확인 대화상자 표시
  • 시리얼 포트, DIO 보드, 타이머 등 리소스 종료 시 안전 해제 (IDisposable 패턴)
  • 모든 통신/파일 I/O 구간에 예외 처리 적용
  • ZMDI 통신 명령 실패 시 최대 3회 재시도
  • 포트 연결 알림: 프로그램 초기화 또는 설정 변경 시 모든 포트(C28, 센서 Left/Right)의 연결 상태를 즉시 확인하고, 하나라도 실패 시 메인 화면 오류 영역에 즉시 표시 (상세 오류 원인 및 포트 번호 포함)
  • 1초 자동 복구: 모든 통신 포트에 대해 1초 주기로 상시 자동 재연결 시도 (재진입 방지 포함)
  • 통신 설정 변경 반영: 설정 저장 시 즉시 통신 포트와 자동 시험 프로세스를 재시작하여 프로그램 재시작 없이 설정 변경 내용 적용 가능

🔌 신규 4253 보드 통합

기존 ZMDI 센서 방식에 추가하여, 신규 4253 보드를 통한 제품 ID 읽기 기능이 구현되었습니다.

아키텍처

IIdSensorService 인터페이스를 도입하여 기존 ZmdiSensorService와 신규 Board4253SensorService를 동일한 추상화로 교체 가능하도록 설계되었습니다.

IIdSensorService (인터페이스)
├── ZmdiSensorService      # 기존 ZMDI 센서 (4단계 시리얼 명령)
└── Board4253SensorService # 신규 4253 보드 (2단계 명령: 상태확인 + ID읽기)

관련 파일

파일 역할
Services/IIdSensorService.cs ID 센서 공통 인터페이스 (Connect, Disconnect, ReadSensor)
Services/Board4253Service.cs 4253 보드 시리얼 통신 코어 (명령 송수신, <end> 기반 프로토콜, 자동 재연결)
Services/Board4253SensorService.cs 4253 보드 ID 센서 서비스 (상태 확인 → ID 읽기 → SensorIdData 구성)
Services/Board4253DioBoard.cs 4253 보드 DIO 구현체 (IDioBoard 인터페이스 구현)

4253 보드 통신 프로토콜

  • 포트 공유: 좌/우 센서가 하나의 시리얼 포트를 공유하며, 채널 번호(001=좌, 002=우)로 구분
  • 응답 종료 조건: <end>, Success, Fail 키워드 또는 16자리 영숫자 ID 감지 시 수신 완료 처리
  • 타임아웃: 기본 5000ms (보드 응답 지연 고려), 센서 서비스에서는 15000ms로 확장 대기
  • 자동 재연결: 1초 주기로 연결 상태 감시 및 자동 복구
  • 송수신 재시도: 타임아웃 발생 시 최대 3회 리트라이 (300ms 간격)

4253 보드 ID 읽기 절차

단계 동작 명령어 예시
1단계 보드 상태 확인 x00c_001101:owt28006727ea97c7801 (CH1)
2단계 ID 읽기 x00c_001101:ow2800326003e (CH1)
  • 상태 확인: 응답에 Success가 포함되면 정상, Fail이면 중단
  • ID 파싱: 응답 데이터에서 에코 라인과 키워드를 제외한 16자리 영숫자 패턴([A-Za-z0-9]{16})을 추출

ID 끝자리 'F' 재시도 로직

4253 보드에서 읽은 ID의 끝자리가 F인 경우, 통신 오류로 인한 잘못된 값일 가능성이 있어 자동으로 재시도합니다.

[시작] ID 읽기 요청
  ↓
[1차 시도] ReadIdAsync(channel)
  ↓
끝자리 == 'F'? ──YES──→ 500ms 대기 후 재시도
  │                        ↓
  NO              [2차 시도] ReadIdAsync(channel)
  ↓                        ↓
[사용]             끝자리 == 'F'? ──YES──→ 500ms 대기 후 재시도
                   │                        ↓
                   NO              [3차 시도(최종)] ReadIdAsync(channel)
                   ↓                        ↓
                  [사용]            끝자리가 여전히 'F'이면
                                   경고 로그 출력 후 해당 ID 그대로 사용
  • 최대 재시도 횟수: 3회 (최초 1회 + 추가 2회)
  • 재시도 간격: 500ms
  • 진행 상태 표시: 재시도 시 ProgressMessage 이벤트로 UI에 알림
  • 3회 모두 'F'로 끝나는 경우: 마지막 값을 그대로 사용하고 경고 메시지 출력

📡 기기 통신 프로토콜 및 명령어 (Command Details)

프로그램에서 사용하는 주요 하드웨어 통신 명령어 및 절차입니다.

1. ZMDI 센서 (ID 읽기 및 파싱)

ZMDI 센서와의 통신은 19200 Baud, 8N1 시리얼 통신을 사용하며, 총 4단계의 명령어 시퀀스로 구성됩니다. 모든 명령어는 \r\n을 포함하여 전송되며, 최대 3회 재시도합니다.

단계 역할 주요 명령어 리스트
1단계 초기화 및 통신 확인 V, Pr_D7, Pr_D6, Pr_D5, r
2단계 메모리 접근 준비 tso31150
3단계 데이터 수집 설정 os_10, t11005, OWT7800272D1, OR_78002, OW_780038AA55A, OW_780011A, OR_78002, OW_780038AFF00, OW_78001CF, OR_78004
4단계 ID 메모리 읽기 OW_7800140, OR_78002, OW_7800141, OR_78002, OW_7800142, OR_78002, x9c_990:x
  • 읽기 종료: 모든 데이터를 읽은 후 x9c_990:x 명령으로 세션을 종료합니다.
  • 데이터 파싱: OR_78002의 응답값들을 조합하여 12자리 이상의 LowID를 생성하고, 이를 디코딩 테이블에 따라 년/월/일/시리얼/라인/아이템 정보를 추출합니다.
  • 불량 필터링: 파싱된 PrevResult 필드로 이전 검사 결과를 확인하여 불량 제품을 필터링합니다.

2. Sentinel C28 (Leak Test 장비)

Sentinel C28과의 통신은 9600 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): 시험 진행 중 실시간으로 수신되는 압력/유량 데이터
  • LEAK 시험 대기 타임아웃: 기계의 실제 측정 시간이 약 30초이므로, 프로그램은 60초 동안 C28 최종 결과를 대기합니다. 60초 내에 결과가 수신되지 않으면 자동으로 NG 처리됩니다.

  • SPEC 교차 검증: C28 센서의 자체 판정(A=Accept, R=Reject)과 프로그램의 UL/LL 기반 판정을 비교하여 불일치 시 경고 메시지를 표시합니다.


ADLINK PCI DIO 보드와의 통신은 PCIS-DASK API(PCI-Dask.dll)를 사용합니다.

  • 설정 파일: Settings/DioConfig.ini (INI 형식)

    • [DIO]: CompanyName
    • [BOARD_1]: BoardType, BoardNumber
    • [BOARD_1_IN]: 입력 포인트 매핑 (LEFT_START, RIGHT_START 등)
    • [BOARD_1_OUT]: 출력 포인트 매핑 (LEFT_OK, RIGHT_OK, LEFT_NG, RIGHT_NG, PC_ON 등)
  • 기본 입출력 신호:

구분 포인트 이름 설명
INPUT LEFT_START 좌측 시험 시작 신호
INPUT RIGHT_START 우측 시험 시작 신호
OUTPUT LEFT_OK 좌측 합격 출력
OUTPUT RIGHT_OK 우측 합격 출력
OUTPUT LEFT_NG 좌측 불합격 출력
OUTPUT RIGHT_NG 우측 불합격 출력
OUTPUT PC_ON PC 가동 신호

📋 변경 이력

2026-04-13

LEAK 시험 타임아웃 개선 (TestProcessService.cs)

  • 문제: 기계 측정 시간이 약 30초인데 프로그램 대기 타임아웃도 30초로 동일하게 설정되어 있어, 기계가 불량(NG)을 판정하여 결과 데이터를 전송하려는 시점에 프로그램이 이미 타임아웃으로 넘어가버리는 현상 발생. 또한 타임아웃 발생 시 UI와 로그에 결과가 남지 않는 문제 존재.
  • 수정 내용:
    • C28 결과 대기 타임아웃을 30초 → 60초로 확장하여, 기계의 측정 시간(약 30초)을 충분히 수용
    • 타임아웃 발생 시에도 UI 그리드에 NG 결과 표시 (TestCompleted 이벤트에 Judgment="NG", SensorJudgment="T/O" 전달)
    • 타임아웃 발생 시에도 CSV 로그 파일에 NG 기록 (FileLogger.LogInspectData 호출)
    • DIO NG 출력 신호 정상 전송 유지

4253 보드 ID 끝자리 'F' 재시도 로직 추가 (Board4253SensorService.cs)

  • 문제: 4253 보드에서 ID를 읽을 때 간헐적으로 끝자리가 'F'인 잘못된 값이 읽히는 현상 발생
  • 수정 내용:
    • ID 읽기 후 끝자리가 F(대소문자 무관)인 경우 최대 2번 추가 재시도 (총 3회 시도)
    • 각 재시도 전 500ms 대기하여 보드 안정화
    • 재시도 시 ProgressMessage 이벤트로 UI에 진행 상황 알림
    • 3회 모두 실패 시 마지막으로 읽은 ID를 그대로 사용하되 경고 메시지 출력

2026-04-10

4253 보드 듀얼 채널 통합 (Board4253Service.cs, Board4253SensorService.cs)

  • 좌/우 센서가 하나의 시리얼 포트를 공유하도록 AppConfig 모델 통합
  • 채널별 명령어 분리 (001=좌, 002=우)
  • CommunicationWindow UI에서 포트 설정 통합 반영

4253 보드 상태 확인 게이트키퍼 복원

  • CheckStatusAsync() 호출 후 Fail 응답 시 ID 읽기 중단
  • 타임아웃 5000ms로 설정하여 하드웨어 응답 시간 수용

ID 센서 단독 테스트 기능 추가 (TestProcessService.ExecuteSensorTestAsync)

  • 하단 메뉴에 "ID Test (L)" / "ID Test (R)" 버튼 추가
  • 실제 검사와 동일한 시퀀스(UI 초기화 → 센서 읽기 → 데이터 표시)를 재현
  • 센서 통신 및 하드웨어 동작을 독립적으로 확인 가능

🛠 유지보수 가이드

  • 센서 보드 교체: IIdSensorService 인터페이스를 구현하는 새 서비스 클래스를 작성하고, HomeViewModel에서 주입 대상을 변경하면 됨
  • 통신 방식 변경: Infrastructure/ 폴더에 TcpProvider 등을 추가하고 ICommunication을 구현하면 UI 수정 없이 변경 가능
  • 프로토콜 수정: Sentinel C28의 명령어나 데이터 형식이 바뀌면 Services/SentinelC28Service.csUtils/SentinelParser.cs 수정
  • CRC 알고리즘: 제조사 사양서에 정확한 다항식이 명시되어 있다면 Utils/SentinelCrc8.cs 교체 필요
  • 화면 및 스타일: Views/.xaml 파일과 App.xaml에서 통합 관리
  • 설정 항목 추가: Models/AppConfig.cs에 프로퍼티 추가 후 해당 설정 화면 UI 수정
  • DIO 포인트 변경: Settings/DioConfig.ini에서 입출력 포인트 이름/설명을 수정하면 프로그램 재시작 시 반영
  • DIO 보드 타입 추가: Infrastructure/RealDioBoard.csGetCardTypeFromConfig() 메서드에 새 보드 타입 매핑 추가
  • 시험 프로세스 수정: Services/TestProcessService.csProcessProc() 메서드에서 시험 단계 추가/변경
  • ZMDI 명령 시퀀스 수정: Services/ZmdiSensorService.cs_commandList1~4 배열 수정
  • ID 디코딩 테이블 수정: Services/ZmdiSensorService.cs_yearHexList, _monthList, _dayHexList 등 업데이트
  • 4253 보드 명령어 수정: Services/Board4253Service.csCheckStatusAsync(), ReadIdAsync() 메서드에서 전송 명령어 변경
  • 사용자 매뉴얼: Manual/ 폴더에서 각 화면별 사용 설명서 확인 및 수정 가능

🧪 테스트

leak_test_project.Tests 프로젝트에서 핵심 서비스의 단위 테스트를 실행할 수 있습니다.

dotnet test leak_test_project.Tests/leak_test_project.Tests.csproj

🚀 실행 방법

  1. Visual Studio에서 leak_test_project.slnx 파일을 엽니다.
  2. F5 키를 눌러 실행하거나 빌드 후 bin/Debug/leak_test_project.exe를 실행합니다.
  3. 로그 파일은 실행 파일과 동일한 경로의 Logs/ 폴더에 자동 생성됩니다.
  4. DIO 설정 파일은 Settings/DioConfig.ini에 자동 생성됩니다 (없을 경우 기본값으로 생성).