From ec9ddfdb0782f9f302737441492259c9694e218d Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期四, 12 六月 2025 08:41:21 +0800 Subject: [PATCH] 修改数据 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 840 +++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 639 insertions(+), 201 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index 72c8d93..d748ee3 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -1,11 +1,16 @@ 锘縰sing Admin.NET.Core.Service; +using AngleSharp.Io; using COSXML.Network; using DocumentFormat.OpenXml.Bibliography; using DocumentFormat.OpenXml.Drawing; using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.Wordprocessing; +using Elastic.Clients.Elasticsearch.Snapshot; using Furion.Logging; using IoTClient; using NewLife.Reflection; +using Org.BouncyCastle.Ocsp; +using SixLabors.ImageSharp.ColorSpaces; using WCS.Application.Entity; using WCS.Application.Util; @@ -24,6 +29,7 @@ try { var mod = sender as WcsDeviceDto; + //Console.WriteLine($"{mod.Text}鍊间负" + mod.Value); switch (mod.Type) { @@ -34,6 +40,10 @@ AGV(mod); // AGV璋冨害 break; case PLCTypeEnum.ShuttleCar: //绌挎杞� + //if (mod.PlcIdIP == "10.26.254.28") + //{ + // break; + //} ShuttleCar(mod); break; case PLCTypeEnum.RobotPalletizer: @@ -69,7 +79,7 @@ TaskNo = _taskService.GetTaskCode(), TaskType = TaskTypeEnum.Move, Type = PLCTypeEnum.AGV, - StartLocate = AGVStorageUtil.GetPalletOutStorage(), + StartLocate = "", EndLocate = AGVStaionEnum.D1.ToString(), PalletNo = "", Status = TaskStatusEnum.Wait, @@ -169,102 +179,348 @@ 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鐨勪换鍔� 涓嬪彂 - 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) - { - 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, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"绌挎杞﹀弽棣堜换鍔″畬鎴�" + }; + _db.Insertable(taskMonitor).ExecuteCommand(); + //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTaskMonitor(taskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - //鎬讳换鍔′笅娌℃湁鍏朵粬鏈墽琛屽皬杞︾殑浠诲姟 鍙樻洿鎬讳换鍔′俊鎭� - if (carTaskNext == 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>()); - - } - - } - - 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); + 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) + { + if (modFinshTask.TaskType == TaskTypeEnum.Out) + { + //#region 浠诲姟鍙樻洿鎴愯緭閫佺嚎浠诲姟 + //modFinshTask.Status = TaskStatusEnum.Wait; + //modFinshTask.Type = PLCTypeEnum.ConveyorLine; + //_db.Updateable(modFinshTask).ExecuteCommand(); + //#endregion + + #region 杈撻�佺嚎 鍐欏叆PLC 740 + + var text = ""; + var devStation = ""; //宸ヤ綅 + var endLocate = modFinshTask.EndRoadway; + var carcon = new carConverModel(); + var ip = ""; + if ( carcon.conveyorBei.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍖�"; + ip = "10.26.254.10"; + devStation = carcon.conveyorBei[endLocate]; + } + else if (carcon.conveyorNan.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍗�"; + ip = "10.26.254.11"; + devStation = carcon.conveyorNan[endLocate]; + } + if (text != "") + { + + var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip); + //PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); + //var modConn = new PLCUtil(modPlc); + + var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); + var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos); + if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730) + { + //modConn.Close(); + return;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂� + } + + var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "740"); + if (!plcResult.IsSucceed) + { + //modConn.Close(); + return; + } + //娣诲姞浠诲姟鏄庣粏 + var taskMonitor = new WcsTaskMonitor() + { + TaskNo = modFinshTask.TaskNo, + PlcName = modDevice.Text, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"鍐欏叆鎸囦护740锛氭墭鐩樺埌杈緖modFinshTask.EndRoadway}" + }; + _db.Insertable(taskMonitor).ExecuteCommand(); + + //鏀瑰彉浠诲姟鐘舵�� + modFinshTask.Status = TaskStatusEnum.Complete; + modFinshTask.FinishDate = DateTime.Now; + _db.Updateable(modFinshTask).ExecuteCommand(); + + var locateOut = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate); + if (locateOut != null && locateOut.Make == "1") + { + locateOut.PalletNo = ""; + _db.Updateable(locateOut).ExecuteCommand(); + } + + //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚 + if (modFinshTask.Origin == "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>()); + } + + } + + + #endregion + } + else + { + modFinshTask.Status = TaskStatusEnum.Complete; + modFinshTask.FinishDate = DateTime.Now; + _db.Updateable(modFinshTask).ExecuteCommand(); + + if (modFinshTask.TaskType == TaskTypeEnum.Move) + { + var locatemove = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.StartLocate); + if (locatemove != null && locatemove.Make == "1") + { + locatemove.PalletNo = ""; + _db.Updateable(locatemove).ExecuteCommand(); + } + } + + var locateIn = _db.Queryable<WcsStorageLocat>().First(m => m.IsDelete == false && m.WareHouseNo == "W01" && m.LocatNo == modFinshTask.EndLocate); + if (locateIn != null && locateIn.Make == "1") + { + locateIn.PalletNo = string.IsNullOrWhiteSpace(modFinshTask.PalletNo) ? "pall" : modFinshTask.PalletNo; + _db.Updateable(locateIn).ExecuteCommand(); + } + + //鍙嶉WMS绯荤粺 浠诲姟瀹屾垚 + if (modFinshTask.Origin == "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>()); + } + + + + } + + //鍒ゆ柇浠诲姟鏄惁鍏呯數浠诲姟,涓嬪彂寮�濮嬪厖鐢靛懡浠� + if (modFinshTask.Levels == 888) + { + //鍐欏叆寮�濮嬪厖鐢� + var modCd = modDevice.listStation.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护"); + plcConn.SetDBValue(modCd.PosType, modCd.PlcPos.ToString(), "2"); + } + + + } + } + } 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); + 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).OrderBy(m => m.Levels).OrderBy(m => m.CreateTime).First(); - if (modTask == null) + 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) { - 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(); } - 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 || carTaskNext == null) + //璇诲彇灏忚溅浣嶇疆 + 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 carXYZ = valuex.ToString().PadLeft(2, '0') + valuey.ToString().PadLeft(2, '0') + valuez.ToString().PadLeft(2, '0'); + if (modTask == null) { - //鍒ゆ柇灏忚溅鏄惁鏈夌┖闂叉椂闂磋褰� 娌℃湁锛氭坊鍔� 鏈夛細鍒ゆ柇褰撳墠鏃堕棿涓庤褰曟椂闂存槸鍚︽弧瓒�5鍒嗛挓 婊¤冻锛氭坊鍔犺灏忚溅鍘诲厖鐢典换鍔� + //璇诲彇灏忚溅鐢甸噺 + var modPosCarDl = modDevice.listStation.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺"); + var (resultDl, valueDl) = plcConn.GetDBValue(modPosCarDl.PosType, modPosCarDl.PlcPos); + if (resultDl.IsSucceed && valueDl < (int)FourWayCarDLEnum.Dl) + { + var endLocateCar = ""; + if (valuez == 1) + { + endLocateCar = "011201"; + } + else if (valuez == 2) + { + endLocateCar = "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) + { + var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos); + if (resultDlLock.IsSucceed && valueDlLock!=3 && carXYZ != endLocateCar) + { + //娣诲姞灏忚溅鍏呯數浣嶇疆 + 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 < (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 = "011201"; + } + else if (valuez == 2) + { + endLocateCar = "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) + { + var (resultDlLock, valueDlLock) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos); + if (resultDlLock.IsSucceed && valueDlLock != 3 && carXYZ != endLocateCar) + { + //娣诲姞灏忚溅鍏呯數浣嶇疆 + 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 (carTaskNext == null) + { + return; + } if (carTaskNext.Status == TaskStatusEnum.Doing) { Thread.Sleep(3000); return; } + //鍒ゆ柇褰撳墠浠诲姟鏄惁杩樻湁鍓嶇疆浠诲姟鏈畬鎴� var preStrs = carTaskNext.PreId.Split(';'); foreach (var preStr in preStrs) @@ -280,16 +536,37 @@ return;//鍓嶇疆浠诲姟鏈畬鎴� } } - //鍏堝浣� - var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅"); - plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1"); + + //灏忚溅鐘舵�� + var (resultCar, valueCar) = plcConn.GetDBValue(modDevice.PosType, modDevice.PlcPos); - List<Result> listResult = new List<Result>(); + var modPosTaskStatus2 = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鐘舵��"); + var (resultTaskStatus2, valueTaskStatus2) = plcConn.GetDBValue(modPosTaskStatus.PosType, modPosTaskStatus.PlcPos); + if (resultCar.IsSucceed && valueCar == 1 && resultTaskStatus2.IsSucceed && (valueTaskStatus2 == 0 || valueTaskStatus2 == 1)) + { + //鍏堝浣� + var modRest = modDevice.listStation.FirstOrDefault(s => s.Text == "澶嶄綅"); + plcConn.SetDBValue(modRest.PosType, modRest.PlcPos, "1"); + } + else + { + return; + } + + 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())); + listResult.Add(plcConn.SetDBValueRepeat(modWriteTask.PosType, modWriteTask.PlcPos, carTaskNo.ToString())); var modNodeX = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣X"); var modNodeY = modDevice.listStation.FirstOrDefault(s => s.Text == "鑺傜偣鍧愭爣Y"); @@ -323,22 +600,97 @@ 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)); + listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), epathx)); + listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), epathy)); + listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), epathz)); + listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), epathn)); } //杩欓噷鏄妸鍚庨潰鐨勫潗鏍囧叏鍐�0锛堜负浜嗛槻姝笂娆′换鍔″潗鏍囨病琚鐩栵級 while (posX <= 43097) { - listResult.Add(plcConn.SetDBValue(modNodeX.PosType, posX++.ToString(), "0")); - listResult.Add(plcConn.SetDBValue(modNodeY.PosType, posY++.ToString(), "0")); - listResult.Add(plcConn.SetDBValue(modNodeZ.PosType, posZ++.ToString(), "0")); - listResult.Add(plcConn.SetDBValue(modNodeStatus.PosType, posStatus++.ToString(), "0")); + listResult.Add(plcConn.SetDBValueRepeat(modNodeX.PosType, posX++.ToString(), "0")); + listResult.Add(plcConn.SetDBValueRepeat(modNodeY.PosType, posY++.ToString(), "0")); + listResult.Add(plcConn.SetDBValueRepeat(modNodeZ.PosType, posZ++.ToString(), "0")); + listResult.Add(plcConn.SetDBValueRepeat(modNodeStatus.PosType, posStatus++.ToString(), "0")); } if (listResult.All(s => s.IsSucceed)) { + if (modTask.TaskType == TaskTypeEnum.Out) + { + #region 杈撻�佺嚎 鍐欏叆PLC 730 + + var text = ""; + var devStation = ""; + var endLocate = modTask.EndRoadway; + var carcon = new carConverModel(); + var ip = ""; + if (carcon.conveyorBei.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍖�"; + ip = "10.26.254.10"; + devStation = carcon.conveyorBei[endLocate]; + } + else if (carcon.conveyorNan.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍗�"; + ip = "10.26.254.11"; + devStation = carcon.conveyorNan[endLocate]; + } + if (text != "") + { + var modConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == ip); + //var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); + //var modConn = new PLCUtil(modPlc); + + var modDeviceConver = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); + var (plcResult, palletVal) = modConn.GetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.PlcPos); + if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) == 720) + { + var listResultcon = new List<Result>(); + + //浠诲姟鍙蜂笌鎵樼洏鏉$爜 + var modPosConverTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "浠诲姟鍙�"); + listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverTask.PosType, modDeviceConver.DbNumber, modPosConverTask.PlcPos, modTask.TaskId.ToString())); + var modPosConverPallet = PLCTaskAction.plcPositions.First(s => s.DeviceId == modDeviceConver.Id && s.Text == "鎵樼洏鏉$爜"); + listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverPallet.PosType, modDeviceConver.DbNumber, modPosConverPallet.PlcPos, modTask.PalletNo.ToString())); + + // 璧峰宸ヤ綅銆佺洰鐨勫伐浣� + var modPosConverStrLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "璧峰宸ヤ綅"); + listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverStrLocat.PosType, modDeviceConver.DbNumber, modPosConverStrLocat.PlcPos, modDeviceConver.StationNum)); + var modPosConverEndLocat = PLCTaskAction.plcPositions.FirstOrDefault(s => s.DeviceId == modDeviceConver.Id && s.Text == "鐩殑宸ヤ綅"); + listResultcon.Add(modConn.SetPlcDBValueRepeat(modPosConverEndLocat.PosType, modDeviceConver.DbNumber, modPosConverEndLocat.PlcPos, modTask.EndLocate)); + + if (listResultcon.All(s => s.IsSucceed)) + { + var plcResult2 = modConn.SetPlcDBValue(modDeviceConver.PosType, modDeviceConver.DbNumber, modDeviceConver.WcsPos, "730"); + if (!plcResult.IsSucceed) + { + //modConn.Close(); + return; + } + //娣诲姞浠诲姟鏄庣粏 + var taskMonitor2 = new WcsTaskMonitor() + { + TaskNo = carTaskNext.TaskNo, + PlcName = modDevice.Text, + Status = TaskStatusEnum.Complete, + InteractiveMsg = $"鍐欏叆鎸囦护730锛氬伐浣嶆槸{modDeviceConver.StationNum}" + }; + _db.Insertable(taskMonitor2).ExecuteCommand(); + } + } + else if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 730) + { + return; + } + + } + + + #endregion + } + var modStart = modDevice.listStation.FirstOrDefault(s => s.Text == "鍚姩鍛戒护"); var result = plcConn.SetDBValue(modStart.PosType, modStart.PlcPos, "1"); if (result.IsSucceed) @@ -346,11 +698,22 @@ 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 = carTaskNext.TaskNo, PlcName = modDevice.Text, + Status = TaskStatusEnum.Complete, InteractiveMsg = $"鍚戠┛姊溅涓嬪彂浠诲姟{carTaskNext.TaskNo}" }; _db.Insertable(taskMonitor).ExecuteCommand(); @@ -425,14 +788,38 @@ var ledText = ""; switch (modDevice.Value.ToString()) { + case "120": //绌洪棽锛孉GV鍙斁璐� + { + var task = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.Status == TaskStatusEnum.Doing && m.IsComple == "1"); + if (task != null) + { + //娌℃湁鍑哄簱涓氬姟 + var res = new HttpService().GenAgvContinueTask(task.TaskNo).Result; + if (res.code == "0") + { + var modTaskMonitor = new WcsTaskMonitor() + { + TaskNo = task.TaskNo, + PlcId = modDevice.modPlc.Id, + PlcName = modDevice.modPlc.IP, + InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂缁х画鎵ц浠诲姟" + }; + _db.Insertable(modTaskMonitor).ExecuteCommand(); + + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTask(task.Adapt<WcsTaskOutput>()); + HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } + } + } + break; case "320": { // 鐢宠瀵嗛泦搴撶粍 string strMsg = ""; - string taskModel = ""; // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { @@ -453,7 +840,7 @@ } // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠� - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); + var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); if (ret.IsSucceed) { plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); @@ -474,7 +861,7 @@ } // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠� - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); + var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); if (ret.IsSucceed) { plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); @@ -485,7 +872,7 @@ var http = new HttpService(); string TaskNo = "", EndLocate = ""; - strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, "1", ref EndLocate, ref TaskNo); + strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, ref EndLocate, ref TaskNo); if (!strMsg.Contains("-1")) { // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� @@ -549,7 +936,7 @@ } // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠� - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); + var ret = plcConn.SetPlcDBValueRepeat(modDevice.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, modDevice.StationNum); if (ret.IsSucceed) { plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "350"); @@ -560,7 +947,7 @@ case "330": { // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { @@ -586,7 +973,7 @@ } // 鑾峰彇鍥涢」杞﹀彇璐у伐浣� - string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum); + string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, modDevice.StationNum.PadLeft(3,'0')); @@ -594,17 +981,17 @@ var listResult = new List<Result>(); // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskId.ToString())); + listResult.Add(plcConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鏉$爜"); + listResult.Add(plcConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue)); if (listResult.All(s => s.IsSucceed)) @@ -649,25 +1036,25 @@ { // 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630 var strMsg = ""; - var taskModel = ""; - //// 鏍规嵁宸ヤ綅鍙疯幏鍙栧贩閬撳彿 - //var roadway = PLCCommon.GetRoadwayByStation(modDevice.StationNum); - //if (roadway == "") - //{ - // break; - //} + // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭� + var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (resTask, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); + if (!resTask.IsSucceed) + { + break; + } // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� - var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); + var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { break; } - var http = new HttpService(); + string TaskNo = ""; // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅 - strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, "roadway", ref TaskNo); + strMsg = new HttpService().RequestLocate(palletVal, taskVal,ref TaskNo); if (!strMsg.Contains("-1")) { @@ -874,22 +1261,57 @@ { 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 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); + + int taskNoVal = Convert.ToInt32(taskVal); + var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskId == taskNoVal && w.TaskType == TaskTypeEnum.Out); + if (taskInfo == null) + { + Log.Error(string.Format("杈撻�佺嚎430:鏈壘鍒板搴旂殑浠诲姟銆�")); + break; + } + //// 鏀瑰彉浠诲姟鐘舵�� + //taskInfo.Status = TaskStatusEnum.Complete; + //taskInfo.FinishDate = DateTime.Now; + ////modTask.Levels = 999; + //_db.Updateable(taskInfo).ExecuteCommand(); + //HubUtil.PublicTask(taskInfo.Adapt<WcsTaskOutput>()); // 鎻掑叆浠诲姟鏄庣粏 var modInsertTaskMonitor = new WcsTaskMonitor() { - TaskNo = taskVal, + TaskNo = taskInfo.TaskNo, PlcId = modDevice.Id, PlcName = modDevice.Text, InteractiveMsg = $"鍐欏叆鎸囦护430锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅", PalletNo = palletVal, Status = TaskStatusEnum.Complete, - StartLocat = starVal, + StartLocat = Convert.ToString(starVal), EndLocat = modDevice.StationNum, }; + //if (taskInfo.Origin == "WMS") + //{ + // // 鍙嶉WMS + // var requestMode = new TaskRequestWMS() + // { + // TaskNo = taskInfo.TaskNo, + // PalletNo = taskInfo.PalletNo, + // TaskType = ((int)taskInfo.TaskType).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(); @@ -897,8 +1319,6 @@ // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� 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鏄剧ず鍐呭 @@ -924,78 +1344,45 @@ case "440": { #region 鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅 + + 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); + // 鍐欏叆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); + int tasknoVal = Convert.ToInt32(taskVal); + var modTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.TaskId == tasknoVal); 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}鍑哄簱瀹屾垚", + 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 } @@ -1013,56 +1400,102 @@ private static void AGV(WcsDeviceDto modDevice) { - //杩欓噷鎵惧嚭鏉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) + //杩欓噷鎵惧嚭鏉GV寰呮墽琛岀殑浠诲姟銆佹寜鐓т紭鍏堢骇銆佸垱寤烘椂闂翠笅鍙戜竴涓换鍔$粰AGV + var modTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.AGV).OrderBy(s => new { s.Levels ,s.CreateTime}).First(); + if (modTask == null) { return; } - foreach (var modTask in listTask) + + if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV )) { - if (_db.Queryable<WcsTask>().Any(s => s.EndLocate == modTask.EndLocate && s.IsDelete == false && s.Status == TaskStatusEnum.Doing && s.Type == PLCTypeEnum.AGV )) - { - continue; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔� - } - - //涓嬪彂AGV浠诲姟 - AgvTaskInput input = new AgvTaskInput() - { - ReqCode = modTask.Id.ToString(), - TaskCode = modTask.TaskNo, - CtnrCode = modTask.PalletNo, - PositionCodePath = new List<PositionCodePathItem>() - { - new PositionCodePathItem(){ PositionCode = modTask.StartLocate }, - new PositionCodePathItem(){ PositionCode = modTask.EndLocate } - } - }; - input.TaskTyp = "1" + modTask.StartLocate.Substring(0, 1) + modTask.EndLocate.Substring(0, 1); - var response = new HttpService().GenAgvSchedulingTask(input).Result; - if (response.code == "0") - { - AGVStatus = true; - modTask.Status = TaskStatusEnum.Doing; - _db.Updateable(modTask).ExecuteCommand(); - var modTaskMonitor = new WcsTaskMonitor() - { - TaskNo = modTask.TaskNo, - PlcId = modDevice.modPlc.Id, - PlcName = modDevice.modPlc.IP, - InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟" - }; - _db.Insertable(modTaskMonitor).ExecuteCommand(); + return; // 鏈夌洰鐨勪綅缃竴鑷翠笖姝e湪鎵ц鐨勪换鍔� + } - //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); - HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - Console.WriteLine(response.ToJson()); + //涓嬪彂AGV浠诲姟 + var taskTypeModel = AGVStorageUtil.GetTaskModle(modTask.StartLocate, modTask.EndLocate,out string type1,out string type2, out string jiebo); + if (string.IsNullOrWhiteSpace(taskTypeModel)) + { + Console.WriteLine("鑾峰彇AGV浠诲姟妯℃澘澶辫触锛氳鏍稿疄浠诲姟璧峰鐩爣鍌ㄤ綅鏄惁姝g‘"); return; } + AgvTaskSend taskModel = new AgvTaskSend(); + taskModel.robotTaskCode = modTask.TaskNo; + taskModel.taskType = taskTypeModel; + if (jiebo == "") + { + + taskModel.targetRoute = new List<targetRoute>(); + + if (taskModel.taskType == "DPJRK") + { + //var code = "[{\"type\":\"SITE\",\"code\":\"B100101\"},{\"type\":\"PILE_COUNT\",\"code\":\"8\"}]"; + var code = new List<object>() + { + new {type = "SITE" , code = modTask.StartLocate}, + new { type = "PILE_COUNT", code = modTask.Qty } + }; + taskModel.targetRoute.Add(new targetRoute() { + seq = 0, + type = "MIX_CONDITION", + code = code.ToString() // "[{\"type":\"SITE", code = modTask.StartLocate },new { type = "PILE_COUNT", code = modTask.Qty }]" + + + }); + taskModel.targetRoute.Add(new targetRoute() { seq = 1, type = type2, code = modTask.EndLocate }); + } + else + { + taskModel.targetRoute.Add(new targetRoute() { seq = 0, type = type1, code = modTask.StartLocate }); + taskModel.targetRoute.Add(new targetRoute() { seq = 1, type = type2, code = modTask.EndLocate }); + } + + } + else + { + taskModel.targetRoute = new List<targetRoute>() + { + new targetRoute(){seq = 0,type = type1,code = modTask.StartLocate}, + new targetRoute(){seq = 1,type = "ZONE",code = jiebo}, + new targetRoute(){seq = 2,type = type2,code = modTask.EndLocate} + }; + } + + taskModel.extra = new extra(); + + if (taskModel.taskType != "DPJRK") + { + taskModel.extra.carrierInfo = new List<carrierInfo>() + { + new carrierInfo(){ carrierType = "TP",carrierCode = modTask.PalletNo} + }; + } + + + + var response = new HttpService().GenAgvSendTask(taskModel).Result; + if (response.code == "SUCCESS") + { + modTask.Status = TaskStatusEnum.Doing; + _db.Updateable(modTask).ExecuteCommand(); + var modTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + PlcId = modDevice.modPlc.Id, + PlcName = modDevice.modPlc.IP, + InteractiveMsg = "鍚慉GV灏忚溅涓嬪彂浠诲姟" + }; + _db.Insertable(modTaskMonitor).ExecuteCommand(); + + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } + //Console.WriteLine(response.ToJson()); Thread.Sleep(3000); + return; + } /// <summary> @@ -1107,6 +1540,11 @@ private static void Test(WcsDeviceDto modDevice) { + + var ledText = $"鐢宠鍏ュ簱澶辫触\n\n"; + ledText += $"鎵樼洏鍙�:T2300001\n"; + ledText += $"鍏ュ簱浠诲姟宸查攣瀹氾紝璇疯В閿佸悗閲嶈瘯!\n"; + LedDisplay("10.26.254.31", ledText); //鍗峰笜闂�2鐢宠鎵撳紑 //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1152", "10"); //鍗峰笜闂�2鐢宠鍏抽棴 @@ -1118,7 +1556,7 @@ //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1154", "30"); //C鍙GV鏀炬墭鐩樺畬鎴愮敵璇峰叆搴� - var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100"); + //var result = modDevice.PLCUtil.SetPlcDBValue(PLCDataTypeEnum.Short, "DB1000", "1156", "100"); ////鍐欐娴嬭瘯璇籹tring //var (res, val) = modDevice.PLCUtil.GetPlcDBValue(PLCDataTypeEnum.String, "DB100", "64"); -- Gitblit v1.8.0