최종우치에. 이전노드정보와 다음 시작 노드 정보를 모두 추가함.
최초 실행시 선택하는 위치 다이얼로그 제거 후 바로 자동 로딩하도록 함
This commit is contained in:
@@ -202,7 +202,7 @@ namespace Project
|
||||
{
|
||||
//절반이상 경로가 짧을때에는 재계산을 하게한다
|
||||
var halfcnt = (int)(PUB._virtualAGV.CurrentPath.DetailedPath.Count / 2.0);
|
||||
if (PathResult2.DetailedPath.Count < halfcnt)
|
||||
if (PathResult2.DetailedPath.Count > 2 && PathResult2.DetailedPath.Count < halfcnt)
|
||||
{
|
||||
var msg = $"단축경로가 확인되었습니다. 경로를 삭제 합니다";
|
||||
PUB.log.AddE(msg);
|
||||
@@ -234,12 +234,23 @@ namespace Project
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Moveforce = false;
|
||||
if(nextAction.Motor == MotorCommand.Stop && nextAction.Reason == eAGVCommandReason.MarkStop)
|
||||
{
|
||||
//마크스탑을 해야하는데 움직이지 않는다면 움직이도록 해야한다
|
||||
if(PUB.AGV.system1.agv_run==false)
|
||||
{
|
||||
PUB.log.Add("마크스탑을 해야하는데 중지상태라서 강제 이동하도록 합니다");
|
||||
Moveforce = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//모터에서 정지를 요청했다
|
||||
if (nextAction.Motor == AGVNavigationCore.Models.MotorCommand.Stop)
|
||||
if (Moveforce == false && nextAction.Motor == AGVNavigationCore.Models.MotorCommand.Stop)
|
||||
{
|
||||
if (PUB.AGV.system1.agv_run)
|
||||
{
|
||||
|
||||
// 완료(Complete) 상태라면 MarkStop 전송
|
||||
if (nextAction.Reason == AGVNavigationCore.Models.eAGVCommandReason.MarkStop)
|
||||
{
|
||||
@@ -277,57 +288,55 @@ namespace Project
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
//이동중이라면 멈추는 명령을 전송하거나, 마크스탑을 진행해야하낟.
|
||||
return false;
|
||||
}
|
||||
|
||||
// 목적지 도착 여부 확인
|
||||
// .. (생략) ..
|
||||
if (PUB._virtualAGV.IsPositionConfirmed)
|
||||
if (nextAction.Reason == eAGVCommandReason.Complete)
|
||||
{
|
||||
if (PUB.AGV.system1.agv_run == false)
|
||||
// 목적지 도착 여부 확인
|
||||
if (PUB.AGV.signal1.mark_sensor == false)
|
||||
{
|
||||
//마크센서확인
|
||||
if(PUB.AGV.signal1.mark_sensor==false)
|
||||
{
|
||||
PUB.log.AddI($"목표도착되었으나 마크센서가 감지되지 않아 경로를 삭제 합니다");
|
||||
PUB._virtualAGV.SetPath(null);
|
||||
return false;
|
||||
}
|
||||
|
||||
// 경로가 존재한다면...
|
||||
if (PUB._virtualAGV.CurrentPath != null && PUB._virtualAGV.CurrentPath.DetailedPath.Any())
|
||||
{
|
||||
var lastInfo = PUB._virtualAGV.CurrentPath.DetailedPath.Last();
|
||||
PUB.log.AddI($"목표도착되었으나 마크센서가 감지되지 않아 완료처리 하지않습니다");
|
||||
return false;
|
||||
|
||||
// 위치와 방향이 모두 일치해야 완료된 것으로 본다.
|
||||
if (PUB._virtualAGV.CurrentNode.Id == lastInfo.NodeId &&
|
||||
PUB._virtualAGV.CurrentDirection == lastInfo.MotorDirection)
|
||||
{
|
||||
var node = PUB._mapCanvas.Nodes.Where(t => t.Id == PUB._virtualAGV.CurrentNodeId).FirstOrDefault();
|
||||
var rfid = node?.ID2 ?? "(X)";
|
||||
PUB.log.AddI($"목표 도착 및 정지 확인됨(MarkStop 완료) Node:{rfid}, Dir:{PUB._virtualAGV.CurrentDirection}");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// [DEBUG] 도착했으나 조건 불일치
|
||||
// PUB.log.Add($"[DEBUG] Arrived but condition mismatch. CurNode:{PUB._virtualAGV.CurrentNode.Id}, Target:{lastInfo.NodeId}, CurDir:{PUB._virtualAGV.CurrentDirection}, TargetDir:{lastInfo.MotorDirection}");
|
||||
}
|
||||
}
|
||||
|
||||
// 경로가 존재한다면...
|
||||
if (PUB._virtualAGV.CurrentPath != null && PUB._virtualAGV.CurrentPath.DetailedPath.Any())
|
||||
{
|
||||
var lastInfo = PUB._virtualAGV.CurrentPath.DetailedPath.Last();
|
||||
|
||||
// 위치와 방향이 모두 일치해야 완료된 것으로 본다.
|
||||
if (PUB._virtualAGV.CurrentNode.Id == lastInfo.NodeId &&
|
||||
PUB._virtualAGV.CurrentDirection == lastInfo.MotorDirection)
|
||||
{
|
||||
var node = PUB._mapCanvas.Nodes.Where(t => t.Id == PUB._virtualAGV.CurrentNodeId).FirstOrDefault();
|
||||
var rfid = node?.ID2 ?? "(X)";
|
||||
PUB.log.AddI($"목표 도착 및 정지 확인됨(MarkStop 완료) Node:{rfid}, Dir:{PUB._virtualAGV.CurrentDirection}");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// [DEBUG] 도착했으나 조건 불일치, 그러면.. predict 가 stop을 반환하면 안된다.
|
||||
PUB.log.Add($"[DEBUG] Arrived but condition mismatch. CurNode:{PUB._virtualAGV.CurrentNode.Id}, Target:{lastInfo.NodeId}, CurDir:{PUB._virtualAGV.CurrentDirection}, TargetDir:{lastInfo.MotorDirection}");
|
||||
}
|
||||
}
|
||||
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:...");
|
||||
return true;
|
||||
}
|
||||
PUB.log.AddI($"목표 도착 및 정지 확인됨(MarkStop 완료, No Path Info) Node:...");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
@@ -391,7 +400,7 @@ namespace Project
|
||||
}
|
||||
|
||||
// AGV가 정지 상태라면 구동 시작 (라이다가켜져있을때에만 사용한다)
|
||||
if (PUB.AGV.system1.agv_run == false && PUB.AGV.PBSSensor == arDev.eNarmiPBSSensor.on)
|
||||
if (PUB.AGV.system1.agv_run == false && PUB.AGV.PBSSensor == arDev.eNarmiPBSSensor.on)
|
||||
{
|
||||
// 2초 쿨타임 적용 (AGVMoveSet과 동일한 타이머 사용)
|
||||
var tsCmd = DateTime.Now - LastCommandTime;
|
||||
|
||||
Reference in New Issue
Block a user