From 3e9a6a06132b06b8c2568f900df936ccc654bd58 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期二, 29 四月 2025 14:09:20 +0800 Subject: [PATCH] 修改问题,添加四向车车充电流程 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 1250 +++++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 820 insertions(+), 430 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index 1fc0cd8..a25f1e5 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -5,6 +5,9 @@ using DocumentFormat.OpenXml.Spreadsheet; using Furion.Logging; using IoTClient; +using NewLife.Reflection; +using SixLabors.ImageSharp.ColorSpaces; +using WCS.Application.Entity; using WCS.Application.Util; namespace WCS.Application; @@ -144,6 +147,7 @@ private static void ShuttleCar(WcsDeviceDto modDevice) { var plcConn = modDevice.modbusUtil; + // 鍥涘悜杞︾姸鎬� 0:鏈┖闂�,1:绌洪棽,2:寮傚父 3锛氬厖鐢典腑 switch (modDevice.Value.ToString()) { case "0": @@ -154,91 +158,253 @@ 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:浠诲姟鏆傚仠锛�4锛氫换鍔″紓甯� 5锛氫换鍔℃墽琛屼腑 + + WcsCarTasks carTaskNext = null;//null 鏂颁换鍔� not null 褰撳墠灏忚溅&&褰撳墠浠诲姟 涓嬩竴鑺備换鍔� + if (resultTaskStatus.IsSucceed && valueTaskStatus == 1) { var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos); - string valueTaskStr = Convert.ToString(valueTask); - string strNo = ""; - var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo); - if (valueTaskStr != "0" && strNo != valueTaskStr) + //璇诲彇浠诲姟鍙� + 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) { - var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr)); - if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete) + //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;//娌℃湁鏌ヨ鍒版�讳换鍔� + } + if (carTask != null && carTask.Status != TaskStatusEnum.Complete) + { + carTask.Status = TaskStatusEnum.Complete; + carTask.UpdateTime = DateTime.Now; + _db.Updateable(carTask).ExecuteCommand(); + //娣诲姞浠诲姟鏄庣粏 + var taskMonitor = new WcsTaskMonitor() { - //12.4鍑哄簱鏀规垚璋冪敤WMS瀹屾垚浠诲姟鎺ュ彛锛沇MS鎿嶆帶PDA鎵樼洏涓嬫灦鍚庯紝WCS浠诲姟鐘舵�佹墠瀹屾垚锛堥伩鍏嶅皬杞︾户缁窇锛� - if (modFinshTask.TaskType == TaskTypeEnum.In) - { - modFinshTask.Status = TaskStatusEnum.Complete; - modFinshTask.FinishDate = DateTime.Now; - _db.Updateable(modFinshTask).ExecuteCommand(); - var taskMonitor = new WcsTaskMonitor() - { - TaskNo = modFinshTask.TaskNo, - PlcName = modDevice.Text, - InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�" - }; - _db.Insertable(taskMonitor).ExecuteCommand(); - //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTask(modFinshTask.Adapt<WcsTaskOutput>()); - HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - 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(); - - if (dicTaskNo.ContainsKey(modDevice.Id.ToString())) - dicTaskNo.Remove(modDevice.Id.ToString()); - dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr); + TaskNo = carTask.TaskNo, + PlcName = modDevice.Text, + InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�" + }; + _db.Insertable(taskMonitor).ExecuteCommand(); + //涓嬪彂浠诲姟鏃ュ織 + + 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>()); + + } + + } + + 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); - - // 鑾峰彇浠诲姟淇℃伅 - var stationStart = ((int)valuex).ToString().PadLeft(2, '0'); - var stationEnd = ((int)valuez).ToString().PadLeft(2, '0') + "01"; - var listTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime) - .Where(s => s.Status <= TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar - && s.StartLocate.StartsWith(stationStart) && s.StartLocate.EndsWith(stationEnd)).ToList(); - var modTask = listTask.FirstOrDefault(); - //return; - if (modTask == null) - return; - if (modTask.StartLocate == modTask.EndLocate) + var carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0'); + if (modTask == null || carTaskNext == null) { - modTask.Status = TaskStatusEnum.Doing; - _db.Updateable(modTask).ExecuteCommand(); - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + //璇诲彇灏忚溅鐢甸噺 + var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺"); + var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos); + if (resultDl.IsSucceed && valueDl < FourWayCarDLEnum.Dl) + { + var endLocateCar = ""; + if (valuez == 1) + { + endLocateCar = "210401"; + } + else if (valuez == 2) + { + endLocateCar = "210402"; //011202 + } + else + { + return; // 灞傛暟閿欒 + } + //娣诲姞灏忚溅鍏呯數浣嶇疆 + 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>()); + } + else if(resultDl.IsSucceed && valueDl < 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 = "011201"; + } + else if (valuez == 2) + { + endLocateCar = "011202"; + } + else + { + return; // 灞傛暟閿欒 + } + //娣诲姞灏忚溅鍏呯數浣嶇疆 + 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.Status == TaskStatusEnum.Doing) + + if (carTaskNext.Status == TaskStatusEnum.Doing) { Thread.Sleep(3000); return; } + + //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴� + var preStrs = carTaskNext.PreId.Split(';'); + foreach (var preStr in preStrs) + { + if (string.IsNullOrWhiteSpace(preStr)) + { + continue; + } + var preId = long.Parse(preStr); + var CarTaskPre = _db.Queryable<WcsCarTasks>().First(m => m.Id == preId); + if (CarTaskPre.Status <= TaskStatusEnum.Doing) + { + return;//鍓嶇疆浠诲姟鏈畬鎴� + } + } + //鍏堝浣� var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅"); plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1"); List<Result> listResult = new List<Result>(); - //鍐欏叆浠诲姟鍙稩d鐨勬湯4浣嶏紝2涓皬杞︿竴璧疯窇鏈夋瀬浣庢鐜囬噸澶� + //鑾峰彇灏忚溅浠诲姟鍙� + 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, modTask.Id.ToString().Substring(modTask.Id.ToString().Length - 4))); + listResult.Add(plcConn.SetDBValue(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString())); var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣X"); var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣Y"); @@ -248,37 +414,36 @@ 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))) + + //浜や簰璺緞 + 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))) { - //鍐欏叆灏忚溅褰撳墠浣嶇疆 - 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")); + 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")); } - //鍐欏叆璧峰浣嶇疆鍙栬揣 - listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.StartLocate.Substring(0, 2))); - listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), modTask.StartLocate.Substring(2, 2))); - listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.StartLocate.Substring(4, 2))); - listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "2")); - //鍐欏叆鐩爣浣嶇疆鏀捐揣 - listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.EndLocate.Substring(0, 2))); - listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), modTask.EndLocate.Substring(2, 2))); - listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.EndLocate.Substring(4, 2))); - listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3")); - string endPos = ""; - if (modTask.StartLocate.Substring(0, 2).ToInt() >= 14) - endPos = "01"; - else - endPos = "21"; - if (listTask.Count == 1 && modTask.EndLocate.Substring(2, 2) != endPos) + + foreach (var ePath in execuPath) { - //濡傛灉鍚庣画娌℃湁浠诲姟锛屽氨璁╁皬杞﹀洖鍒板師浣� - listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), modTask.EndLocate.Substring(0, 2))); - listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), endPos));//todo:杩欓噷浣嶇疆寰呭畾 - listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), modTask.EndLocate.Substring(4, 2))); - listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "3")); + 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(), 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锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級 while (posX <= 43097) { @@ -293,17 +458,18 @@ var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1"); if (result.IsSucceed) { - modTask.Status = TaskStatusEnum.Doing; - _db.Updateable(modTask).ExecuteCommand(); + carTaskNext.Status = TaskStatusEnum.Doing; + carTaskNext.CarTaskNo = carTaskNo; + _db.Updateable(carTaskNext).ExecuteCommand(); + //娓呴櫎灏忚溅绌洪棽鏃堕棿 var taskMonitor = new WcsTaskMonitor() { - TaskNo = modTask.TaskNo, + TaskNo = carTaskNext.TaskNo, PlcName = modDevice.Text, - InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{modTask.TaskNo}" + InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}" }; _db.Insertable(taskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); } } @@ -314,42 +480,42 @@ //灏忚溅鐘舵�佸紓甯� var modPosTaskStatus = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��"); var (resultTaskStatus, valueTaskStatus) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos); + + if (resultTaskStatus.IsSucceed && valueTaskStatus == 1) { - if (resultTaskStatus.IsSucceed && valueTaskStatus == 1) + var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos); + string valueTaskStr = Convert.ToString(valueTask); + string strNo = ""; + var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo); + if (valueTaskStr != "0" && strNo != valueTaskStr) { - var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - var (resultTask, valueTask) = plcConn.GetDBValue(modPosTask.PosType, modPosTask.PlcPos); - string valueTaskStr = Convert.ToString(valueTask); - string strNo = ""; - var boNo = dicTaskNo.TryGetValue(modDevice.Id.ToString(), out strNo); - if (valueTaskStr != "0" && strNo != valueTaskStr) + var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr)); + if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete) { - var modFinshTask = _db.Queryable<WcsTask>().First(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.ShuttleCar && s.Id.ToString().EndsWith(valueTaskStr)); - if (modFinshTask != null && modFinshTask.Status != TaskStatusEnum.Complete) + HttpService httpService = new HttpService(); + var requestMode = new TaskRequestWMS() { - 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>()); - //HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); + 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>()); + //HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); - if (dicTaskNo.ContainsKey(modDevice.Id.ToString())) - dicTaskNo.Remove(modDevice.Id.ToString()); - dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr); - } + if (dicTaskNo.ContainsKey(modDevice.Id.ToString())) + dicTaskNo.Remove(modDevice.Id.ToString()); + dicTaskNo.Add(modDevice.Id.ToString(), valueTaskStr); } - } + } + Console.WriteLine($"绌挎杞modDevice.PlcIdIP}寮傚父"); var modPosError = modDevice.listStation.FirstOrDefault(s => s.Text == "閿欒鐮�"); var (result, valueError) = plcConn.GetDBValue(modPosError.PosType, modPosError.PlcPos); @@ -371,226 +537,588 @@ { var plcConn = modDevice.PLCUtil; + var ledText = ""; switch (modDevice.Value.ToString()) { - case "20": + case "320": { - //灏忚溅璇锋眰寮�鍗峰笜闂� 杩欓噷鏀规垚娴峰悍鐩存帴璋冪敤妯″潡 杩欓噷涓嶉渶瑕佷簡 - string Devicelndex = ""; - if (modDevice.Text == "2鍙峰嵎甯橀棬") - Devicelndex = "222"; - else if (modDevice.Text == "3鍙峰嵎甯橀棬") - Devicelndex = "111"; - var modCallBack = sysCacheService.Get<AGVApplyLockInput>("OpenDoor" + Devicelndex); - if (modCallBack != null) + // 鐢宠瀵嗛泦搴撶粍 + string strMsg = ""; + string taskModel = ""; + + // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + if (!res.IsSucceed) { - var modAgvDevice = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == "AGV"); - AgvNotifyInput input = new AgvNotifyInput() + break; + } + var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + + //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑 + if (PLCTaskAction.boEnterLock) + { + var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + if (res350.IsSucceed && palletVal350 != "350") { - ActionStatus = "1", - DeviceIndex = Devicelndex, - UUID = modCallBack.UUID, - }; - var response = new HttpService().NotifyExcuteResultInfo(input).Result; - if (response.code == 0) + ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; + ledText += $"鎵樼洏鍙�:{palletVal}\n"; + ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n"; + LedDisplay(modDevice.LedIP, ledText); + } + + // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠� + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); + if (ret.IsSucceed) { - sysCacheService.Remove("OpenDoor" + Devicelndex); + plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); + } + + break; + } + + if (palletVal == null) + { + var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + if (res350.IsSucceed && palletVal350 != "350") + { + ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; + ledText += $"鎵樼洏鍙�:{palletVal}\n"; + ledText += $"鎵弿鎵樼洏鍙峰け璐�!\n"; + LedDisplay(modDevice.LedIP, ledText); + } + + // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠� + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); + if (ret.IsSucceed) + { + plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); + } + + break; + } + + var http = new HttpService(); + string TaskNo = "", EndLocate = ""; + strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, "1", ref EndLocate, ref TaskNo); + if (!strMsg.Contains("-1")) + { + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo); + modDevice.LedIP = _db.Queryable<WcsDevice>() + .Where(w => w.StationNum == taskInfo.StartLocate) + .Select(s => s.LedIP).First(); + + // 鍐欏叆330 + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "330"); + if (ret.IsSucceed) + { + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护330锛歿modDevice.StationNum}宸ヤ綅鐢宠宸烽亾", + PalletNo = palletVal, + Status = TaskStatusEnum.Complete, + StartLocat = modDevice.StationNum, + EndLocat = EndLocate, + }; + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + + + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // led鏄剧ず鍐呭 + try + { + ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n"; + + ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; + ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + + ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; + ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; + LedDisplay(modDevice.LedIP, ledText); + + } + catch (Exception ex) + { + Log.Error(ex.Message); + } + + } + + } + else + { + var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + if (res350.IsSucceed && palletVal350 != "350") + { + ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; + ledText += $"鎵樼洏鍙�:{palletVal}\n"; + ledText += $"{strMsg}\n"; + LedDisplay(modDevice.LedIP, ledText); + } + + // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠� + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); + if (ret.IsSucceed) + { + plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); } } } break; - case "100": + case "330": { - //宸ヤ綅瀵瑰簲 1=A 4=B 10=C - string stationNum = ""; - if (modDevice.StationNum == "1" || modDevice.StationNum == "4") + // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + if (!res.IsSucceed) { - stationNum = "10"; - //鍒ゆ柇鏈夋病鏈夊皬杞﹀埌C鍙g殑浠诲姟锛屽鏋滄湁灏卞啓120 - var countTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV && s.EndLocate == "A1").Count(); - if (countTask != 0) - { - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "120"); - Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆120锛岀粨鏋滐細{ret.ToJson()}"); - return; - } + break; } - string strPalletNo = ""; - if (modDevice.StationNum == "10" || modDevice.StationNum == "4") + string pallet = palletVal.ToString(); + // 鑾峰彇浠诲姟淇℃伅 + var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false + && s.PalletNo == pallet + && s.Type == PLCTypeEnum.ConveyorLine + && (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) + && s.TaskType == TaskTypeEnum.In); + + if (modTask == null) { - var modPosPallet = modDevice.listStation.First(s => s.Text == "鎵樼洏鏉$爜"); - //todo:杩欓噷璇荤爜鍣ㄨ�佽涓嶅埌鏉$爜淇℃伅 鍏堝啓姝� 璇荤爜鍣ㄩ棶棰樿В鍐充簡鍙互娉ㄩ噴鎺� - //plcConn.SetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, "T2400001"); - var (res, palletNo) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, modPosPallet.StringLength); - if (!res.IsSucceed || palletNo == "") - { - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "120"); - Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆120锛岀粨鏋滐細{ret.ToJson()}"); - return; - } - strPalletNo = Convert.ToString(palletNo); + // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず + break; } - if (modDevice.StationNum == "10") + //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑 + if (PLCTaskAction.boEnterLock) { - if (strPalletNo.Substring(0, 1) == "T") - stationNum = "4"; - else - stationNum = "1"; + break;//鍏ュ簱閿佸畾鎵撳紑鍒欎笉鎵ц鍏ュ簱浠诲姟 } - // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 + // 鑾峰彇鍥涢」杞﹀彇璐у伐浣� + string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum); + + + + // 缁橮LC鍐欏叆浠诲姟鏁版嵁 var listResult = new List<Result>(); - // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� - var posModel = modDevice.listStation.First(m => m.Text == "璧峰宸ヤ綅"); - listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, modDevice.DbNumber, posModel.PlcPos, modDevice.StationNum)); - var posModel2 = modDevice.listStation.First(m => m.Text == "鐩爣宸ヤ綅"); - listResult.Add(plcConn.SetPlcDBValue(posModel2.PosType, modDevice.DbNumber, posModel2.PlcPos, stationNum)); - string taskNo = _taskService.GetTaskCode("WCS"); - var modPosTask = modDevice.listStation.First(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, taskNo)); + // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 + var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString())); + var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + var taskTypeStr = (int)modTask.TaskType; + listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + // 璧峰宸ヤ綅銆佺洰鐨勫伐浣� + var modPosStrLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); + listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum)); + var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue)); + if (listResult.All(s => s.IsSucceed)) { - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "130"); - Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆130锛岀粨鏋滐細{ret.ToJson()}"); + // 灏嗕换鍔$姸鎬佸彉鏇翠负姝e湪鎵ц + _db.Updateable<WcsTask>() + .SetColumns(s => s.Status == TaskStatusEnum.Doing) + .Where(s => s.Id == modTask.Id) + .ExecuteCommand(); + // 鍐欏叆娴佺▼瀛� 330 340 + + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "340"); + + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == modTask.StartLocate).Select(s => s.LedIP).First(); + if (ret.IsSucceed) { - AddWcsTaskInput modTask = new AddWcsTaskInput() - { - TaskNo = taskNo, - TaskType = TaskTypeEnum.In, - PalletNo = strPalletNo, - Status = TaskStatusEnum.Doing, - IsSuccess = TaskSuccessEnum.Fail, - StartLocate = modDevice.StationNum, - EndLocate = stationNum, - Type = PLCTypeEnum.ConveyorLine, - }; - _taskService.Add(modTask); - WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor() + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() { TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, + PlcId = modDevice.Id, PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护340锛歿modDevice.StationNum}鍌ㄤ綅====銆媨endLocatVlue}宸ヤ綅", + PalletNo = palletVal, + Status = TaskStatusEnum.Complete, StartLocat = modDevice.StationNum, - EndLocat = stationNum, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鎸囦护130锛岀粨鏋渰ret.IsSucceed}", + EndLocat = endLocatVlue, }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); - //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } } } break; - case "140": + case "620": { - var modPosTask = modDevice.listStation.First(m => m.Text == "浠诲姟鍙�"); - var (result, taskNo) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modPosTask.StringLength); - var modPosPallet = modDevice.listStation.First(m => m.Text == "鎵樼洏鏉$爜"); - var (res, palletNo) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos, modPosPallet.StringLength); - WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor(); - WcsTask modTask = new WcsTask(); - if (!result.IsSucceed) + // 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630 + var strMsg = ""; + var taskModel = ""; + + //// 鏍规嵁宸ヤ綅鍙疯幏鍙栧贩閬撳彿 + //var roadway = PLCCommon.GetRoadwayByStation(modDevice.StationNum); + //if (roadway == "") + //{ + // break; + //} + // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + if (!res.IsSucceed) { - Log.Error($"{plcConn.PlcIP}璇诲彇浠诲姟鍙峰け璐�"); - return; + break; } - if (modDevice.StationNum == "10") + var http = new HttpService(); + string TaskNo = ""; + // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅 + strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, "roadway", ref TaskNo); + + if (!strMsg.Contains("-1")) { - var posModel = modDevice.listStation.First(m => m.Text == "璧峰宸ヤ綅"); - var (resultS, station) = plcConn.GetPlcDBValue(posModel.PosType, modDevice.DbNumber, posModel.PlcPos); - if (resultS.IsSucceed) + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo); + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.StartLocate).Select(s => s.LedIP).First(); + // 鍐欏叆娴佺▼瀛� 630 + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630"); + + if (ret.IsSucceed) { - if (station == 1) + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() { - WcsTask modInsertTask = new WcsTask() - { - TaskNo = _taskService.GetTaskCode(), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.AGV, - StartLocate = AGVStaionEnum.A1.ToString(), - EndLocate = AGVStaionEnum.F1.ToString(), - PalletNo = modTask.PalletNo, - Status = TaskStatusEnum.Wait, - Levels = 5, - Origin = "WCS" - }; - _db.Insertable(modInsertTask).ExecuteCommand(); - HubUtil.PublicTask(modInsertTask.Adapt<WcsTaskOutput>()); - } - else if (station == 4) - { - WcsTask modInsertTask = new WcsTask() - { - TaskNo = _taskService.GetTaskCode(), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.AGV, - StartLocate = AGVStaionEnum.A1.ToString(), - EndLocate = AGVStorageUtil.GetPalletInStorage(), - PalletNo = modTask.PalletNo, - Status = TaskStatusEnum.Wait, - Levels = 5, - Origin = "WCS" - }; - _db.Insertable(modInsertTask).ExecuteCommand(); - HubUtil.PublicTask(modInsertTask.Adapt<WcsTaskOutput>()); - } - } - else - { - Log.Error("鑾峰彇璧峰宸ヤ綅澶辫触锛屽け璐ュ師鍥�" + resultS.Err); - return; + TaskNo = TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护340锛歿modDevice.StationNum}宸ヤ綅鐢宠鍌ㄤ綅", + PalletNo = palletVal, + Status = TaskStatusEnum.Complete, + StartLocat = modDevice.StationNum, + EndLocat = strMsg, + }; + + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); + ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n"; + ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; + ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; + ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; + LedDisplay(modDevice.LedIP, ledText); } } - var ledText = ""; - if (modDevice.StationNum == "4") + else { - //todo:led - ledText += "浠诲姟绫诲瀷:鍏ュ簱\n\n"; - ledText += $"浠诲姟鍙�:{taskNo}\n"; - ledText += $"鎵樼洏鍙�:{palletNo}\n\n"; - //ledText += $"璧峰浣�:10\n"; - //ledText += $"鐩爣浣�:4"; + // 鐢宠鍌ㄤ綅澶辫触锛丩ED鏄剧ず + Log.Error(string.Format($"鐢宠鍌ㄤ綅澶辫触:{strMsg},璇诲啓plc閿欒")); + // led鏄剧ず鍐呭 + var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); + ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; + ledText += $"{strMsg}\n"; LedDisplay(modDevice.LedIP, ledText); } - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "150"); - Log.Information($"鍚憄lc{modDevice.PlcIdIP}鍐欏叆150锛岀粨鏋滐細{ret.ToJson()}"); - if (ret.IsSucceed) - { - string strTaskNo = taskNo; - modTask = _db.Queryable<WcsTask>().First(s => s.TaskNo == strTaskNo); - if (modTask != null) - { - modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.PlcId, - PlcName = modDevice.Text, - StartLocat = modTask.StationNum, - EndLocat = modTask.EndLocate, - InteractiveMsg = $"鍚憑modDevice.Text}鍐欏叆鎸囦护150锛岀粨鏋渰ret.IsSucceed}", - }; - modTaskMonitor.Status = TaskStatusEnum.Complete; - _db.Insertable(modTaskMonitor).ExecuteCommand(); - modTask.FinishDate = DateTime.Now; - modTask.Status = TaskStatusEnum.Complete; - _db.Updateable(modTask).ExecuteCommand(); - //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - } + } + break; + case "630": + { + #region plc鍏夌數鎵弿涓嶅埌鎵樼洏鍚� 鑷姩娓呬俊鎭� + + //// 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� + //var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + //var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + //// 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭� + //var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + //var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos); + //if (!res.IsSucceed || !taskRes.IsSucceed) + //{ + // break; + //} + //string pallet = palletVal.ToString(); + //string taskNo = taskNoVal.ToString(); + //// 鑾峰彇浠诲姟淇℃伅 + //var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In && s.TaskNo == taskNo); + //if (modTask == null) + //{ + // // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず + // break; + //} + + //var sInfo = PLCCommon.GetStokePlc(modTask.EndRoadway, louCeng); + //if (string.IsNullOrWhiteSpace(sInfo.Ip)) + //{ + // //闇�鍔犱笂LED鏄剧ず + // Log.Error(string.Format($"鏍规嵁宸烽亾鑾峰彇璺烘満IP澶辫触锛岃鑱旂郴绠$悊鍛�")); + // break; + //} + //// 璺烘満杩炴帴 + //var plcStackeConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip); + //if (plcStackeConn.Connected) + //{ + // // 鐩爣鎺掑垪灞� + // var endLocate = modTask.EndLocate; + // if (string.IsNullOrWhiteSpace(modTask.EndLocate)) + // { + // Log.Error(string.Format($"鐩爣浣嶇疆涓虹┖锛岃浜哄伐澶勭悊,璇诲啓plc閿欒")); + // break; + // } + + // // 杞崲鐩爣宸ヤ綅鎺掑垪灞� 03010301 + // var paiVal = PLCCommon.GetDjAdress(modTask.EndRoadway.Substring(1, 2), endLocate.Substring(0, 2), endLocate.Substring(6, 2)); + // string pai = paiVal.ToString(); + // string lie = int.Parse(endLocate.Substring(2, 2)).ToString(); + // string ceng = int.Parse(endLocate.Substring(4, 2)).ToString(); + + // var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfo.Ip); + + // var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id + // && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false); + // var djInfos = PLCTaskAction.plcPositions.Where(m => m.IsDelete == false && m.DeviceId == djMod.Id).ToList(); + // var djInfo = djInfos.First(m => m.Text == "PLC娴佺▼瀛�"); + + // // 鑾峰彇璺烘満褰撳墠鐘舵�� + // var (djRes, djVal) = plcStackeConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos); + + // if (!djRes.IsSucceed || djVal.ToString() != "820") + // { + // // 璺烘満闈炵┖闂茬瓑寰� + // break; + // } + // // 缁橮LC鍐欏叆浠诲姟鏁版嵁 + // var listResult = new List<Result>(); + + // // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 + // var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + // var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + // var taskTypeStr = (int)modTask.TaskType; + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + // var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + + // //璧峰宸ヤ綅 + // var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum)); + + // //鍙栬揣鎺掋�佸垪銆佸眰 + // var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai)); + // var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie)); + // var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng)); + // //鏀捐揣鎺掋�佸垪銆佸眰 + // var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, pai)); + // var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, lie)); + // var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); + // listResult.Add(plcStackeConn.SetPlcDBValue(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, ceng)); + + // if (listResult.All(s => s.IsSucceed)) + // { + // // 鍐欏叆璺烘満 830 + // var retc2 = plcStackeConn.SetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.WcsPos, "830"); + + // // 鎻掑叆浠诲姟鏄庣粏 浠诲姟鏄庣粏瀹炰綋绫� + // var modInsertTaskMonitor = new WcsTaskMonitor() + // { + // TaskNo = modTask.TaskNo, + // PlcId = modDevice.Id, + // PlcName = modDevice.Text, + // PalletNo = modTask.PalletNo, + // Status = TaskStatusEnum.Complete, + // StartLocat = modDevice.StationNum, + // EndLocat = modTask.EndLocate // 鐩爣鍌ㄤ綅鍦板潃 + // }; + // if (!retc2.IsSucceed) + // { + // modInsertTaskMonitor.InteractiveMsg = $"杈撻�佺嚎鍙栬揣宸ヤ綅锛歿modDevice.StationNum},鍐欏叆鍨涙満鍙栬揣浠诲姟830澶辫触绛夊緟鍐嶆鍐欏叆"; + // // 鎻掑叆浜や簰鏃ュ織 + // _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + // //涓嬪彂浠诲姟鏃ュ織 + // HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // break; + + // } + // modInsertTaskMonitor.InteractiveMsg = $"璺烘満鍐欏叆鎸囦护830锛歿modDevice.StationNum}宸ヤ綅====銆�" + modTask.EndLocate + "鍌ㄤ綅鍦板潃!"; + // // 鎻掑叆浜や簰鏃ュ織 + // _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + // if (PLCTaskAction.boRefresh) + // { + // //涓嬪彂浠诲姟鏃ュ織 + // HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // } + + // } + + + + + //} + + #endregion } break; + #region 鍑哄簱浜や簰 + case "420": + { + #region 鎵樼洏鍒拌揪鎷i�夊伐浣�/鍑哄簱鍙� + // 鍑哄簱鍙� + // led鏄剧ず鎵樼洏淇℃伅 + // 鍐欏叆430 + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "430"); + + if (ret.IsSucceed) + { + var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); + var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); + var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos); + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = taskVal, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅", + PalletNo = palletVal, + Status = TaskStatusEnum.Complete, + StartLocat = starVal, + EndLocat = modDevice.StationNum, + }; + + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == modInsertTaskMonitor.TaskNo); + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.EndLocate).Select(s => s.LedIP).First(); + + // led鏄剧ず鍐呭 + // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栧搴旂殑LEDIP鍦板潃 + var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId); + + ledText += $"鍑哄簱瀹屾垚\n\n"; + ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; + ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; + ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; + LedDisplay(ledDevice.LedIP, ledText); + } + // 鍙嶉WMS鍑哄簱瀹屾垚 + //TaskReques taskReques = new TaskReques(); + //taskReques.taskNo = TaskNo; + //taskReques.TaskType = "1"; + //taskReques.TaskStatus = "2"; + //bool bl = wcsMySql.RequestTasks(taskReques); + #endregion + } + break; + case "440": + { + #region 鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅 + // 鍐欏叆450 + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "450"); + if (ret.IsSucceed) + { + var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (res, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); + var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); + var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos); + + string tasknoVal = taskVal.ToString(); + var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false); + if (modTask == null) + { + Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�")); + break; + } + // 鏀瑰彉浠诲姟鐘舵�� + modTask.Status = TaskStatusEnum.Complete; + modTask.FinishDate = DateTime.Now; + modTask.Levels = 999; + _db.Updateable(modTask).ExecuteCommand(); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鍑哄簱瀹屾垚", + PalletNo = palletVal, + Status = TaskStatusEnum.Complete, + StartLocat = starVal.ToString(), + EndLocat = modDevice.StationNum, + }; + if (modTask.Origin == "WMS") + { + // 鍙嶉WMS + var requestMode = new TaskRequestWMS() + { + TaskNo = modTask.TaskNo + modTask.EndLocate, + PalletNo = modTask.PalletNo, + TaskType = ((int)TaskTypeEnum.Out).ToString(), + TaskStatus = ((int)TaskStatusEnum.Complete).ToString() + }; + HttpService httpService = new HttpService(); + var modResponseTask = httpService.RequestTask(requestMode).Result; + if (modResponseTask.StatusCode == 0) + { + modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚"; + } + else + { + Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg)); + } + } + + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // led鏄剧ず鍐呭 + var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId); + + ledText += $"鍑哄簱瀹屾垚\n\n"; + ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n"; + ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n"; + ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; + ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}"; + LedDisplay(ledDevice.LedIP, ledText); + } + #endregion + } + break; + + #endregion default: break; } - } /// <summary> @@ -599,160 +1127,22 @@ /// <param name="modDevice"></param> private static void AGV(WcsDeviceDto modDevice) { - if (AGVStatus) - { - return; - } - //杩欓噷鎵惧嚭鏉GV寰呮墽琛屽拰姝e湪鎵ц鐨勪换鍔★紝濡傛灉鏈夋鍦ㄦ墽琛岀殑浠诲姟灏辫烦鍑猴紝娌℃湁鐨勮瘽灏辨寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV - var listTask = _db.Queryable<WcsTask>() - .Where(s => (s.Status == TaskStatusEnum.Doing || s.Status == TaskStatusEnum.Wait) && s.Type == PLCTypeEnum.AGV) - .OrderBy(s => s.Levels).ToList(); + + //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇涓嬪彂涓�涓换鍔$粰AGV + var listTask = _db.Queryable<WcsTask>().Where(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.Type == PLCTypeEnum.AGV).OrderBy(s => s.Levels).ToList(); if (listTask.Count == 0) - return; - if (listTask.Any(s => s.Status == TaskStatusEnum.Doing)) { - //鏈変换鍔℃墽琛屼腑 鏆備笉涓嬪彂浠诲姟 return; } - //WcsTask modTask = listTask.FirstOrDefault(); + foreach (var modTask in listTask) { - //鍏ョ紦瀛樺尯鏃讹紝妫�楠屼竴涓嬬紦瀛樺尯浣嶇疆 - if (modTask.EndLocate.Substring(0, 1) == "Z") + if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV )) { - if (modTask.EndLocate.Substring(1, 1) == "5") - { - string end = AGVStorageUtil.GetPalletInStorage(modTask.TaskNo); - if (end.IsNullOrEmpty()) - continue; - if (modTask.EndLocate != end) - { - modTask.EndLocate = end; - } - } - else - { - string end = AGVStorageUtil.GetProductInStorage(modTask.TaskNo); - if (end.IsNullOrEmpty()) - continue; - if (modTask.EndLocate != end) - { - modTask.EndLocate = end; - } - } + continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔� } - //鍑虹紦瀛樺尯鏃讹紝妫�楠屼竴涓嬬紦瀛樺尯浣嶇疆 - if (modTask.StartLocate.Substring(0, 1) == "Z") - { - if (modTask.StartLocate.Substring(1, 1) == "5") - { - string start = AGVStorageUtil.GetPalletOutStorage(); - if (start.IsNullOrEmpty()) - continue; - if (modTask.StartLocate != start) - { - modTask.StartLocate = start; - } - } - else - { - string start = AGVStorageUtil.GetProductOutStorage(); - if (start.IsNullOrEmpty()) - continue; - if (modTask.StartLocate != start) - { - modTask.StartLocate = start; - } - } - } - //鎶婃墭鐩樻媺鍒扮紦瀛樹綅 鍏堝垽鏂繖閲屾湁娌℃湁 - if (modTask.EndLocate.Substring(0, 1) == "C") - { - var bo = _sysConfigService.GetConfigValue<bool>("cache_" + modTask.EndLocate).Result; - if (bo) - continue; - } - //濡傛灉鎷夋墭鐩樺幓鎴愬搧宸ヤ綅锛屽厛妫�鏌ユ湁娌℃湁缂烘墭 - if (modTask.StartLocate.Substring(0, 1) == "D" && modTask.EndLocate.Substring(0, 1) == "B") - { - //鍒ゆ柇鐩爣浣嶇疆鏄媶鎵樻満鐨勪换鍔℃湁娌℃湁锛屾湁灏辫烦杩囨媶鎵樻満鍒版垚鍝佸伐浣嶇殑浠诲姟 - if (listTask.Any(s => s.EndLocate.Substring(0, 1) == "D")) - continue; - } - //濡傛灉鐩殑宸ヤ綅鏄師鏂欎粨锛屽厛妫�鏌ュ師鏂欎粨鍌ㄤ綅鐘舵�� - if (modTask.EndLocate == AGVStaionEnum.F1.ToString()) - { - if (_sysConfigService.GetConfigValue<bool>("cache_Materal").Result) - continue; - } - //if (modTask.StartLocate == AGVStaionEnum.F1.ToString()) - //{ - // if (!_sysConfigService.GetConfigValue<bool>("cache_Materal").Result) - // continue; - //} - //濡傛灉璧峰宸ヤ綅鏄媶鎵樻満 - if (modTask.StartLocate == AGVStaionEnum.D1.ToString()) - { - //鑾峰彇鍙犳媶鎵樻満IP - var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Type == PLCTypeEnum.PalletMachine); - //鑾峰彇鍙犳媶鎵樻満宸ヤ綅 - var modDevice2 = PLCTaskAction.plcDevices.FirstOrDefault(s => s.PlcId == modPlc.Id && s.Text == "鎷嗘墭鏈�"); - //鎵撳紑杩炴帴 - var modConn = new PLCUtil(modPlc); - //鏄惁鍏佽鍙栨墭淇″彿 - var modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍏佽鍙栨墭"); - var (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos); - if (result.IsSucceed) - { - if (value) - { - //濡傛灉鏈畬鎴愬氨鍒ゆ柇涓嬪彇鎵樹俊鍙锋湁娌℃湁鍐欙紝瀹屾垚灏卞彨灏忚溅鍙栨墭鐩� - modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍙栨墭淇″彿"); - (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos); - //濡傛灉娌″啓鍏ュ彇鎵樹俊鍙凤紝灏卞啓鍏� - if (result.IsSucceed && !value) - { - result = modConn.SetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos, "1"); - WcsTaskMonitor modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice2.PlcId, - PlcName = modPos.PlcPos, - Status = TaskStatusEnum.Doing, - InteractiveMsg = $"鍚憑modDevice2.Text}鍐欏叆鍙栨墭淇″彿1锛岀粨鏋渰result.IsSucceed}", - }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - Thread.Sleep(5000); - } - break; - - } - else - { - //涓嶅厑璁稿彇鎵橈紝鍒ゆ柇鏄惁鎷嗘墭鏈哄噯澶囧畬鎴� - modPos = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDevice2.Id && s.Text == "鍑嗗瀹屾垚"); - (result, value) = modConn.GetPlcDBValue(modPos.PosType, modDevice2.DbNumber, modPos.PlcPos); - if (!value) - { - continue; - } - } - } - else - { - Console.WriteLine("杩炴帴鎷嗘墭鏈轰俊鍙峰け璐�"); - continue; - } - } - //濡傛灉鐩殑宸ヤ綅鏄彁鍗囨満鏀捐揣宸ヤ綅锛屽厛妫�鏌ユ湁娌℃湁鎵樼洏绾跨殑浠诲姟 - if (modTask.EndLocate == AGVStaionEnum.A1.ToString()) - { - if (_db.Queryable<WcsTask>().Where(s => s.Type == PLCTypeEnum.ConveyorLine && s.Status == TaskStatusEnum.Doing).Any()) - continue; - } - + //涓嬪彂AGV浠诲姟 AgvTaskInput input = new AgvTaskInput() { ReqCode = modTask.Id.ToString(), -- Gitblit v1.8.0