buffer in 시퀀스 확인 완료
- 최초 위치확인이 좀 이상하다.
This commit is contained in:
@@ -78,7 +78,7 @@ namespace Project
|
||||
{
|
||||
if (string.IsNullOrEmpty(errmsg))
|
||||
{
|
||||
errmsg = ENIGProtocol.AGVUtility.GetAGVErrorMessage(ecode);
|
||||
errmsg = ENIGProtocol.AGVUtility.GetAGVErrorMessage(ecode);
|
||||
}
|
||||
|
||||
PUB.AGV.AGVMoveStop(errmsg);
|
||||
@@ -214,7 +214,7 @@ namespace Project
|
||||
|
||||
//predict 를 이용하여 다음 이동을 모두 확인한다.
|
||||
var nextAction = PUB._virtualAGV.Predict();
|
||||
|
||||
|
||||
// [DEBUG] 예측 결과 로그 추가
|
||||
// 너무 빈번하게 찍히지 않도록 변화가 있을 때만 찍거나, 특정 조건에서 찍는 것이 좋으나
|
||||
// 디버깅 요청이므로 일단 주요 정보 출력
|
||||
@@ -232,23 +232,51 @@ namespace Project
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//모터에서 정지를 요청했다
|
||||
if (nextAction.Motor == AGVNavigationCore.Models.MotorCommand.Stop)
|
||||
{
|
||||
if (PUB.AGV.system1.agv_run)
|
||||
{
|
||||
|
||||
// 완료(Complete) 상태라면 MarkStop 전송
|
||||
if (nextAction.Reason == AGVNavigationCore.Models.eAGVCommandReason.MarkStop)
|
||||
{
|
||||
PUB.log.Add("다음행동예측에서 MARK STOP이 확인되었습니다 (자동정지시퀀스)");
|
||||
PUB.AGV.AGVMoveStop(nextAction.Message, arDev.Narumi.eStopOpt.MarkStop);
|
||||
if (PUB.AGV.data.Speed != 'S')
|
||||
{
|
||||
// [쿨타임 적용] 정지 명령은 별도의 타이머(LastStopCommandTime)를 사용하여
|
||||
// 이동 직후라도 즉시 반응할 수 있도록 한다. (이미 정지신호를 보냈다면 2초 대기)
|
||||
var tsCmd = VAR.TIME.RUN(eVarTime.LastStopCommandTime);
|
||||
if (tsCmd.TotalSeconds >= 2.0)
|
||||
{
|
||||
PUB.log.Add("다음행동예측에서 MARK STOP이 확인되었습니다 (자동정지시퀀스)");
|
||||
PUB.AGV.AGVMoveStop(nextAction.Message, arDev.Narumi.eStopOpt.MarkStop);
|
||||
|
||||
// 정지 타이머 갱신 (연속 정지 방지)
|
||||
VAR.TIME.Update(eVarTime.LastStopCommandTime);
|
||||
// 일반 타이머도 갱신 (정지 직후 불필요한 이동 방지)
|
||||
LastCommandTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
PUB.log.Add($"다음행동예측에서 장비 멈춤이 확인되었습니다({nextAction.Reason})");
|
||||
PUB.AGV.AGVMoveStop(nextAction.Message);
|
||||
// [쿨타임 적용] 정지 명령은 별도의 타이머(LastStopCommandTime)를 사용하여
|
||||
// 이동 직후라도 즉시 반응할 수 있도록 한다. (이미 정지신호를 보냈다면 2초 대기)
|
||||
var tsCmd = VAR.TIME.RUN(eVarTime.LastStopCommandTime);
|
||||
if (tsCmd.TotalSeconds >= 2.0)
|
||||
{
|
||||
PUB.log.Add($"다음행동예측에서 장비 멈춤이 확인되었습니다({nextAction.Reason})");
|
||||
PUB.AGV.AGVMoveStop(nextAction.Message);
|
||||
// 정지 타이머 갱신 (연속 정지 방지)
|
||||
VAR.TIME.Update(eVarTime.LastStopCommandTime);
|
||||
|
||||
// 일반 타이머도 갱신 (정지 직후 불필요한 이동 방지)
|
||||
LastCommandTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
// 목적지 도착 여부 확인
|
||||
@@ -258,7 +286,7 @@ namespace Project
|
||||
if (PUB.AGV.system1.agv_run == false)
|
||||
{
|
||||
// 경로가 존재한다면...
|
||||
if (PUB._virtualAGV.CurrentPath != null && PUB._virtualAGV.CurrentPath.DetailedPath.Any())
|
||||
if (PUB._virtualAGV.CurrentPath != null && PUB._virtualAGV.CurrentPath.DetailedPath.Any())
|
||||
{
|
||||
var lastInfo = PUB._virtualAGV.CurrentPath.DetailedPath.Last();
|
||||
// 위치와 방향이 모두 일치해야 완료된 것으로 본다.
|
||||
@@ -278,8 +306,8 @@ namespace Project
|
||||
}
|
||||
else
|
||||
{
|
||||
// ...
|
||||
if (PUB._virtualAGV.CurrentNode.Id == PUB._virtualAGV.TargetNode.Id)
|
||||
// ...
|
||||
if (PUB._virtualAGV.CurrentNode.Id == PUB._virtualAGV.TargetNode.Id)
|
||||
{
|
||||
// ...
|
||||
PUB.log.AddI($"목표 도착 및 정지 확인됨(MarkStop 완료, No Path Info) Node:...");
|
||||
@@ -345,7 +373,7 @@ namespace Project
|
||||
PUB.log.Add($"Predict Run Setting = bunki:{bunki},dir:{dir},pbs:1,spd:{spd}");
|
||||
else
|
||||
PUB.log.AddE($"Predict Run Setting = bunki:{bunki},dir:{dir},pbs:1,spd:{spd}");
|
||||
|
||||
|
||||
LastCommandTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user