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/PLCTaskAction.cs |   94 ++++++++++++++++++++++++++++++-----------------
 1 files changed, 60 insertions(+), 34 deletions(-)

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();
 

--
Gitblit v1.8.0