From 9a7c4fea85f85824dddeac9e6ce6ebb75ccee679 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期二, 29 四月 2025 15:26:15 +0800 Subject: [PATCH] 修改问题晚上充电逻辑 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 301 ++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 217 insertions(+), 84 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index 670f1e5..e8a2fe2 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -6,6 +6,7 @@ using Furion.Logging; using IoTClient; using NewLife.Reflection; +using SixLabors.ImageSharp.ColorSpaces; using WCS.Application.Entity; using WCS.Application.Util; @@ -159,8 +160,8 @@ var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos); //鍒ゆ柇璇诲彇浠诲姟鐘舵�佹槸鍚︽垚鍔� 骞朵笖浠诲姟鐘舵�佹槸1 0:鏃犱换鍔�,1:浠诲姟瀹屾垚,2:浠诲姟鍙栨秷,3:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑 - WcsCarTasks carTask2 = null;//null 鏂颁换鍔� not null 璺緞2浠诲姟 - + WcsCarTasks carTaskNext = null;//null 鏂颁换鍔� not null 褰撳墠灏忚溅&&褰撳墠浠诲姟 涓嬩竴鑺備换鍔� + if (resultTaskStatus.IsSucceed && valueTaskStatus == 1) { var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); @@ -169,104 +170,220 @@ int valueTaskStr = Convert.ToInt32(valueTask); //鑾峰彇浠诲姟淇℃伅 鏍规嵁 浠诲姟鍙枫�佸皬杞︾紪鍙� var carTask = _db.Queryable<WcsCarTasks>().First(m=>m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.CarTaskNo == valueTaskStr && m.CarNo == modDevice.PlcIdIP); - if (carTask == null) + if (carTask != null) { - 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) - { - 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(); - - if (carTask != null && carTask.Status != TaskStatusEnum.Complete) - { - carTask.Status = TaskStatusEnum.Complete; - carTask.UpdateTime = DateTime.Now; - _db.Updateable(carTask).ExecuteCommand(); - //娣诲姞浠诲姟鏄庣粏 - var taskMonitor = new WcsTaskMonitor() + //var modRests = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅"); + //plcConn.SetDBValue(modRests.PosType, modRests.PlcPos, "1");//娌℃湁鎵惧埌浠诲姟 澶嶄綅 + + var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.TaskNo == carTask.TaskNo); + if (modFinshTask == null) { - TaskNo = carTask.TaskNo, - PlcName = modDevice.Text, - InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�" - }; - _db.Insertable(taskMonitor).ExecuteCommand(); - //涓嬪彂浠诲姟鏃ュ織 + break;//娌℃湁鏌ヨ鍒版�讳换鍔� + } + if (carTask != null && carTask.Status != TaskStatusEnum.Complete) + { + carTask.Status = TaskStatusEnum.Complete; + carTask.UpdateTime = DateTime.Now; + _db.Updateable(carTask).ExecuteCommand(); + //娣诲姞浠诲姟鏄庣粏 + var taskMonitor = new WcsTaskMonitor() + { + TaskNo = carTask.TaskNo, + PlcName = modDevice.Text, + InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�" + }; + _db.Insertable(taskMonitor).ExecuteCommand(); + //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); + } + //鑾峰彇璺緞2鐨勪换鍔� 涓嬪彂 + 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 (carTaskNext == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete) + { + modFinshTask.Status = TaskStatusEnum.Complete; + modFinshTask.FinishDate = DateTime.Now; + _db.Updateable(modFinshTask).ExecuteCommand(); + + //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠� + if (modFinshTask.Levels == 888) + { + //鍐欏叆寮�濮嬪厖鐢� + var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护"); + plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2"); + } + + //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚 + //HttpService httpService = new HttpService(); + //var requestMode = new TaskRequestWMS() + //{ + // TaskNo = modFinshTask.TaskNo, + // PalletNo = modFinshTask.PalletNo, + // TaskType = ((int)modFinshTask.TaskType).ToString(), + // TaskStatus = ((int)TaskStatusEnum.Complete).ToString() + //}; + //var modResponseTask = httpService.RequestTask(requestMode).Result; + //modFinshTask.IsSuccess = TaskSuccessEnum.Success; + //_db.Updateable(modFinshTask).ExecuteCommand(); + HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>()); + + } } - //娌℃湁璺緞2鐨勪换鍔� 鍙樻洿鎬讳换鍔′俊鎭� - if (carTask2 == null && modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete) - { - modFinshTask.Status = TaskStatusEnum.Complete; - modFinshTask.FinishDate = DateTime.Now; - _db.Updateable(modFinshTask).ExecuteCommand(); - - //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚 - //HttpService httpService = new HttpService(); - //var requestMode = new TaskRequestWMS() - //{ - // TaskNo = modFinshTask.TaskNo, - // PalletNo = modFinshTask.PalletNo, - // TaskType = ((int)modFinshTask.TaskType).ToString(), - // TaskStatus = ((int)TaskStatusEnum.Complete).ToString() - //}; - //var modResponseTask = httpService.RequestTask(requestMode).Result; - //modFinshTask.IsSuccess = TaskSuccessEnum.Success; - //_db.Updateable(modFinshTask).ExecuteCommand(); - HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>()); - - } - } + WcsTask modTask; + //瑕佷笅鍙戣矾寰�2浠诲姟 + if (carTaskNext != null) + { + modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.TaskNo == carTaskNext.TaskNo && s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.CarIp == modDevice.PlcIdIP); + + 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 && s.CarIp == modDevice.PlcIdIP).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First(); + if (modTask != null) + { + 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(); + } + } + + //璇诲彇灏忚溅浣嶇疆 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)"); var (resulty, valuey) = plcConn.GetDBValue(modStationY.PosType, modStationY.PlcPos); var modStationZ = modDevice.listStation.FirstOrDefault(s => s.Text == "鍥涘悜杞︿綅缃�(Z)"); var (resultz, valuez) = plcConn.GetDBValue(modStationZ.PosType, modStationZ.PlcPos); - - - WcsTask modTask; - //瑕佷笅鍙戣矾寰�2浠诲姟 - if (carTask2 != null) + var carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0'); + if (modTask == 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) + //璇诲彇灏忚溅鐢甸噺 + var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺"); + var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos); + if (resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl) { - return; + var endLocateCar = ""; + if (valuez == 1) + { + endLocateCar = "210401"; + } + else if (valuez == 2) + { + endLocateCar = "210402"; //011202 + } + else + { + return; // 灞傛暟閿欒 + } + var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing); + if (getCdTask == null) + { + //娣诲姞灏忚溅鍏呯數浣嶇疆 + WcsTask modCarTask = new WcsTask() + { + TaskNo = _taskService.GetTaskCode(), + TaskType = TaskTypeEnum.Move, + Type = PLCTypeEnum.ShuttleCar, + StartLocate = carXYZ, + EndLocate = endLocateCar, + PalletNo = "", + Status = TaskStatusEnum.Wait, + Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇 + Origin = "WCS", + CarIp = modDevice.PlcIdIP + }; + _db.Insertable(modCarTask).ExecuteCommand(); + HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>()); + } + } - carTask2 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == modTask.TaskNo && m.CarNo == modDevice.PlcIdIP).OrderBy(m => m.CreateTime).First(); - } + else if(resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl2) + { + //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔� + var carTime = _db.Queryable<WcsCarTime>().First(m => m.IsDelete == false && m.CarIp == modDevice.PlcIdIP); + if (carTime == null) + { + var carTimeAdd = new WcsCarTime() + { + CarIp = modDevice.PlcIdIP, + CarTime = DateTime.Now + }; + _db.Insertable(carTimeAdd).ExecuteCommand(); + } + else + { + if (carTime.CarTime == null) + { + carTime.CarTime = DateTime.Now; + carTime.UpdateTime = DateTime.Now; + _db.Updateable(carTime).ExecuteCommand(); + } + else + { + var date1 = DateTime.Now; + var data2 = (DateTime)carTime.CarTime; + TimeSpan interval = date1 - data2; + if (interval.TotalMinutes >= 5) + { + var endLocateCar = ""; + if (valuez == 1) + { + endLocateCar = "210401"; + } + else if (valuez == 2) + { + endLocateCar = "210402"; + } + else + { + return; // 灞傛暟閿欒 + } + var getCdTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Levels == 888 && m.EndLocate == endLocateCar && m.Type == PLCTypeEnum.ShuttleCar && m.Status <= TaskStatusEnum.Doing); + if (getCdTask == null) + { + //娣诲姞灏忚溅鍏呯數浣嶇疆 + WcsTask modCarTask = new WcsTask() + { + TaskNo = _taskService.GetTaskCode(), + TaskType = TaskTypeEnum.Move, + Type = PLCTypeEnum.ShuttleCar, + StartLocate = carXYZ, + EndLocate = endLocateCar, + PalletNo = "", + Status = TaskStatusEnum.Wait, + Levels = 888, //鍏呯數绛夌骇浼樺厛浠诲姟绛夌骇 + Origin = "WCS", + CarIp = modDevice.PlcIdIP + }; + _db.Insertable(modCarTask).ExecuteCommand(); + HubUtil.PublicTask(modCarTask.Adapt<WcsTaskOutput>()); + } + + } + } - //return; - if (modTask == null || carTask2 == null) - { - //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔� + + } + } + + return; } - - if (carTask2.Status == TaskStatusEnum.Doing) + if (carTaskNext == null) + { + return; + } + 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)) @@ -280,6 +397,7 @@ return;//鍓嶇疆浠诲姟鏈畬鎴� } } + //鍏堝浣� var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅"); plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1"); @@ -287,7 +405,15 @@ List<Result> listResult = new List<Result>(); //鑾峰彇灏忚溅浠诲姟鍙� var carTaskNo = FourWayCarUtil.GetTaskNo(); - + + //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟 + if (modTask.Levels == 888) + { + //鍐欏叆鍏呯數鍛戒护 + var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护"); + listResult.Add(plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "1")); + } + var modWriteTask = modDevice.listStation.FirstOrDefault(s => s.Text == "鍐欏叆浠诲姟鍙�"); listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString())); @@ -301,7 +427,7 @@ int posStatus = Convert.ToInt32(modNodeStatus.PlcPos); //浜や簰璺緞 - 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; //灏忚溅浣嶇疆涓庤矾寰勮捣濮嬩綅缃笉鍚� @@ -343,15 +469,22 @@ 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 carTimeClear = _db.Queryable<WcsCarTime>().First(m=>m.IsDelete == false && m.CarIp == modDevice.PlcIdIP); + if (carTimeClear!= null) + { + carTimeClear.CarTime = null; + carTimeClear.UpdateTime = DateTime.Now; + _db.Updateable(carTimeClear).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