# AGV 버퍼 진입 (Buffer In) 로직 분석

이 문서는 `_SM_RUN_BUFFER_IN.cs` 소스 코드를 기반으로 한 `Buffer In` 동작의 상세 로직 흐름을 설명합니다.

## 개요
**목적**: AGV가 버퍼 스테이션에 도킹하여 짐을 내리는 작업(Unloading)을 수행합니다.

## 선행 조건
1.  **충전 해제 (Charge OFF)**: 충전 중이 아니어야 합니다.
2.  **라이다 정지 (Lidar Stop)**: 장애물에 의해 차단되지 않아야 합니다.
3.  **위치 확인 (Position Check)**: 현재 위치가 확정되어 있어야 합니다.

## 시퀀스 상세 흐름

| 단계 | 동작 | 상세 설명 | 오류 조건 (Error Condition) |
| :--- | :--- | :--- | :--- |
| **1** | **시작 (Start)** | - 로그 기록: "버퍼도킹시작"<br>- 음성 안내: "하차작업을 시작합니다" | (없음) |
| **2** | **이동/정지 확인** | - 현재 AGV가 움직이는 중인지 확인.<br>- 3초 이상 움직이면 강제 정지 명령.<br>- 정지해 있거나 이미 회전(L90) 상태라면 다음 단계로 진행. | (없음) |
| **3** | **회전 명령** | - 현재 회전 상태가 L90(왼쪽 90도)이 아니라면 `좌회전 180도(Left 180 Turn)` 명령 전송.<br>- 로그: "AGV Left Turn" | (없음) |
| **4** | **회전 시작 대기** | - AGV가 회전 동작을 시작했는지(움직임 감지) 확인. | **5초 타임아웃**: 5초 내 미동작 시 오류. |
| **5** | **회전 완료 대기** | - AGV가 회전 동작을 완료하고 멈췄는지 확인. | **15초 타임아웃**: 15초 이상 계속 움직이면 오류. |
| **6** | **리프트 하강** | - `리프트 다운(Lift Down)` 명령 전송. | (없음) |
| **7** | **리프트 확인** | - 리프트 다운 센서 신호 확인. | **10초 타임아웃**: 리프트 하강 미확인 시 오류. |
| **8** | **마크 스탑 설정** | - 마크 스탑(Mark Stop) 모니터링 활성화. | (없음) |
| **9** | **후진 이동 시작** | - 속도: `저속(Low)`<br>- 방향: `후진(Backward)`<br>- 명령: `후진 구동(Run Backward)` | **10초 타임아웃**: 속도 설정 실패 시 오류. |
| **10** | **마크 신호 대기** | - `NEXTSTOP_MARK` (자석/RFID) 신호 감지 대기. | **3초 타임아웃**: 3초 내 신호 미감지 시 오류. |
| **11** | **최종 정지 확인** | - AGV가 완전히 멈출 때까지 대기. | **10초 타임아웃**: 10초 내 정지 안 할 시 오류. |
| **12** | **완료** | - 로그: "버퍼투입완료"<br>- ACS 통신: 버퍼 투입 완료 신호 전송.<br>- 상태 업데이트. | (없음) |

## 관련 파일
*   `Project\StateMachine\Step\_SM_RUN_BUFFER_IN.cs`
