Files
ENIG/Cs_HMI/docs/Charging_Sequence_Analysis.md

79 lines
4.5 KiB
Markdown

# 충전 시퀀스 분석 (Charging Sequence Analysis)
## 1. 개요 (Overview)
이 문서는 AGV의 자동 및 수동 충전 프로세스에 대한 분석 결과를 기술합니다. UI 트리거부터 이동, 도킹, 충전 명령 전송 및 확인까지의 전체 흐름을 포함합니다.
## 2. UI 트리거 (UI Trigger)
* **관련 컨트롤**: `btCharge` (자동충전/해제), `btChargeM` (수동충전 모드 토글)
* **이벤트 핸들러**: `btCharge_Click`, `btChargeM_Click` (in `fMain.cs`)
* **동작 로직**:
* **자동 충전 (`btCharge`)**:
* 이미 충전 관련 상태(`GOCHARGE`, `CHARGECHECK`)이거나 충전 중(`FLAG_CHARGEONA`)인 경우: → 충전 중지 여부 확인 후 `GOTO`(이동) 상태로 전환하여 충전 해제.
* 대기 상태인 경우: → 충전 시작 여부 확인 후 `GOCHARGE` RunStep 설정 및 `RUN` 상태 시작.
* **수동 충전 (`btChargeM`)**:
* `FLAG_CHARGEONM` 플래그를 토글합니다. 자동 충전 중일 때는 진입 불가.
## 3. 상태 머신 로직 (State Machine Logic)
### 3.1 충전 이동 (`_SM_RUN_GOCHARGE.cs`)
충전기를 찾아 이동하고 도킹하는 핵심 시퀀스입니다.
**사전 검사 (Prerequisites)**
1. **초기화**: `PUB.Result.CurrentPos` 초기화.
2. **하드웨어 체크**: AGV 연결 상태 확인.
3. **충전 상태 확인 (최적화)**: 이미 충전 중(`FLAG_CHARGEONA` or `Battery_charging`)인 경우, 충전 시퀀스를 진행하지 않고 즉시 `READY` 상태로 전환합니다. (불필요한 충전 해제/재시작 방지).
4. **충전 해제 확인 (`_SM_RUN_CHGOFF`)**: 충전 중이 아니라면(위 단계 통과), 확실한 시작을 위해 충전 해제 상태를 보장합니다.
5. **위치 확인 (`_SM_RUN_POSCHK`)**: 현재 위치를 모를 경우 위치 찾기 수행.
**시퀀스 단계 (Step-by-Step)**
1. **목표 설정**: `NodeMAP_RFID_Charger` 값을 읽어 충전기 노드를 목표(`TargetNode`)로 설정.
2. **충전기 위치 이동**:
* `UpdateMotionPositionForCharger` 함수를 사용해 충전기 앞단까지 이동.
* 제한시간(`ChargeSearchTime`) 초과 시 실패 처리 (`CHARGEOFF` 이동).
3. **정밀 검색 (Fine Search)**:
* 항상 **전진(Forward)**으로 미세 조정 이동하며 충전기를 검색합니다. (경로 예측 시 전진 진입하도록 설정됨).
* 음성 안내: "충전기를 검색합니다".
4. **마크 정지 (Mark Stop)**:
* AGV가 기동 중이면 `MarkStop` 명령 전송.
* 정지할 때까지 대기.
* 60초 내 정지 확인 안 되면 실패 처리.
5. **위치 확정**:
* 정지 후 3초 대기(센서 안정화).
* 현재 위치를 `CHARGE`로 설정.
6. **충전 명령**:
* `AGVCharge(true)` 호출하여 하드웨어에 충전 시작 명령 전송.
* `WAIT_CHARGEACK` 플래그 설정.
7. **ACK 확인**:
* AGV로부터 "CBT" 응답 대기.
* 응답 없을 시 재전송(최대 5회), 실패 시 취소 처리.
### 3.2 충전 확인 (`_SM_RUN_GOCHARGECHECK.cs`)
충전 명령 후 실제 배터리 충전이 시작되었는지 검증합니다.
* **조건**: `Battery_charging` 신호 및 `FLAG_CHARGEONA` 확인.
* **에러 처리**:
* `Charger_pos_error` (위치 에러) 또는 `Charger_run_error` 발생 시 취소.
* 30초 타임아웃: 충전이 시작되지 않으면 `CHARGEOFF`로 전환하여 프로세스 취소.
### 3.3 충전 해제 (`_SM_RUN_CHGOFF.cs`)
충전 상태를 안전하게 종료합니다.
* **로직**:
* `Battery_charging`이 true면 `AGVCharge(false)` 전송.
* 충전이 해제될 때까지 대기 (최대 1분).
* 안전하게 해제되면 `true` 반환.
## 4. 이동 제어 상세 (Movement Control)
* **핵심 함수**: `UpdateMotionPositionForCharger` (in `_Util.cs`)
* **특징**:
* 일반 이동과 달리 충전기 진입을 위한 전용 로직 사용.
* `MARK_SENSOR`를 확인하여 충전 위치 도달 여부 판단.
* **안전 로직 추가 (`CheckStopCondition`)**:
* **비상 정지**: `Emergency` 상태이고 로봇이 멈췄을 경우 `IDLE`로 전환 및 중단.
* **수동 충전 중**: `FLAG_CHARGEONM` 상태일 경우 이동 불가 처리.
## 5. 주요 설정 및 변수
* `PUB.setting.NodeMAP_RFID_Charger`: 충전기 위치의 RFID 태그 ID.
* `PUB.setting.chargerpos`: 충전 진입 방식 (0:전진, 2:후진, 1:QC위치).
* `PUB.setting.ChargeSearchTime`: 충전기 검색 제한 시간.