refactor: Use SetRunStepError within RunStep sequences

- Refactored _SM_RUN_ENTER, _EXIT, _BUFFER_IN, _BUFFER_OUT, and _Util to use SetRunStepError helper.

- Corrected AGV_RUN_FAIL and MESSAGE_ERROR codes in _SM_RUN_ENTER, _EXIT, and _CHARGE_GO.

- Added new error codes AGV_SPEED_SET_FAIL and AGV_RUN_FAIL to EnumData.cs.
This commit is contained in:
backuppc
2026-01-28 15:58:42 +09:00
parent 5b4fdd33cf
commit 16d51a2712
11 changed files with 99 additions and 1213 deletions

View File

@@ -80,11 +80,7 @@ namespace Project
else if (turnState == arDev.eNarumiTurn.Right || turnState == arDev.eNarumiTurn.RightIng)
{
//비정상 상태 (우회전 중?)
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] 턴 방향 불일치(Current:{turnState}). 우회전 상태에서 좌회전을 시도할 수 없습니다.");
PUB._mapCanvas.SetAlertMessage("Turn 방향 오류");
PUB.Result.RunStepErrorCode = eECode.TURN_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] 턴 방향 불일치(Current:{turnState}). 우회전 상태에서 좌회전을 시도할 수 없습니다.", eECode.TURN_FAIL);
}
else
{
@@ -118,11 +114,7 @@ namespace Project
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds > overtime)
{
//30초동안 AGV까 움직이지 않았다면 오류 처리한다.
PUB.AGV.AGVMoveStop($"[bufferin] {overtime}초이내 턴 감지 안됨");
PUB.log.AddE($"[{funcname}] {overtime}초이내 턴 감지 안됨");
PUB._mapCanvas.SetAlertMessage($"턴 완료 확인 불가(최대:{overtime}초)");
PUB.Result.RunStepErrorCode = eECode.TURN_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] {overtime}초이내 턴 감지 안됨", eECode.TURN_FAIL);
return false;
}
else PUB._mapCanvas.SetAlertMessage($"턴 진행 중({PUB.AGV.TurnInformation.Runtime.TotalSeconds:N0}/{overtime})");
@@ -170,11 +162,7 @@ namespace Project
{
if (seqtime.TotalSeconds > 20)
{
PUB.log.AddE($"[{funcname}] 리프트가 내려가지 않습니다");
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.STP);
PUB._mapCanvas.SetAlertMessage("리프트가 내려가지 않음");
PUB.Result.RunStepErrorCode = eECode.LIFT_ERROR;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] 리프트가 내려가지 않습니다", eECode.LIFT_ERROR);
}
else PUB._mapCanvas.SetAlertMessage($"리프트 하강 확인 중({seqtime.TotalSeconds:N0}/20)");
return false;
@@ -209,11 +197,7 @@ namespace Project
{
if (ret >= arDev.eNarumiCommandResult.Error)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] AGV속도설정이 완료되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("agv속도설정 실패");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] AGV속도설정이 완료되지 않았습니다", eECode.AGV_SPEED_SET_FAIL);
}
return false;
}
@@ -231,11 +215,7 @@ namespace Project
{
if(seqtime.TotalSeconds > 3)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] AGV이동이 확인되지 않습니다");
PUB._mapCanvas.SetAlertMessage($"[{funcname}] AGV이동이 확인되지 않습니다");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] AGV이동이 확인되지 않습니다", eECode.AGV_RUN_FAIL);
}
return false;
}
@@ -257,11 +237,7 @@ namespace Project
{
if (seqtime.TotalSeconds > 3)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] MARK STOP신호가 확인되지 않습니다");
PUB._mapCanvas.SetAlertMessage("mark stop 신호 확인 안됨");
PUB.Result.RunStepErrorCode = eECode.MARK_TIMEOUT;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] MARK STOP신호가 확인되지 않습니다", eECode.MARK_TIMEOUT);
return false;
}
}
@@ -277,11 +253,7 @@ namespace Project
var ts = VAR.TIME.RUN(eVarTime.LastTurnCommandTime);
if (ts.TotalSeconds > 10)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] AGV가 멈추지 않아 강제종료 합니다");
PUB._mapCanvas.SetAlertMessage("agv가 멈추지 않아 강제 종료");
PUB.Result.RunStepErrorCode = eECode.AGV_STOP_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] AGV가 멈추지 않아 강제종료 합니다", eECode.AGV_STOP_FAIL);
return false;
}
return false;

View File

@@ -70,11 +70,7 @@ namespace Project
{
if (seqtime.TotalSeconds > 20)
{
PUB.log.AddE($"[{funcname}] 리프트가 동작하지 않습니다");
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.STP);
PUB._mapCanvas.SetAlertMessage("LIft 동작오류");
PUB.Result.RunStepErrorCode = eECode.LIFT_ERROR;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] 리프트가 동작하지 않습니다", eECode.LIFT_ERROR);
}
return false;
}
@@ -96,11 +92,7 @@ namespace Project
{
if (ret >= arDev.eNarumiCommandResult.Error)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] AGV속도설정이 완료되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("agv 속도설정실패");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] AGV속도설정이 완료되지 않았습니다", eECode.AGV_SPEED_SET_FAIL);
}
return false;
}
@@ -124,11 +116,7 @@ namespace Project
if (seqtime.TotalSeconds > 3)
{
//구동이확인되지 않으면 오류처리를 한다.
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] AGV 전진 구동이 확인되지 않습니다");
PUB._mapCanvas.SetAlertMessage("agv 전진실패");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] AGV 전진 구동이 확인되지 않습니다", eECode.AGV_RUN_FAIL);
}
return false;
}
@@ -144,11 +132,7 @@ namespace Project
{
if (seqtime.TotalSeconds > 3)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] MARK STOP신호가 확인되지 않습니다");
PUB._mapCanvas.SetAlertMessage("mark stop 신호 확인 안됨");
PUB.Result.RunStepErrorCode = eECode.MARK_TIMEOUT;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] MARK STOP신호가 확인되지 않습니다", eECode.MARK_TIMEOUT);
}
return false;
}
@@ -162,11 +146,7 @@ namespace Project
{
if (seqtime.TotalSeconds > 15)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] AGV가 멈추지 않아 강제종료 합니다");
PUB._mapCanvas.SetAlertMessage("agv가 멈추지 않아 강제 종료");
PUB.Result.RunStepErrorCode = eECode.AGV_STOP_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] AGV가 멈추지 않아 강제종료 합니다", eECode.AGV_STOP_FAIL);
}
return false;
}
@@ -196,11 +176,7 @@ namespace Project
else if (turnState == arDev.eNarumiTurn.Left || turnState == arDev.eNarumiTurn.LeftIng)
{
//비정상 상태 (좌회전 중?)
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] 턴 방향 불일치(Current:{turnState}). 좌회전 상태에서 우회전을 시도할 수 없습니다.");
PUB._mapCanvas.SetAlertMessage("Turn 방향 오류");
PUB.Result.RunStepErrorCode = eECode.TURN_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] 턴 방향 불일치(Current:{turnState}). 좌회전 상태에서 우회전을 시도할 수 없습니다.", eECode.TURN_FAIL);
}
else
{
@@ -232,11 +208,7 @@ namespace Project
return false;
}
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] Turn 구동 실패");
PUB._mapCanvas.SetAlertMessage("Turn 구동 실패");
PUB.Result.RunStepErrorCode = eECode.TURN_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] Turn 구동 실패", eECode.TURN_FAIL);
}
return false;
}
@@ -250,11 +222,7 @@ namespace Project
{
if (seqtime.TotalSeconds > 25)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] Turn 완료 실패 (Timeout)");
PUB._mapCanvas.SetAlertMessage("Turn 완료 실패");
PUB.Result.RunStepErrorCode = eECode.TURN_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] Turn 완료 실패 (Timeout)", eECode.TURN_FAIL);
}
return false;
}

View File

@@ -32,8 +32,7 @@ namespace Project
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] == true || PUB.AGV.system1.Battery_charging == true ||
VAR.BOOL[eVarBool.FLAG_CHARGEONM] == true)
{
var ermsg = $"현재 충전중이므로 충전시퀀스를 시작할 수 없습니다";
SetRunStepError(ermsg, eECode.ALREADY_CHARGE);
SetRunStepError($"현재 충전중이므로 충전시퀀스를 시작할 수 없습니다", eECode.ALREADY_CHARGE);
return false;
}
@@ -61,17 +60,16 @@ namespace Project
var targetnode = PUB.FindByRFID(PUB.setting.NodeMAP_RFID_Charger);
if (targetnode == null)
{
var ermsg = ($"충전기 노드가 설정되지 않았습니다");
SetRunStepError(ermsg, eECode.NOTSET_CHARGEPOINT);
SetRunStepError($"충전기 노드가 설정되지 않았습니다", eECode.NOTSET_CHARGEPOINT);
return false;
}
//현재위치가 충전기위치이고 마크센서가 감지되었다면 충전기위치로 인지하고
//그렇지 못하면 충전위치가 아니라는 오류를 발생한다
if (PUB.AGV.signal1.mark_sensor == false || PUB._virtualAGV.CurrentNode.Id != targetnode.Id)
var curnode = PUB._virtualAGV.CurrentNode;
if (PUB.AGV.signal1.mark_sensor == false || curnode.Id != targetnode.Id)
{
var ermsg = $"충전기위치가 아니므로 충전을 시작할 수 없습니다(현재위치:{PUB._virtualAGV.CurrentNode.RfidId})";
SetRunStepError(ermsg, eECode.NO_CHARGEPOINT);
SetRunStepError($"충전기위치가 아니므로 충전을 시작할 수 없습니다(현재위치:{curnode.RfidId})", eECode.NO_CHARGEPOINT);
return false;
}
@@ -110,8 +108,7 @@ namespace Project
PUB.counter.Save();
VAR.BYTE[eVarByte.CHARGE_CMDCNT] = 0;
var ermsg = $"충전명령 재전송 횟수 초과";
SetRunStepError(ermsg, eECode.NO_CHARGEPOINT);
SetRunStepError($"충전명령 재전송 횟수 초과", eECode.MESSAGE_ERROR);
return false;
}
else

View File

@@ -38,12 +38,7 @@ namespace Project
//마크센서가 감지된상태여야 완전한위치로 가정한다
if(PUB.AGV.signal1.mark_sensor == false)
{
var errmsg = $"[{funcname}] 마크센서가 감지되지 않습니다";
PUB.AGV.AGVMoveStop(errmsg);
PUB.log.AddE(errmsg);
PUB._mapCanvas.SetAlertMessage(errmsg);
PUB.Result.RunStepErrorCode = eECode.MARK_SENSOR_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] 마크센서가 감지되지 않습니다", eECode.MARK_SENSOR_FAIL);
}
PUB.sm.UpdateRunStepSeq();
return false;
@@ -56,12 +51,7 @@ namespace Project
//가지러가야하는 경우이므로 카트가 없어야한다.
if (PUB.AGV.signal2.cart_detect1 || PUB.AGV.signal2.cart_detect2)
{
var errmsg = $"[{funcname}] 카트가 존재하여 진입을 할 수 없습니다";
PUB.AGV.AGVMoveStop(errmsg);
PUB.log.AddE(errmsg);
PUB._mapCanvas.SetAlertMessage(errmsg);
PUB.Result.RunStepErrorCode = eECode.CART_EXIST;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] 카트가 존재하여 진입을 할 수 없습니다", eECode.CART_EXIST);
return false;
}
}
@@ -71,22 +61,14 @@ namespace Project
if (PUB.AGV.signal2.cart_detect1 == false || PUB.AGV.signal2.cart_detect2 == false)
{
var errmsg = $"[{funcname}] 카트감지센서가 인식되지 않았습니다";
PUB.AGV.AGVMoveStop(errmsg);
PUB.log.AddE(errmsg);
PUB._mapCanvas.SetAlertMessage(errmsg);
PUB.Result.RunStepErrorCode = eECode.CART_EXIST;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError(errmsg, eECode.CART_EXIST);
return false;
}
}
else
{
var errmsg = $"[{funcname}] 알수없는 작업형태입니다({PUB.NextWorkCmd})";
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE(errmsg);
PUB._mapCanvas.SetAlertMessage(errmsg);
PUB.Result.RunStepErrorCode = eECode.NOMODELV; // Unknown work command
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError(errmsg, eECode.NOMODELV);
return false;
}
@@ -111,11 +93,7 @@ namespace Project
if (ts.TotalSeconds > 10)
{
var errmsg = $"[{funcname}] 리프트다운이 확인되지 않습니다";
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE(errmsg);
PUB._mapCanvas.SetAlertMessage(errmsg);
PUB.Result.RunStepErrorCode = eECode.LIFT_ERROR;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError(errmsg, eECode.LIFT_ERROR);
}
return false;
}
@@ -141,11 +119,7 @@ namespace Project
{
if (ret >= arDev.eNarumiCommandResult.Error)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("AGV속도설정이 완료되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("agv 속도 설정 실패");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("AGV속도설정이 완료되지 않았습니다", eECode.AGV_SPEED_SET_FAIL);
}
return false;
}
@@ -169,11 +143,7 @@ namespace Project
if (seqTime.TotalMilliseconds > 1000)
{
//구동이확인되지 않으면 오류처리를 한다.
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("AGV속도설정이 완료되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("agv 속도 설정 실패");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("AGV 구동이 확인되지 않습니다", eECode.AGV_RUN_FAIL);
}
return false;
}
@@ -189,11 +159,7 @@ namespace Project
{
if (seqTime.TotalMilliseconds > 3000)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("MARK STOP신호가 확인되지 않습니다");
PUB._mapCanvas.SetAlertMessage("mark stop 신호 확인 불가");
PUB.Result.RunStepErrorCode = eECode.MARK_TIMEOUT;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("MARK STOP신호가 확인되지 않습니다", eECode.MARK_TIMEOUT);
}
return false;
}
@@ -207,11 +173,7 @@ namespace Project
{
if (seqTime.TotalSeconds > 10)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("AGV가 멈추지 않아 강제종료 합니다");
PUB._mapCanvas.SetAlertMessage("agv 가 멈추지 않아 강제 종료");
PUB.Result.RunStepErrorCode = eECode.AGV_STOP_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("AGV가 멈추지 않아 강제종료 합니다", eECode.AGV_STOP_FAIL);
}
return false;
}
@@ -226,11 +188,7 @@ namespace Project
{
if (seqTime.TotalSeconds > 5)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("마크센서가 감지되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("마크센서가 감지되지 않았습니다");
PUB.Result.RunStepErrorCode = eECode.MARK_SENSOR_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("마크센서가 감지되지 않았습니다", eECode.MARK_SENSOR_FAIL);
}
return false;
}

View File

@@ -65,12 +65,7 @@ namespace Project
var ts = VAR.TIME.RUN(eVarTime.LastTurnCommandTime);
if (ts.TotalSeconds > 10)
{
var errmsg = $"[{funcname}] 리프트({liftCmd})이 확인되지 않습니다";
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE(errmsg);
PUB._mapCanvas.SetAlertMessage(errmsg);
PUB.Result.RunStepErrorCode = eECode.LIFT_ERROR;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] 리프트({liftCmd})이 확인되지 않습니다", eECode.LIFT_ERROR);
}
return false;
}
@@ -94,11 +89,7 @@ namespace Project
{
if (ret >= arDev.eNarumiCommandResult.Error)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE($"[{funcname}] AGV속도설정이 완료되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("agv 속도 설정 실패");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"[{funcname}] AGV속도설정이 완료되지 않았습니다", eECode.AGV_SPEED_SET_FAIL);
}
return false;
}
@@ -121,11 +112,7 @@ namespace Project
if (seqTime.TotalMilliseconds > 1000)
{
//구동이확인되지 않으면 오류처리를 한다.
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("AGV속도설정이 완료되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("agv 속도 설정 실패");
PUB.Result.RunStepErrorCode = eECode.AGV_SPEED_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("AGV 구동이 확인되지 않습니다", eECode.AGV_RUN_FAIL);
}
return false;
}
@@ -141,11 +128,7 @@ namespace Project
{
if (seqTime.TotalMilliseconds > 3000)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("MARK STOP신호가 확인되지 않습니다");
PUB._mapCanvas.SetAlertMessage("mark stop 신호 확인 불가");
PUB.Result.RunStepErrorCode = eECode.MARK_TIMEOUT;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("MARK STOP신호가 확인되지 않습니다", eECode.MARK_TIMEOUT);
}
return false;
}
@@ -159,11 +142,7 @@ namespace Project
{
if (seqTime.TotalSeconds > 10)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("AGV가 멈추지 않아 강제종료 합니다");
PUB._mapCanvas.SetAlertMessage("agv 가 멈추지 않아 강제 종료");
PUB.Result.RunStepErrorCode = eECode.AGV_STOP_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("AGV가 멈추지 않아 강제종료 합니다", eECode.AGV_STOP_FAIL);
}
return false;
}
@@ -177,11 +156,7 @@ namespace Project
{
if (seqTime.TotalSeconds > 5)
{
PUB.AGV.AGVMoveStop(funcname);
PUB.log.AddE("마크센서가 감지되지 않았습니다");
PUB._mapCanvas.SetAlertMessage("마크센서가 감지되지 않았습니다");
PUB.Result.RunStepErrorCode = eECode.MARK_SENSOR_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError("마크센서가 감지되지 않았습니다", eECode.MARK_SENSOR_FAIL);
}
return false;
}

View File

@@ -45,10 +45,11 @@ namespace Project
/// </summary>
/// <param name="ermsg"></param>
/// <param name="ecode"></param>
public void SetRunStepError(string ermsg, eECode ecode)
public void SetRunStepError(string errmsg, eECode ecode)
{
PUB.log.AddE(ermsg);
PUB._mapCanvas.SetAlertMessage(ermsg);
PUB.AGV.AGVMoveStop(errmsg);
PUB.log.AddE(errmsg);
PUB._mapCanvas.SetAlertMessage(errmsg);
PUB.Result.RunStepErrorCode = ecode;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
}
@@ -151,10 +152,7 @@ namespace Project
VAR.I32[eVarInt32.PathValidationError] += 1;
if (VAR.I32[eVarInt32.PathValidationError] > 50)
{
PUB.log.AddE($"연속 경로 무결성 오류로 인해 중지 합니다");
PUB._mapCanvas.SetAlertMessage($"연속 경로 무결성 오류로 인해 중지 합니다");
PUB.Result.RunStepErrorCode = eECode.PATH_INTEGRITY_FAIL;
PUB.sm.SetNewRunStep(ERunStep.ERROR);
SetRunStepError($"연속 경로 무결성 오류로 인해 중지 합니다", eECode.PATH_INTEGRITY_FAIL);
}
return false;
}