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