This commit is contained in:
backuppc
2026-01-30 17:29:54 +09:00
parent faf13f5c37
commit 02105d49a3
6 changed files with 98 additions and 21 deletions

View File

@@ -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,
}); });

View File

@@ -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;
} }

View File

@@ -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,11 +39,48 @@ 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++)
{
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) if (PUB._virtualAGV.TargetNode == null)
{ {
@@ -58,10 +95,10 @@ namespace Project
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;

View File

@@ -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)

View File

@@ -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)

View File

@@ -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>();
@@ -376,6 +385,15 @@ 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;