Files
ENIG/Cs_HMI/CHANGELOG.md
backuppc dbaf647d4e refactor: Move AGV development projects to separate AGVLogic folder
- Reorganized AGVMapEditor, AGVNavigationCore, AGVSimulator into AGVLogic folder
- Removed deleted project files from root folder tracking
- Updated CLAUDE.md with AGVLogic-specific development guidelines
- Clean separation of independent project development from main codebase
- Projects now ready for independent development and future integration

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-23 10:00:40 +09:00

6.9 KiB

AGV HMI 시스템 변경 로그

이 파일은 AGV HMI 시스템의 주요 변경 사항을 기록합니다.

[2025.10.22] - VirtualAGV를 코어 라이브러리로 마이그레이션

⚠️ 중요 변경

  • VirtualAGV를 AGVNavigationCore 라이브러리로 이동
    • 이전: AGVSimulator\Models\VirtualAGV.cs (시뮬레이터 전용)
    • 현재: AGVNavigationCore\Models\VirtualAGV.cs (공용 코어 라이브러리)
    • 의미: 실제 AGV 제어 시스템과 시뮬레이터에서 동일한 비즈니스 로직 사용

새로운 기능

  • IMovableAGV 인터페이스 추가
    • 위치: AGVNavigationCore\Models\IMovableAGV.cs (신규)
    • 목적: 실제 AGV와 시뮬레이션 AGV의 계약 정의
    • 주요 메서드:
      // 센서 입력
      void SetCurrentPosition(Point position);      // 위치 센서
      void SetDetectedRfid(string rfidId);          // RFID 센서
      void SetMotorDirection(AgvDirection direction); // 모터
      void SetBatteryLevel(float percentage);       // BMS
      
      // 프레임 업데이트 (외부에서 호출)
      void Update(float deltaTimeMs);
      

🔧 기술적 개선사항

  • 타이머 의존성 제거

    • System.Windows.Forms.Timer 제거
    • 외부에서 Update(deltaTimeMs)를 주기적으로 호출하는 방식으로 변경
    • 장점: 타이머 없이도 동작 가능, 실제 시스템과 시뮬레이터 모두 적용 가능
  • UI 의존성 제거

    • EventHandler 이외의 UI 라이브러리 제거
    • 순수 .NET 라이브러리로 변환 (System 네임스페이스만 사용)
  • 프레임 업데이트 방식 개선

    • 이전: 내부 타이머로 자동 업데이트
    • 현재: 외부에서 Update(100)을 정기적으로 호출
    // AGVSimulator\Forms\SimulatorForm.cs의 OnSimulationTimer_Tick
    foreach (var agv in _agvList)
    {
        agv.Update(100);  // 100ms 간격으로 업데이트
    }
    

📝 아키텍처 변화

Before:
  AGVSimulator (시뮬레이터 전용)
  └── VirtualAGV (시뮬레이터용)
      └── System.Windows.Forms.Timer

After:
  AGVNavigationCore (공용 코어)
  ├── IMovableAGV (인터페이스)
  └── VirtualAGV (구현체)
      └── Update(deltaTime) 메서드만

  AGVSimulator (시뮬레이터)
  └── SimulatorForm.OnSimulationTimer_Tick
      └── agv.Update(100)

  Project (실제 AGV)
  └── AgvController
      └── agv.Update(deltaTime)

🎯 향후 활용

  1. 실제 AGV 시스템에서:

    var agv = new VirtualAGV("AGV1", startPos);
    
    // 하드웨어 센서에서
    agv.SetCurrentPosition(sensorData.Position);
    agv.SetDetectedRfid(rfidSensor.Value);
    agv.SetMotorDirection(motorController.Direction);
    agv.SetBatteryLevel(bms.Level);
    
    // 제어 루프에서
    agv.Update(deltaTime);
    
  2. 시뮬레이션 테스트:

    • 시뮬레이터에서 완벽하게 동작한 VirtualAGV
    • 실제 AGV에 그대로 적용 가능
    • 테스트 신뢰도 향상

📋 변경 파일

  • 추가: AGVNavigationCore\Models\VirtualAGV.cs
  • 추가: AGVNavigationCore\Models\IMovableAGV.cs
  • 📝 수정: AGVNavigationCore\AGVNavigationCore.csproj (프로젝트 파일 업데이트)
  • 📝 수정: AGVSimulator\Forms\SimulatorForm.cs (Update 호출 추가)

[2024.12.16] - AGV 방향 표시 수정 및 타겟계산 기능 추가

🐛 버그 수정

  • AGV 후진 모터 시 리프트 방향 표시 오류 수정
    • 문제: 008→007→006 후진 이동 시 리프트가 동남쪽으로 잘못 표시
    • 원인: LiftCalculator에서 후진 모터 방향 계산 로직 오류
    • 수정파일: AGVNavigationCore\Utils\LiftCalculator.cs
    • 수정메서드: CalculateLiftAngleRadians() :32-39행
    • 수정내용:
      // 이전 (잘못된 계산)
      var dx = targetPos.X - currentPos.X;
      var dy = targetPos.Y - currentPos.Y;
      
      // 수정 (올바른 계산)
      var dx = currentPos.X - targetPos.X;
      var dy = currentPos.Y - targetPos.Y;
      
    • 결과: 후진 시 리프트가 AGV 이동 방향(북서쪽)을 올바르게 표시

새로운 기능

  • 타겟계산 버튼 추가
    • 위치: AGV 시뮬레이터 → 경로 제어 그룹박스
    • 기능:
      • 버튼 클릭 후 맵에서 노드 클릭 시 자동 경로 계산
      • 시작 RFID가 비어있으면 AGV 현재 위치로 자동 설정
      • 연속 테스트 지원
    • 구현파일:
      • AGVSimulator\Forms\SimulatorForm.Designer.cs - UI 컨트롤 추가
      • AGVSimulator\Forms\SimulatorForm.cs - 이벤트 핸들러 구현
    • 주요메서드:
      • OnTargetCalc_Click() - 타겟계산 버튼 이벤트
      • SetStartNodeFromAGVPosition() - AGV 위치에서 시작 노드 자동 설정
      • SetTargetNodeInCombo() - 목적지 콤보박스 설정
      • FindClosestNode() - 가장 가까운 노드 찾기

📝 문서 업데이트

  • CLAUDE.md 문서 개선
    • AGV 하드웨어 구조 및 방향 체계 설명 추가
    • 방향 계산 관련 주요 파일 및 함수 매핑 정보 추가
    • 해결된 문제점과 새로운 기능 기록
    • 다음 세션에서의 빠른 참조를 위한 구조화

🔧 기술적 개선사항

  • AGV 방향 시스템 이해도 향상

    • LIFT --- AGV --- MONITOR 하드웨어 구조 명확화
    • 모터 방향과 리프트 위치 관계 정립
    • 전진/후진에 따른 리프트 방향 로직 통일
  • 마우스 클릭 감지 개선

    • 문제: 줌/팬 상태에서 노드 클릭 시 좌표 오차로 감지되지 않는 문제
    • 원인: 렌더링 Matrix 변환과 마우스 좌표 변환이 불일치
    • 수정파일: AGVNavigationCore\\Controls\\UnifiedAGVCanvas.Mouse.cs
    • 수정메서드: ScreenToWorld() 좌표 변환 함수
    • 수정내용:
      // 수정 전: 수동 계산
      var worldX = (int)((screenPoint.X - _panOffset.X) / _zoomFactor);
      
      // 수정 후: Matrix 역변환 사용
      transform.Scale(_zoomFactor, _zoomFactor);
      transform.Translate(_panOffset.X, _panOffset.Y);
      transform.Invert();
      transform.TransformPoints(points);
      
    • 결과: 줌/팬 상태에서도 정확한 노드 클릭 감지 가능

변경 로그 형식

버전 표기

  • [YYYY.MM.DD] - 날짜 기반 버전 관리

변경 유형

  • 🐛 버그 수정: 기존 기능의 오류 수정
  • 새로운 기능: 새로 추가된 기능
  • 🔧 기술적 개선: 성능 향상, 리팩토링 등
  • 📝 문서: 문서 추가/수정
  • 🗑️ 제거: 기능 또는 파일 제거
  • ⚠️ 중요 변경: 호환성에 영향을 주는 변경

기록 원칙

  • 사용자에게 영향을 주는 모든 변경사항 기록
  • 수정된 파일과 메서드명 명시
  • 문제의 원인과 해결 방법 설명
  • 테스트 결과나 검증 방법 포함

이 체인지로그는 Keep a Changelog 형식을 따릅니다.