Files
ENIG/Cs_HMI/docs/Charging_Sequence_Analysis.md

4.5 KiB

충전 시퀀스 분석 (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: 충전기 검색 제한 시간.