From 423911c9dd6e202667a05c63c75b0e296a580519 Mon Sep 17 00:00:00 2001 From: wxw <Administrator@DESKTOP-5BIMHQ3> Date: 星期三, 18 六月 2025 13:21:08 +0800 Subject: [PATCH] 修改问题 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 1960 ++++++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 1,479 insertions(+), 481 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index c946757..7cee1bc 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -20,8 +20,16 @@ namespace WCS.Application; public static class PLCService { + private static readonly object OLock = new object(); + private static readonly object RuKuLock = new object(); + private static readonly object OutLock = new object(); private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); + private static decimal weight94 = 0; + private static decimal weight160 = 0; + private static decimal weight155 = 0; + private static decimal weight152 = 0; + private static decimal weight153 = 0; public static void OnChangeEvent(object sender, EventArgs e) { @@ -54,7 +62,7 @@ { Log.Error(ex.Message, ex); } - } + } /// <summary> /// 璺烘満涓氬姟澶勭悊 /// </summary> @@ -69,7 +77,7 @@ // 璺烘満绌洪棽锛岃幏鍙栧嚭搴撲换鍔°�佺Щ搴撲换鍔� { // 鑾峰彇浠诲姟淇℃伅 - var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime) + var modTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc) .First(s => s.Status == TaskStatusEnum.Wait && (s.TaskType == TaskTypeEnum.Out || s.TaskType == TaskTypeEnum.Move) && s.StartRoadway == modDevice.StationNum); if (modTask == null) @@ -85,6 +93,7 @@ PlcTaskInfo taskInfo = new PlcTaskInfo(); if (modTask.TaskType == TaskTypeEnum.Move) { + // 绉诲簱鐩爣鍦板潃 taskInfo = PLCCommon.GetEndPai(modTask.EndLocate.Substring(1, 2), modTask.EndLocate.Substring(2, 2), modTask.EndLocate.Substring(0, 2), modTask.EndLocate.Substring(4, 2), modTask.EndLocate.Substring(6, 2)); @@ -92,13 +101,92 @@ } else { - // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞� + // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栧嚭搴撳彛瀵瑰簲鐨勬斁璐у伐浣嶅搴旂殑鎺掑垪灞� taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(), modTask.StartRoadway, modTask.EndRoadway); // 鐩爣宸ヤ綅涓嶄负null锛岄渶鍏堝垽鏂斁璐у伐浣嶆槸鍚︾┖闂� if (!string.IsNullOrEmpty(taskInfo.EndStation)) { + #region 璺ㄨ泛鏈轰换鍔″鐞� ########### + // 鍒ゆ柇鐩爣浣嶇疆鏄惁鏄法璺烘満鍑哄簱宸ヤ綅 + if (modTask.EndLocate == "266")// && modTask.StartRoadway != "R05" + { + // 鍒ゆ柇鍏ュ簱宸ヤ綅鏄惁瀛樺湪鏈畬鎴愮殑鍏ュ簱浠诲姟 + var modInTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc) + .First(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.TaskType == TaskTypeEnum.In + && s.StartLocate == modTask.EndLocate); + if (modInTask != null) + { + // 鐩爣鍑哄簱鍙f湁瀵瑰簲鐨勫叆搴撲换鍔¤烦鍑哄惊鐜紝绛夊緟鍏ュ簱浠诲姟瀹屾垚銆� + break; + } + + // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栬緭閫佺嚎閾炬帴 + var plcCconn = PLCCommon.GetPlcIp(modTask.EndLocate); + // 璇诲彇鐩爣宸ヤ綅褰撳墠鐘舵�� + var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.EndLocate && m.DeviceType == DeviceTypeEnum.Business); + var (result, value) = plcCconn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos); + if (result.IsSucceed) + { + if (value.ToString() != "120") + { + // 鐩爣宸ヤ綅琚崰鐢ㄨ烦鍑哄惊鐜紝绛夊緟宸ヤ綅閲婃斁銆� + break; + } + } + if (modTask.StartRoadway != "R05") + { + string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1"); // 鑾峰彇1妤间腑涓撳伐浣嶅彿 + taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP; + taskInfo.EndPai = "2"; + taskInfo.EndLie = "60"; + taskInfo.EndCeng = "1"; + taskInfo.EndStation = aaa; + } + + } + + if (modTask.EndLocate == "265") // && modTask.StartRoadway != "R05" && modTask.StartRoadway != "R06" + { + // 鍒ゆ柇鍏ュ簱宸ヤ綅鏄惁瀛樺湪鏈畬鎴愮殑鍏ュ簱浠诲姟 + var modInTask = _db.Queryable<WcsTask>().OrderBy(m => m.Levels, OrderByType.Asc).OrderBy(m => m.CreateTime, OrderByType.Asc) + .First(s => (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.TaskType == TaskTypeEnum.In + && s.StartLocate == modTask.EndLocate); + if (modInTask != null) + { + // 鐩爣鍑哄簱鍙f湁瀵瑰簲鐨勫叆搴撲换鍔¤烦鍑哄惊鐜紝绛夊緟鍏ュ簱浠诲姟瀹屾垚銆� + break; + } + + // 鏍规嵁鐩爣宸ヤ綅鍙疯幏鍙栬緭閫佺嚎閾炬帴 + var plcCconn = PLCCommon.GetPlcIp(modTask.EndLocate); + // 璇诲彇鐩爣宸ヤ綅褰撳墠鐘舵�� + var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.EndLocate && m.DeviceType == DeviceTypeEnum.Business); + var (result, value) = plcCconn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos); + if (result.IsSucceed) + { + if (value.ToString() != "120") + { + // 鐩爣宸ヤ綅琚崰鐢ㄨ烦鍑哄惊鐜紝绛夊緟宸ヤ綅閲婃斁銆� + break; + } + } + if (modTask.StartRoadway != "R05" && modTask.StartRoadway != "R06") + { + string aaa = PLCCommon.RoadwayToOutStationNum(modTask.StartRoadway, "1"); // 鑾峰彇1妤间腑涓撳伐浣嶅彿 + taskInfo.Ip = PLCCommon.GetPlcIp(aaa).PlcIP; + taskInfo.EndPai = "2"; + taskInfo.EndLie = "60"; + taskInfo.EndCeng = "1"; + taskInfo.EndStation = aaa; + } + } + + // 鍐欏叆鏀捐揣宸ヤ綅鍥哄畾鍦板潃 + + #endregion + // 鎵撳紑瀵瑰簲鐨勮緭閫佺嚎杩炴帴 var plcConveyorConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == taskInfo.Ip); if (plcConveyorConn.Connected) @@ -110,15 +198,19 @@ var (result, value) = plcConveyorConn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos); if (result.IsSucceed) { - if (value.ToString() != "720") // 720:鏀捐揣绌轰綅绌洪棽锛屽彲鏀捐揣 + if (value.ToString() != "720") // 720:鏀捐揣绌轰綅绌洪棽锛屽彲鏀捐揣 liudl 绋嬪簭璋冭瘯瀹屾垚鍚庢斁寮� { Log.Error(string.Format("浠诲姟鍙�:{0}:鏀捐揣宸ヤ綅鍗犵敤锛岀◢鍚庢墽琛屻��", modTask.TaskNo)); break; } - else if (value.ToString() == "720") + else if (value.ToString() == "720") { // 鑻ョ┖闂叉彁鍓嶅崰鐢ㄦ宸ヤ綅锛屽悓宸ヤ綅鍑哄叆鍏敤鍙� 鏀惧紑姝ょ▼搴� - // var ret = plcConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "730"); + var ret = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "730"); + if (!ret.IsSucceed) + { + break; + } } } else @@ -133,7 +225,7 @@ } } - // 鑾峰彇杞崲鍚庣殑璧峰鎺掑垪灞� 06010101 + // 鑾峰彇杞崲鍚庣殑璧峰鎺掑垪灞� 06010101 // 绉诲簱鏃惰捣濮嬫帓鍒楀眰 PlcTaskInfo startTaskInfo = PLCCommon.GetEndPai(modTask.StartRoadway.Substring(1, 2), modTask.StartLocate.Substring(2, 2), modTask.StartLocate.Substring(0, 2), modTask.StartLocate.Substring(4, 2), modTask.StartLocate.Substring(6, 2)); @@ -142,23 +234,30 @@ var listResult = new List<Result>(); // 浠诲姟鍙锋墭鐩樺彿 var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); - listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); // 璧峰鎺掑垪灞� var modPosRow = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); - listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai)); var modPosColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); - listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie)); var modPosStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); - listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng)); + + if (modTask.TaskType == TaskTypeEnum.Out) + { + var modEndNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + listResult.Add(plcConn.SetPlcDBValueRepeat(modEndNo.PosType, modDevice.DbNumber, modEndNo.PlcPos, taskInfo.EndStation)); + } + // 鐩爣鏀捐揣宸ヤ綅(鍥哄畾鎺掑垪灞�) var modPosEndRow = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); - listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai)); var modPosEndColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); - listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie)); var modPosEndStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); - listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng)); // 鏄惁鍐欏叆鎴愬姛 if (listResult.All(s => s.IsSucceed)) @@ -225,10 +324,7 @@ { // 鑾峰彇璺烘満鐐逛綅閰嶇疆 var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); - var (res, val) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTask.PlcPos); - - var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅"); - var (endStationRes, endStation) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosEndStation.PlcPos); + var (res, val) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); if (res.IsSucceed) { // 鑾峰彇浠诲姟淇℃伅 @@ -236,7 +332,7 @@ var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false); if (modTask == null) { - Log.Error(string.Format("PLC鎺у埗瀛�840:鏈壘鍒板搴旂殑浠诲姟銆�")); + Log.Error(string.Format($"PLC鎺у埗瀛�840:鏈壘鍒板搴旂殑浠诲姟銆備换鍔″彿锛歿tasknoVal}")); break; } // 璁板綍浠诲姟鏄庣粏 @@ -250,19 +346,24 @@ StartLocat = modTask.StartLocate, }; + + var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅"); + var (endRes, endStation) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos); + + var modPosStartStation = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); + var (startStationRes, startStationVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Short, modDevice.DbNumber, modPosStartStation.PlcPos); + if (modTask.TaskType == TaskTypeEnum.In) { // 鑾峰彇璺烘満璧峰宸ヤ綅鐐逛綅閰嶇疆,璇诲彇璧峰宸ヤ綅 - var modPosStartStation = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); - var (startStationRes, startStationVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Short, modDevice.DbNumber, modPosStartStation.PlcPos); if (startStationRes.IsSucceed) { // 鏍规嵁宸ヤ綅鍙疯幏鍙栧搴旂殑杈撻�佺嚎IP - PLCUtil plcConveyorConn = PLCCommon.GetPlcIp(startStationVal.ToString()); + PLCUtil plcConveyorConn = PLCCommon.GetPlcIp(startStationVal.ToString().PadLeft(3, '0')); if (plcConveyorConn.Connected) { // 鍚戝彇璐у伐浣嶅啓鍏ユ祦绋嬪瓧640 鍙栬揣宸插畬鎴� - var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == startStationVal.ToString() + var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == startStationVal.ToString().PadLeft(3, '0') && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false); var modcTaskMonitor = new WcsTaskMonitor() @@ -280,75 +381,159 @@ var (ress, va1s) = plcConveyorConn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos); if (va1s.ToString() == "630") { - modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚:640", startStationVal); - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modcTaskMonitor).ExecuteCommand(); - } + var retc = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "640"); + if (retc.IsSucceed) + { + modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚:640", startStationVal); + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modcTaskMonitor).ExecuteCommand(); + } + else + { + modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚640澶辫触", startStationVal); + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + break; + } - var retc = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "640"); - - if (!retc.IsSucceed) - { - modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚640澶辫触", startStationVal); - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // 璇诲彇wcs鎺у埗瀛� + var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); + if (va1ss.ToString() == "830") + { + modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850", startStationVal); + modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + } + + // 鍐欏叆娴佺▼鎺у埗瀛� + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850"); + if (!ret.IsSucceed) + { + modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", startStationVal); + modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + break; // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆 + } + + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + } + } + } + } + else if (modTask.TaskType == TaskTypeEnum.Out) + { + #region 璺烘満杞繍浠诲姟澶勭悊 + if (modTask.StartRoadway != modDevice.StationNum) + {// 杞繍浠诲姟 + // 鍐欏叆璧峰宸ヤ綅640 + string stationFrom = startStationVal.ToString(); + var plcItemconn = PLCCommon.GetPlcIp(stationFrom); + if (plcItemconn.Connected) + { + // 鍐欏叆璧峰宸ヤ綅640 + var modFrom = PLCTaskAction.plcDevices.First(m => m.IsDelete == false && m.StationNum == stationFrom); + var retFrom = plcItemconn.SetPlcDBValue(modFrom.PosType, modFrom.DbNumber, modFrom.WcsPos, "640"); + if (retFrom.IsSucceed) + { + Log.Error(stationFrom + "涓浆宸ヤ綅鍐欏叆640"); + } + else + { break; + } + + // 璇诲彇wcs鎺у埗瀛� + var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); + if (va1ss.ToString() == "830") + { + // 璁板綍浠诲姟鏄庣粏 + modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850", modTask.StartLocate); + modInsertTaskMonitor.EndLocat = endStation.ToString(); // 鏀捐揣宸ヤ綅 + } + // 鍐欏叆娴佺▼鎺у埗瀛� + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850"); + if (!ret.IsSucceed) + { + modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", modTask.StartLocate); + modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + break; // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆 } //涓嬪彂浠诲姟鏃ュ織 HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } + } + else + { + //if (modTask.EndLocate == "266" && modTask.StartRoadway == "R06") + //{ + // // R06宸烽亾鍗曠嫭杞繍浠诲姟銆� + // // 鍐欏叆璧峰宸ヤ綅640 + // string stationFrom = startStationVal.ToString(); + // var plcItemconn = PLCCommon.GetPlcIp(stationFrom); + // var modFrom = PLCTaskAction.plcDevices.First(m => m.IsDelete == false && m.StationNum == stationFrom); + // var retFrom = plcItemconn.SetPlcDBValue(modFrom.PosType, modFrom.DbNumber, modFrom.WcsPos, "640"); + // if (retFrom.IsSucceed) + // { + // Log.Error(stationFrom + "涓浆宸ヤ綅鍐欏叆640"); + // } + // else + // { + // break; + // } - // 璇诲彇wcs鎺у埗瀛� - var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); - if (va1ss.ToString() == "830") - { - modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850", startStationVal); - modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); - } + // // 璇诲彇wcs鎺у埗瀛� + // var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); + // if (va1ss.ToString() == "830") + // { + // // 璁板綍浠诲姟鏄庣粏 + // modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850", modTask.StartLocate); + // modInsertTaskMonitor.EndLocat = endStation.ToString(); // 鏀捐揣宸ヤ綅 + // } + // // 鍐欏叆娴佺▼鎺у埗瀛� + // var ret11 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850"); + // if (!ret11.IsSucceed) + // { + // modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", modTask.StartLocate); + // modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 + // // 鎻掑叆浜や簰鏃ュ織 + // _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + // break; // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆 + // } + + // //涓嬪彂浠诲姟鏃ュ織 + // HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + // break; + //} + // 鍐欏叆娴佺▼鎺у埗瀛� var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850"); if (!ret.IsSucceed) { - modInsertTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", startStationVal); - modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); break; // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆 } + modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚", modTask.StartLocate); + modInsertTaskMonitor.EndLocat = endStation; // 鐩爣鍌ㄤ綅 + + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } - } - else if (modTask.TaskType == TaskTypeEnum.Out) - { - // 璇诲彇wcs鎺у埗瀛� - var (resss, va1ss) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); - if (va1ss.ToString() == "830") - { - // 璁板綍浠诲姟鏄庣粏 - modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850", modTask.StartLocate); - modInsertTaskMonitor.EndLocat = endStation; // 鏀捐揣宸ヤ綅 - } - // 鍐欏叆娴佺▼鎺у埗瀛� - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "850"); - if (!ret.IsSucceed) - { - modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚鍐欏叆850澶辫触,绛夊緟鍐嶆鍐欏叆銆�", modTask.StartLocate); - modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); - break; // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆 - } - - //涓嬪彂浠诲姟鏃ュ織 - HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + #endregion } else { @@ -360,7 +545,7 @@ } modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚", modTask.StartLocate); - modInsertTaskMonitor.EndLocat = endStation; // 鐩爣鍌ㄤ綅 + modInsertTaskMonitor.EndLocat = endStation.ToString(); // 鐩爣鍌ㄤ綅 // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); @@ -371,11 +556,11 @@ } } break; - case "860": + case "860": //璺烘満鏀捐揣瀹屾垚 { // 鑾峰彇璺烘満鐐逛綅閰嶇疆 var modPos860Task = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); - var (res, val) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPos860Task.PlcPos); + var (res, val) = plcConn.GetPlcDBValue(modPos860Task.PosType, modDevice.DbNumber, modPos860Task.PlcPos); // 鏍规嵁浠诲姟鍙疯幏鍙栦换鍔′俊鎭� if (res.IsSucceed) { @@ -391,6 +576,86 @@ { case TaskTypeEnum.In: { + #region 璺ㄨ泛鏈鸿浆杩愪换鍔″鐞�##### + // 鍒ゆ柇鏄惁璺ㄨ泛鏈鸿浆杩愪换鍔� + var modPos860endAddre = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅"); + var (ress, endVal) = plcConn.GetPlcDBValue(modPos860endAddre.PosType, modDevice.DbNumber, modPos860endAddre.PlcPos); + string endValStr = endVal.ToString().PadLeft(3, '0'); + // 鏍规嵁宸烽亾銆佸眰鏁拌幏鍙栧叆搴撴斁璐у伐浣� + var inVal = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, "1"); + var inVal1 = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, "2", modTask.StartLocate.ToString()); + + // 鏍规嵁褰撳墠璺烘満鏀捐揣宸ヤ綅瀵规瘮鐩爣宸烽亾鍏ュ簱鍙栬揣宸ヤ綅鍋氬姣旂‘璁ゆ槸鍚﹁浆杩愪换鍔°�� + if (endValStr != inVal && endValStr != inVal1) + { + // 鏍规嵁宸ヤ綅鍙疯幏鍙栬緭閫佺嚎閾炬帴 + var plcCconn = PLCCommon.GetPlcIp(endValStr); + if (plcCconn.Connected) + { + // 鍐欏叆杞繍淇℃伅 + // 缁橮LC鍐欏叆浠诲姟鏁版嵁 + var listResult = new List<Result>(); + + // 鏍规嵁宸ヤ綅鍙疯幏鍙栧伐浣嶄俊鎭� + var wcsDevice = PLCTaskAction.plcDevices.First(s => s.PlcId == plcCconn.PlcId && s.Level == DeviceLevelEnum.Station && s.StationNum == endValStr); + // 璇诲彇褰撳墠宸ヤ綅鍚勫亸绉婚噺鍊� + var listPos = PLCTaskAction.plcPositions.Where(s => s.DeviceId == wcsDevice.Id).ToList(); + + //浠诲姟鍙� + var modPosTask = listPos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + //浠诲姟绫诲瀷 + var modPosTaskType = listPos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString())); + //鎵樼洏鍙� + var modPosPalletNo = listPos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + //璧峰宸ヤ綅 + var modPosLocatNo = listPos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); + listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, endValStr)); + // 鐩爣宸ヤ綅 + var modPosEndLocatNo = listPos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + listResult.Add(plcCconn.SetPlcDBValueRepeat(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, inVal)); + + // 鏄惁鍐欏叆鎴愬姛 + if (listResult.All(s => s.IsSucceed)) + { + var result = plcCconn.SetPlcDBValue(wcsDevice.PosType, wcsDevice.DbNumber, wcsDevice.WcsPos, "740"); + + if (result.IsSucceed) + { + // 鍐欏叆璺烘満wcs鎺у埗瀛� 杩斿洖鍨涙満鎵ц瀹屾垚 + result = modDevice.PLCUtil.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870"); + if (result.IsSucceed) + { + var modcTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + PlcId = wcsDevice.Id, + PlcName = wcsDevice.Text, + PalletNo = modTask.PalletNo, + Status = TaskStatusEnum.Complete, + StartLocat = "", + EndLocat = modTask.EndRoadway, + InteractiveMsg = $"鍐欏叆鎸囦护锛氭敹鍒拌泛鏈烘斁璐у畬鎴愶紱鏀捐揣{endValStr}宸ヤ綅===銆媨inVal}宸ヤ綅" + }; + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modcTaskMonitor).ExecuteCommand(); + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + break; + } + } + } + } + + } + + // 鍚戝伐浣嶅啓鍏ワ紝褰撳墠宸ヤ綅鍒扮洰鏍囧贩閬撳叆搴撳彇璐у伐浣嶆祦绋嬨�傚啓鍏ユ祦绋嬫帶鍒跺瓧"740" + + #endregion + var res870 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "870"); if (!res870.IsSucceed) { @@ -462,15 +727,51 @@ string roadway = modTask.StartRoadway; // 浠庡嚭搴撲换鍔¤幏鍙栨斁璐у伐浣� string outCode = modTask.EndLocate; + + #region 璺ㄨ泛鏈鸿浆杩愪换鍔� ########## + var modPosStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅"); + var (ress, stationNum) = plcConn.GetPlcDBValue(modPosStation.PosType, modDevice.DbNumber, modPosStation.PlcPos); + if (!ress.IsSucceed) + { + // 鑾峰彇褰撳墠鎵樼洏鎵�鍦ㄥ伐浣嶅け璐� + break; + } + // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞� + PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(), + modTask.StartRoadway, modTask.EndRoadway); + + + string stationNumstr = stationNum.ToString(); + if (!taskInfo.EndStation.Contains(stationNumstr) && stationNumstr != "0") + { // 鏄泛鏈轰腑涓撳伐浣� + //taskInfo.EndStation = stationNumstr; + + string roadwayto = "R05"; + // 鏍规嵁鍑哄簱鍙f斁璐у伐浣嶈幏鍙栧搴旂殑涓浆宸烽亾 + if (taskInfo.EndStation.Contains("277")) + { + roadwayto = "R05"; + } + else if (taskInfo.EndStation.Contains("250")) + { + roadwayto = "R06"; + } + + + // 鏍规嵁灞傛暟鍜屽贩閬撴暟纭畾涓笓宸ヤ綅 + outCode = PLCCommon.RoadwayToStationNum(roadwayto, "1"); + } + #endregion + + // 鏍规嵁宸ヤ綅鍙疯幏鍙栧搴旂殑杈撻�佺嚎IP - var plcConveyorConn = PLCCommon.GetPlcIp(outCode); + var plcConveyorConn = PLCCommon.GetPlcIp(stationNumstr); if (plcConveyorConn.Connected) { - // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞� - PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(), - modTask.StartRoadway, modTask.EndRoadway); + stationNumstr = stationNumstr.PadLeft(3, '0'); // 鏍规嵁宸ヤ綅鍙疯幏鍙栧伐浣嶄俊鎭� - var wcsDevice = PLCTaskAction.plcDevices.First(s => s.PlcId == plcConveyorConn.PlcId && s.Level == DeviceLevelEnum.Station && s.StationNum == taskInfo.EndStation); + var wcsDevice = PLCTaskAction.plcDevices.First(s => s.PlcId == plcConveyorConn.PlcId + && s.Level == DeviceLevelEnum.Station && s.StationNum == stationNumstr); // 璇诲彇褰撳墠宸ヤ綅鍚勫亸绉婚噺鍊� var listPos = PLCTaskAction.plcPositions.Where(s => s.DeviceId == wcsDevice.Id).ToList(); @@ -478,19 +779,19 @@ var listResult = new List<Result>(); //浠诲姟鍙� var modPosTask = listPos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConveyorConn.SetPlcDBValue(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); //浠诲姟绫诲瀷 var modPosTaskType = listPos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); - listResult.Add(plcConveyorConn.SetPlcDBValue(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString())); + listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString())); //鎵樼洏鍙� var modPosPalletNo = listPos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); - listResult.Add(plcConveyorConn.SetPlcDBValue(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); //璧峰宸ヤ綅 var modPosLocatNo = listPos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); - listResult.Add(plcConveyorConn.SetPlcDBValue(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, taskInfo.EndStation)); + listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, stationNumstr)); // 鐩爣宸ヤ綅 var modPosEndLocatNo = listPos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); - listResult.Add(plcConveyorConn.SetPlcDBValue(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, outCode)); + listResult.Add(plcConveyorConn.SetPlcDBValueRepeat(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, outCode)); // 鏄惁鍐欏叆鎴愬姛 if (listResult.All(s => s.IsSucceed)) @@ -512,7 +813,7 @@ Status = TaskStatusEnum.Complete, StartLocat = taskInfo.EndStation, EndLocat = outCode, - InteractiveMsg = $"鍐欏叆鎸囦护锛氭敹鍒拌泛鏈烘斁璐у畬鎴愶紱鏀捐揣{taskInfo.EndStation}宸ヤ綅===銆媨outCode}鍑哄簱鍙�" + InteractiveMsg = $"鍐欏叆鎸囦护锛氭敹鍒拌泛鏈烘斁璐у畬鎴愶紱鏀捐揣{taskInfo.EndStation}宸ヤ綅===銆媨outCode}宸ヤ綅" }; // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modcTaskMonitor).ExecuteCommand(); @@ -530,7 +831,7 @@ case TaskTypeEnum.Move: // 绉诲簱浠诲姟 { var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - var result = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo); + var result = plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo); if (!result.IsSucceed) { Log.Error($"{modDevice.Text}鍐欏叆浠诲姟鍙峰け璐�"); @@ -685,15 +986,15 @@ // 缁橮LC鍐欏叆浠诲姟鏁版嵁 var listResult = new List<Result>(); // 浠诲姟鍙锋墭鐩樺彿 - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); - listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); // 璧峰鎺掑垪灞� - listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, "2")); - listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, "100")); - listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, "1")); - listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, row)); - listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, column)); - listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, "2")); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, "100")); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, "1")); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, row)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, column)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, storey)); // 鏄惁鍐欏叆鎴愬姛 if (listResult.All(s => s.IsSucceed)) { @@ -730,6 +1031,7 @@ break; } } + /// <summary> /// 涓嶇┖璺� /// </summary> @@ -814,25 +1116,25 @@ var listResult = new List<Result>(); // 浠诲姟鍙锋墭鐩樺彿 var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); - listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); // 璧峰鎺掑垪灞� var modPosRow = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); - listResult.Add(plcConn.SetPlcDBValue(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosRow.PosType, modDevice.DbNumber, modPosRow.PlcPos, startTaskInfo.EndPai)); var modPosColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); - listResult.Add(plcConn.SetPlcDBValue(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosColumn.PosType, modDevice.DbNumber, modPosColumn.PlcPos, startTaskInfo.EndLie)); var modPosStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); - listResult.Add(plcConn.SetPlcDBValue(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosStorey.PosType, modDevice.DbNumber, modPosStorey.PlcPos, startTaskInfo.EndCeng)); // 鐩爣鏀捐揣宸ヤ綅(鍥哄畾鎺掑垪灞�) PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(), modTask.StartRoadway, modTask.EndRoadway); var modPosEndRow = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); - listResult.Add(plcConn.SetPlcDBValue(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndRow.PosType, modDevice.DbNumber, modPosEndRow.PlcPos, taskInfo.EndPai)); var modPosEndColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); - listResult.Add(plcConn.SetPlcDBValue(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndColumn.PosType, modDevice.DbNumber, modPosEndColumn.PlcPos, taskInfo.EndLie)); var modPosEndStorey = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); - listResult.Add(plcConn.SetPlcDBValue(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosEndStorey.PosType, modDevice.DbNumber, modPosEndStorey.PlcPos, taskInfo.EndCeng)); // 鏄惁鍐欏叆鎴愬姛 if (listResult.All(s => s.IsSucceed)) @@ -901,29 +1203,214 @@ { return; } + + #region#瀹炴椂鏄剧ず閲嶉噺鍒癓ED灞忓箷 + var modPosPalletWeightIng = modDevice.listStation.FirstOrDefault(m => m.Text == "瀹為檯閲嶉噺"); + if (modPosPalletWeightIng != null) + { + var (resPalletWeightIng, palletWeightValIng) = plcConn.GetPlcDBValue(modPosPalletWeightIng.PosType, modDevice.DbNumber, modPosPalletWeightIng.PlcPos); + switch (modDevice.StationNum) + { + case "094": + { + if (Convert.ToDecimal(palletWeightValIng) != weight94) + { + LedDisplay(modDevice.LedIP, $"褰撳墠閲嶉噺(KG)锛歿Convert.ToDecimal(palletWeightValIng)}"); + weight94 = Convert.ToDecimal(palletWeightValIng); + } + } + break; + case "160": + { + if (Convert.ToDecimal(palletWeightValIng) != weight160) + { + LedDisplay(modDevice.LedIP, $"褰撳墠閲嶉噺(KG)锛歿Convert.ToDecimal(palletWeightValIng)}"); + weight160 = Convert.ToDecimal(palletWeightValIng); + } + } + break; + case "155": + { + if (Convert.ToDecimal(palletWeightValIng) != weight155) + { + LedDisplay(modDevice.LedIP, $"褰撳墠閲嶉噺(KG)锛歿Convert.ToDecimal(palletWeightValIng)}"); + weight155 = Convert.ToDecimal(palletWeightValIng); + } + } + break; + case "152": + { + if (Convert.ToDecimal(palletWeightValIng) != weight152) + { + LedDisplay(modDevice.LedIP, $"褰撳墠閲嶉噺(KG)锛歿Convert.ToDecimal(palletWeightValIng)}"); + weight152 = Convert.ToDecimal(palletWeightValIng); + } + } + break; + case "153": + { + if (Convert.ToDecimal(palletWeightValIng) != weight153) + { + LedDisplay(modDevice.LedIP, $"褰撳墠閲嶉噺(KG)锛歿Convert.ToDecimal(palletWeightValIng)}"); + weight153 = Convert.ToDecimal(palletWeightValIng); + } + } + break; + } + } + + #endregion + + var ledText = ""; switch (modDevice.Value.ToString()) { + case "120": + { // 120:绌洪棽锛� wcs璋冨害灏忚溅鍐�130璇锋眰鏀�(鍗犱綇宸ヤ綅) + + } break; + case "140": + { // 140:鍙斁锛涘啓鍏ヤ换鍔″彿绛変氦浜掍俊鎭渶鍚庡啓鍏�150姝e湪鏀撅紱 wcs鎺ュ彈wms鍙戦�佺殑灏忚溅浠诲姟瀹屾垚淇″彿鍚庡彉鏇翠负锛�160锛� + var http = new HttpService(); + var modResponseTask = http.IssuedAgvTask(modDevice.StationNum).Result; + if (modResponseTask.StatusCode == 0) + { + plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "150"); + } + + } break; + + case "230": + { // 230锛氭墭鐩樿緭閫佸埌浣嶏紝璇锋眰灏忚溅锛� WCS鍚慦MS鐢宠灏忚溅杈撻�乄MS杩斿洖鎴愬姛锛涘啓鍏�240 锛� + + } break; + + case "310": + //鍏ュ簱鐢宠PLC鍑虹幇寮傚父锛堟墭鐩樿秴瀹姐�佽秴楂樼瓑锛� + { + plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "311"); + + string dbStr = ""; + switch (modDevice.StationNum) + { + case "094": + dbStr = "2381"; + break; + + case "160": + dbStr = "2385"; + break; + + case "155": + dbStr = "2383"; + break; + + case "152": + dbStr = "2401"; + break; + + case "153": + dbStr = "2403"; + break; + } + + string errorStr = string.Empty; + //灏嗗紓甯镐俊鎭樉绀哄埌LED灞忓箷涓� + var (errorRes0, errorVal0) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.0", ""); + if (errorRes0.IsSucceed && errorVal0 == true) + { + errorStr += " 鎵爜澶辫触"; + } + var (errorRes1, errorVal1) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.1", ""); + if (errorRes1.IsSucceed && errorVal1 == true) + { + errorStr += " 绉伴噸澶辫触"; + } + var (errorRes2, errorVal2) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.2", ""); + if (errorRes2.IsSucceed && errorVal2 == true) + { + errorStr += " 鍨涘瀷宸﹁秴瀹�"; + } + var (errorRes3, errorVal3) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.3", ""); + if (errorRes3.IsSucceed && errorVal3 == true) + { + errorStr += " 鍨涘瀷鍙宠秴瀹�"; + } + var (errorRes4, errorVal4) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.4", ""); + if (errorRes4.IsSucceed && errorVal4 == true) + { + errorStr += " 鍨涘瀷鍓嶈秴闀�"; + } + var (errorRes5, errorVal5) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.5", ""); + if (errorRes5.IsSucceed && errorVal5 == true) + { + errorStr += " 鍨涘瀷鍚庤秴闀�"; + } + var (errorRes6, errorVal6) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.6", ""); + if (errorRes6.IsSucceed && errorVal6 == true) + { + errorStr += " 鍨涘瀷鍚庤秴楂�"; + } + var (errorRes7, errorVal7) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{dbStr}.7", ""); + if (errorRes7.IsSucceed && errorVal7 == true) + { + errorStr += " 楂樹綆浣嶅紓甯告姤璀�"; + } + var (errorRes9, errorVal9) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Bit, $"M{Convert.ToUInt32(dbStr)-1}.1", ""); + if (errorRes9.IsSucceed && errorVal9 == true) + { + errorStr += " 鎵爜浠�氳鎶ヨ"; + } + + if (!string.IsNullOrEmpty(errorStr)) + { + errorStr = "寮傚父淇℃伅锛�" + errorStr; + + ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; + ledText += $"{errorStr}"; + LedDisplay(modDevice.LedIP, ledText); + } + } + break; case "320": { + //闃叉閲嶅鐢宠 + var (res0, Val0) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); + if (res0.IsSucceed && Val0 != 0) + { + break; + } // 鐢宠宸烽亾 string strMsg = ""; string taskModel = ""; // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); - var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { break; } + + string palletStr = Convert.ToString(palletVal); var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); - + + //鑾峰彇鎵樼洏楂樺害 + var modPosPalletHeight = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏楂樺害"); + var (resPalletHeight, palletHeightVal) = plcConn.GetPlcDBValue(modPosPalletHeight.PosType, modDevice.DbNumber, modPosPalletHeight.PlcPos); + if (!resPalletHeight.IsSucceed) + { + break; + } + + //鑾峰彇鎵樼洏瀹為檯閲嶉噺 + var modPosPalletWeight = modDevice.listStation.FirstOrDefault(m => m.Text == "瀹為檯閲嶉噺"); + var (resPalletWeight, palletWeightVal) = plcConn.GetPlcDBValue(modPosPalletWeight.PosType, modDevice.DbNumber, modPosPalletWeight.PlcPos); //鍒ゆ柇鍏ュ簱閿佸畾鏄惁鎵撳紑 if (PLCTaskAction.boEnterLock) { - var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + var (res350, palletVal350) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); if (res350.IsSucceed && palletVal350 != "350") { ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; @@ -933,7 +1420,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"); @@ -944,7 +1431,7 @@ if (palletVal == null) { - var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + var (res350, palletVal350) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); if (res350.IsSucceed && palletVal350 != "350") { ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; @@ -954,7 +1441,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"); @@ -965,7 +1452,28 @@ var http = new HttpService(); string TaskNo = "", EndLocate = ""; - strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo); + + //鏍规嵁宸ヤ綅鍒ゆ柇鏄惁涓哄彔鎵樻満宸ヤ綅鐢宠绌烘墭鐩樿泛鍏ュ簱锛屾槸锛氬悜WMS鐢宠绌烘墭鐩樿泛缁勬墭 + string groupMsg = ""; + if (modDevice.StationNum == "72") + { + groupMsg = http.BindNullPalletWcs(10, palletVal); + + if (groupMsg.Contains("-1")) + { + // 鍐欏叆杈撻�佺嚎閫�鍥炴寚浠� + 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; + } + } + + //鍚慦MS鐢宠宸烽亾 + strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo, (int)palletHeightVal); if (!strMsg.Contains("-1")) { @@ -1002,10 +1510,11 @@ ledText += $"浠诲姟绫诲瀷:{taskInfo.TaskType.GetDescription()}\n\n"; ledText += $"浠诲姟鍙�:{taskInfo.TaskNo}\n"; - ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n\n"; + ledText += $"鎵樼洏鍙�:{taskInfo.PalletNo}\n"; ledText += $"璧峰浣�:{taskInfo.StartRoadway + " " + taskInfo.StartLocate}\n"; - ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}"; + ledText += $"鐩爣浣�:{taskInfo.EndRoadway + " " + taskInfo.EndLocate}\n"; + ledText += $"閲嶉噺(KG):{Convert.ToDecimal(palletWeightVal)}"; LedDisplay(modDevice.LedIP, ledText); } @@ -1013,13 +1522,11 @@ { Log.Error(ex.Message); } - } - } else { - var (res350, palletVal350) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + var (res350, palletVal350) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); if (res350.IsSucceed && palletVal350 != "350") { ledText += $"鐢宠鍏ュ簱澶辫触\n\n"; @@ -1029,7 +1536,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"); @@ -1043,11 +1550,12 @@ // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); - var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { break; } + string pallet = palletVal.ToString(); // 鑾峰彇浠诲姟淇℃伅 var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && (s.Status == TaskStatusEnum.Wait || s.Status == TaskStatusEnum.Doing) && s.TaskType == TaskTypeEnum.In); @@ -1063,26 +1571,79 @@ } // 鑾峰彇宸烽亾鍙e叆搴撳伐浣� - string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, louCeng); + string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, louCeng, modDevice.StationNum); + + #region 璺烘満杞繍浠诲姟澶勭悊 ########## + // 鍒ゆ柇鏄惁鍥涙ゼ杈撻�佺嚎 + if (modDevice.StationNum == "265") + { // 鏄� + if (modTask.EndRoadway != "R05" && modTask.EndRoadway != "R06") + { + // 鏍规嵁宸烽亾鑾峰彇涓浆璺烘満IP ### R05宸烽亾 + var sInfo = PLCCommon.GetStokePlc("R05", louCeng); + var plcStackeConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip); + if (plcStackeConn.Connected) + { + 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 (djRes, djVal) = plcStackeConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos); + + // 鍒ゆ柇R05璺烘満鏄惁绌洪棽 + if (djRes.IsSucceed && djVal.ToString() == "820") + { + endLocatVlue = "253"; + } + } + + // 鏍规嵁宸烽亾鑾峰彇涓浆璺烘満IP ### R06宸烽亾 + var sInfoR06 = PLCCommon.GetStokePlc("R06", louCeng); + var plcStackeConnR06 = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfoR06.Ip); + if (plcStackeConnR06.Connected) + { + var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfoR06.Ip); + var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id + && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false); + var (djRes, djVal) = plcStackeConnR06.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos); + + // 鍒ゆ柇R05璺烘満鏄惁绌洪棽 + if (djRes.IsSucceed && djVal.ToString() == "820") + { + endLocatVlue = "250"; + } + } + } + } + if (modDevice.StationNum == "266") + { // 鏄� + if (modTask.EndRoadway != "R05") + { + endLocatVlue = "277"; + } + } + #endregion + // 缁橮LC鍐欏叆浠诲姟鏁版嵁 var listResult = new List<Result>(); + // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); 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())); + listResult.Add(plcConn.SetPlcDBValueRepeat(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(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)) - { + { + Log.Information($"鍐欏叆340锛屼换鍔″彿锛歿modTask.TaskNo}锛屼换鍔$被鍨嬶細{taskTypeStr.ToString()}锛屾墭鐩樼爜锛歿modTask.PalletNo}锛岃捣濮嬪伐浣嶏細{modDevice.StationNum}锛岀洰鐨勫伐浣嶏細{endLocatVlue}"); + // 灏嗕换鍔$姸鎬佸彉鏇翠负姝e湪鎵ц _db.Updateable<WcsTask>() .SetColumns(s => s.Status == TaskStatusEnum.Doing) @@ -1118,7 +1679,6 @@ } } - } break; case "620": @@ -1141,22 +1701,138 @@ } // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); - var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); if (!res.IsSucceed) { break; } + + #region 璺烘満杞繍浠诲姟澶勭悊 ########### + // 鏍规嵁浠诲姟鐩爣宸烽亾鍙疯幏鍙栧伐浣嶅彿 + var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (ress, endTaskNoVal) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos); + if (!ress.IsSucceed) + { + break; + } + string taskno = endTaskNoVal; + var taskInfo2 = _db.Queryable<WcsTask>().First(w => w.TaskNo == taskno); // 鏍规嵁浠诲姟鍙疯幏鍙栧綋鍓嶄换鍔$洰鏍囧贩閬� + if (taskInfo2 == null) + { + break; + } + string roadwayNo = PLCCommon.GetRoadwayByStation(modDevice.StationNum); // 褰撳墠宸ヤ綅瀵瑰簲鐨勫贩閬撳彿 + + // 鍒ゆ柇鏄惁鍏ュ簱杞繍浠诲姟 + if (roadwayNo != taskInfo2.EndRoadway && taskInfo2.TaskType == TaskTypeEnum.In) + {// 鏄� + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630"); + + if (ret.IsSucceed) + { + var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (resss, taskNoVal) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos); + if (!resss.IsSucceed) + { + break; + } + + string taskNo = taskNoVal.ToString(); + var taskInfos = _db.Queryable<WcsTask>().First(w => w.TaskNo == taskNo); + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfos.StartLocate).Select(s => s.LedIP).First(); + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = taskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护630锛氬紑鍚泛鏈鸿浆杩愪换鍔�", + 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 += $"浠诲姟绫诲瀷:{taskInfos.TaskType.GetDescription()}\n\n"; + ledText += $"浠诲姟鍙�:{taskInfos.TaskNo}\n"; + ledText += $"鎵樼洏鍙�:{taskInfos.PalletNo}\n\n"; + ledText += $"璧峰浣�:{taskInfos.StartRoadway + " " + taskInfos.StartLocate}\n"; + ledText += $"鐩爣浣�:{taskInfos.EndRoadway + " " + taskInfos.EndLocate}"; + LedDisplay(modDevice.LedIP, ledText); + } + + break; + } + + // 鍒ゆ柇鏄惁鍑哄簱杞繍浠诲姟 + var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); + var (res1, taskVal) = plcConn.GetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos); + if (res1.IsSucceed) + { + string taskNo = taskVal.ToString(); + var taskInfos = _db.Queryable<WcsTask>().First(w => w.TaskNo == taskNo); + if (taskInfos.TaskType == TaskTypeEnum.Out) + { + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630"); + if (!ret.IsSucceed) + { + break; + } + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfos.EndLocate).Select(s => s.LedIP).First(); + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = taskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护630锛氬紑鍚泛鏈鸿浆杩愪换鍔�", + 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 += $"浠诲姟绫诲瀷:{taskInfos.TaskType.GetDescription()}\n\n"; + ledText += $"浠诲姟鍙�:{taskInfos.TaskNo}\n"; + ledText += $"鎵樼洏鍙�:{taskInfos.PalletNo}\n\n"; + ledText += $"璧峰浣�:{taskInfos.StartRoadway + " " + taskInfos.StartLocate}\n"; + ledText += $"鐩爣浣�:{taskInfos.EndRoadway + " " + taskInfos.EndLocate}"; + LedDisplay(modDevice.LedIP, ledText); + + break; + } + } + else { break; } + #endregion + var http = new HttpService(); - string TaskNo = ""; - // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅 - strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo); + string TaskNo = ""; + lock (RuKuLock) + { + // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅 + strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo, (int)taskInfo2.PalletQty); + } // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇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(); if (!strMsg.Contains("-1")) - { + { // 鍐欏叆娴佺▼瀛� 630 var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "630"); @@ -1205,14 +1881,14 @@ break; case "630": { - #region 鍐欏叆璺烘満鍙栬揣浠诲姟 640 + #region 鍐欏叆璺烘満鍙栬揣浠诲姟 涓嶇敤鍐欏叆640鍨涘彇璐у畬鎴愬悗浼氬啓 // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); - var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); + var (res, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭� var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); - var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos); + var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(modPosTaskNo.PosType, modDevice.DbNumber, modPosTaskNo.PlcPos); if (!res.IsSucceed || !taskRes.IsSucceed) { break; @@ -1220,14 +1896,274 @@ 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); + var modTask = _db.Queryable<WcsTask>().First(s => s.IsDelete == false && s.PalletNo == pallet && s.Status == TaskStatusEnum.Doing && s.TaskNo == taskNo); if (modTask == null) { // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず break; } - var sInfo = PLCCommon.GetStokePlc(modTask.EndRoadway, louCeng); + #region 璺烘満杞繍浠诲姟澶勭悊 ########### + string taskno = taskNoVal; + string roadwayNo = PLCCommon.GetRoadwayByStation(modDevice.StationNum); // 褰撳墠宸ヤ綅瀵瑰簲鐨勫贩閬撳彿 + + + // 鑾峰彇褰撳墠宸ヤ綅鐩爣鍦板潃 + var modPosEndStation = modDevice.listStation.FirstOrDefault(m => m.Text == "鐩殑宸ヤ綅"); + var (ress, endStationVal) = plcConn.GetPlcDBValue(modPosEndStation.PosType, modDevice.DbNumber, modPosEndStation.PlcPos); + if (!ress.IsSucceed) + { + break; + } + + if (modTask.EndRoadway == null) + { + modTask.EndRoadway = ""; + } + var sInfo = PLCCommon.GetStokePlc(roadwayNo, louCeng, modDevice.StationNum); // 鏍规嵁褰撳墠宸烽亾鑾峰彇璺烘満淇℃伅 + // 鍒ゆ柇鏄惁鍏ュ簱杞繍浠诲姟 + // 鍒ゆ柇鏄惁鍏ュ簱杞繍浠诲姟 + if (roadwayNo != modTask.EndRoadway && modTask.TaskType == TaskTypeEnum.In) + {// 鏄� + + // 鏍规嵁褰撳墠宸ヤ綅鍙凤紝鑾峰彇瀵瑰簲鐨勫彇璐ф帓鍒楀眰 + sInfo = PLCCommon.GetStokePlc(roadwayNo, louCeng, modDevice.StationNum); + + // 鍒ゆ柇1灞傛斁璐у伐浣嶇姸鎬佹槸鍚︾┖闂� + var endStationNum = PLCCommon.RoadwayToOutStationNum(roadwayNo, "1"); + var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == endStationNum + && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false); + var plcConveyorConn = PLCCommon.GetPlcIp(endStationNum); + if (plcConveyorConn.Connected) + { + // 璇诲彇1妤兼斁璐у伐浣嶇姸鎬� + var (reouts, plcVal) = plcConveyorConn.GetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.PlcPos); + if (reouts.IsSucceed) + { + //if (plcVal.ToString() != "720") + //{ + // // 1灞傛斁璐у伐浣嶅崰鐢紝绛夊緟鏀捐揣宸ヤ綅閲婃斁 + // break; + //} + + // 鍒ゆ柇璺烘満鏄惁绌洪棽 + var plcSConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip); + if (plcSConn.Connected) + { + 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 (djRess, djVal) = plcSConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos); + + if (!djRess.IsSucceed || djVal.ToString() != "820") + { + // 璺烘満闈炵┖闂茬瓑寰� + break; + } + + var listResult = new List<Result>(); + + // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 + var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + var taskTypeStr = (int)modTask.TaskType; + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + + //璧峰宸ヤ綅 + var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum)); + + // 鐩殑宸ヤ綅 + var modPosendStationNum = djInfos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosendStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, endStationNum)); + + //鍙栬揣鎺掋�佸垪銆佸眰 + var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai)); + var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, sInfo.Lie)); + var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, sInfo.Ceng)); + //鏀捐揣鎺掋�佸垪銆佸眰 + var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, "2")); + var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, "60")); + var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, "1")); + if (listResult.All(s => s.IsSucceed)) + { + // 鍐欏叆璺烘満 830 + var retc2 = plcSConn.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; + + } + // 鍐欏叆鐩爣宸ヤ綅 730 : 閫昏緫涓婃澶勪笉鐢ㄥ崰鐢ㄥ湴鍧�銆� + var retc3 = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "730"); + + modInsertTaskMonitor.InteractiveMsg = $"璺烘満鍐欏叆鎸囦护830锛歿modDevice.StationNum}宸ヤ綅====銆�" + modTask.EndLocate + "鍌ㄤ綅鍦板潃!"; + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + if (PLCTaskAction.boRefresh) + { + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + } + + } + } + } + } + + break; + } + + // 鍒ゆ柇鏄惁鍑哄簱杞繍浠诲姟 + if (modTask.TaskType == TaskTypeEnum.Out) + { + var roadWay1 = "R06"; + if (modTask.EndLocate == "266") + { + roadWay1 = "R05"; + + } + + var sInfo1 = PLCCommon.GetStokePlc(roadWay1, "2"); // 鏀捐揣鎺掑垪灞備俊鎭� + + var plcSConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo1.Ip); + if (plcSConn.Connected) + { + var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfo1.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 (djRess, djVal) = plcSConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos); + + if (!djRess.IsSucceed || djVal.ToString() != "820") + { + // 璺烘満闈炵┖闂茬瓑寰� + break; + } + + var listResult = new List<Result>(); + + // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 + var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + var taskTypeStr = (int)modTask.TaskType; + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + + //璧峰宸ヤ綅 + var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum)); + //鐩殑宸ヤ綅 + if (modTask.EndLocate == "266") + { + modTask.EndLocate = "277"; + } + if (modTask.EndLocate == "265") + { + modTask.EndLocate = "250"; + } + + var modPosStrend = djInfos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrend.PosType, djMod.DbNumber, modPosStrend.PlcPos, modTask.EndLocate)); // 姝ゅ鐜板湪瀛樼殑鏄嚭搴撳彛266銆� + + //鍙栬揣鎺掋�佸垪銆佸眰 + var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, "3")); + var modPosStrLie = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrLie.PosType, djMod.DbNumber, modPosStrLie.PlcPos, "60")); + var modPosStrCeng = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣灞�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosStrCeng.PosType, djMod.DbNumber, modPosStrCeng.PlcPos, "1")); + //鏀捐揣鎺掋�佸垪銆佸眰 + var modPosEndPai = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鎺�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndPai.PosType, djMod.DbNumber, modPosEndPai.PlcPos, sInfo1.Pai)); + var modPosEndLie = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndLie.PosType, djMod.DbNumber, modPosEndLie.PlcPos, sInfo1.Lie)); + var modPosEndCeng = djInfos.FirstOrDefault(s => s.Text == "鏀捐揣灞�"); + listResult.Add(plcSConn.SetPlcDBValueRepeat(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, sInfo1.Ceng)); + if (listResult.All(s => s.IsSucceed)) + { + // 鍐欏叆璺烘満 830 + var retc2 = plcSConn.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 = modTask.StartLocate, + 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>()); + } + + } + } + break; + } + + #endregion + + // 闈炴甯稿叆搴撲换鍔′笉寰�涓嬫墽琛� + if (modTask.TaskType != TaskTypeEnum.In) + { + break; + } + if (string.IsNullOrWhiteSpace(sInfo.Ip)) { //闇�鍔犱笂LED鏄剧ず @@ -1272,31 +2208,35 @@ // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcStackeConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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())); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum)); + + //鐩殑宸ヤ綅 + var modPosendStationNum = djInfos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosStrStationNum.PosType, djMod.DbNumber, modPosendStationNum.PlcPos, modDevice.StationNum)); // 姝ゅ鐜板湪鏄�139 搴旇涓�0 //鍙栬揣鎺掋�佸垪銆佸眰 var modPosStrPai = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); - listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrPai.PosType, djMod.DbNumber, modPosStrPai.PlcPos, sInfo.Pai)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(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)); + listResult.Add(plcStackeConn.SetPlcDBValueRepeat(modPosEndCeng.PosType, djMod.DbNumber, modPosEndCeng.PlcPos, ceng)); if (listResult.All(s => s.IsSucceed)) { @@ -1334,10 +2274,6 @@ } } - - - - } #endregion @@ -1347,27 +2283,35 @@ #region 鍑哄簱浜や簰 case "420": { + string plcValue = "430"; #region 鎵樼洏鍒拌揪鎷i�夊伐浣�/鍑哄簱鍙� - // 鍑哄簱鍙� - // led鏄剧ず鎵樼洏淇℃伅 - // 鍐欏叆430 - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "430"); - + 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); + //鍒ゆ柇鏄惁鍥涙ゼ鍑哄簱鍙� + //if (modDevice.StationNum == "265" || modDevice.StationNum == "266") + //{ + // var http = new HttpService(); + // //鏍规嵁鍑哄簱浠诲姟鍙疯幏鍙栧嚭搴撳崟绫诲瀷 + // var modResponseTask = http.GetSoOrderTypeByTaskNo(taskVal).Result; + // if (modResponseTask.StatusCode == 0 && modResponseTask.Msg == "1")//1锛氶鏂欏嚭搴撳崟 + // { + // plcValue = "230"; + // } + //} + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, plcValue); 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}宸ヤ綅", + InteractiveMsg = $"鍐欏叆鎸囦护{plcValue}锛氭墭鐩樺埌杈緖modDevice.StationNum}宸ヤ綅", PalletNo = palletVal, Status = TaskStatusEnum.Complete, StartLocat = starVal, @@ -1387,7 +2331,7 @@ // 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"; @@ -1453,15 +2397,18 @@ 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)); + lock(OutLock) + { + 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)); + } } } @@ -1490,27 +2437,38 @@ case "50": // plc鐢宠绌烘墭 { - // 闃叉閲嶅鍙┖鎵樿泛 - var (res, palletVal) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); - if (palletVal != 0) + lock (OLock) { - break; - } + // 鍒ゆ柇鏄惁宸叉湁鍚戝彨绌烘墭宸ヤ綅鐨勫嚭搴撲换鍔� + var modTask = _db.Queryable<WcsTask>().First(m => (m.Status == TaskStatusEnum.Doing || m.Status == TaskStatusEnum.Wait) + && m.EndLocate == modDevice.StationNum && m.IsDelete == false); + if (modTask != null) + { + Log.Error("宸插瓨鍦ㄥ悜" + modDevice.StationNum + "宸ヤ綅鐨勪换鍔°�備换鍔″彿:" + modTask.TaskNo); + break; + } - // 璋冪敤WMS绌烘墭鍑哄簱鎺ュ彛锛岃繑鍥炲嚭搴撲换鍔″瓨鍏ュ嚭搴撹〃 - var strMsg = ""; - var http = new HttpService(); - strMsg = http.IssuePlnOutHouseWcs("1", "205"); - if (!strMsg.Contains("-1")) - { - // 鍐欏叆plc娴佺▼瀛�60 - var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60"); + // 闃叉閲嶅鍙┖鎵樿泛 + var (res, palletVal) = plcConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos); + if (palletVal != 0) + { + break; + } + // 璋冪敤WMS绌烘墭鍑哄簱鎺ュ彛锛岃繑鍥炲嚭搴撲换鍔″瓨鍏ュ嚭搴撹〃 + var strMsg = ""; + var http = new HttpService(); + strMsg = http.IssuePlnOutHouseWcs("1", modDevice.StationNum); + if (!strMsg.Contains("-1")) + { + // 鍐欏叆plc娴佺▼瀛�60 + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60"); + } + else + { + // 鐢宠宸烽亾澶辫触锛丩ED鏄剧ず + Log.Error(string.Format($"宸ヤ綅鍙凤細{modDevice.StationNum}鐢宠绌烘墭璺哄け璐�:{strMsg};")); + } } - else - { - // 鐢宠宸烽亾澶辫触锛丩ED鏄剧ず - Log.Error(string.Format($"宸ヤ綅鍙凤細{modDevice.StationNum}鐢宠绌烘墭璺哄け璐�:{strMsg};")); - } } break; case "80": @@ -1583,6 +2541,59 @@ break; #endregion + #region 鎷嗗灈涓氬姟 + case "520": + //鎵樼洏杈惧埌鎷嗗灈宸ヤ綅锛學CS鍐欏叆鍝佺鍙峰苟鍐欏叆530 + { + // 鑾峰彇鎵樼洏鏉$爜閰嶇疆 + var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�" && m.IsDelete == false); + // 璇诲彇PLC鎵樼洏鏉$爜鍙� + var (res, palletVal) = plcConn.GetPlcDBValue(modPalletNo.PosType, modDevice.DbNumber, modPalletNo.PlcPos); + string palletNo = palletVal.ToString(); + if (string.IsNullOrEmpty(palletNo)) + { + Log.Error(string.Format("{0}锛岃鍙栫殑鎵樼洏鍙蜂负null", modDevice.Text)); + break; + } + string pzNo = string.Empty; + //璋冪敤WMS鎺ュ彛鑾峰彇鎵樼洏涓婄墿鏂欏搧绉嶄俊鎭� + var http = new HttpService(); + pzNo = http.GetPalletPzNo(palletNo); + if (!string.IsNullOrEmpty(pzNo)) + { + var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "鍝佺" && m.IsDelete == false); + // 鍐欏叆鎷嗗灈鍝佺 + var retVal = plcConn.SetPlcDBValueRepeat(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, pzNo); + if (retVal.IsSucceed) + { + plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "530"); + } + } + } + break; + case "540": + //鎷嗗灈瀹屾垚鍗冲嚭搴撳畬鎴愪换鍔$粨鏉燂紝WCS鍐欏叆550锛孭LC娓�0 + { + // 鑾峰彇鎵樼洏鏉$爜閰嶇疆 + var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜" && m.IsDelete == false); + // 璇诲彇PLC鎵樼洏鏉$爜鍙� + var (res, palletVal) = plcConn.GetPlcDBValue(modPalletNo.PosType, modDevice.DbNumber, modPalletNo.PlcPos); + string palletNo = palletVal.ToString(); + if (string.IsNullOrEmpty(palletNo)) + { + Log.Error(string.Format("{0}锛岃鍙栫殑鎵樼洏鍙蜂负null", modDevice.Text)); + break; + } + //璋冪敤WMS鎺ュ彛杩涜鎴愬搧绠辩爜鎷h揣 + var http = new HttpService(); + var strMsg = http.BoxUnstackd(palletNo); + if (!strMsg.Contains("-1")) + { + plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "550"); + } + } + break; + #endregion default: break; } @@ -1629,11 +2640,11 @@ /// 浠剁杈撻�佸拰鐮佸灈鏈哄櫒浜轰笟鍔″鐞� 閰嶇疆鐨勬槸浠剁杈撻�� /// </summary> /// <param name="modDevice"></param> - private static async void BoxConveyorLine(WcsDeviceDto modDevice) + private static void BoxConveyorLine(WcsDeviceDto modDevice) { var plcConn = modDevice.PLCUtil; - if (modDevice.DbNumber == "DB101") + if (modDevice.DbNumber == "DB101" || modDevice.DbNumber == "DB102" || modDevice.DbNumber == "DB103" || modDevice.DbNumber == "DB104" || modDevice.DbNumber == "DB105") { // 涓绘壂浜や簰娴佺▼ switch (modDevice.Value.ToString()) @@ -1641,98 +2652,69 @@ case "1": // 涓绘壂鐢宠鍒嗛亾 wcs鍐欏叆2 { - // 鍒ゆ柇鏄惁婕旂ず妯″紡 true锛氭紨绀烘ā寮� false:鐢熶骇妯″紡 - if (PLCTaskAction.boDemo) + var modPosReadBox = modDevice.listStation.FirstOrDefault(m => m.Text == "璇诲彇绠辩爜" && m.IsDelete == false); + var (res, boxNo) = plcConn.GetPlcDBValue(modPosReadBox.PosType, modDevice.DbNumber, modPosReadBox.PlcPos); + if (string.IsNullOrWhiteSpace(boxNo.ToString())) { - // 閫氶亾鍙� - var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "閫氶亾鍙�"); - - // 婕旂ず妯″紡鐩存帴鍐欏叆1鍒嗛亾 - var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "1"); - if (ret.IsSucceed) + // 鍐欏叆娴佺▼鎺у埗瀛� 2 + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); + if (retVal.IsSucceed) { - // 鍐欏叆娴佺▼鎺у埗瀛� 2 - var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); - if (!retVal.IsSucceed) - { - Log.Error("婕旂ず妯″紡鍐欏叆鍒嗛亾鍙峰け璐�!"); - break; - } + Log.Error("绠辩爜涓簄ull杩涜鍓旈櫎"); + break; + } + } + // 鏍规嵁绠辩爜鑾峰彇绠卞唴淇℃伅 + string boxNoVal = boxNo.ToString(); + var boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNoVal && string.IsNullOrEmpty(w.PalletNo)); + if (boxInfo == null) + { + // 鍐欏叆娴佺▼鎺у埗瀛� 2 + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); + if (retVal.IsSucceed) + { + Log.Error($"绠辩爜涓簄ull鎴栧凡缁戝畾鎵樼洏锛岃繘琛屽墧闄ゃ�傜鐮侊細{boxNoVal}"); + break; + } + } + // 鏍规嵁绠卞唴鍝佺鍙疯幏鍙栫爜韬茬粦瀹氬伐浣嶅強瀵瑰簲鐨勫垎閬撳彿 + var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo); + if (checkTaskInfo == null) + { + Log.Error($"娴嬭瘯--銆傜鐮侊細{boxNoVal},绠盜D锛歿boxInfo.Id},鐗╂枡缂栫爜锛歿boxInfo.SkuNo},鐗╂枡鍚嶇О锛歿boxInfo.SkuName}锛屾壒娆★細{boxInfo.LotNo}"); + // 鍐欏叆娴佺▼鎺у埗瀛� 2 + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); + if (retVal.IsSucceed) + { + Log.Error($"绠辩爜鏈粦瀹氬垎鎷d换鍔★紝杩涜鍓旈櫎銆傜鐮侊細{boxNoVal}"); + break; } } else { - // 閫氶亾鍙� - var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "閫氶亾鍙�"); + // 缁橮LC鍐欏叆浠诲姟鏁版嵁 + var listResult = new List<Result>(); + //鎵规鍙� + var modPosLotNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵规鍙�" && m.IsDelete == false); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosLotNo.PosType, modDevice.DbNumber, modPosLotNo.PlcPos, boxInfo.LotNo)); + //鍝佺 + var modPosPZ = modDevice.listStation.FirstOrDefault(m => m.Text == "鍝佺" && m.IsDelete == false); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosPZ.PosType, modDevice.DbNumber, modPosPZ.PlcPos, checkTaskInfo.PZNo)); + //鏄惁灏剧 + var modPosIsEndBox = modDevice.listStation.FirstOrDefault(m => m.Text == "鏄惁灏剧" && m.IsDelete == false); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosIsEndBox.PosType, modDevice.DbNumber, modPosIsEndBox.PlcPos, boxInfo.EndLotFlag)); + //鍐欏叆绠辩爜 + var modPosBox = modDevice.listStation.FirstOrDefault(m => m.Text == "鍐欏叆绠辩爜" && m.IsDelete == false); + listResult.Add(plcConn.SetPlcDBValueRepeat(modPosBox.PosType, modDevice.DbNumber, modPosBox.PlcPos, boxInfo.BoxNo)); - // 璇诲彇plc绠辩爜 - var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "绠辩爜"); - var (res, boxNo) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos); - if (string.IsNullOrWhiteSpace(boxNo.ToString())) + // 鏄惁鍐欏叆鎴愬姛 + if (listResult.All(s => s.IsSucceed)) { - // 绠辩爜涓簄ull鍐欏叆鍓旈櫎閫氶亾鍙� - var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0"); - if (ret.IsSucceed) + // 鍐欏叆娴佺▼鎺у埗瀛� 2 + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); + if (retVal.IsSucceed) { - // 鍐欏叆娴佺▼鎺у埗瀛� 2 - var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); - if (retVal.IsSucceed) - { - Log.Error("绠辩爜涓簄ull杩涜鍓旈櫎"); - break; - } - } - } - else - { - // 鏍规嵁绠辩爜鑾峰彇绠卞唴淇℃伅 - string boxNoVal = boxNo.ToString(); - var boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNoVal && string.IsNullOrEmpty(w.PalletNo)); - if (boxInfo == null) - { - // 绠变俊鎭负null鍐欏叆鍓旈櫎閫氶亾鍙� - var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0"); - if (ret.IsSucceed) - { - // 鍐欏叆娴佺▼鎺у埗瀛� 2 - var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); - if (retVal.IsSucceed) - { - Log.Error("绠辩爜涓簄ull鎴栧凡缁戝畾鎵樼洏锛岃繘琛屽墧闄ゃ��"); - break; - } - } - } - // 鏍规嵁绠卞唴鍝佺鍙疯幏鍙栫爜韬茬粦瀹氬伐浣嶅強瀵瑰簲鐨勫垎閬撳彿 - var checkTaskInfo = _db.Queryable<WcsCheckTask>().First(w => w.SkuNo == boxInfo.SkuNo && w.SkuName == boxInfo.SkuName && w.LotNo == boxInfo.LotNo); - if (checkTaskInfo == null) - { - // 缁戝畾淇℃伅涓簄ull鍐欏叆鍓旈櫎閫氶亾鍙� - var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, "0"); - if (ret.IsSucceed) - { - // 鍐欏叆娴佺▼鎺у埗瀛� 2 - var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); - if (retVal.IsSucceed) - { - Log.Error("绠辩爜鏈粦瀹氬垎鎷d换鍔★紝杩涜鍓旈櫎銆�"); - break; - } - } - } - else - { - // 涓巔lc浜や簰鍐欏叆鍒嗛亾鍙峰拰娴佺▼鎺у埗瀛� - var ret = plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, checkTaskInfo.RoboatNo); - if (ret.IsSucceed) - { - // 鍐欏叆娴佺▼鎺у埗瀛� 2 - var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); - if (retVal.IsSucceed) - { - break; - } - } + break; } } } @@ -1740,21 +2722,21 @@ break; default: break; } - } - else + } + else { // 鎻掔爜浜や簰 - switch (modDevice.Value.ToString()) + switch (modDevice.Value.ToString()) { case "1": // 鎵樼洏鏉$爜鍙 { // 鑾峰彇鎵樼洏鏉$爜閰嶇疆 - var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); + var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜" && m.IsDelete == false); // 璇诲彇PLC鎵樼洏鏉$爜鍙� var (res, palletVal) = plcConn.GetPlcDBValue(modPalletNo.PosType, modDevice.DbNumber, modPalletNo.PlcPos); string palletNo = palletVal.ToString(); - if (string.IsNullOrEmpty(palletNo)) + if (string.IsNullOrEmpty(palletNo)) { Log.Error(string.Format("{0}锛岃鍙栫殑鎵樼洏鍙蜂负null", modDevice.Text)); break; @@ -1762,18 +2744,19 @@ // 鏍规嵁宸ヤ綅鍙峰皢鎵樼洏鍙蜂繚瀛樺湪鍒嗛亾琛� var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); - if (checkTaskMedel == null) + if (checkTaskMedel == null) { Log.Error(string.Format("鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栧垎閬撳け璐�!", modDevice.StationNum)); break; } checkTaskMedel.PalletNo = palletNo; + checkTaskMedel.BoxCount = 0; var rowCount = _db.Updateable(checkTaskMedel).ExecuteCommand(); - if (rowCount > 0 ) + if (rowCount > 0) { // plc鍐欏叆璇诲彇鎴愬姛琛ㄧず 2 var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); - if (retVal.IsSucceed) + if (retVal.IsSucceed) { // liudl 姝ゅ闇�娣诲姞 // 閫氱煡鍒嗘嫞鐮佸灈椤垫洿鏂� @@ -1785,199 +2768,148 @@ // 鐢宠鎻掔爜 { // 鑾峰彇鎵樼洏鏉$爜閰嶇疆 - var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "鎻掔爜缁撴灉"); - // 鍒ゆ柇鏄惁婕旂ず妯″紡 true锛氭紨绀烘ā寮� false:鐢熶骇妯″紡 - if (PLCTaskAction.boDemo) + var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "鎻掔爜缁撴灉" && m.IsDelete == false); + + //鑾峰彇鎻掔爜绠辨暟 + var modAddBoxNum = modDevice.listStation.FirstOrDefault(m => m.Text == "鎻掔爜绠辨暟" && m.IsDelete == false); + var (boxNumRes, boxNumVal) = plcConn.GetPlcDBValue(modAddBoxNum.PosType, modDevice.DbNumber, modAddBoxNum.PlcPos); + int boxNum = Convert.ToInt32(boxNumVal); + if (boxNum != 1 && boxNum != 2) { - // 婕旂ず妯″紡鐩存帴鍐欏叆鎻掔爜缁撴灉 1锛氭垚鍔� - var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); + Log.Error(string.Format($"鐮佸灈宸ヤ綅{0}锛岃姹傛彃鐮佺鏁颁笉姝g‘! boxNum:{boxNum}", modDevice.StationNum)); + // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐� + var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); break; } - else + + // 鑾峰彇褰撳墠鍒嗛亾鎵樼洏鍙� + var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); + if (checkTaskMedel == null) + { + Log.Error(string.Format("鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栧垎閬撳け璐�!", modDevice.StationNum)); + // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐� + var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); + break; + } + + string palletNo = checkTaskMedel.PalletNo; + if (string.IsNullOrEmpty(palletNo)) + { + Log.Error(string.Format("鑾峰彇鐮佸灈宸ヤ綅{0}涓婄殑鎵樼洏鍙峰け璐ワ紒", modDevice.StationNum)); + // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐� + var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); + break; + } + for (int i = 1; i <= boxNum; i++) { // 鑾峰彇绠辨潯鐮� // 鑾峰彇绠辨潯鐮侀厤缃� - var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "绠辨潯鐮�"); + var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == $"璇诲彇绠辩爜{i}"); var (res, boxVal) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos); string boxNo = boxVal.ToString(); - if (string.IsNullOrEmpty(boxNo)) + if (string.IsNullOrEmpty(boxNo)) { - Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮佷负null鎻掔爜澶辫触!璇蜂汉宸ュ己鍒剁粨鎵广��"), modDevice.StationNum); - // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐� - var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); + Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮佷负null鎻掔爜澶辫触!璇蜂汉宸ュ己鍒剁粨鎵广��", modDevice.StationNum)); break; } // 楠岃瘉绠辩爜琛ㄦ槸鍚﹀瓨鍦ㄦ绠辩爜 - var boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNo); - if (boxInfo == null) + var boxInfo = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.BoxNo == boxNo).ToList(); + if (boxInfo.Count == 0) { - Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮亄1}涓嶅瓨鍦�!璇蜂汉宸ュ己鍒剁粨鎵广��"), modDevice.StationNum,boxNo); + Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮亄1}涓嶅瓨鍦�!璇蜂汉宸ュ己鍒剁粨鎵广��", modDevice.StationNum, boxNo)); // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐� - var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); - break; - } - // 鑾峰彇褰撳墠鍒嗛亾鎵樼洏鍙� - var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); - if (checkTaskMedel == null) - { - Log.Error(string.Format("鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栧垎閬撳け璐�!", modDevice.StationNum)); - break; - } - string palletNo = checkTaskMedel.PalletNo; - if (string.IsNullOrEmpty(palletNo)) - { - Log.Error(string.Format("鑾峰彇鐮佸灈宸ヤ綅{0}涓婄殑鎵樼洏鍙峰け璐ワ紒",modDevice.StationNum)); + plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); break; } // 淇敼鎻掔爜琛� - boxInfo.PalletNo = palletNo; - boxInfo.UpdateTime = DateTime.Now; - var rowCount = _db.Updateable(boxInfo).ExecuteCommand(); - if (rowCount > 0) + foreach (WcsBoxInfo item in boxInfo) { - // 鎻掔爜鎴愬姛 - var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); + item.PalletNo = palletNo; + item.UpdateTime = DateTime.Now; } - else + var resultCount = _db.Updateable(boxInfo).ExecuteCommand(); + if (resultCount <= 0) { // 鎻掔爜澶辫触 - Log.Error(string.Format("绠辩爜{0};鐮佸灈宸ヤ綅{1}锛屾彃鐮佸け璐ワ紝璇峰己鍒剁粨鎵�"),boxNo,modDevice.StationNum); - var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); + Log.Error(string.Format("绠辩爜{0};鐮佸灈宸ヤ綅{1}锛岀粦瀹氭墭鐩榹2}澶辫触锛岃寮哄埗缁撴壒", boxNo, modDevice.StationNum, palletNo)); + // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐� + plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); + break; } + } + // 鎻掔爜鎴愬姛 + var retVal2 = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); + if (retVal2.IsSucceed) + { + //鏇存柊宸叉彃鐮佹暟閲� + checkTaskMedel.BoxCount += boxNum; + _db.Updateable(checkTaskMedel).ExecuteCommand(); + } + else + { + // 鍐欏叆澶辫触 + Log.Error(string.Format("鍐欏叆PLC鎻掔爜缁撴灉澶辫触锛岀爜鍨涘伐浣峽1}锛屾墭鐩樺彿{2}", modDevice.StationNum, palletNo)); } } break; case "40": // 璇锋眰缁勬墭锛岀敵璇峰叆搴� { - // 鏍规嵁宸ヤ綅鍙凤紝鑾峰彇鎵樼洏鍙� - var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); - // 鏍规嵁宸ヤ綅鍙疯幏鍙� 鎵樼洏绾胯宸ヤ綅鍙风殑閰嶇疆淇℃伅 - var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId != modDevice.PlcId); - var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鐩殑宸ヤ綅" && m.IsDelete == false); - if (checkTaskMedel == null) + lock (OLock) { - Log.Error(string.Format("缁勬墭澶辫触鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栨墭鐩樺彿澶辫触!", modDevice.StationNum)); - - // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 - var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); - if (retVal.IsSucceed) + // 鏍规嵁宸ヤ綅鍙凤紝鑾峰彇鎵樼洏鍙� + var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); + // 鏍规嵁宸ヤ綅鍙疯幏鍙� 鎵樼洏绾胯宸ヤ綅鍙风殑閰嶇疆淇℃伅 + var numModel = PLCTaskAction.plcDevices.First(m => m.StationNum == modDevice.StationNum && m.IsDelete == false && m.DeviceType == DeviceTypeEnum.Business && m.PlcId != modDevice.PlcId); + //var posModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鐩殑宸ヤ綅" && m.IsDelete == false); + if (checkTaskMedel == null) { + Log.Error(string.Format("缁勬墭澶辫触鏍规嵁鐮佸灈宸ヤ綅{0}锛岃幏鍙栨墭鐩樺彿澶辫触!", modDevice.StationNum)); + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� - retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - } - break; - } - - // 鐮佸灈宸ヤ綅鎵樼洏鍙� - string palletNo = checkTaskMedel.PalletNo; - - // 鏄惁婕旂ず妯″紡 - if (PLCTaskAction.boDemo) - { - // 鐩存帴绠眞ms鐢宠宸烽亾 - var http = new HttpService(); - string TaskNo = "", EndLocate = ""; - string strMsg = http.RequestRoadWay(palletNo, modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo); - if (strMsg.Contains("-1")) - { - Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60"); break; } - else + + //鑾峰彇鎵樼洏楂樺害 + //var posPalletHeightModel = PLCTaskAction.plcPositions.First(m => m.DeviceId == numModel.Id && m.Text == "鎵樼洏楂樺害" && m.IsDelete == false); + //var (resPalletHeight, palletHeightVal) = plcConn.GetPlcDBValue(posPalletHeightModel.PosType, modDevice.DbNumber, posPalletHeightModel.PlcPos); + //if (!resPalletHeight.IsSucceed) + //{ + // break; + //} + + + // 鐮佸灈宸ヤ綅鎵樼洏鍙� + string palletNo = checkTaskMedel.PalletNo; + //鍒ゆ柇璇ユ墭鐩樻槸鍚︽湁姝e湪鎵ц鐨勪换鍔★紝闃叉閲嶅鐢宠 + var taskIng = _db.Queryable<WcsTask>().First(w => w.PalletNo == palletNo && (w.Status == TaskStatusEnum.Wait || w.Status == TaskStatusEnum.Doing) && w.IsDelete == false); + if (taskIng != null) { - // 鑾峰彇鍏ュ簱浠诲姟淇℃伅 - var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)); - if (taskModel != null) - { - // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅 - string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); - - var listResult = new List<Result>(); - - // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} - listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue)); // 鐩爣宸ヤ綅 - var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo)); - var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false); - var taskTypeStr = (int)taskModel.TaskType; - listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); - - if (listResult.All(s => s.IsSucceed)) - { - // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� - var retVal1 = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - if (retVal1.IsSucceed) - { - // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц - taskModel.Status = TaskStatusEnum.Doing; - _db.Updateable(taskModel).ExecuteCommand(); - - // 鎻掑叆浠诲姟鏄庣粏 - var modInsertTaskMonitor = new WcsTaskMonitor() - { - TaskNo = TaskNo, - PlcId = modDevice.Id, - PlcName = modDevice.Text, - InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�", - PalletNo = palletNo, - Status = TaskStatusEnum.Complete, - StartLocat = modDevice.StationNum, - EndLocat = strMsg, - }; - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); - // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - } - - //// 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} - //var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue); - //if (retVal.IsSucceed) - //{ - // // 鍐欏叆鐮佸灈浜や簰-缁勬墭鍥炲娴佺▼瀛� - // retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - - // // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц - // taskModel.Status = TaskStatusEnum.Doing; - // _db.Updateable(taskModel).ExecuteCommand(); - //} - } + break; } - } - else - { + // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹� - var boxInfoList = await _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToListAsync(); + var boxInfoList = _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToList(); if (boxInfoList.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"); - } + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60"); break; } - string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; - int insertCount = _db.Ado.ExecuteCommand(sqlStr); - if (insertCount > 0) - { - string sqlStr2 = $"delete from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; - _db.Ado.ExecuteCommand(sqlStr2); - } + // 鍚慦MS鐢宠宸烽亾 var http = new HttpService(); string TaskNo = "", EndLocate = ""; - string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo,palletNo, checkTaskMedel.BoxCount.ToDecimal(),"0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "","", boxInfoList, - modDevice.StationNum, "1", "2", ref EndLocate, ref TaskNo); - if (!strMsg.Contains("-1")) + string strMsg = http.BindRequestRoadWay(checkTaskMedel.OrderNo, palletNo, checkTaskMedel.BoxCount.ToDecimal(), "0", checkTaskMedel.SkuNo, checkTaskMedel.LotNo, "", "", boxInfoList, + modDevice.StationNum, "1", "1", ref EndLocate, ref TaskNo, (int)1351); + if (strMsg.Contains("-1")) { Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "60"); break; } else @@ -1986,54 +2918,61 @@ var taskModel = _db.Queryable<WcsTask>().First(m => m.TaskNo == TaskNo && m.IsDelete == false && m.Status == TaskStatusEnum.Wait); if (taskModel != null) { - // 鑾峰彇鍏ュ簱鍙栬揣宸ヤ綅 - string endLocatVlue = PLCCommon.RoadwayToStationNum(taskModel.EndRoadway, "2"); - - var listResult = new List<Result>(); - // 鍐欏叆鎵樼洏杈撻�佺嚎鐮佸灈宸ヤ綅 鐩殑宸ヤ綅銆佷换鍔″彿锛屽啓鍏ヤ氦浜掓祦绋嬬粍鎵樻垚鍔� 鎵ц鍏ュ簱{鑻ラ渶瑕佸彲浠ュ啓鍏ヤ换鍔″彿绛夌瓑鍏朵粬淇℃伅} - listResult.Add(plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue)); // 鐩爣宸ヤ綅 - var modPosTask = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟鍙�" && s.IsDelete == false); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, numModel.DbNumber, modPosTask.PlcPos, TaskNo)); - var modPosTaskType = PLCTaskAction.plcPositions.First(s => s.DeviceId == numModel.Id && s.Text == "浠诲姟绫诲瀷" && s.IsDelete == false); - var taskTypeStr = (int)taskModel.TaskType; - listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, numModel.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); - - if (listResult.All(s => s.IsSucceed)) + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + if (retVal.IsSucceed) { - // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� - var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); - if (retVal.IsSucceed) - { - // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц - taskModel.Status = TaskStatusEnum.Doing; - _db.Updateable(taskModel).ExecuteCommand(); + // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц + taskModel.Status = TaskStatusEnum.Doing; + _db.Updateable(taskModel).ExecuteCommand(); - // 鎻掑叆浠诲姟鏄庣粏 - var modInsertTaskMonitor = new WcsTaskMonitor() - { - TaskNo = TaskNo, - PlcId = modDevice.Id, - PlcName = modDevice.Text, - InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�", - PalletNo = palletNo, - Status = TaskStatusEnum.Complete, - StartLocat = modDevice.StationNum, - EndLocat = strMsg, - }; - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); - // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + string sqlStr = $"insert into WCSBoxInfoLog select * from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; + int insertCount = _db.Ado.ExecuteCommand(sqlStr); + if (insertCount > 0) + { + string sqlStr2 = $"delete from WCSBoxInfo where IsDelete=0 and PalletNo='{palletNo}'"; + _db.Ado.ExecuteCommand(sqlStr2); } + + // 鎻掑叆浠诲姟鏄庣粏 + var modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护50锛氱敵璇峰贩閬撴垚鍔�", + PalletNo = palletNo, + Status = TaskStatusEnum.Complete, + StartLocat = modDevice.StationNum, + EndLocat = strMsg, + }; + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } } } } } break; - default:break; + case "100": + //鑷姩缁撴壒 + { + // 鑾峰彇褰撳墠鍒嗛亾鎵樼洏鍙� + var checkTaskMedel = _db.Queryable<WcsCheckTask>().First(m => m.Port == modDevice.StationNum && m.IsDelete == false); + if (checkTaskMedel == null) + { + Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛屾壒娆1}锛岃嚜鍔ㄧ粨鎵瑰け璐�!璇蜂汉宸ュ己鍒剁粨鎵�!", modDevice.StationNum, checkTaskMedel.LotNo)); + break; + } + // 瑙﹀彂缁撴壒 瑙g粦鍒嗛亾 + AutoEndLot(checkTaskMedel.LotNo, plcConn, "0", modDevice); + } + break; + default: break; } - } + } } /// <summary> @@ -2055,19 +2994,22 @@ } } - /// <summary> - /// Led灞忓睍绀轰俊鎭� - /// </summary> - /// <param name="ip">鍦板潃</param> - /// <param name="top">涓婃柟鍖哄煙</param> - /// <param name="content">涓棿鍖哄煙</param> - /// <param name="foot">搴曢儴鍖哄煙</param> - private static void LedDisplay(string ip, string top, string content, string foot) + private static void LedDisplay(string ip,string text,int type=0) { try { LedDll Led = new LedDll(); - Led.LEDstr(ip, top, content, foot); + if (type == 0) + { + Led.ConsoleLeds(ip, text); + } + else + { + Led.LEDstr(ip, text); + } + + // 璁剧疆瀹炰緥 + //Led.ConsoleLeds("10.18.51.238", $"浠诲姟绫诲瀷:{TaskTypeEnum.Move.GetDescription()}\n\n浠诲姟鍙�:TK2024102100001\n鎵樼洏鍙�:LN000145\n\n璧峰浣�:033\n鐩爣浣�:R01-02010102"); } catch (Exception ex) { @@ -2075,18 +3017,74 @@ } } - private static void LedDisplay(string ip,string text) + /// <summary> + /// 鑷姩缁撴壒 骞� 瑙g粦鍒嗛亾 + /// </summary> + /// <param name="lotNo">鎵规鍙�</param> + /// <param name="plcConn">Plc杩炴帴</param> + /// <param name="status">鏄惁瑙g粦鍒嗛亾 0锛氳В缁� 1锛氱粦瀹�</param> + private static void AutoEndLot(string lotNo, PLCUtil plcConn, string status, WcsDeviceDto modDevice) { try { - LedDll Led = new LedDll(); - Led.ConsoleLeds(ip, text); - // 璁剧疆瀹炰緥 - //Led.ConsoleLeds("10.18.51.238", $"浠诲姟绫诲瀷:{TaskTypeEnum.Move.GetDescription()}\n\n浠诲姟鍙�:TK2024102100001\n鎵樼洏鍙�:LN000145\n\n璧峰浣�:033\n鐩爣浣�:R01-02010102"); + if (string.IsNullOrWhiteSpace(lotNo)) + { + Console.WriteLine("鎵规鍙蜂负null"); + } + + var checkTaskList = _db.Queryable<WcsCheckTask>().Where(w => w.LotNo == lotNo && w.Status == "1").ToList(); + if (checkTaskList.Count <= 0) + { + Console.WriteLine("鏈壘鍒板垎閬撶粦瀹氫俊鎭�"); + } + var taskInfo = _db.Queryable<WcsOderTask>().First(w => w.OrderNo == checkTaskList[0].OrderNo); + if (taskInfo != null) + { + taskInfo.Status= TaskStatusEnum.Complete;//宸茬粨鏉� + //鏇存柊浠诲姟鐘舵�� + _db.Updateable(taskInfo).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); + } + foreach (var item in checkTaskList) + { + #region#缁橮LC鍐欏叆缁撴壒鎵规鍙� + var listResult = new List<Result>(); + listResult.Add(plcConn.SetPlcDBValueRepeat(item.PosType, item.DbNumber, item.PlcPos, "0"));//鍝佺鍙� + listResult.Add(plcConn.SetPlcDBValueRepeat(item.PosTypeLot, item.DbNumber, item.PosLot, ""));//鎵规鍙� + listResult.Add(plcConn.SetPlcDBValueRepeat(item.PosTypeStatus, item.DbNumber, item.PosStatus, "0"));//缁戝畾鐘舵�� 0锛氭湭缁戝畾 1锛氬凡缁戝畾 + if (listResult.All(s => s.IsSucceed)) + { + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "110"); + if (retVal.IsSucceed) + { + //鍐欏叆娴佺▼瀛楁垚鍔熷悗鏇存柊鍒嗘嫞浠诲姟 + item.OrderNo = ""; + item.TaskNo = ""; + item.LotNo = ""; + item.SkuNo = ""; + item.SkuName = ""; + item.BoxType = ""; + item.Qty = 0; + item.BoxCount = 0; + item.PZNo = ""; + item.PalletNo = ""; + item.Status = status; // 缁戝畾鍒嗛亾 0锛氳В缁� 1锛氱粦瀹� + + //鏇存柊缁戝畾淇℃伅 + _db.Updateable(item).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); + } + } + else + { + throw Oops.Bah("涓嶱CL浜や簰澶辫触锛岀粨鎵瑰け璐ワ紒"); + } + #endregion + } } catch (Exception ex) { Log.Error(ex.Message); + throw; } } -- Gitblit v1.8.0