턴동작 추가

This commit is contained in:
backuppc
2026-02-27 16:55:35 +09:00
parent 43e7458866
commit 46bed6eb25
4 changed files with 185 additions and 14 deletions

View File

@@ -236,6 +236,12 @@ namespace Project
// 완료(Complete) 상태라면 MarkStop 전송
if (nextAction.Reason == AGVNavigationCore.Models.eAGVCommandReason.MarkStop)
{
// 턴 중이거나 턴 동작을 방금 명령했다면 MarkStop 전송 생략
if (nextAction.IsTurn && PUB.AGV.TurnInformation.State == arDev.eNarumiTurn.LeftIng)
{
return false;
}
if (PUB.AGV.data.Speed != 'S')
{
//2초간격으로 명령을 전송한다
@@ -267,6 +273,47 @@ namespace Project
}
//여기시점에서는 장비는 멈춘 상태이다
if (nextAction.IsTurn)
{
// 1. 턴 완료 상태 확인
if (PUB.AGV.TurnInformation.State != arDev.eNarumiTurn.Left)
{
var tsTurn = VAR.TIME.RUN(eVarTime.LastTurnCommandTime);
// 턴 동작 미진행 (또는 이전 명령이 무시된 경우, 쿨타임 5초)
if (PUB.AGV.TurnInformation.State != arDev.eNarumiTurn.LeftIng && tsTurn.TotalSeconds > 5)
{
PUB.log.Add($"[경로실행] 180도 좌회전 명령 전송");
PUB.AGV.AGVMoveLeft180Turn();
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
}
else if (PUB.AGV.TurnInformation.State == arDev.eNarumiTurn.LeftIng)
{
// 턴 진행 중 (타임아웃은 30초)
if (tsTurn.TotalSeconds > 30)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL, "경로 중 턴 동작 대기 타임아웃 (30초)");
}
else
{
PUB._mapCanvas.SetInfoMessage($"턴 진행 중...({tsTurn.TotalSeconds:F1}/30)");
}
}
// 턴이 완료될 때까지 대기 반환
return false;
}
// 2. 턴 정상 완료
PUB.log.Add($"[경로실행] 180도 좌회전 완료 확인. 턴 명령 노드 패스 처리");
PUB._virtualAGV.SetCurrentNodeMarkStop(); // 첫번째 미완료 노드(IsTurn=true인 노드)를 Pass로 전환
// 다음 루프 명령 실행 시 영향 없도록 Turn State 초기화
PUB.AGV.TurnInformation.State = arDev.eNarumiTurn.None;
// 이번 이동 함수 종료, 다음 루프에서 갱신된 Predict 호출
return false;
}
if (nextAction.Reason == eAGVCommandReason.Complete)
{
// 목적지 도착 여부 확인
@@ -310,7 +357,6 @@ namespace Project
{
//PREDICT에서 이동을 명령했따
var bunki = arDev.Narumi.eBunki.Strate;
if (nextAction.Magnet == AGVNavigationCore.Models.MagnetPosition.L) bunki = arDev.Narumi.eBunki.Left;