chore: commit all remaining changes
This commit is contained in:
@@ -104,6 +104,7 @@ namespace Project
|
||||
case ERunStep.GOHOME:
|
||||
if (_SM_RUN_GOTO_HOME(runStepisFirst, PUB.sm.GetRunSteptime) == true)
|
||||
{
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB.log.Add($"홈 이동이 완료되어 준비상태로 전환합니다");
|
||||
PUB.sm.SetNewRunStep(ERunStep.READY);
|
||||
}
|
||||
@@ -156,7 +157,7 @@ namespace Project
|
||||
PUB.log.Add($"정의되지 않은 스테이션 입니다({target.StationType}) ");
|
||||
break;
|
||||
}
|
||||
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.None;
|
||||
PUB.sm.SetNewRunStep(ERunStep.READY);
|
||||
}
|
||||
@@ -187,6 +188,7 @@ namespace Project
|
||||
}
|
||||
else if (_SM_RUN_CHARGE_GO(runStepisFirst, PUB.sm.GetRunSteptime))
|
||||
{
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB.Speak(Lang.충전을시작합니다);
|
||||
PUB.sm.SetNewRunStep(ERunStep.CHARGECHECK);
|
||||
return;
|
||||
@@ -202,6 +204,7 @@ namespace Project
|
||||
else if (_SM_RUN_CHARGE_CHECK(runStepisFirst, PUB.sm.GetRunSteptime))
|
||||
{
|
||||
//충전상태가 활성화되었으므로 대기상태로 전환한다
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB.sm.SetNewRunStep(ERunStep.READY);
|
||||
PUB.log.AddAT("충전상태 확인 완료로 인해 대기 합니다");
|
||||
}
|
||||
@@ -218,6 +221,7 @@ namespace Project
|
||||
//충전 상태가 OFF되어야 동작하게한다
|
||||
if (_SM_RUN_CHARGE_GOFF(isFirst, stepTime) == true)
|
||||
{
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
//충전상태가 활성화되었으므로 대기상태로 전환한다
|
||||
PUB.sm.ClearRunStep();
|
||||
|
||||
@@ -233,6 +237,7 @@ namespace Project
|
||||
case ERunStep.LOADER_IN: //로더도킹
|
||||
if (_SM_RUN_ENTER(runStepisFirst, PUB.sm.GetRunSteptime))
|
||||
{
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB.Speak(Lang.버퍼도킹이완료되었습니다);
|
||||
|
||||
//도킹완료상태를 업데이트한다.
|
||||
@@ -248,6 +253,7 @@ namespace Project
|
||||
case ERunStep.LOADER_OUT: //로더아웃
|
||||
if (_SM_RUN_EXIT(runStepisFirst, PUB.sm.GetRunSteptime))
|
||||
{
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB.Speak(Lang.버퍼도킹해제완료);
|
||||
|
||||
//도킹완료상태를 업데이트한다.
|
||||
@@ -262,6 +268,7 @@ namespace Project
|
||||
case ERunStep.BUFFER_OUT: //버퍼아웃
|
||||
if (_SM_RUN_BUFFER_OUT(runStepisFirst, PUB.sm.GetRunSteptime))
|
||||
{
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB.Speak(Lang.버퍼도킹해제완료);
|
||||
|
||||
//도킹완료상태를 업데이트한다.
|
||||
@@ -277,6 +284,7 @@ namespace Project
|
||||
case ERunStep.BUFFER_IN: //버퍼도킹
|
||||
if (_SM_RUN_BUFFER_IN(runStepisFirst, PUB.sm.GetRunSteptime))
|
||||
{
|
||||
PUB.XBE.SendActionComplete(PUB.sm.RunStep);
|
||||
PUB.Speak(Lang.버퍼도킹이완료되었습니다);
|
||||
|
||||
//도킹완료상태를 업데이트한다.
|
||||
|
||||
@@ -79,34 +79,15 @@ namespace Project
|
||||
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.L90)
|
||||
{
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 이미 Left Turn 완료 상태입니다. 턴 명령을 건너뜁니다.");
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
}
|
||||
else
|
||||
{
|
||||
//하드웨어 상태 확인
|
||||
//var turnState = PUB.AGV.TurnInformation?.StateNew ?? arDev.eNarumiTurn.None;
|
||||
|
||||
//if (turnState == arDev.eNarumiTurn.Left || turnState == arDev.eNarumiTurn.LeftIng)
|
||||
//{
|
||||
// //이미 좌회전 중이거나 완료된 하드웨어 상태
|
||||
// PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 하드웨어 좌회전 상태 확인됨({turnState}). 명령을 건너뜁니다.");
|
||||
// PUB.sm.UpdateRunStepSeq();
|
||||
//}
|
||||
//else if (turnState == arDev.eNarumiTurn.Right || turnState == arDev.eNarumiTurn.RightIng)
|
||||
//{
|
||||
// //비정상 상태 (우회전 중?)
|
||||
// SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL, $"[{funcname}-{PUB.sm.RunStepSeq}] 턴 방향 불일치(Current:{turnState}). 우회전 상태에서 좌회전을 시도할 수 없습니다.");
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
//정상 (None) -> 턴 명령 실행
|
||||
PUB.AGV.AGVMoveLeft180Turn();
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] AGV Left Turn");
|
||||
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
//}
|
||||
PUB._mapCanvas.SetAlertMessage($"턴 실행");
|
||||
}
|
||||
PUB._mapCanvas.SetAlertMessage($"턴 진행 중");
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
@@ -155,7 +136,7 @@ namespace Project
|
||||
//리프트 센서 확인
|
||||
if (PUB.AGV.signal1.lift_down == false)
|
||||
{
|
||||
VAR.I32[eVarInt32.RetryLift] = 0;
|
||||
VAR.I32[eVarInt32.RetryLift] += 1;
|
||||
var rlt = PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.DN);
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 리프트 하강 실행:{rlt}");
|
||||
}
|
||||
@@ -191,20 +172,20 @@ namespace Project
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
if(PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOffEnter)
|
||||
if (PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOffEnter)
|
||||
{
|
||||
VAR.I32[eVarInt32.RetryManget] += 1;
|
||||
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.ON);
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 마그넷ON");
|
||||
}
|
||||
|
||||
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//마그넷센서가 들어오는지 5초간 확인한다.
|
||||
if (PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOffEnter &&
|
||||
if (PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOffEnter &&
|
||||
PUB.AGV.signal1.magnet_on == false)
|
||||
{
|
||||
if (seqtime.TotalSeconds > 5)
|
||||
|
||||
@@ -41,6 +41,17 @@ namespace Project
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//회전이없다면 오류처리한다.
|
||||
if(PUB._virtualAGV.Turn != AGVNavigationCore.Models.AGVTurn.L90)
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.BUFFER_NOT_COMPLETE, $"[{funcname}-{PUB.sm.RunStepSeq}] 버퍼에서 나오려면 버퍼진입작업이 완료되어있어야 합니다");
|
||||
return false;
|
||||
}
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
arDev.Narumi.LiftCommand lift = PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOnExit ? arDev.Narumi.LiftCommand.UP : arDev.Narumi.LiftCommand.DN;
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 리프트제어 {lift}");
|
||||
@@ -57,7 +68,7 @@ namespace Project
|
||||
{
|
||||
if (seqtime.TotalSeconds > 20)
|
||||
{
|
||||
if(VAR.I32[eVarInt32.RetryLift] < 3)
|
||||
if (VAR.I32[eVarInt32.RetryLift] < 3)
|
||||
{
|
||||
PUB.log.AddAT($"[{funcname}-{PUB.sm.RunStepSeq}] 리프트가 완료되지 않아 재시도 합니다");
|
||||
PUB.sm.UpdateRunStepSeq(-1);
|
||||
@@ -73,10 +84,10 @@ namespace Project
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
if (PUB.AGV.signal1.mark_sensor == false)
|
||||
//if (PUB.AGV.signal1.mark_sensor == false)
|
||||
{
|
||||
//빈 상태로 아웃해야한다.
|
||||
if (SpeedSetRetry)
|
||||
@@ -112,7 +123,7 @@ namespace Project
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//전진이동
|
||||
if (PUB.AGV.signal1.mark_sensor == false)
|
||||
//if (PUB.AGV.signal1.mark_sensor == false)
|
||||
{
|
||||
VAR.I32[eVarInt32.RetryMove] += 1;
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] AGV 전진 구동 시작");
|
||||
@@ -124,13 +135,13 @@ namespace Project
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//AGV구동을 확인하고 마크스탑을 설정한다.
|
||||
if (PUB.AGV.signal1.mark_sensor == false)
|
||||
//if (PUB.AGV.signal1.mark_sensor == false)
|
||||
{
|
||||
if (PUB.AGV.system1.agv_run == false)
|
||||
{
|
||||
if (seqtime.TotalSeconds > 3)
|
||||
{
|
||||
if(VAR.I32[eVarInt32.RetryMove] < 3)
|
||||
if (VAR.I32[eVarInt32.RetryMove] < 3)
|
||||
{
|
||||
//재시도를 하게한다.
|
||||
PUB.sm.UpdateRunStepSeq(-1);
|
||||
@@ -141,7 +152,7 @@ namespace Project
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_RUN_FAIL);
|
||||
VAR.I32[eVarInt32.RetryMove] = 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -161,14 +172,14 @@ namespace Project
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
if (PUB.AGV.signal1.mark_sensor == false)
|
||||
//if (PUB.AGV.signal1.mark_sensor == false)
|
||||
{
|
||||
//마크스탑신호가 3초이내로 들어와야 한다
|
||||
if (PUB.AGV.data.Speed != 'S')
|
||||
{
|
||||
if (seqtime.TotalSeconds > 3)
|
||||
{
|
||||
if(VAR.I32[eVarInt32.RetryMarkStop] < 3)
|
||||
if (VAR.I32[eVarInt32.RetryMarkStop] < 3)
|
||||
{
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] MarkStop 재시도");
|
||||
PUB.sm.UpdateRunStepSeq(-1);
|
||||
@@ -184,7 +195,7 @@ namespace Project
|
||||
}
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] MarkStop 신구 확인 완료");
|
||||
}
|
||||
else PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}]마크스탑이 미리 들어와있어. 이동및 스탑을 하지 않습니다");
|
||||
//else PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}]마크스탑이 미리 들어와있어. 이동및 스탑을 하지 않습니다");
|
||||
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
@@ -215,69 +226,45 @@ namespace Project
|
||||
}
|
||||
else
|
||||
{
|
||||
//하드웨어 상태 확인
|
||||
//var turnState = PUB.AGV.TurnInformation?.StateOld ?? arDev.eNarumiTurn.None;
|
||||
//if (turnState == arDev.eNarumiTurn.Right)
|
||||
//{
|
||||
// SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL, $"[{funcname}-{PUB.sm.RunStepSeq}] 턴 방향 불일치(Current:{turnState}). 버퍼진출시에는 LEFT-TURN 상태여야 합니다");
|
||||
// return false;
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
//정상 (None) -> 턴 명령 실행
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] AGV Right Turn 명령 전송");
|
||||
PUB.AGV.AGVMoveRight180Turn();
|
||||
//}
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] AGV Right Turn");
|
||||
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
|
||||
PUB._mapCanvas.SetAlertMessage($"턴 실행");
|
||||
}
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//이동확인
|
||||
if (PUB.AGV.system1.agv_run == false)
|
||||
//이미 완료된 상태라면 대기 과정을 건너뛴다.
|
||||
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.R90)
|
||||
{
|
||||
//최소3초기다려준다.
|
||||
if (seqtime.TotalSeconds > 3)
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 이미 턴이완료된 상태입니다");
|
||||
}
|
||||
else
|
||||
{
|
||||
//왼쪽턴이 완료되지 않은경우
|
||||
if (PUB.AGV.TurnInformation.State != arDev.eNarumiTurn.Right)
|
||||
{
|
||||
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.R90)
|
||||
//움직임 확인을 위해 3초간은 검증을 유예한다
|
||||
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds < 3) return false;
|
||||
|
||||
//턴 이동 상태가 확인되어야 한다.
|
||||
var overtime = 30;
|
||||
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds > overtime)
|
||||
{
|
||||
//이미 완료된 상태이므로 이동 확인 패스
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
//30초동안 AGV까 움직이지 않았다면 오류 처리한다.
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL, $"[{funcname}] {overtime}초이내 턴 감지 안됨");
|
||||
return false;
|
||||
}
|
||||
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL);
|
||||
else PUB._mapCanvas.SetAlertMessage($"턴 진행 중({PUB.AGV.TurnInformation.Runtime.TotalSeconds:N0}/{overtime})");
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//멈춤확인
|
||||
if (PUB.AGV.system1.agv_run == true)
|
||||
{
|
||||
if (seqtime.TotalSeconds > 25)
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL);
|
||||
}
|
||||
return false;
|
||||
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.None; //턴완료
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] Turn(right) 완료 - 위치복귀됨");
|
||||
}
|
||||
|
||||
//턴 완료 상태 업데이트
|
||||
if (PUB._virtualAGV.Turn != AGVNavigationCore.Models.AGVTurn.R90)
|
||||
{
|
||||
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.None)
|
||||
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.R90; //left에서 right 턴을 했으니 none 이다
|
||||
else
|
||||
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.None;
|
||||
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] Turn State Updated to {PUB._virtualAGV.Turn}");
|
||||
}
|
||||
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
PUB.sm.UpdateRunStepSeq(); //이미완료된상태이므로 다음으로 진행한다.
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
|
||||
@@ -14,22 +14,23 @@ namespace Project
|
||||
/// <summary>
|
||||
/// 장비엣 빠젼나온다.
|
||||
/// </summary>
|
||||
public Boolean _SM_RUN_EXIT(bool isFirst, TimeSpan seqTime)
|
||||
public Boolean _SM_RUN_EXIT(bool isFirst, TimeSpan seqtime)
|
||||
{
|
||||
var idx = 1;
|
||||
var funcname = PUB.sm.RunStep.ToString();
|
||||
var funcname = $"[EXIT-{PUB.sm.RunStep}]";
|
||||
|
||||
//충전 상태가 OFF되어야 동작하게한다
|
||||
if (_SM_RUN_CHARGE_GOFF(isFirst, seqTime) == false) return false;
|
||||
if (_SM_RUN_CHARGE_GOFF(isFirst, seqtime) == false) return false;
|
||||
|
||||
//라이더멈춤이 설정되어있다면 음성으로 알려준다
|
||||
if (CheckLiderStop() == false) return false;
|
||||
|
||||
if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
PUB.log.Add("OUT작업-시작");
|
||||
PUB.Speak("작업을 시작합니다");
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] OUT작업-시작");
|
||||
PUB.Speak("작업을 시작합니다(안전을위해 AGVSTOP신호를 전송합니다)");
|
||||
PUB.AGV.AGVMoveStop(funcname);
|
||||
VAR.I32[eVarInt32.RetryLift] = 0;
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
@@ -38,7 +39,7 @@ namespace Project
|
||||
//작업형태에 따라서. 리프트를 제어한다.
|
||||
var liftCmd = arDev.Narumi.LiftCommand.DN;
|
||||
if (PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOnExit) liftCmd = arDev.Narumi.LiftCommand.UP;
|
||||
|
||||
VAR.I32[eVarInt32.RetryLift] += 1;
|
||||
PUB.AGV.LiftControl(liftCmd);
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
@@ -62,21 +63,32 @@ namespace Project
|
||||
}
|
||||
else
|
||||
{
|
||||
var ts = VAR.TIME.RUN(eVarTime.LastTurnCommandTime);
|
||||
if (ts.TotalSeconds > 10)
|
||||
if (seqtime.TotalSeconds > 20)
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.LIFT_ERROR, $"[{funcname}] 리프트({liftCmd})이 확인되지 않습니다");
|
||||
if (VAR.I32[eVarInt32.RetryLift] < 3)
|
||||
{
|
||||
PUB.log.AddAT($"[{funcname}-{PUB.sm.RunStepSeq}] 리프트가 동작({liftCmd})하지 않아 재시도 합니다");
|
||||
PUB.sm.UpdateRunStepSeq(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.LIFT_ERROR,
|
||||
$"[{funcname}-{PUB.sm.RunStepSeq}] 리프트가 동작({liftCmd})하지 않습니다");
|
||||
VAR.I32[eVarInt32.RetryLift] = 0;
|
||||
}
|
||||
}
|
||||
else PUB._mapCanvas.SetAlertMessage($"리프트 하강 확인 중({seqtime.TotalSeconds:N0}/20)");
|
||||
return false;
|
||||
}
|
||||
|
||||
PUB.log.Add("리프트 동작 확인 완료");
|
||||
VAR.I32[eVarInt32.RetryMoveset] = 0;
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 리프트 동작 확인 완료");
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//빈 상태로 아웃해야한다.
|
||||
//라이더 끈상태로 빠져나와야 한다
|
||||
VAR.I32[eVarInt32.RetryMoveset] += 1;
|
||||
var ret = PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
|
||||
{
|
||||
Bunki = arDev.Narumi.eBunki.Strate,
|
||||
@@ -84,22 +96,45 @@ namespace Project
|
||||
PBSSensor = 0,
|
||||
Speed = arDev.Narumi.eMoveSpd.Low,
|
||||
});
|
||||
//명령이 실패되었다면 재시도를 한다
|
||||
if (ret != arDev.eNarumiCommandResult.Success)
|
||||
{
|
||||
if (ret >= arDev.eNarumiCommandResult.Error)
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_SPEED_SET_FAIL);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
PUB.log.AddAT($"[{funcname}-{PUB.sm.RunStepSeq}] moveset return fail:{ret}");
|
||||
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//moveset 결과확인
|
||||
if (PUB.AGV.data.Speed != 'L' ||
|
||||
PUB.AGV.data.Sts != 'S' ||
|
||||
PUB.AGV.data.Direction != 'F')
|
||||
{
|
||||
if (seqtime.TotalSeconds > 5)
|
||||
{
|
||||
if (VAR.I32[eVarInt32.RetryMoveset] < 3)
|
||||
{
|
||||
PUB.log.AddAT($"[{funcname}-{PUB.sm.RunStepSeq}] MoveSet이 확인되지 않아 재시도 합니다");
|
||||
PUB.sm.UpdateRunStepSeq(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_SPEED_SET_FAIL,
|
||||
$"[{funcname}-{PUB.sm.RunStepSeq}] MoveSet 실패");
|
||||
VAR.I32[eVarInt32.RetryMoveset] = 0;
|
||||
}
|
||||
}
|
||||
else PUB._mapCanvas.SetAlertMessage($"이동설정 확인 중({seqtime.TotalSeconds:N0}/20)");
|
||||
return false;
|
||||
}
|
||||
VAR.I32[eVarInt32.RetryMove] = 0;
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
//전진이동
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 전진이동");
|
||||
VAR.I32[eVarInt32.RetryMove] += 1;
|
||||
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
@@ -109,14 +144,33 @@ namespace Project
|
||||
//AGV구동을 확인하고 마크스탑을 설정한다.
|
||||
if (PUB.AGV.system1.agv_run == false)
|
||||
{
|
||||
if (seqTime.TotalMilliseconds > 1000)
|
||||
if (seqtime.TotalSeconds > 3)
|
||||
{
|
||||
//구동이확인되지 않으면 오류처리를 한다.
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_RUN_FAIL);
|
||||
if (VAR.I32[eVarInt32.RetryMove] < 3)
|
||||
{
|
||||
PUB.log.AddAT($"[{funcname}-{PUB.sm.RunStepSeq}] AGV전진이 확인되지 않아 재시도 합니다");
|
||||
PUB.sm.UpdateRunStepSeq(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_RUN_FAIL,
|
||||
$"[{funcname}-{PUB.sm.RunStepSeq}] agv 구동확인 안됨");
|
||||
VAR.I32[eVarInt32.RetryMove] = 0;
|
||||
}
|
||||
}
|
||||
else PUB._mapCanvas.SetAlertMessage($"AGV RUN 확인 중({seqtime.TotalSeconds:N0}/20)");
|
||||
return false;
|
||||
}
|
||||
|
||||
//마크스탑설정
|
||||
VAR.I32[eVarInt32.RetryMarkStop] = 0;
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
}
|
||||
else if (PUB.sm.RunStepSeq == idx++)
|
||||
{
|
||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 마크스탑신호를 전달합니다");
|
||||
VAR.I32[eVarInt32.RetryMarkStop] += 1;
|
||||
PUB.AGV.AGVMoveStop(funcname, arDev.Narumi.eStopOpt.MarkStop);
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
return false;
|
||||
@@ -126,10 +180,21 @@ namespace Project
|
||||
//마크스탑신호가 3초이내로 들어와야 한다
|
||||
if (PUB.AGV.data.Speed != 'S')
|
||||
{
|
||||
if (seqTime.TotalMilliseconds > 3000)
|
||||
if (seqtime.TotalSeconds > 20)
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.MARK_TIMEOUT);
|
||||
if (VAR.I32[eVarInt32.RetryMarkStop] < 3)
|
||||
{
|
||||
PUB.log.AddAT($"[{funcname}-{PUB.sm.RunStepSeq}] 마크스탑이 확인되지 않아 재시도 합니다");
|
||||
PUB.sm.UpdateRunStepSeq(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.MARK_STOP_FAIL,
|
||||
$"[{funcname}-{PUB.sm.RunStepSeq}] 마크스탑이 확인되지 않습니다");
|
||||
VAR.I32[eVarInt32.RetryMarkStop] = 0;
|
||||
}
|
||||
}
|
||||
else PUB._mapCanvas.SetAlertMessage($"리프트 하강 확인 중({seqtime.TotalSeconds:N0}/20)");
|
||||
return false;
|
||||
}
|
||||
PUB.sm.UpdateRunStepSeq();
|
||||
@@ -140,7 +205,7 @@ namespace Project
|
||||
//AGV가 멈출때까지 기다린다.
|
||||
if (PUB.AGV.system1.agv_run == true)
|
||||
{
|
||||
if (seqTime.TotalSeconds > 10)
|
||||
if (seqtime.TotalSeconds > 10)
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_STOP_FAIL);
|
||||
}
|
||||
@@ -154,7 +219,7 @@ namespace Project
|
||||
//마크센서입력을 확인한다.
|
||||
if (PUB.AGV.signal1.mark_sensor == false)
|
||||
{
|
||||
if (seqTime.TotalSeconds > 5)
|
||||
if (seqtime.TotalSeconds > 5)
|
||||
{
|
||||
SetRunStepError(ENIGProtocol.AGVErrorCode.MARK_SENSOR_FAIL);
|
||||
}
|
||||
|
||||
@@ -297,10 +297,17 @@ namespace Project
|
||||
// 목적지 도착 여부 확인
|
||||
if (PUB.AGV.signal1.mark_sensor == false)
|
||||
{
|
||||
|
||||
PUB.log.AddI($"목표도착되었으나 마크센서가 감지되지 않아 완료처리 하지않습니다");
|
||||
return false;
|
||||
|
||||
if(PUB._virtualAGV.TargetNode.StationType != StationType.Normal)
|
||||
{
|
||||
PUB.log.AddAT($"목표도착되었으나 마크센서가 감지되지 않아 완료처리 하지않습니다");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
//일반노드가목표인경우에는 완료처리한다.
|
||||
PUB.log.AddI($"일반노드는 마크센서가 감지되지 않아도 완료처리 합니다");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 경로가 존재한다면...
|
||||
|
||||
Reference in New Issue
Block a user