chore: commit all remaining changes

This commit is contained in:
backuppc
2026-02-04 15:26:22 +09:00
parent b388b1917d
commit ec2af6ac1f
17 changed files with 414 additions and 242 deletions

View File

@@ -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);
}