From c2bed218cc875e59fff53ef43a187d5934bdf35c Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期日, 27 四月 2025 14:59:20 +0800 Subject: [PATCH] 修改优化问题 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 62 +++++++--- Admin.NET/WCS.Application/Util/FourWayCarUtil.cs | 107 ++++++++++++++--- Admin.NET/WCS.Application/Entity/WcsTask.cs | 2 Admin.NET/WCS.Application/OpenApi/OpenApi.cs | 54 ++++++++ Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 94 ++++++++++----- 5 files changed, 242 insertions(+), 77 deletions(-) diff --git a/Admin.NET/WCS.Application/Entity/WcsTask.cs b/Admin.NET/WCS.Application/Entity/WcsTask.cs index df6477c..7333be5 100644 --- a/Admin.NET/WCS.Application/Entity/WcsTask.cs +++ b/Admin.NET/WCS.Application/Entity/WcsTask.cs @@ -14,7 +14,7 @@ public string? TaskNo { get; set; } /// <summary> - /// 浠诲姟绫诲瀷 + /// 浠诲姟绫诲瀷 /// </summary> [SugarColumn(ColumnName = "TaskType", ColumnDescription = "浠诲姟绫诲瀷")] public TaskTypeEnum? TaskType { get; set; } diff --git a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs index 62c9a4d..7d62853 100644 --- a/Admin.NET/WCS.Application/OpenApi/OpenApi.cs +++ b/Admin.NET/WCS.Application/OpenApi/OpenApi.cs @@ -17,6 +17,8 @@ using Newtonsoft.Json.Linq; using SqlSugar; using NewLife.Reflection; +using static SKIT.FlurlHttpClient.Wechat.Api.Models.CustomServiceKfSessionGetWaitCaseResponse.Types; +using WCS.Application.Util; namespace WCS.Application; @@ -42,7 +44,54 @@ _taskService = taskService; } - // <summary> + /// <summary> + /// 娴嬭瘯鍒嗛厤浠诲姟璺緞 + /// </summary> + /// <param name="models">浠诲姟淇℃伅</param> + /// <returns>鍙嶉淇℃伅</returns> + [AllowAnonymous] + public async Task AddAssignTasks(ResponseTasksModel models) + { + // 楠岃瘉浠诲姟鏄惁宸插瓨鍦� + var taskInfo = await _db.Queryable<WcsTask>().FirstAsync(w => w.TaskNo == models.TaskNo); + if (taskInfo == null) + { + throw Oops.Bah("浠诲姟:" + models.TaskNo + ";涓嶅瓨鍦�!"); + } + var data1 = FourWayCarUtil.GetCarPath("090601", "080401"); + if (data1 == null) //|| data1.Count == 0 + { + throw Oops.Bah("鍒嗛厤璺緞涓嶅瓨鍦�!"); + } + + // 鏍规嵁浠诲姟鐘舵�� 琛ュ厖璧峰缁撴潫鑺傜偣鐘舵�� + var data2 = FourWayCarUtil.GetCarPathUp(data1, 1); + var path = ""; + var executionPath1 = ""; + foreach (var item in data1) + { + //璺緞鑺傜偣 + var pathXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') + item.NodeCom.ToString(); + path += pathXYZ + ";"; + if (item.IsSendPlc) + { + executionPath1 += pathXYZ + ";"; + } + } + // 鎻掑叆鍥涘悜杞︿换鍔¤〃 + var carTask1 = new WcsCarTasks() + { + TaskNo = taskInfo.TaskNo, + PreId = "", + ExecutionPath = executionPath1, + Path = path, + CarNo = "", + Status = TaskStatusEnum.Wait + }; + var i = _db.Insertable(carTask1).ExecuteCommand(); + Console.WriteLine(""+i); + } + /// WCS鎺ュ彈WMS涓嬪彂鐨勪换鍔�(澶� /// 鏉′换鍔�) /// <param name="models">浠诲姟淇℃伅</param> @@ -115,8 +164,9 @@ var taskAdd = new WcsTask() { TaskNo = models.TaskNo, - TaskType = TaskTypeEnum.Out, + TaskType = (TaskTypeEnum?)int.Parse(models.TaskType), Status = TaskStatusEnum.Wait, + Type = models.Type, Levels = 999, Origin = "WMS", StartRoadway = models.StartRoadway, diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index ee43c9c..2fff948 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -146,6 +146,7 @@ private static void ShuttleCar(WcsDeviceDto modDevice) { var plcConn = modDevice.modbusUtil; + // 鍥涘悜杞︾姸鎬� 0:鏈┖闂�,1:绌洪棽,2:寮傚父 3锛氬厖鐢典腑 switch (modDevice.Value.ToString()) { case "0": @@ -156,9 +157,10 @@ sysCacheService.HashAddOrUpdate("AlarmInfo_Car", plcConn.PlcIP, -1); var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��"); var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos); - //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏈┖闂�,1:绌洪棽,2:寮傚父 3锛氬厖鐢典腑 - + //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏃犱换鍔�,1:浠诲姟瀹屾垚,2:浠诲姟鍙栨秷,3:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑 + WcsCarTasks carTask2 = null;//null 鏂颁换鍔� not null 璺緞2浠诲姟 + if (resultTaskStatus.IsSucceed && valueTaskStatus == 1) { var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); @@ -169,13 +171,15 @@ var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP); if (carTask == null) { - return;//娌℃湁鎵惧埌浠诲姟 + var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅"); + plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟 澶嶄綅 + return; } var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo); if (modFinshTask == null) { - return;//娌℃湁鏌ヨ鍒版�讳换鍔� + break;//娌℃湁鏌ヨ鍒版�讳换鍔� } //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂 carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.PreId.Contains(carTask.Id.ToString())).OrderBy(m=>m.CreateTime).First(); @@ -221,7 +225,7 @@ } } - + var modStationX = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(X)"); var (resultx, valuex) = plcConn.GetDBValue(modStationX.PosType, modStationX.PlcPos); var modStationY = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Y)"); @@ -229,20 +233,30 @@ var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)"); var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos); - // 鑾峰彇浠诲姟淇℃伅 - var modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime).First(); + WcsTask modTask; //瑕佷笅鍙戣矾寰�2浠诲姟 - if (carTask2 == null) + if (carTask2 != null) { modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTask2.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar); carTask2= _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First(); } + else + { + // 鑾峰彇浠诲姟淇℃伅 + modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime).First(); + if (modTask == null) + { + return; + } + carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First(); + } //return; if (modTask == null || carTask2 == null) { + //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔� return; } @@ -285,27 +299,34 @@ int posY = Convert.ToInt32(modNodeY.PlcPos); int posZ = Convert.ToInt32(modNodeZ.PlcPos); int posStatus = Convert.ToInt32(modNodeStatus.PlcPos); - if (Convert.ToInt32(valuey) != Convert.ToInt32(modTask.StartLocate.Substring(2, 2))) - { - //鍐欏叆灏忚溅褰撳墠浣嶇疆 - listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex))); - listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey))); - listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez))); - listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3")); - } + //浜や簰璺緞 var execuPath = carTask2.ExecutionPath.Split(';'); + if (Convert.ToInt32(valuex) != Convert.ToInt32(execuPath[0].Substring(0, 2)) || Convert.ToInt32(valuey) != Convert.ToInt32(execuPath[0].Substring(2, 2)) || Convert.ToInt32(valuez) != Convert.ToInt32(execuPath[0].Substring(4, 2))) + { + return; //灏忚溅浣嶇疆涓庤矾寰勮捣濮嬩綅缃笉鍚� + ////鍐欏叆灏忚溅褰撳墠浣嶇疆 + //listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), Convert.ToString(valuex))); + //listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), Convert.ToString(valuey))); + //listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), Convert.ToString(valuez))); + //listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3")); + } + foreach (var ePath in execuPath) { if (string.IsNullOrWhiteSpace(ePath)) { continue; } + var epathx = ePath.Substring(0, 2); + var epathy = ePath.Substring(2, 2); + var epathz = ePath.Substring(4, 2); + var epathn = ePath.Substring(6, 1); //鍐欏叆浜や簰浣嶇疆 - listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), ePath.Substring(0, 2))); - listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), ePath.Substring(2, 2))); - listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), ePath.Substring(4, 2))); - listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), ePath.Substring(5, 1))); + listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), epathx)); + listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), epathy)); + listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), epathz)); + listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), epathn)); } //杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級 @@ -325,6 +346,7 @@ carTask2.Status = TaskStatusEnum.Doing; carTask2.CarTaskNo = carTaskNo; _db.Updateable(carTask2).ExecuteCommand(); + //娓呴櫎灏忚溅绌洪棽鏃堕棿 var taskMonitor = new WcsTaskMonitor() { TaskNo = carTask2.TaskNo, diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs index e6932f9..17bcb90 100644 --- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs +++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs @@ -143,7 +143,7 @@ StartRead(); ConnectionStatus(); StartWatchAlarm(); - //AssignTasks(); + AssignTasks(); //StartWatchPosition(); } } @@ -209,15 +209,15 @@ var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos); if (result.IsSucceed) { - //濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺� - if (modPlc.Type == PLCTypeEnum.ShuttleCar) - { - var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault(); - if (modHeart != null) - { - modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1"); - } - } + ////濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺� + //if (modPlc.Type == PLCTypeEnum.ShuttleCar) + //{ + // var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault(); + // if (modHeart != null) + // { + // modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1"); + // } + //} //鏃犳祦绋嬭烦鍑� if (Convert.ToInt32(value) == 0) continue; @@ -265,11 +265,22 @@ var (result, value) = modbusUtil.GetDBValue(modDevice.PosType, modDevice.PlcPos); if (result.IsSucceed) { + //濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺� + if (modPlc.Type == PLCTypeEnum.ShuttleCar) + { + var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault(); + if (modHeart != null) + { + modbusUtil.SetDBValue(modHeart.PosType, modHeart.PlcPos, "1"); + } + } + //鏃犳祦绋嬭烦鍑� if (value == 0) continue; var dto = modDevice.Adapt<WcsDeviceDto>(); dto.Value = value; + dto.PlcIdIP = modPlc.IP; dto.Type = _modplc.Type; dto.modbusUtil = modbusUtil; dto.listStation = listPlcPosition.Where(s => s.DeviceId == modDevice.Id).ToList(); @@ -367,10 +378,13 @@ { // 鑾峰彇瀵嗛泦搴撴湭鎵ц浠诲姟 鏍规嵁鍒涘缓鏃堕棿鎺掑簭 var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => s.CreateTime).First(); - + if (waitTask == null) + { + continue; + } //01010101: 01鎺� 01鍒� 01灞� 01娣卞害-姝ら」鐩笉鍋氬垽鏂� - var taskpai = int.Parse(waitTask.StartLocate.Substring(4, 2)); - var tasklie = int.Parse(waitTask.StartLocate.Substring(4, 2)); + var taskpai = int.Parse(waitTask.StartLocate.Substring(0, 2)); + var tasklie = int.Parse(waitTask.StartLocate.Substring(2, 2)); var taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2)); #region 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞� @@ -380,6 +394,7 @@ // 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞︼紙鏍规嵁灏忚溅浠诲姟琛ㄦ槸鍚︽湁浠诲姟鍜屽皬杞︾姸鎬佸叡鍚屽垽鏂皬杞︽槸鍚︾┖闂�) var kXCarList = new List<CarInfo>(); + var carErr = false;//灏忚溅鏄惁鏈夊け鑱旂殑 foreach (var modbusUtil in listModbusUtil) { //濡傛灉灏忚溅鏈夋湭鎵ц鐨勪换鍔★紝璺冲嚭 @@ -414,7 +429,8 @@ if (!kXCarList.Any(m => m.CarPlcIp == modbusUtil.PlcIP)) { var carVal = ((int)valuex).ToString().PadLeft(2, '0') + ((int)valuey).ToString().PadLeft(2, '0') + ((int)valuez).ToString().PadLeft(2, '0'); - var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate, 0); + //灏忚溅鍒板彇璐у偍浣嶈矾寰� + var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate); kXCarList.Add(new CarInfo() { CarPlcIp = modbusUtil.PlcIP, @@ -430,8 +446,15 @@ else { Console.WriteLine($"璇诲彇鍥涘悜杞modbusUtil.PlcIP}鐘舵�佸け璐�"); - return;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞 + carErr = true; + break;//鏈変竴涓皬杞﹁鍙栧け璐ヨ烦鍑烘柟娉曪紝鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞 } + } + //鏈夊皬杞﹀け鑱旓紝涓嶅垎閰嶄换鍔� + if (carErr) + { + kXCarList.Clear();//娓呮绌鸿溅璁板綍 + break; } } @@ -442,7 +465,7 @@ var assignCar = kXCarList.OrderBy(m => m.Level).FirstOrDefault(); if (assignCar == null) { - break;//娌℃湁绌洪棽灏忚溅 + continue;//娌℃湁绌洪棽灏忚溅 } var data = new List<CarModel>(); if (assignCar.Level != 0) @@ -450,14 +473,15 @@ //鍒ゆ柇灏忚溅浣嶇疆鏄惁涓庝换鍔$殑璧峰鍌ㄤ綅鐩稿悓,涓嶇浉鍚岋細鑾峰彇灏忚溅鍒板彇璐у偍浣嶈矾寰� var carLocate = assignCar.X.ToString().PadLeft(2, '0')+assignCar.Y.ToString().PadLeft(2, '0')+ assignCar.Z.ToString().PadLeft(2, '0'); //鑾峰彇灏忚溅鍘诲彇璐у偍浣嶄换鍔¤矾寰� - var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate, 0); - data.AddRange(data1); + var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate); + var datas = FourWayCarUtil.GetCarPathUp(data1, 0); + data.AddRange(datas); } //鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰� - var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, 2, "1"); - - data.AddRange(data2); - if (data == null) { break; } + var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, "1"); + var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1); + data.AddRange(datas2); + if (data == null) { continue; } var preId1 = "";//鍓嶇疆浠诲姟Id var executionPath1 = "";//浜や簰璺緞 @@ -478,10 +502,10 @@ //鍒ゆ柇濡傛灉鏄畬鏁磋矾寰� 璁板綍浜や簰璺緞 if (isOk == "1") { - if (i == 0) - { - return;//绗竴涓妭鐐规湁鍜屽叾浠栦换鍔¤矾寰勫啿绐侊紝鏃犳硶閬垮厤 - } + //if (i == 0) + //{ + // return;//绗竴涓妭鐐规湁鍜屽叾浠栦换鍔¤矾寰勫啿绐侊紝鏃犳硶閬垮厤 + //} var pathXYZQian = data[i - 1].X.ToString().PadLeft(2, '0') + data[i - 1].Y.ToString().PadLeft(2, '0') + data[i - 1].Z.ToString().PadLeft(2, '0') + data[i].NodeCom.ToString(); if (!executionPath1.Contains(pathXYZQian)) { @@ -540,14 +564,15 @@ var endLocate3 = ""; var executionPath3 = ""; var path3 = ""; - var data3 = new List<CarModel>(); + var datas3 = new List<CarModel>(); //鏌ユ壘鐩爣浣嶇疆 - while (endLocate3 == "" || data3.Count == 0 || data3 == null) + while (endLocate3 == "" || datas3.Count == 0 || datas3 == null) { endLocate3 = FourWayCarUtil.GetCarEndLocation(carXYZ, str3); - data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, 0, "0"); + var data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, "0"); + datas3 = FourWayCarUtil.GetCarPathUp(data3, 0); } - foreach (var itemPath in data3) + foreach (var itemPath in datas3) { var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString(); @@ -612,14 +637,15 @@ var endLocate = ""; var executionPath4 = ""; var path4 = ""; - var data4 = new List<CarModel>(); + var datas4 = new List<CarModel>(); //鏌ユ壘鐩爣浣嶇疆 - while (endLocate == "" || data4.Count == 0 || data4 == null) + while (endLocate == "" || datas4.Count == 0 || datas4 == null) { endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4); - data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate, 0, "0"); + var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate); + datas4 = FourWayCarUtil.GetCarPathUp(data4, 0); } - foreach (var itemPath in data4) + foreach (var itemPath in datas4) { var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString(); diff --git a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs index aaa4238..5116b4d 100644 --- a/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs +++ b/Admin.NET/WCS.Application/Util/FourWayCarUtil.cs @@ -14,16 +14,67 @@ { private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); - + /// <summary> + /// + /// </summary> + /// <param name="list">闆嗗悎</param> + /// <param name="moveType">绉诲姩绫诲瀷 0:绉诲姩 1:绉昏揣 </param> + /// <returns></returns> + public static List<CarModel> GetCarPathUp(List<CarModel> list,int moveType) + { + for (int i = 0; i < list.Count; i++) + { + if (i > 0 && i < list.Count - 1) + { + if (list[i].X == list[i + 1].X) + { + list[i].NodeCom = 2; + } + else if (list[i].Y == list[i + 1].Y) + { + list[i].NodeCom = 3; + } + } + if (i== 0) + { + list[i].IsSendPlc = true; + if (moveType == 0) + { + if (list[i + 1] == null) + { + continue; + } + + } + else + { + list[i].NodeCom = 1; + } + } + if (i == list.Count-1) + { + list[i].IsSendPlc = true; + if (moveType == 0) + { + list[i].NodeCom = list[i + 1].NodeCom; + } + else + { + list[i].NodeCom = 4; + } + } + } + return list; + } + /// <summary> /// 鑾峰彇灏忚溅璺緞 /// </summary> /// <param name="startLocation">璧峰浣嶇疆</param> /// <param name="endLocation">鐩爣浣嶇疆</param> - /// <param name="moveType">绉诲姩绫诲瀷 0:绉诲姩 1:鍙栬揣 2:鏀捐揣</param> /// <param name="isLoad">鏄惁杞借揣0锛氭湭杞借揣 1锛氬凡杞借揣</param> /// <returns></returns> - public static List<CarModel> GetCarPath(string startLocation, string endLocation, int moveType, string isLoad = "0") + public static List<CarModel> GetCarPath(string startLocation, string endLocation, string isLoad = "0") { if (string.IsNullOrEmpty(startLocation) || string.IsNullOrEmpty(endLocation)) { @@ -174,25 +225,41 @@ if (!gScore.ContainsKey(neighbor) || tentativeGScore < gScore[neighbor]) { neighbor.IsSendPlc = false; - // 琛ュ厖鍙傛暟 - if (neighbor.Equals(end)) - { - neighbor.NodeCom = moveType; - neighbor.IsSendPlc = true; - } - else if (currentModel.Make != locationModel.Make) - { - if (current.X == neighbor.X) - { - neighbor.NodeCom = 3; - } - else if (current.Y == neighbor.Y) - { - neighbor.NodeCom = 2; - } - neighbor.IsSendPlc = true; + //if (current.X == neighbor.X) + //{ + // current.NodeCom = 2; + //} + //else if (current.Y == neighbor.Y) + //{ + // current.NodeCom = 3; + //} + + //// 琛ュ厖鍙傛暟 + //if (current.Equals(start)) + //{ + // current.NodeCom = moveType; + // current.IsSendPlc = true; + //} + //if (neighbor.Equals(end)) + //{ + // //neighbor.NodeCom = moveType != 0 ? 2:0 ; + // if (moveType == 1) + // { + // neighbor.NodeCom = 4; + // } + // else + // { + // neighbor.NodeCom = current.NodeCom; + // } + + // neighbor.IsSendPlc = true; + //} + if (currentModel.Make != locationModel.Make) + { + neighbor.IsSendPlc = true; } + // 鏇存柊瀹為檯璺濈涓庨浼拌窛绂� cameFrom[neighbor] = current; -- Gitblit v1.8.0