This commit is contained in:
backuppc
2025-12-17 14:54:33 +09:00
parent eb0e08d290
commit 1f37871336
22 changed files with 1218 additions and 884 deletions

View File

@@ -111,20 +111,32 @@ namespace Project
}
break;
case ENIGProtocol.AGVCommandHE.GotoAlias:
case ENIGProtocol.AGVCommandHE.Goto: //move to tag
if (data.Length > 4)
var datalength = cmd == ENIGProtocol.AGVCommandHE.GotoAlias ? 1 : 4;
if (data.Length > datalength)
{
var currTag = System.Text.Encoding.Default.GetString(data, 1, data.Length - 1);
if(ushort.TryParse(currTag, out ushort currtagvalue))
var currTag = System.Text.Encoding.Default.GetString(data, 1, data.Length - 1).Trim();
MapNode targetNode = null;
if(cmd == ENIGProtocol.AGVCommandHE.GotoAlias)
{
var targetNode = PUB._mapCanvas.Nodes.FirstOrDefault(t => t.RfidId == currtagvalue);
targetNode = PUB._mapCanvas.Nodes.FirstOrDefault(t => t.AliasName == currTag);
}
else
{
if (ushort.TryParse(currTag, out ushort currtagvalue))
targetNode = PUB._mapCanvas.Nodes.FirstOrDefault(t => t.RfidId == currtagvalue);
else PUB.log.Add($"targstring 이 숫자가 아니라서 대상을 설정할 수 없습니다 값:{currTag}");
}
if (targetNode != null)
{
//자동상태가아니라면 처리하지 않는다.
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false)
{
PUB.log.AddE($"[{logPrefix}-Goto] 자동실행상태가 아닙니다");
PUB.XBE.SendError(ENIGProtocol.AGVErrorCode.ManualMode, $"{currTag}");
return;
}
//목적지
@@ -143,33 +155,21 @@ namespace Project
{
PUB.log.AddE($"[{logPrefix}-Goto] 시작노드가 없습니다(현재위치 없음) NodeID:{PUB._virtualAGV.CurrentNode.Id}");
}
if (startNode != null)
{
//시작위치가 존재한다면 경로를 예측한다.
var rltGoto = CalcPath(startNode, targetNode);
if (rltGoto.result == null)
{
PUB.log.AddE($"[{logPrefix}-Goto] 경로예측실패 {rltGoto.message}");
}
else
{
//경로예측을 화면에 표시해준다.
PUB._virtualAGV.SetPath(rltGoto.result);
var pathWithRfid = rltGoto.result.GetSimplePath().Select(nodeId => PUB._virtualAGV.GetRfidByNodeId(PUB._mapCanvas.Nodes, nodeId)).ToList();
PUB.log.Add($"경로예측결과:{pathWithRfid}");
}
}
//대상이동으로 처리한다.
PUB.sm.SetNewRunStep(StateMachine.ERunStep.GOTO);
if(PUB.sm.RunStep != ERunStep.GOTO)
{
PUB.sm.SetNewRunStep(StateMachine.ERunStep.GOTO);
PUB.sm.ResetRunStepSeq();
}
//Move to
PUB.log.Add($"[{logPrefix}-Goto] {startNode.RfidId} -> {targetNode.RfidId}");
PUB.log.Add($"[{logPrefix}-{cmd}] {startNode.RfidId} -> {targetNode.RfidId}");
}
else PUB.log.AddE($"[{logPrefix}-Goto] TagString Value Error:{data}");
else PUB.log.AddE($"[{logPrefix}-{cmd}] 대상노드가 없습니다 {data}");
}
else PUB.log.AddE($"[{logPrefix}-Goto] TagString Lenght Error:{data.Length}");
else PUB.log.AddE($"[{logPrefix}-{cmd}] Length Error:{data.Length}");
break;
case ENIGProtocol.AGVCommandHE.Stop: //stop
@@ -253,7 +253,11 @@ namespace Project
PUB.log.AddI($"충전을 시작합니다");
}
break;
default:
PUB.logagv.AddE($"Unknown Command : {cmd}");
PUB.XBE.SendError(ENIGProtocol.AGVErrorCode.UnknownCommand, $"{cmd}");
break;
}
}
}
@@ -291,7 +295,7 @@ namespace Project
_simulatorCanvas.FitToNodes();
string Message = string.Empty;
if (advancedResult.Success)
if (advancedResult != null && advancedResult.Success)
{
// 도킹 검증이 없는 경우 추가 검증 수행
if (advancedResult.DockingValidation == null || !advancedResult.DockingValidation.IsValidationRequired)
@@ -311,12 +315,12 @@ namespace Project
//UpdateAdvancedPathDebugInfo(advancedResult);
}
else
else if(advancedResult != null)
{
// 경로 실패시 디버깅 정보 초기화
//_pathDebugLabel.Text = $"경로: 실패 - {advancedResult.ErrorMessage}";
advancedResult = null;
//_pathDebugLabel.Text = $"경로: 실패 - {advancedResult.ErrorMessage}";
Message = $"경로를 찾을 수 없습니다:\n{advancedResult.ErrorMessage}";
advancedResult = null;
}
return (advancedResult, Message);