턴동작 추가
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user