From 25f52fdb9a195ab651bff2ebb318119ce7f1f633 Mon Sep 17 00:00:00 2001
From: chengsc <11752@DESKTOP-DS49RCP>
Date: 星期一, 28 四月 2025 15:19:28 +0800
Subject: [PATCH] 修改问题

---
 Admin.NET/WCS.Application/PLC/PLCService.cs |   94 +++++++++++++++++++++++++++++------------------
 1 files changed, 58 insertions(+), 36 deletions(-)

diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs
index ee43c9c..f9ef369 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锛氬厖鐢典腑
-                    
-                    WcsCarTasks carTask2 = null;//null 鏂颁换鍔�  not null 璺緞2浠诲姟
+                    //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏃犱换鍔�,1:浠诲姟瀹屾垚,2:浠诲姟鍙栨秷,3:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑
+
+                    WcsCarTasks carTaskNext = null;//null 鏂颁换鍔�  not null 褰撳墠灏忚溅&&褰撳墠浠诲姟 涓嬩竴鑺備换鍔�
+
                     if (resultTaskStatus.IsSucceed && valueTaskStatus == 1)
                     {
                         var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�");
@@ -169,16 +171,18 @@
                         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();
+                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == carTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status <= TaskStatusEnum.Doing).OrderBy(m=>m.CreateTime).First();
                         
                         if (carTask != null && carTask.Status != TaskStatusEnum.Complete)
                         {
@@ -197,8 +201,8 @@
                             
                             HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>());
                         }
-                        //娌℃湁璺緞2鐨勪换鍔� 鍙樻洿鎬讳换鍔′俊鎭�
-                        if (carTask2 == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
+                        //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭�
+                        if (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete)
                         {
                             modFinshTask.Status = TaskStatusEnum.Complete;
                             modFinshTask.FinishDate = DateTime.Now;
@@ -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,30 +233,40 @@
                     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 (carTaskNext != null)
                     {
-                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTask2.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar);
+                        modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTaskNext.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();
+                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
+                    }
+                    else
+                    {
+                        // 鑾峰彇浠诲姟淇℃伅
+                        modTask = _db.Queryable<WcsTask>().Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First();
+                        if (modTask == null)
+                        {
+                            return;
+                        }
+                        carTaskNext = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP && m.Status == TaskStatusEnum.Wait).OrderBy(m => m.CreateTime).First();
                     }
 
                     //return;
-                    if (modTask == null || carTask2 == null)
+                    if (modTask == null || carTaskNext == null)
                     {
+                        //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔�  鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔�
                         return;
                     }
                     
-                    if (carTask2.Status == TaskStatusEnum.Doing)
+                    if (carTaskNext.Status == TaskStatusEnum.Doing)
                     {
                         Thread.Sleep(3000);
                         return;
                     }
                     //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴�
-                    var preStrs = carTask2.PreId.Split(';');
+                    var preStrs = carTaskNext.PreId.Split(';');
                     foreach (var preStr in preStrs)
                     {
                         if (string.IsNullOrWhiteSpace(preStr))
@@ -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(';');
+                    var execuPath = carTaskNext.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锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級
@@ -322,14 +343,15 @@
                         var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1");
                         if (result.IsSucceed)
                         {
-                            carTask2.Status = TaskStatusEnum.Doing;
-                            carTask2.CarTaskNo = carTaskNo;
-                            _db.Updateable(carTask2).ExecuteCommand();
+                            carTaskNext.Status = TaskStatusEnum.Doing;
+                            carTaskNext.CarTaskNo = carTaskNo;
+                            _db.Updateable(carTaskNext).ExecuteCommand();
+                            //娓呴櫎灏忚溅绌洪棽鏃堕棿
                             var taskMonitor = new WcsTaskMonitor()
                             {
-                                TaskNo = carTask2.TaskNo,
+                                TaskNo = carTaskNext.TaskNo,
                                 PlcName = modDevice.Text,
-                                InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTask2.TaskNo}"
+                                InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}"
                             };
                             _db.Insertable(taskMonitor).ExecuteCommand();
                             //涓嬪彂浠诲姟鏃ュ織

--
Gitblit v1.8.0