From 04611220d6ec06fb328c85210b5e3d3e305cfb3d Mon Sep 17 00:00:00 2001 From: liudl <673013083@qq.com> Date: 星期一, 29 九月 2025 17:28:49 +0800 Subject: [PATCH] 结批功能修改 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 169 ++++++++++++++++++++++++++++++++++++-------------------- 1 files changed, 108 insertions(+), 61 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index 1e2f8f8..2775a0f 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -29,6 +29,7 @@ private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); private static int fendao = 1; + public static void OnChangeEvent(object sender, EventArgs e) { @@ -218,11 +219,16 @@ //淇敼led灞忎俊鎭� var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == taskInfo.EndStation && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); - ledText += $"浠诲姟绫诲瀷:{modTask.TaskType.GetDescription()}\n\n"; - ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n"; + //ledText += $"浠诲姟绫诲瀷:{modTask.TaskType.GetDescription()}\n\n"; + //ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n"; + //ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n"; + //ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; + //ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}"; + ledText += $"鍚嶇О:{modTask.SkuName}\n"; + ledText += $"鎵瑰彿:{modTask.LotNo}\n"; + ledText += $"鍏ュ簱鏁伴噺:{modTask.Qty}\n"; ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n"; - ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; - ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}"; + LedDisplay(ledDevice.LedIP, ledText); } } @@ -453,13 +459,18 @@ // led鏄剧ず鍐呭 var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.StartLocate && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business); - ledText += $"鍏ュ簱瀹屾垚\n\n"; + //ledText += $"鍏ュ簱瀹屾垚\n\n"; - ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n"; + //ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n"; + //ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n"; + + //ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; + //ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}"; + + ledText += $"鍚嶇О:{modTask.SkuName}\n"; + ledText += $"鎵瑰彿:{modTask.LotNo}\n"; + ledText += $"鍏ュ簱鏁伴噺:{modTask.Qty}\n"; ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n"; - - ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; - ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}"; LedDisplay(ledDevice.LedIP, ledText); // 姝ゅ娣诲姞涓嶇┖璺戜笟鍔� @@ -704,9 +715,9 @@ //listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey)); PlcTaskInfo taskInfo = new PlcTaskInfo(); - taskInfo = PLCCommon.GetEndPai(modTask.EndRoadway.Substring(1, 2), modTask.EndLocate.Substring(2, 2), - modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2), - modTask.EndLocate.Substring(6, 2)); + taskInfo = PLCCommon.GetEndPai(endLocat.Substring(1, 2), endLocat.Substring(2, 2), + endLocat.Substring(0, 2), endLocat.Substring(4, 2), + endLocat.Substring(6, 2)); // 缁橮LC鍐欏叆浠诲姟鏁版嵁 var listResult = new List<Result>(); @@ -727,7 +738,7 @@ if (listResult.All(s => s.IsSucceed)) { // 鍚戣泛鏈哄啓鍏ユ帶鍒舵祦绋嬪瓧 - var res = modDevice.PLCUtil.SetPlcDBValue(modDevice.PosType, modDevice.WcsPos, "862"); + var res = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "862");//鍐欏叆寮�濮嬫斁璐т俊鍙� var modcTaskMonitor = new WcsTaskMonitor() { TaskNo = modTask.TaskNo, @@ -924,6 +935,7 @@ private static void ConveyorLine(WcsDeviceDto modDevice) { var plcConn = modDevice.PLCUtil; + // 鑾峰彇妤煎眰鏁癱eshi var louCeng = PLCCommon.GetRoadwayByStationNew(modDevice.StationNum); if (louCeng == "") @@ -1069,13 +1081,18 @@ // led鏄剧ず鍐呭 try { - ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n"; + //ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n"; - ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; + //ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; + //ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + + //ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; + //ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; + ledText += $"鍚嶇О:{taskInfo.SkuName}\n"; + ledText += $"鎵瑰彿:{taskInfo.LotNo}\n"; + ledText += $"鍏ュ簱鏁伴噺:{taskInfo.Qty}\n"; ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; - ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; - ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; LedDisplay(modDevice.LedIP, ledText); } @@ -1251,11 +1268,15 @@ 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.TaskType.GetDescription()}\n\n"; + //ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; + //ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + //ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; + //ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; + ledText += $"鍚嶇О:{taskInfo.SkuName}\n\n"; + ledText += $"鎵瑰彿:{taskInfo.LotNo}\n"; + ledText += $"鍏ュ簱鏁伴噺:{taskInfo.Qty}\n"; ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; - ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; - ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; LedDisplay(modDevice.LedIP, ledText); } } @@ -1280,16 +1301,16 @@ 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; - } + //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(); + //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); + var modTask = _db.Queryable<WcsTask>().OrderByDescending(s=>s.CreateTime).First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskType == TaskTypeEnum.In );//&& s.TaskNo == taskNo if (modTask == null) { // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず @@ -1458,14 +1479,19 @@ // led鏄剧ず鍐呭 // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栧搴旂殑LEDIP鍦板潃 - var ledDevice = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId == modDevice.PlcId); + //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); + //ledText += $"鍑哄簱瀹屾垚\n\n"; + ////ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; + ////ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + ////ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; + ////ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; + //ledText += $"鍚嶇О:{taskInfo.SkuName}\n"; + //ledText += $"鎵瑰彿:{taskInfo.LotNo}\n"; + //ledText += $"鍑哄簱鏁伴噺:{taskInfo.Qty}\n"; + //ledText += $"鍒嗛厤鏁伴噺:{taskInfo.CompleteQty}\n"; + //ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + //LedDisplay(ledDevice.LedIP, ledText); } // 鍙嶉WMS鍑哄簱瀹屾垚 //TaskReques taskReques = new TaskReques(); @@ -1545,11 +1571,17 @@ // 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 += $"鍑哄簱瀹屾垚\n"; + //ledText += $"浠诲姟鍙�:{modTask.TaskNo}\n"; + //ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n"; + //ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; + //ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}"; + ledText += $"鍚嶇О:{modTask.SkuName}\n"; + ledText += $"鎵瑰彿:{modTask.LotNo}\n"; + ledText += $"鍑哄簱鏁伴噺:{modTask.Qty}\n"; + ledText += $"鍒嗛厤鏁伴噺:{modTask.CompleteQty}\n"; ledText += $"鎵樼洏鍙�:{modTask.PalletNo}\n\n"; - ledText += $"璧峰浣�:{modTask.StartRoadway + " " + modTask.StartLocate}\n"; - ledText += $"鐩爣浣�:{modTask.EndRoadway + " " + modTask.EndLocate}"; + LedDisplay(ledDevice.LedIP, ledText); } #endregion @@ -2489,6 +2521,7 @@ { lock (OLock) { + Thread.Sleep(2000); // 鏍规嵁宸ヤ綅鍙凤紝鑾峰彇鎵樼洏鍙� var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); // 鏍规嵁宸ヤ綅鍙疯幏鍙� 鎵樼洏绾胯宸ヤ綅鍙风殑閰嶇疆淇℃伅 @@ -2587,6 +2620,10 @@ } else { + if (string.IsNullOrEmpty(palletNo)) + { + break; + } // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹� var boxInfoList = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToList(); if (boxInfoList.Count <= 0) @@ -2597,29 +2634,30 @@ var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); if (retVal.IsSucceed) { + //鏇存柊浠诲姟琛ㄦ暟閲忎俊鎭� + checkTaskMedel.Qty = 0; + _db.Updateable(checkTaskMedel).ExecuteCommand(); // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); } break; } + #region //鍒ゆ柇鎵樼洏涓婄殑绠辩爜鏄惁宸茬粍鐩� - foreach (var item in boxInfoList) - { - var groupBoxno = _db.Queryable<WcsBoxInfoLog>().Where(w => w.BoxNo == item.BoxNo).ToList(); - if (groupBoxno.Count>0) - { - Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0}锛岀鐮佷俊鎭笉瀛樺湪", modDevice.StationNum)); - // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 - var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); - if (retVal.IsSucceed) - { - // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� - retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - } - break; - } - } - + //var groupBoxno = _db.Queryable<WcsBoxInfoLog>().Where(w => w.BoxNo == item.BoxNo).ToList(); + //if (groupBoxno.Count>0) + //{ + // Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0}锛岀鐮佷俊鎭笉瀛樺湪", modDevice.StationNum)); + // // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 + // var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); + // if (retVal.IsSucceed) + // { + // // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + // retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + // } + // break; + //} + #endregion // 缁勬墭鎴愬姛鍚庡皢淇℃伅瀛樺埌log琛� string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; int insertCount = _db.Ado.ExecuteCommand(sqlStr); @@ -2628,10 +2666,6 @@ string sqlStr2 = $"delete from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; _db.Ado.ExecuteCommand(sqlStr2); } - //缁勭洏鎴愬姛鍚庢竻绌哄垎鎷h〃褰撳墠鎵樼洏涓婄墿鏂欐暟閲� - checkTaskMedel.Qty = 0; - _db.Updateable(checkTaskMedel).ExecuteCommand(); - // 鍚慦MS鐢宠宸烽亾 var http = new HttpService(); string TaskNo = "", EndLocate = ""; @@ -2640,10 +2674,23 @@ if (strMsg.Contains("-1")) { Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); + // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 + var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); + if (retVal.IsSucceed) + { + //鏇存柊浠诲姟琛ㄦ暟閲忎俊鎭� + checkTaskMedel.Qty = 0; + _db.Updateable(checkTaskMedel).ExecuteCommand(); + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + } break; } else { + //缁勭洏鎴愬姛鍚庢竻绌哄垎鎷h〃褰撳墠鎵樼洏涓婄墿鏂欐暟閲� + checkTaskMedel.Qty = 0; + _db.Updateable(checkTaskMedel).ExecuteCommand(); //鍒ゆ柇鏄惁缁撴壒涓� var (res, jiepi) = plcConn.GetPlcDBValue(checkTaskMedel.PosType, modDevice.DbNumber, checkTaskMedel.PosLot); if (jiepi == 2)//缁撴壒涓� -- Gitblit v1.8.0