..
This commit is contained in:
@@ -206,7 +206,7 @@ namespace Project
|
|||||||
{
|
{
|
||||||
Bunki = arDev.Narumi.eBunki.Strate,
|
Bunki = arDev.Narumi.eBunki.Strate,
|
||||||
Direction = arDev.Narumi.eMoveDir.Backward,
|
Direction = arDev.Narumi.eMoveDir.Backward,
|
||||||
PBSSensor = 0,
|
PBSSensor = 0, //라이다를끈다
|
||||||
Speed = arDev.Narumi.eMoveSpd.Low,
|
Speed = arDev.Narumi.eMoveSpd.Low,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ namespace Project
|
|||||||
{
|
{
|
||||||
public partial class fMain
|
public partial class fMain
|
||||||
{
|
{
|
||||||
|
bool SpeedSetRetry = false;
|
||||||
public Boolean _SM_RUN_BUFFER_OUT(bool isFirst, TimeSpan seqtime)
|
public Boolean _SM_RUN_BUFFER_OUT(bool isFirst, TimeSpan seqtime)
|
||||||
{
|
{
|
||||||
var funcname = "_SM_RUN_BUFFER_OUT";
|
var funcname = "_SM_RUN_BUFFER_OUT";
|
||||||
@@ -35,6 +36,7 @@ namespace Project
|
|||||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 버퍼진출시작({PUB.NextWorkCmd}) Turn:{PUB._virtualAGV.Turn}");
|
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] 버퍼진출시작({PUB.NextWorkCmd}) Turn:{PUB._virtualAGV.Turn}");
|
||||||
PUB.Speak(Lang.진출을시작합니다);
|
PUB.Speak(Lang.진출을시작합니다);
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
|
SpeedSetRetry = false;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
@@ -83,6 +85,11 @@ namespace Project
|
|||||||
if (PUB.AGV.signal1.mark_sensor == false)
|
if (PUB.AGV.signal1.mark_sensor == false)
|
||||||
{
|
{
|
||||||
//빈 상태로 아웃해야한다.
|
//빈 상태로 아웃해야한다.
|
||||||
|
if (SpeedSetRetry)
|
||||||
|
{
|
||||||
|
if (seqtime.TotalSeconds < 2)
|
||||||
|
return false;
|
||||||
|
}
|
||||||
var ret = PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
|
var ret = PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
|
||||||
{
|
{
|
||||||
Bunki = arDev.Narumi.eBunki.Strate,
|
Bunki = arDev.Narumi.eBunki.Strate,
|
||||||
@@ -93,10 +100,11 @@ namespace Project
|
|||||||
//명령이 실패되었다면 재시도를 한다
|
//명령이 실패되었다면 재시도를 한다
|
||||||
if (ret != arDev.eNarumiCommandResult.Success)
|
if (ret != arDev.eNarumiCommandResult.Success)
|
||||||
{
|
{
|
||||||
if (ret >= arDev.eNarumiCommandResult.Error)
|
if (SpeedSetRetry == true || ret >= arDev.eNarumiCommandResult.Error)
|
||||||
{
|
{
|
||||||
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_SPEED_SET_FAIL);
|
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_SPEED_SET_FAIL);
|
||||||
}
|
}
|
||||||
|
else SpeedSetRetry = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -256,6 +264,19 @@ namespace Project
|
|||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] BufferOut Complete");
|
PUB.log.Add($"[{funcname}-{PUB.sm.RunStepSeq}] BufferOut Complete");
|
||||||
|
|
||||||
|
//라이더를 켜기위해서 기본 값을 설정한다.
|
||||||
|
var ret = PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
|
||||||
|
{
|
||||||
|
Bunki = arDev.Narumi.eBunki.Strate,
|
||||||
|
Direction = arDev.Narumi.eMoveDir.Backward,
|
||||||
|
PBSSensor = 2,
|
||||||
|
Speed = arDev.Narumi.eMoveSpd.Low,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (ret != arDev.eNarumiCommandResult.Success)
|
||||||
|
PUB.log.AddE($"진출완료 후 라이더ON명령이 실패되었습니다(AGVMoveSet)");
|
||||||
|
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ namespace Project
|
|||||||
{
|
{
|
||||||
byte GotoTurnStep = 0;
|
byte GotoTurnStep = 0;
|
||||||
DateTime GotoTurnSetTime = DateTime.Now;
|
DateTime GotoTurnSetTime = DateTime.Now;
|
||||||
public Boolean _SM_RUN_GOTO(bool isFirst, TimeSpan stepTime)
|
public Boolean _SM_RUN_GOTO(bool isFirst, TimeSpan seqtime)
|
||||||
{
|
{
|
||||||
///명령어 재전송 간격(기본 2초)
|
///명령어 재전송 간격(기본 2초)
|
||||||
var CommandInterval = 2;
|
var CommandInterval = 2;
|
||||||
var funcName = "_SM_RUN_GOTO";
|
var funcname = "_SM_RUN_GOTO";
|
||||||
|
|
||||||
//충전 상태가 OFF되어야 동작하게한다
|
//충전 상태가 OFF되어야 동작하게한다
|
||||||
if (_SM_RUN_CHARGE_GOFF(isFirst, stepTime) == false)
|
if (_SM_RUN_CHARGE_GOFF(isFirst, seqtime) == false)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
//최초시작이라면 시간변수 초기화
|
//최초시작이라면 시간변수 초기화
|
||||||
@@ -39,29 +39,66 @@ namespace Project
|
|||||||
PUB.Speak(Lang.전방에물체가감지되었습니다);
|
PUB.Speak(Lang.전방에물체가감지되었습니다);
|
||||||
LastSpeakTime = DateTime.Now;
|
LastSpeakTime = DateTime.Now;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var idx = 1;
|
var idx = 1;
|
||||||
if (PUB.sm.RunStepSeq == idx++)
|
if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
if(PUB._virtualAGV.TargetNode == null)
|
SpeedSetRetry = false;
|
||||||
|
PUB.sm.UpdateRunStepSeq();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
|
{
|
||||||
|
////빈 상태로 아웃해야한다.
|
||||||
|
//if (SpeedSetRetry)
|
||||||
|
//{
|
||||||
|
// if (seqtime.TotalSeconds < 2)
|
||||||
|
// return false;
|
||||||
|
//}
|
||||||
|
//var ret = PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
|
||||||
|
//{
|
||||||
|
// Bunki = arDev.Narumi.eBunki.Strate,
|
||||||
|
// Direction = arDev.Narumi.eMoveDir.Forward,
|
||||||
|
// PBSSensor = 2,
|
||||||
|
// Speed = arDev.Narumi.eMoveSpd.Low,
|
||||||
|
//});
|
||||||
|
////명령이 실패되었다면 재시도를 한다
|
||||||
|
//if (ret != arDev.eNarumiCommandResult.Success)
|
||||||
|
//{
|
||||||
|
// if (SpeedSetRetry == true || ret >= arDev.eNarumiCommandResult.Error)
|
||||||
|
// {
|
||||||
|
// SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_SPEED_SET_FAIL);
|
||||||
|
// }
|
||||||
|
// else SpeedSetRetry = true;
|
||||||
|
// return false;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
PUB.sm.UpdateRunStepSeq();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
|
{
|
||||||
|
if (PUB._virtualAGV.TargetNode == null)
|
||||||
{
|
{
|
||||||
PUB.log.Add($"대상노드가 없어 이동을할 수 없습니다");
|
PUB.log.Add($"대상노드가 없어 이동을할 수 없습니다");
|
||||||
PUB.sm.SetNewRunStep(ERunStep.READY);
|
PUB.sm.SetNewRunStep(ERunStep.READY);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
PUB.log.Add($"[GOTO] Step {idx-1}: TargetNode Checked ({PUB._virtualAGV.TargetNode.ID2})");
|
PUB.log.Add($"[GOTO] Step {idx - 1}: TargetNode Checked ({PUB._virtualAGV.TargetNode.ID2})");
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
//모션 전후진 제어
|
//모션 전후진 제어
|
||||||
if (UpdateMotionPositionForMark(funcName))
|
if (UpdateMotionPositionForMark(funcname))
|
||||||
{
|
{
|
||||||
PUB.log.Add($"[GOTO] Step {idx-1}: UpdateMotionPositionForMark Completed. Stopping AGV.");
|
PUB.log.Add($"[GOTO] Step {idx - 1}: UpdateMotionPositionForMark Completed. Stopping AGV.");
|
||||||
PUB.AGV.AGVMoveStop(funcName);
|
PUB.AGV.AGVMoveStop(funcname);
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -69,7 +106,7 @@ namespace Project
|
|||||||
else if (PUB.sm.RunStepSeq == idx++)
|
else if (PUB.sm.RunStepSeq == idx++)
|
||||||
{
|
{
|
||||||
//QC까지 모두 완료되었다.(완전히 정차할때까지 기다린다)
|
//QC까지 모두 완료되었다.(완전히 정차할때까지 기다린다)
|
||||||
PUB.log.Add($"[GOTO] Step {idx-1}: Movement Finished. Waiting for full stop.");
|
PUB.log.Add($"[GOTO] Step {idx - 1}: Movement Finished. Waiting for full stop.");
|
||||||
PUB.Speak(Lang.이동완료, true);
|
PUB.Speak(Lang.이동완료, true);
|
||||||
PUB.AddEEDB($"이동완료({PUB._virtualAGV.TargetNode.ID2})");
|
PUB.AddEEDB($"이동완료({PUB._virtualAGV.TargetNode.ID2})");
|
||||||
PUB.sm.UpdateRunStepSeq();
|
PUB.sm.UpdateRunStepSeq();
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace Project
|
|||||||
{
|
{
|
||||||
Bunki = arDev.Narumi.eBunki.Strate,
|
Bunki = arDev.Narumi.eBunki.Strate,
|
||||||
Direction = arDev.Narumi.eMoveDir.Forward,
|
Direction = arDev.Narumi.eMoveDir.Forward,
|
||||||
PBSSensor = 1,
|
PBSSensor = 2,
|
||||||
Speed = arDev.Narumi.eMoveSpd.Low,
|
Speed = arDev.Narumi.eMoveSpd.Low,
|
||||||
});
|
});
|
||||||
if(ret == arDev.eNarumiCommandResult.Success)
|
if(ret == arDev.eNarumiCommandResult.Success)
|
||||||
|
|||||||
@@ -270,14 +270,14 @@ namespace Project
|
|||||||
PUB.log.Add($"다음행동예측에서 장비 멈춤이 확인되었습니다({nextAction.Reason})");
|
PUB.log.Add($"다음행동예측에서 장비 멈춤이 확인되었습니다({nextAction.Reason})");
|
||||||
PUB.AGV.AGVMoveStop(nextAction.Message);
|
PUB.AGV.AGVMoveStop(nextAction.Message);
|
||||||
// 정지 타이머 갱신 (연속 정지 방지)
|
// 정지 타이머 갱신 (연속 정지 방지)
|
||||||
VAR.TIME.Update(eVarTime.LastStopCommandTime);
|
VAR.TIME.Update(eVarTime.LastStopCommandTime);
|
||||||
|
|
||||||
// 일반 타이머도 갱신 (정지 직후 불필요한 이동 방지)
|
// 일반 타이머도 갱신 (정지 직후 불필요한 이동 방지)
|
||||||
LastCommandTime = DateTime.Now;
|
LastCommandTime = DateTime.Now;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,7 +357,8 @@ namespace Project
|
|||||||
// 현재 상태와 다를 때만 전송 (불필요한 통신 부하 방지)
|
// 현재 상태와 다를 때만 전송 (불필요한 통신 부하 방지)
|
||||||
if (PUB.AGV.data.Sts != bunki.ToString()[0] ||
|
if (PUB.AGV.data.Sts != bunki.ToString()[0] ||
|
||||||
PUB.AGV.data.Direction != dir.ToString()[0] ||
|
PUB.AGV.data.Direction != dir.ToString()[0] ||
|
||||||
PUB.AGV.data.Speed != spd.ToString()[0])
|
PUB.AGV.data.Speed != spd.ToString()[0] ||
|
||||||
|
PUB.AGV.PBSSensor != arDev.eNarmiPBSSensor.on)
|
||||||
{
|
{
|
||||||
// 2초 쿨타임 적용
|
// 2초 쿨타임 적용
|
||||||
var tsCmd = DateTime.Now - LastCommandTime;
|
var tsCmd = DateTime.Now - LastCommandTime;
|
||||||
@@ -367,7 +368,7 @@ namespace Project
|
|||||||
{
|
{
|
||||||
Bunki = bunki,
|
Bunki = bunki,
|
||||||
Direction = dir,
|
Direction = dir,
|
||||||
PBSSensor = 1,
|
PBSSensor = 2,
|
||||||
Speed = spd,
|
Speed = spd,
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -380,8 +381,8 @@ namespace Project
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// AGV가 정지 상태라면 구동 시작
|
// AGV가 정지 상태라면 구동 시작 (라이다가켜져있을때에만 사용한다)
|
||||||
if (PUB.AGV.system1.agv_run == false)
|
if (PUB.AGV.system1.agv_run == false && PUB.AGV.PBSSensor == arDev.eNarmiPBSSensor.on)
|
||||||
{
|
{
|
||||||
// 2초 쿨타임 적용 (AGVMoveSet과 동일한 타이머 사용)
|
// 2초 쿨타임 적용 (AGVMoveSet과 동일한 타이머 사용)
|
||||||
var tsCmd = DateTime.Now - LastCommandTime;
|
var tsCmd = DateTime.Now - LastCommandTime;
|
||||||
@@ -417,7 +418,7 @@ namespace Project
|
|||||||
{
|
{
|
||||||
Bunki = arDev.Narumi.eBunki.Strate,
|
Bunki = arDev.Narumi.eBunki.Strate,
|
||||||
Direction = arDev.Narumi.eMoveDir.Forward,
|
Direction = arDev.Narumi.eMoveDir.Forward,
|
||||||
PBSSensor = 1,
|
PBSSensor = 2,
|
||||||
Speed = arDev.Narumi.eMoveSpd.Low,
|
Speed = arDev.Narumi.eMoveSpd.Low,
|
||||||
});
|
});
|
||||||
if (ret == arDev.eNarumiCommandResult.Success)
|
if (ret == arDev.eNarumiCommandResult.Success)
|
||||||
@@ -449,7 +450,7 @@ namespace Project
|
|||||||
{
|
{
|
||||||
Bunki = arDev.Narumi.eBunki.Strate,
|
Bunki = arDev.Narumi.eBunki.Strate,
|
||||||
Direction = arDev.Narumi.eMoveDir.Backward,
|
Direction = arDev.Narumi.eMoveDir.Backward,
|
||||||
PBSSensor = 1,
|
PBSSensor = 2,
|
||||||
Speed = arDev.Narumi.eMoveSpd.Low,
|
Speed = arDev.Narumi.eMoveSpd.Low,
|
||||||
});
|
});
|
||||||
if (ret == arDev.eNarumiCommandResult.Success)
|
if (ret == arDev.eNarumiCommandResult.Success)
|
||||||
|
|||||||
@@ -65,8 +65,17 @@ namespace arDev
|
|||||||
Timeout,
|
Timeout,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
public enum eNarmiPBSSensor : byte
|
||||||
|
{
|
||||||
|
notset=0,
|
||||||
|
on = 1,
|
||||||
|
off = 2
|
||||||
|
}
|
||||||
|
|
||||||
public partial class Narumi
|
public partial class Narumi
|
||||||
{
|
{
|
||||||
|
public eNarmiPBSSensor PBSSensor = eNarmiPBSSensor.notset;
|
||||||
|
|
||||||
public NarumiTurnInfo TurnInformation { get; set; } = null;
|
public NarumiTurnInfo TurnInformation { get; set; } = null;
|
||||||
Dictionary<string, NarumiCommandTime> SendCommandFailList { get; set; } = new Dictionary<string, NarumiCommandTime>();
|
Dictionary<string, NarumiCommandTime> SendCommandFailList { get; set; } = new Dictionary<string, NarumiCommandTime>();
|
||||||
|
|
||||||
@@ -374,8 +383,17 @@ namespace arDev
|
|||||||
|
|
||||||
|
|
||||||
case eAgvCmd.MoveSet:
|
case eAgvCmd.MoveSet:
|
||||||
cmdString = $"CBR{param}";
|
cmdString = $"CBR{param}";
|
||||||
retval = AddCommand(cmdString);
|
retval = AddCommand(cmdString);
|
||||||
|
if(retval == eNarumiCommandResult.Success)
|
||||||
|
{
|
||||||
|
if (param.Length > 3)
|
||||||
|
{
|
||||||
|
var pbschar = param[3];//.Substring(3, 1);
|
||||||
|
if (pbschar == '2') PBSSensor = eNarmiPBSSensor.on;
|
||||||
|
else PBSSensor = eNarmiPBSSensor.off;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case eAgvCmd.ManualMove:
|
case eAgvCmd.ManualMove:
|
||||||
system1.agv_run_manual = true;
|
system1.agv_run_manual = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user