diff --git a/AGVLogic/AGVNavigationCore/Models/MapNode.cs b/AGVLogic/AGVNavigationCore/Models/MapNode.cs index b7d608d..921c373 100644 --- a/AGVLogic/AGVNavigationCore/Models/MapNode.cs +++ b/AGVLogic/AGVNavigationCore/Models/MapNode.cs @@ -74,7 +74,7 @@ namespace AGVNavigationCore.Models [Category("주행 설정")] [Description("노드 통과 시 제한 속도입니다.")] - public SpeedLevel SpeedLimit { get; set; } = SpeedLevel.M; + public SpeedLevel SpeedLimit { get; set; } = SpeedLevel.L; [Category("노드 설정")] [Description("장비 ID 또는 별칭입니다.")] diff --git a/HMI/Project/StateMachine/_Xbee.cs b/HMI/Project/StateMachine/_Xbee.cs index 8b2fbc1..f784d0f 100644 --- a/HMI/Project/StateMachine/_Xbee.cs +++ b/HMI/Project/StateMachine/_Xbee.cs @@ -178,6 +178,14 @@ namespace Project { Resultclear(); PUB.log.AddI($"XBEE:충전명령수신"); + + // 버퍼 작업 중일 경우 충전 명령 거부 + if (PUB._virtualAGV.Turn != AGVTurn.None) + { + SetRunStepError(ENIGProtocol.AGVErrorCode.BUFFER_NOT_COMPLETE, $"[{logPrefix}-Charger] 버퍼 작업이 완료되지 않아 충전할 수 없습니다."); + return; + } + PUB.NextWorkCmd = ENIGProtocol.AGVCommandHE.Charger; PUB.sm.SetNewRunStep(ERunStep.GOCHARGE); } @@ -226,7 +234,7 @@ namespace Project //s/w턴이 걸려있다면 이동 불가로한다.(버퍼 작업중이다) if (PUB._virtualAGV.Turn != AGVTurn.None) { - SetRunStepError(ENIGProtocol.AGVErrorCode.BUFFER_NOT_COMPLETE, $"[{logPrefix}-Goto] 버퍼작업이 완료되지 않았습니다"); + SetRunStepError(ENIGProtocol.AGVErrorCode.BUFFER_NOT_COMPLETE, $"[{logPrefix}-Goto] 버퍼 작업이 완료되지 않았습니다({PUB._virtualAGV.Turn})"); return; } @@ -265,25 +273,42 @@ namespace Project break; case ENIGProtocol.AGVCommandHE.LTurn180: - PUB.log.Add($"[{logPrefix}-LTurn180]"); - PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); - PUB.AGV.AGVMoveLeft180Turn(); - break; case ENIGProtocol.AGVCommandHE.RTurn180: - PUB.log.Add($"[{logPrefix}-RTurn180]"); - PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); - PUB.AGV.AGVMoveRight180Turn(); - break; - case ENIGProtocol.AGVCommandHE.LTurn: - PUB.log.Add($"[{logPrefix}-LTurn]"); - PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); - PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.LT, arDev.Narumi.Speed.Low, arDev.Narumi.Sensor.AllOn); - break; case ENIGProtocol.AGVCommandHE.RTurn: - PUB.log.Add($"[{logPrefix}-RTurn]"); - PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); - PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.RT, arDev.Narumi.Speed.Low, arDev.Narumi.Sensor.AllOn); + { + // 버퍼 작업 중일 경우 원격 턴 명령 거부 + if (PUB._virtualAGV.Turn != AGVTurn.None) + { + SetRunStepError(ENIGProtocol.AGVErrorCode.BUFFER_NOT_COMPLETE, $"[{logPrefix}-{cmd}] 버퍼 작업 중에는 턴 명령을 수행할 수 없습니다."); + return; + } + + if (cmd == ENIGProtocol.AGVCommandHE.LTurn180) + { + PUB.log.Add($"[{logPrefix}-LTurn180]"); + PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); + PUB.AGV.AGVMoveLeft180Turn(); + } + else if (cmd == ENIGProtocol.AGVCommandHE.RTurn180) + { + PUB.log.Add($"[{logPrefix}-RTurn180]"); + PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); + PUB.AGV.AGVMoveRight180Turn(); + } + else if (cmd == ENIGProtocol.AGVCommandHE.LTurn) + { + PUB.log.Add($"[{logPrefix}-LTurn]"); + PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); + PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.LT, arDev.Narumi.Speed.Low, arDev.Narumi.Sensor.AllOn); + } + else if (cmd == ENIGProtocol.AGVCommandHE.RTurn) + { + PUB.log.Add($"[{logPrefix}-RTurn]"); + PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); + PUB.AGV.AGVMoveManual(arDev.Narumi.ManulOpt.RT, arDev.Narumi.Speed.Low, arDev.Narumi.Sensor.AllOn); + } + } break; case ENIGProtocol.AGVCommandHE.Stop: //stop PUB.log.Add($"[{logPrefix}-Stop]"); @@ -296,6 +321,14 @@ namespace Project case ENIGProtocol.AGVCommandHE.Manual: //Manual Move (Direction, speed, runtime) Resultclear(); + + // 버퍼 작업 중일 경우 수동 이동 거부 + if (PUB._virtualAGV.Turn != AGVTurn.None) + { + SetRunStepError(ENIGProtocol.AGVErrorCode.BUFFER_NOT_COMPLETE, $"[{logPrefix}-Manual] 버퍼 작업 중에는 수동 이동을 할 수 없습니다."); + return; + } + PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); var Direction = data[1]; //0=back, 1=forward, 2=left, 3=right var Speed = data[2]; //0=slow, 1=normal, 2=fast @@ -318,6 +351,14 @@ namespace Project case ENIGProtocol.AGVCommandHE.AutoMove: Resultclear(); + + // 버퍼 작업 중일 경우 자동 이동 거부 + if (PUB._virtualAGV.Turn != AGVTurn.None) + { + SetRunStepError(ENIGProtocol.AGVErrorCode.BUFFER_NOT_COMPLETE, $"[{logPrefix}-AutoMove] 버퍼 작업 중에는 이동할 수 없습니다."); + return; + } + PUB.sm.SetNewRunStep(ERunStep.REMOTECONTROL); var MotDirection = data[1]; //0=back, 1=forward var MagDirection = data[2]; //0=straight, 1=left, 2=right diff --git a/HMI/SubProject/AGV/Narumi.cs b/HMI/SubProject/AGV/Narumi.cs index 1a62339..4c9cc3b 100644 --- a/HMI/SubProject/AGV/Narumi.cs +++ b/HMI/SubProject/AGV/Narumi.cs @@ -323,11 +323,6 @@ namespace arDev #endregion - - - - - #region [수신] TAG(태그정보) 분석 System.Text.Encoding encoding = System.Text.Encoding.Default; @@ -357,7 +352,6 @@ namespace arDev old_TagString = tagnostr; DataReceive?.Invoke(this, new DataEventArgs(DataType.TAG)); } - } WriteData(MakeCheckSum("ACKTAG")); diff --git a/NewMap.json b/NewMap.json index 88a5628..449f06c 100644 --- a/NewMap.json +++ b/NewMap.json @@ -156,7 +156,7 @@ "CanTurnLeft": false, "CanTurnRight": false, "DisableCross": false, - "SpeedLimit": 0, + "SpeedLimit": 1, "AliasName": "", "IsActive": true, "RfidId": 9, @@ -180,7 +180,7 @@ "CanTurnLeft": false, "CanTurnRight": false, "DisableCross": false, - "SpeedLimit": 0, + "SpeedLimit": 1, "AliasName": "", "IsActive": true, "RfidId": 8, @@ -208,7 +208,7 @@ "CanTurnLeft": false, "CanTurnRight": false, "DisableCross": false, - "SpeedLimit": 0, + "SpeedLimit": 1, "AliasName": "", "IsActive": true, "RfidId": 7, @@ -279,7 +279,7 @@ "CanTurnLeft": true, "CanTurnRight": true, "DisableCross": false, - "SpeedLimit": 1, + "SpeedLimit": 0, "AliasName": "", "IsActive": true, "RfidId": 91, @@ -303,7 +303,7 @@ "CanTurnLeft": false, "CanTurnRight": false, "DisableCross": false, - "SpeedLimit": 1, + "SpeedLimit": 0, "AliasName": "BUFFER5", "IsActive": true, "RfidId": 35, @@ -327,7 +327,7 @@ "CanTurnLeft": false, "CanTurnRight": false, "DisableCross": false, - "SpeedLimit": 1, + "SpeedLimit": 0, "AliasName": "BUFFER6", "IsActive": true, "RfidId": 36, @@ -355,7 +355,7 @@ "CanTurnLeft": true, "CanTurnRight": true, "DisableCross": false, - "SpeedLimit": 1, + "SpeedLimit": 0, "AliasName": "TURN", "IsActive": true, "RfidId": 3, @@ -461,7 +461,7 @@ "CanTurnLeft": false, "CanTurnRight": false, "DisableCross": true, - "SpeedLimit": 1, + "SpeedLimit": 0, "AliasName": "", "IsActive": true, "RfidId": 20, @@ -790,6 +790,6 @@ "BackgroundColorArgb": -14671840, "ShowGrid": false }, - "CreatedDate": "2026-02-25T11:11:11.6577105+09:00", + "CreatedDate": "2026-02-26T09:50:44.0545961+09:00", "Version": "1.3" } \ No newline at end of file