# Test_ACS 변경 이력

## v1.4.0 (2025-01-12)

### 설정 파일 저장 방식 변경
- **실행 폴더에 설정 파일 저장**
  - 이전: 사용자 프로파일 폴더 (`%LOCALAPPDATA%`)
  - 변경: 실행 파일과 같은 폴더에 `Test_ACS.config` 저장
  - 형식: JSON 형식으로 저장 (가독성 향상)

### 코드 개선
- `AppSettings` 클래스 신규 생성
  - JSON 직렬화/역직렬화 지원
  - 실행 파일 경로 자동 감지
  - 설정 파일 자동 생성 및 로드
- Newtonsoft.Json 패키지 참조 추가

### 사용성 개선
- 설정 파일을 직접 편집 가능 (JSON 형식)
- 프로그램 이동 시에도 설정 파일 함께 이동
- 여러 버전 동시 사용 가능 (각 폴더별 독립 설정)

---

## v1.3.0 (2025-01-12)

### 신규 기능
- **AGV 상태 실시간 표시**
  - AGV 상태 그룹박스 추가
  - 8가지 AGV 상태 정보 표시:
    - 모드 (수동/자동)
    - 실행상태 (정지/실행/에러)
    - 방향 (직진/좌회전/우회전/마크정지)
    - 도달완료 (OFF/ON)
    - 충전 상태 (OFF/ON)
    - 카트 감지 (없음/있음/알 수 없음)
    - 리프트 위치 (하강/상승/알 수 없음)
    - 현재 RFID 태그 번호 (6자리)
  - 상태별 색상 표시로 직관적 모니터링
  - AGV Status 메시지(cmd=3) 자동 수신 및 업데이트

### UI 개선
- AGV 상태 그룹박스 추가 (2열 x 4행 레이아웃)
- 메인 폼 크기 확장 (539 → 588 픽셀)
- 상태별 색상 구분:
  - 수동(파란색) / 자동(녹색)
  - 정지(회색) / 실행(녹색) / 에러(빨간색)
  - 충전중(주황색)

### 프로토콜 업데이트
- ENIGProtocol ReadMe.MD 수정
  - AGV Status 프로토콜 정의 명확화 (총 13바이트)
  - LastTag 필드 크기 수정 (4바이트 → 6바이트)
  - CurrentPath 필드 제거 (실제 구현과 일치)

### 코드 개선
- `UpdateAGVStatus()` 메서드 구현
- Status 메시지 수신 처리 로직 추가
- 스레드 안전성 보장 (InvokeRequired 체크)
- 데이터 유효성 검사 추가

---

## v1.2.0 (2025-01-12)

### 신규 기능
- **설정 자동 저장/불러오기 기능**
  - 마지막 사용 COM 포트 자동 저장
  - 마지막 사용 보레이트 자동 저장
  - 마지막 입력 RFID 번호 자동 저장
  - 마지막 입력 별칭 자동 저장
  - 마지막 선택 AGV (11/12) 자동 저장
  - 프로그램 종료 시 자동 저장
  - 프로그램 시작 시 자동 불러오기

### 구현 상세
- **Settings.settings 파일 확장**
  - LastPort (string)
  - LastBaudRate (string)
  - LastRFID (string)
  - LastAlias (string)
  - LastAGV (int)

- **자동 저장 이벤트**
  - COM 포트 선택 변경 시
  - 보레이트 텍스트 변경 시
  - RFID 번호 텍스트 변경 시
  - 별칭 텍스트 변경 시
  - AGV 선택 변경 시
  - 프로그램 종료 시 (OnFormClosing)

- **자동 불러오기**
  - 프로그램 시작 시 LoadSettings() 호출
  - 포트 목록 로드 후 마지막 설정 적용

### 사용자 경험 개선
- 프로그램 재실행 시 이전 설정 자동 복원
- 설정 저장/불러오기 상태 로그 표시
- 에러 발생 시 로그에 에러 메시지 표시

---

## v1.1.0 (2025-01-12)

### 신규 기능
- **GotoAlias 명령어 추가**
  - 별칭(Alias)을 사용한 AGV 이동 명령 지원
  - RFID 번호 대신 의미 있는 이름으로 목적지 지정 가능
  - 예: "CHARGER1", "BUFFER2", "STATION_A" 등

### UI 개선
- **별칭 입력 필드 추가**
  - 위치: RFID 입력 필드 아래
  - 기본값: "CHARGER1"

- **GotoAlias 버튼 추가**
  - 위치: Goto 버튼 우측
  - 버튼명: "별칭 이동 (GotoAlias)"

- **레이아웃 최적화**
  - RFID 번호 입력: 라인 1
  - 별칭 입력: 라인 2
  - SetCurrent / GotoAlias 버튼: 라인 3
  - Goto / GotoAlias 버튼: 라인 4
  - Stop / Reset 버튼: 라인 5
  - MarkStop 버튼 및 체크박스: 라인 6
  - 수동 제어 / 리프트 제어: 하단 그룹

### 프로토콜 변경
- **AGVCommandHE Enum 확장**
  - GotoAlias = 107 추가
  - 데이터 형식: TargetID(2 hex) + Alias(ASCII string)

### 코드 개선
- `btnGotoAlias_Click` 이벤트 핸들러 구현
- 별칭 유효성 검사 (빈 문자열 체크)
- ASCII → HEX 변환 로직 추가

### 문서 업데이트
- README.md에 GotoAlias 사용법 추가
- 프로토콜 명령어 표에 GotoAlias 추가
- 버전 이력 업데이트

---

## v1.0.0 (2025-01-11)

### 초기 릴리즈
- ACS 시뮬레이터 기본 구현
- ENIGProtocol 프로젝트 참조
- RS232 통신 지원
- 7가지 기본 ACS 명령어:
  - SetCurrent (현재 위치 설정)
  - Goto (RFID 이동)
  - Stop (정지)
  - Reset (에러 리셋)
  - Manual (수동 제어)
  - MarkStop (마크센서 정지)
  - LiftControl (리프트 제어)
- AGV 선택 기능 (AGV1/AGV2)
- 로그 시스템 (TX/RX/Info 탭)
- COM 포트 관리 (연결/해제/새로고침)
