nextstop 시그널을 bool변수에서 agv 으 ㅣspeed = 'L' 조건으로 변경
This commit is contained in:
@@ -100,7 +100,7 @@ namespace AGVNavigationCore.Controls
|
|||||||
}
|
}
|
||||||
|
|
||||||
//예측문자는 디버깅시에만 표시한다.
|
//예측문자는 디버깅시에만 표시한다.
|
||||||
if (string.IsNullOrEmpty(PredictMessage) == false && System.Diagnostics.Debugger.IsAttached)
|
if (string.IsNullOrEmpty(PredictMessage) == false)
|
||||||
{
|
{
|
||||||
g.DrawString(this.PredictMessage, this.Font, Brushes.White, 10, 100);
|
g.DrawString(this.PredictMessage, this.Font, Brushes.White, 10, 100);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ namespace AGVNavigationCore.Controls
|
|||||||
showalert = !string.IsNullOrEmpty(m);
|
showalert = !string.IsNullOrEmpty(m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// 브러쉬 및 펜
|
// 브러쉬 및 펜
|
||||||
private Brush _normalNodeBrush;
|
private Brush _normalNodeBrush;
|
||||||
private Brush _rotationNodeBrush;
|
private Brush _rotationNodeBrush;
|
||||||
|
|||||||
@@ -347,12 +347,11 @@ namespace AGVNavigationCore.Models
|
|||||||
var lastNode = _currentPath.DetailedPath.Last();
|
var lastNode = _currentPath.DetailedPath.Last();
|
||||||
if (_currentPath.DetailedPath.Where(t => t.seq < lastNode.seq && t.IsPass == false).Any() == false)
|
if (_currentPath.DetailedPath.Where(t => t.seq < lastNode.seq && t.IsPass == false).Any() == false)
|
||||||
{
|
{
|
||||||
// 마지막 노드에 도착했는지 확인 (현재 노드가 마지막 노드와 같은지)
|
// 마지막 노드에 도착했는지 확인 (현재 노드가 마지막 노드와 같은지) -
|
||||||
|
// 모터방향오 같아야한다. 간혹 방향전환 후 MARK STOP하는경우가있다. 260127
|
||||||
|
if (_currentNode != null && _currentNode.Id == lastNode.NodeId && lastNode.MotorDirection == CurrentDirection)
|
||||||
|
|
||||||
if (_currentNode != null && _currentNode.Id == lastNode.NodeId)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
if (lastNode.IsPass) //이미완료되었다.
|
if (lastNode.IsPass) //이미완료되었다.
|
||||||
{
|
{
|
||||||
return new AGVCommand(
|
return new AGVCommand(
|
||||||
@@ -365,12 +364,20 @@ namespace AGVNavigationCore.Models
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//도킹노드라면 markstop 을 나머지는 바로 스탑한다.
|
||||||
|
eAGVCommandReason reason = eAGVCommandReason.MarkStop;
|
||||||
|
if (_targetnode.StationType == StationType.Normal || _targetnode.StationType == StationType.Limit)
|
||||||
|
{
|
||||||
|
//일반노드는 마크스탑포인트가 없으니 바로 종료되도록 한다
|
||||||
|
reason = eAGVCommandReason.Complete;
|
||||||
|
}
|
||||||
|
|
||||||
//마지막노드는 일혔지만 완료되지 않았다. 마크스탑필요
|
//마지막노드는 일혔지만 완료되지 않았다. 마크스탑필요
|
||||||
return new AGVCommand(
|
return new AGVCommand(
|
||||||
MotorCommand.Stop,
|
MotorCommand.Stop,
|
||||||
MagnetPosition.S,
|
MagnetPosition.S,
|
||||||
SpeedLevel.L,
|
SpeedLevel.L,
|
||||||
eAGVCommandReason.MarkStop,
|
reason,
|
||||||
$"목적지 도착 전(MarkStop) - 최종:{CurrentNodeID2}"
|
$"목적지 도착 전(MarkStop) - 최종:{CurrentNodeID2}"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -483,7 +483,7 @@ namespace Project
|
|||||||
//전체테두리
|
//전체테두리
|
||||||
g.DrawRectangle(new Pen(BorderColor), DisplayRectangle.Left, DisplayRectangle.Top, DisplayRectangle.Width - 1, DisplayRectangle.Height - 1);
|
g.DrawRectangle(new Pen(BorderColor), DisplayRectangle.Left, DisplayRectangle.Top, DisplayRectangle.Width - 1, DisplayRectangle.Height - 1);
|
||||||
|
|
||||||
var nextstop = VAR.BOOL?.Get(eVarBool.NEXTSTOP_MARK) ?? false;
|
var nextstop = PUB.AGV.data.Speed == 'S';// VAR.BOOL?.Get(eVarBool.NEXTSTOP_MARK) ?? false;
|
||||||
//if (VAR.BOOL != null) nextstop = VAR.BOOL[eVarBool.NEXTSTOP_MARK];
|
//if (VAR.BOOL != null) nextstop = VAR.BOOL[eVarBool.NEXTSTOP_MARK];
|
||||||
//상태메세지표시
|
//상태메세지표시
|
||||||
string stmsg = string.Empty;
|
string stmsg = string.Empty;
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ using System.Text;
|
|||||||
using Project.StateMachine;
|
using Project.StateMachine;
|
||||||
using COMM;
|
using COMM;
|
||||||
using AR;
|
using AR;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
|
using System.Net.Security;
|
||||||
|
|
||||||
namespace Project
|
namespace Project
|
||||||
{
|
{
|
||||||
@@ -63,9 +65,9 @@ namespace Project
|
|||||||
PUB.AGV.AGVMoveLeft180Turn();
|
PUB.AGV.AGVMoveLeft180Turn();
|
||||||
PUB.log.Add("AGV Left Turn");
|
PUB.log.Add("AGV Left Turn");
|
||||||
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
|
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
|
||||||
PUB.sm.UpdateRunStepSeq();
|
|
||||||
}
|
}
|
||||||
else PUB.sm.UpdateRunStepSeq(); //이미완료된상태이므로 다음으로 진행한다.
|
PUB._mapCanvas.SetAlertMessage($"턴 진행 중");
|
||||||
|
PUB.sm.UpdateRunStepSeq(); //이미완료된상태이므로 다음으로 진행한다.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
@@ -77,16 +79,17 @@ namespace Project
|
|||||||
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds < 3) return false;
|
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds < 3) return false;
|
||||||
|
|
||||||
//턴 이동 상태가 확인되어야 한다.
|
//턴 이동 상태가 확인되어야 한다.
|
||||||
var overtime = 10;
|
var overtime = 30;
|
||||||
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds > overtime)
|
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds > overtime)
|
||||||
{
|
{
|
||||||
//5초동안 AGV까 움직이지 않았다면 오류 처리한다.
|
//5초동안 AGV까 움직이지 않았다면 오류 처리한다.
|
||||||
PUB.AGV.AGVMoveStop($"[bufferin] {overtime}초이내 턴 감지 안됨");
|
PUB.AGV.AGVMoveStop($"[bufferin] {overtime}초이내 턴 감지 안됨");
|
||||||
PUB.log.AddE($"[{funcname}] {overtime}초이내 턴 감지 안됨");
|
PUB.log.AddE($"[{funcname}] {overtime}초이내 턴 감지 안됨");
|
||||||
PUB._mapCanvas.SetAlertMessage("턴 완료 확인 불가");
|
PUB._mapCanvas.SetAlertMessage($"턴 완료 확인 불가(최대:{overtime}초)");
|
||||||
PUB.sm.SetNewRunStep(ERunStep.ERROR);
|
PUB.sm.SetNewRunStep(ERunStep.ERROR);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
else PUB._mapCanvas.SetAlertMessage($"턴 진행 중({PUB.AGV.TurnInformation.Runtime.TotalSeconds:N0}/{overtime})");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.L90; //턴완료
|
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.L90; //턴완료
|
||||||
@@ -115,7 +118,11 @@ namespace Project
|
|||||||
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.DN);
|
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.DN);
|
||||||
//재시도를 했으니 다음으로 진행하게한다
|
//재시도를 했으니 다음으로 진행하게한다
|
||||||
}
|
}
|
||||||
else return false;
|
else
|
||||||
|
{
|
||||||
|
PUB._mapCanvas.SetAlertMessage($"리프트 하강 확인 중({seqtime.TotalSeconds:N0}/20)");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
return false;
|
return false;
|
||||||
@@ -132,6 +139,7 @@ namespace Project
|
|||||||
PUB._mapCanvas.SetAlertMessage("리프트가 내려가지 않음");
|
PUB._mapCanvas.SetAlertMessage("리프트가 내려가지 않음");
|
||||||
PUB.sm.SetNewRunStep(ERunStep.ERROR);
|
PUB.sm.SetNewRunStep(ERunStep.ERROR);
|
||||||
}
|
}
|
||||||
|
else PUB._mapCanvas.SetAlertMessage($"리프트 하강 확인 중({seqtime.TotalSeconds:N0}/20)");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
@@ -162,21 +170,40 @@ namespace Project
|
|||||||
}
|
}
|
||||||
|
|
||||||
//후진이동을한다
|
//후진이동을한다
|
||||||
|
PUB._mapCanvas.SetAlertMessage($"도킹을 위해 후진 이동 시작");
|
||||||
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
|
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
|
{
|
||||||
|
//이동확인을 한다.
|
||||||
|
if(PUB.AGV.system1.agv_run == false)
|
||||||
|
{
|
||||||
|
if(seqtime.TotalSeconds > 3)
|
||||||
|
{
|
||||||
|
PUB.AGV.AGVMoveStop(funcname);
|
||||||
|
PUB.log.AddE($"[{funcname}] AGV이동이 확인되지 않습니다");
|
||||||
|
PUB._mapCanvas.SetAlertMessage($"[{funcname}] AGV이동이 확인되지 않습니다");
|
||||||
|
PUB.sm.SetNewRunStep(ERunStep.ERROR);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
PUB.sm.UpdateRunStepSeq();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
//마크스탑으로 이동
|
//마크스탑으로 이동
|
||||||
PUB.AGV.AGVMoveStop(funcname, arDev.Narumi.eStopOpt.MarkStop);
|
PUB.AGV.AGVMoveStop(funcname, arDev.Narumi.eStopOpt.MarkStop);
|
||||||
|
PUB._mapCanvas.SetAlertMessage($"도킹을 위해 후진 이동 시작");
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
//마크스탑신호가 3초이내로 들어와야 한다
|
//마크스탑신호가 3초이내로 들어와야 한다
|
||||||
if (VAR.BOOL[eVarBool.NEXTSTOP_MARK] == false)
|
if (PUB.AGV.data.Speed != 'S')
|
||||||
{
|
{
|
||||||
if (seqtime.TotalSeconds > 3)
|
if (seqtime.TotalSeconds > 3)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ namespace Project
|
|||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
//마크스탑신호가 3초이내로 들어와야 한다
|
//마크스탑신호가 3초이내로 들어와야 한다
|
||||||
if (VAR.BOOL[eVarBool.NEXTSTOP_MARK] == false)
|
if (PUB.AGV.data.Speed != 'S')
|
||||||
{
|
{
|
||||||
if (seqTime.TotalMilliseconds > 3000)
|
if (seqTime.TotalMilliseconds > 3000)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ namespace Project
|
|||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
//마크스탑신호가 3초이내로 들어와야 한다
|
//마크스탑신호가 3초이내로 들어와야 한다
|
||||||
if (VAR.BOOL[eVarBool.NEXTSTOP_MARK] == false)
|
if (PUB.AGV.data.Speed != 'S')
|
||||||
{
|
{
|
||||||
if (seqTime.TotalMilliseconds > 3000)
|
if (seqTime.TotalMilliseconds > 3000)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ namespace Project
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PUB.log.Add("다음행동예측에서 장비 멈춤이 확인되었습니다");
|
PUB.log.Add($"다음행동예측에서 장비 멈춤이 확인되었습니다({nextAction.Reason})");
|
||||||
PUB.AGV.AGVMoveStop(nextAction.Message);
|
PUB.AGV.AGVMoveStop(nextAction.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,15 +117,15 @@ namespace Project
|
|||||||
VAR.BOOL[eVarBool.CHG_POSERR] = PUB.AGV.error.Charger_pos_error;
|
VAR.BOOL[eVarBool.CHG_POSERR] = PUB.AGV.error.Charger_pos_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
//나르미가 멈췄다면 다음 마크 이동 기능이 OFF 된다
|
////나르미가 멈췄다면 다음 마크 이동 기능이 OFF 된다
|
||||||
if (agv_stp)
|
//if (agv_stp)
|
||||||
{
|
//{
|
||||||
if (VAR.BOOL[eVarBool.NEXTSTOP_MARK])
|
// if (VAR.BOOL[eVarBool.NEXTSTOP_MARK])
|
||||||
{
|
// {
|
||||||
VAR.BOOL[eVarBool.NEXTSTOP_MARK] = false;
|
// VAR.BOOL[eVarBool.NEXTSTOP_MARK] = false;
|
||||||
PUB.logagv.Add($"NEXTSTOP_MARK 변경({VAR.BOOL[eVarBool.NEXTSTOP_MARK]})");
|
// PUB.logagv.Add($"NEXTSTOP_MARK 변경({VAR.BOOL[eVarBool.NEXTSTOP_MARK]})");
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
//마크센서 상태가 변경이 되었다면
|
//마크센서 상태가 변경이 되었다면
|
||||||
if (VAR.BOOL[eVarBool.MARK_SENSOR] != PUB.AGV.signal1.mark_sensor)
|
if (VAR.BOOL[eVarBool.MARK_SENSOR] != PUB.AGV.signal1.mark_sensor)
|
||||||
@@ -145,7 +145,7 @@ namespace Project
|
|||||||
else PUB.log.AddAT($"마크스탑이 확인되었으나 현재 노드가없어 PASS를 설정하지 못함");
|
else PUB.log.AddAT($"마크스탑이 확인되었으나 현재 노드가없어 PASS를 설정하지 못함");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] != VAR.BOOL[eVarBool.MARK_SENSOR])
|
if (VAR.BOOL[eVarBool.MARK_SENSOROFF] == VAR.BOOL[eVarBool.MARK_SENSOR])
|
||||||
{
|
{
|
||||||
VAR.BOOL[eVarBool.MARK_SENSOROFF] = !VAR.BOOL[eVarBool.MARK_SENSOR];
|
VAR.BOOL[eVarBool.MARK_SENSOROFF] = !VAR.BOOL[eVarBool.MARK_SENSOR];
|
||||||
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
|
VAR.TIME[eVarTime.MarkSensorOff] = DateTime.Now;
|
||||||
|
|||||||
@@ -87,14 +87,14 @@ namespace Project
|
|||||||
PUB.Speak(Lang.수동충전을해제합니다);
|
PUB.Speak(Lang.수동충전을해제합니다);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (flag == COMM.eVarBool.NEXTSTOP_MARK)
|
//else if (flag == COMM.eVarBool.NEXTSTOP_MARK)
|
||||||
{
|
//{
|
||||||
if (NewValue)
|
// if (NewValue)
|
||||||
{
|
// {
|
||||||
//PUB.Speak("다음 위치에서 멈춥니다");
|
// //PUB.Speak("다음 위치에서 멈춥니다");
|
||||||
PUB.log.Add($"마크인식시 멈춤 신호 변경 : {NewValue}");
|
// PUB.log.Add($"마크인식시 멈춤 신호 변경 : {NewValue}");
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ namespace Project
|
|||||||
}
|
}
|
||||||
|
|
||||||
IOState.setTitle(inputrow, inputcol, "RUN"); IOState.setValue(inputrow, inputcol++, (PUB.AGV.system1.agv_run ? 1 : 0));
|
IOState.setTitle(inputrow, inputcol, "RUN"); IOState.setValue(inputrow, inputcol++, (PUB.AGV.system1.agv_run ? 1 : 0));
|
||||||
IOState.setTitle(inputrow, inputcol, "MARK"); IOState.setValue(inputrow, inputcol++, (VAR.BOOL[eVarBool.MARK_SENSOR] ? 1 : (VAR.BOOL[eVarBool.NEXTSTOP_MARK] ? 2 : 0)));
|
IOState.setTitle(inputrow, inputcol, "MARK"); IOState.setValue(inputrow, inputcol++, (VAR.BOOL[eVarBool.MARK_SENSOR] ? 1 : 0));
|
||||||
IOState.setTitle(inputrow, inputcol, "CHG"); IOState.setValue(inputrow, inputcol++, (PUB.AGV.system1.Battery_charging ? 1 : 0));
|
IOState.setTitle(inputrow, inputcol, "CHG"); IOState.setValue(inputrow, inputcol++, (PUB.AGV.system1.Battery_charging ? 1 : 0));
|
||||||
IOState.setTitle(inputrow, inputcol, "ITM"); IOState.setValue(inputrow, inputcol++, (VAR.BOOL[eVarBool.ITEMON] ? 1 : 0));
|
IOState.setTitle(inputrow, inputcol, "ITM"); IOState.setValue(inputrow, inputcol++, (VAR.BOOL[eVarBool.ITEMON] ? 1 : 0));
|
||||||
IOState.Invalidate();
|
IOState.Invalidate();
|
||||||
|
|||||||
@@ -113,8 +113,8 @@ namespace arDev
|
|||||||
if (this.system1.agv_run)
|
if (this.system1.agv_run)
|
||||||
RaiseMessage(MessageType.Normal, $"stop command from {Reason}");
|
RaiseMessage(MessageType.Normal, $"stop command from {Reason}");
|
||||||
var retval = AddCommand(eAgvCmd.MoveStop, sb.ToString());
|
var retval = AddCommand(eAgvCmd.MoveStop, sb.ToString());
|
||||||
if (retval == eNarumiCommandResult.Success && opt == eStopOpt.MarkStop)
|
//if (retval == eNarumiCommandResult.Success && opt == eStopOpt.MarkStop)
|
||||||
VAR.BOOL[eVarBool.NEXTSTOP_MARK] = true;
|
// VAR.BOOL[eVarBool.NEXTSTOP_MARK] = true;
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ namespace COMM
|
|||||||
FLAG_RUN_CMD,
|
FLAG_RUN_CMD,
|
||||||
FLAG_GO_CHAGER,
|
FLAG_GO_CHAGER,
|
||||||
FLAG_NEXTSTOP_ALIGN,
|
FLAG_NEXTSTOP_ALIGN,
|
||||||
NEXTSTOP_MARK,
|
///NEXTSTOP_MARK,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// mark 1 혹은 2 의 값이 들어오면 설정됨
|
/// mark 1 혹은 2 의 값이 들어오면 설정됨
|
||||||
|
|||||||
Reference in New Issue
Block a user