From c283573b53247033cf83b8fcddd8a022ea6454ab Mon Sep 17 00:00:00 2001 From: IPC-610 <IPC-610@DESKTOP-6LEOOS3> Date: 星期四, 26 九月 2024 08:20:38 +0800 Subject: [PATCH] 修改测试问题 --- Admin.NET/WCS.Application/PLC/PLCService.cs | 934 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 789 insertions(+), 145 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCService.cs b/Admin.NET/WCS.Application/PLC/PLCService.cs index 17059d0..740df09 100644 --- a/Admin.NET/WCS.Application/PLC/PLCService.cs +++ b/Admin.NET/WCS.Application/PLC/PLCService.cs @@ -1,4 +1,5 @@ 锘� +using Dm.filter; using DocumentFormat.OpenXml.Bibliography; using Elastic.Clients.Elasticsearch.Tasks; using Furion.Logging; @@ -10,17 +11,13 @@ using System; using System.Data; using System.Reflection.Emit; +using WCS.Application.Entity; +using WCS.Application.Util; namespace WCS.Application; public static class PLCService { private static readonly ISqlSugarClient _db = SqlSugarSetup.ITenant.GetConnectionScope(SqlSugarConst.MainConfigId); - private static readonly IHubContext<TaskLogHub, ITaskLogHub> _taskLogHubContext; - - static PLCService() - { - _taskLogHubContext = App.GetService<IHubContext<TaskLogHub, ITaskLogHub>>(); - } public static void OnChangeEvent(object sender, EventArgs e) { @@ -31,15 +28,18 @@ switch (mod.Type) { case PLCTypeEnum.StackingMachine: - StackingMachine(mod); + StackingMachine(mod); // 璺烘満 break; case PLCTypeEnum.ConveyorLine: - ConveyorLine(mod); + ConveyorLine(mod); // 鎵樼洏杈撻�佺嚎 break; case PLCTypeEnum.AGV: - AGV(mod); + AGV(mod); // AGV璋冨害 break; - case PLCTypeEnum.PalletMachine: + case PLCTypeEnum.BoxConveyorLine: + BoxConveyorLine(mod); // 鐮佸灈鏈哄櫒浜� + break; + case PLCTypeEnum.StackingRobot: PalletMachine(mod); break; default: @@ -73,7 +73,7 @@ } // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞� - PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, modTask.TaskType.ToString(), + PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(), modTask.StartRoadway, modTask.EndRoadway); // 鐩爣宸ヤ綅涓嶄负null锛岄渶鍏堝垽鏂斁璐у伐浣嶆槸鍚︾┖闂� @@ -107,8 +107,8 @@ } } - // 鑾峰彇杞崲鍚庣殑璧峰鎺掑垪灞� - PlcTaskInfo startTaskInfo = PLCCommon.GetEndPai(modTask.StartLocate.Substring(1, 2), + // 鑾峰彇杞崲鍚庣殑璧峰鎺掑垪灞� 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)); @@ -138,14 +138,14 @@ if (listResult.All(s => s.IsSucceed)) { // 鍐欏叆璺烘満浠诲姟涓嬪彂瀹屾垚 - plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "830"); + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "830"); // 灏嗙Щ搴撲换鍔″緟鎵ц鏀逛负姝e湪鎵ц _db.Updateable<WcsTask>() .SetColumns(s => s.Status == TaskStatusEnum.Doing) .Where(s => s.Id == modTask.Id) .ExecuteCommand(); - _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); WcsTaskMonitor modInsertTaskMonitor; if (string.IsNullOrEmpty(taskInfo.EndStation)) { @@ -181,7 +181,7 @@ // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); //淇敼led灞忎俊鎭� //LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modTask.EndLocate, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿modTask.StartLocate}", "鎵樼洏鍙�:" + modTask.PalletNo); } @@ -195,12 +195,12 @@ 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, modPosTask.PlcPos); + var (endStationRes, endStation) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosEndStation.PlcPos); if (res.IsSucceed) { // 鑾峰彇浠诲姟淇℃伅 string tasknoVal = val.ToString(); - var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == true); + 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:鏈壘鍒板搴旂殑浠诲姟銆�")); @@ -221,17 +221,17 @@ { // 鑾峰彇璺烘満璧峰宸ヤ綅鐐逛綅閰嶇疆,璇诲彇璧峰宸ヤ綅 var modPosStartStation = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); - var (startStationRes, startStationVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosStartStation.PlcPos); + var (startStationRes, startStationVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.Short, modDevice.DbNumber, modPosStartStation.PlcPos); if (startStationRes.IsSucceed) { // 鏍规嵁宸ヤ綅鍙疯幏鍙栧搴旂殑杈撻�佺嚎IP - var plcConveyorConn = PLCCommon.GetPlcIp(startStationVal); + PLCUtil plcConveyorConn = PLCCommon.GetPlcIp(startStationVal.ToString()); if (plcConveyorConn.Connected) { // 鍚戝彇璐у伐浣嶅啓鍏ユ祦绋嬪瓧640 鍙栬揣宸插畬鎴� - var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == startStationVal - && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == true); - var retc = plcConveyorConn.SetPlcDBValue(ConveyorMod.PosType, ConveyorMod.DbNumber, ConveyorMod.WcsPos, "640"); + var ConveyorMod = PLCTaskAction.plcDevices.First(m => m.StationNum == startStationVal.ToString() + && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false); + var modcTaskMonitor = new WcsTaskMonitor() { TaskNo = modTask.TaskNo, @@ -239,53 +239,83 @@ PlcName = ConveyorMod.Text, PalletNo = modTask.PalletNo, Status = TaskStatusEnum.Complete, - StartLocat = startStationVal, + StartLocat = startStationVal.ToString(), EndLocat = modTask.EndLocate // 鐩爣鍌ㄤ綅鍦板潃 }; + + // 璇诲彇wcs鎺у埗瀛� + 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); + modcTaskMonitor.InteractiveMsg = string.Format("宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚640澶辫触", startStationVal); // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); break; } - modcTaskMonitor.InteractiveMsg = string.Format("杈撻�佺嚎鍙栬揣宸ヤ綅锛歿0},鍐欏叆鍙栬揣瀹屾垚640鎴愬姛", startStationVal); - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modcTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + 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; // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆 } - modInsertTaskMonitor.InteractiveMsg = string.Format("杈撻�佺嚎鍙栬揣宸ヤ綅锛歿0}璺烘満鍙栬揣瀹屾垚850鎴愬姛", startStationVal); - modInsertTaskMonitor.EndLocat = modTask.EndLocate; // 鐩爣鍌ㄤ綅鍦板潃 - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + 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; // 鍐欏叆澶辫触璺冲嚭绛夊緟鍐嶆鍐欏叆 } - // 璁板綍浠诲姟鏄庣粏 - modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚", modTask.StartLocate); - modInsertTaskMonitor.EndLocat = endStation; // 鏀捐揣宸ヤ綅 + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } else { @@ -298,12 +328,13 @@ modInsertTaskMonitor.InteractiveMsg = string.Format("鍌ㄤ綅鍦板潃锛歿0}鍙栬揣瀹屾垚", modTask.StartLocate); modInsertTaskMonitor.EndLocat = endStation; // 鐩爣鍌ㄤ綅 + + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } - // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); - //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); //淇敼led灞忎俊鎭� //LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modTask.EndLocate, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿modTask.StartLocate}", "鎵樼洏鍙�:" + modTask.PalletNo); } @@ -318,7 +349,7 @@ if (res.IsSucceed) { string tasknoVal = val.ToString(); - var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == true); + var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false); if (modTask == null) { Log.Error(string.Format("璺烘満鎺у埗瀛�860:鏈壘鍒板搴旂殑浠诲姟銆�")); @@ -340,8 +371,8 @@ modTask.Status = TaskStatusEnum.Complete; modTask.FinishDate = DateTime.Now; _db.Updateable(modTask).ExecuteCommand(); - _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); - var modcTaskMonitor = new WcsTaskMonitor() + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + var modTaskMonitor = new WcsTaskMonitor() { TaskNo = modTask.TaskNo, PlcId = modDevice.Id, @@ -355,24 +386,34 @@ if (modTask.Origin == "WMS") { // 鍙嶉WMS - var requestMode = new TaskRequest() + var requestMode = new TaskRequestWMS() { TaskNo = modTask.TaskNo, PalletNo = modTask.PalletNo, - TaskType = TaskTypeEnum.In, - TaskStatus = TaskStatusEnum.Complete + TaskType = ((int)TaskTypeEnum.In).ToString(), + TaskStatus = ((int)TaskStatusEnum.Complete).ToString() }; HttpService httpService = new HttpService(); var modResponseTask = httpService.RequestTask(requestMode).Result; - if (modResponseTask.StatusCode == "0") + if (modResponseTask.StatusCode == 0) { - modcTaskMonitor.InteractiveMsg = "浠诲姟瀹屾垚锛岃繑鍥炵粰WMS浠诲姟瀹屾垚"; + modTaskMonitor.InteractiveMsg = "浠诲姟瀹屾垚锛岃繑鍥炵粰WMS浠诲姟瀹屾垚"; + } + else + { + Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg)); } } + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == modTask.StartLocate).Select(s => s.LedIP).First(); + // 鎻掑叆浜や簰鏃ュ織 - _db.Insertable(modcTaskMonitor).ExecuteCommand(); + _db.Insertable(modTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(modTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + // led鏄剧ず鍐呭 + LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modTask.StartLocate, "鍏ュ簱瀹屾垚 " + $"浠诲姟瀹屾垚:{modTask.TaskNo}", "鎵樼洏鍙�:" + modTask.PalletNo); // 姝ゅ娣诲姞涓嶇┖璺戜笟鍔� } @@ -387,7 +428,7 @@ if (plcConveyorConn.Connected) { // 鏍规嵁鐩爣鍦板潃鍜屽贩閬撹幏鍙栨斁璐у伐浣嶅搴旂殑鎺掑垪灞� - PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, modTask.TaskType.ToString(), + PlcTaskInfo taskInfo = PLCCommon.GetCTaskInfo(modTask.EndLocate, ((int)modTask.TaskType).ToString(), modTask.StartRoadway, modTask.EndRoadway); // 鏍规嵁宸ヤ綅鍙疯幏鍙栧伐浣嶄俊鎭� var wcsDevice = PLCTaskAction.plcDevices.First(s => s.PlcId == plcConveyorConn.PlcId && s.Level == DeviceLevelEnum.Station && s.StationNum == taskInfo.EndStation); @@ -398,19 +439,19 @@ var listResult = new List<Result>(); //浠诲姟鍙� var modPosTask = listPos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); + listResult.Add(plcConveyorConn.SetPlcDBValue(modPosTask.PosType, wcsDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); //浠诲姟绫诲瀷 var modPosTaskType = listPos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); - listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString())); + listResult.Add(plcConveyorConn.SetPlcDBValue(modPosTaskType.PosType, wcsDevice.DbNumber, modPosTaskType.PlcPos, ((int)modTask.TaskType).ToString())); //鎵樼洏鍙� var modPosPalletNo = listPos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); - listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + listResult.Add(plcConveyorConn.SetPlcDBValue(modPosPalletNo.PosType, wcsDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); //璧峰宸ヤ綅 var modPosLocatNo = listPos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); - listResult.Add(plcConn.SetPlcDBValue(modPosLocatNo.PosType, modDevice.DbNumber, modPosLocatNo.PlcPos, taskInfo.EndStation)); + listResult.Add(plcConveyorConn.SetPlcDBValue(modPosLocatNo.PosType, wcsDevice.DbNumber, modPosLocatNo.PlcPos, taskInfo.EndStation)); // 鐩爣宸ヤ綅 var modPosEndLocatNo = listPos.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); - listResult.Add(plcConn.SetPlcDBValue(modPosEndLocatNo.PosType, modDevice.DbNumber, modPosEndLocatNo.PlcPos, outCode)); + listResult.Add(plcConveyorConn.SetPlcDBValue(modPosEndLocatNo.PosType, wcsDevice.DbNumber, modPosEndLocatNo.PlcPos, outCode)); // 鏄惁鍐欏叆鎴愬姛 if (listResult.All(s => s.IsSucceed)) @@ -437,7 +478,15 @@ // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modcTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + var taskModel = _db.Queryable<WcsTask>().First(w => w.TaskNo == modTask.TaskNo); + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskModel.StartLocate).Select(s => s.LedIP).First(); + + // led鏄剧ず鍐呭 + LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modDevice.StationNum, "鍑哄簱涓� ", "鎵樼洏鍙�:" + modTask.PalletNo); + break; } } @@ -466,8 +515,7 @@ modTask.FinishDate = DateTime.Now; _db.Updateable(modTask).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); - + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); var modcTaskMonitor = new WcsTaskMonitor() { TaskNo = modTask.TaskNo, @@ -482,16 +530,16 @@ if (modTask.Origin == "WMS") { // 鍙嶉WMS - var requestMode = new TaskRequest() + var requestMode = new TaskRequestWMS() { TaskNo = modTask.TaskNo, PalletNo = modTask.PalletNo, - TaskType = TaskTypeEnum.Move, - TaskStatus = TaskStatusEnum.Complete + TaskType = TaskTypeEnum.Move.ToString(), + TaskStatus = TaskStatusEnum.Complete.ToString() }; HttpService httpService = new HttpService(); var modResponseTask = httpService.RequestTask(requestMode).Result; - if (modResponseTask.StatusCode == "0") + if (modResponseTask.StatusCode == 0) { modcTaskMonitor.InteractiveMsg = "浠诲姟瀹屾垚锛岃繑鍥炵粰WMS浠诲姟瀹屾垚"; //淇敼鍌ㄤ綅淇℃伅 浠诲姟绫诲瀷 鎵ц鐘舵�� 璧峰浣嶇疆 鐩爣浣嶇疆 @@ -501,7 +549,7 @@ // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modcTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); // 姝ゅ娣诲姞涓嶇┖璺戜笟鍔� } @@ -535,7 +583,7 @@ break; modTask.Status = TaskStatusEnum.Exception; _db.Updateable(modTask).UpdateColumns(s => s.Status).ExecuteCommand(); - _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); Log.Information($"銆愬爢鍨涙満銆憌cs浠诲姟鍙樻洿绌哄彇寮傚父锛屼换鍔″彿锛歿modTask.TaskNo}"); var modTaskRequest = modTask.Adapt<TaskRequest>(); HttpService httpService = new HttpService(); @@ -546,7 +594,7 @@ modTask.IsSuccess = TaskSuccessEnum.Success; _db.Updateable(modTask).UpdateColumns(s => s.IsSuccess).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); } else { @@ -554,7 +602,7 @@ modTask.IsSuccess = TaskSuccessEnum.Fail; modTask.Information = modResponseTask.Message; _db.Updateable(modTask).UpdateColumns(s => new { s.IsSuccess, s.Information }).ExecuteCommand(); - _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); } } break; @@ -575,7 +623,7 @@ } modTask.Status = TaskStatusEnum.Exception; _db.Updateable(modTask).UpdateColumns(s => s.Status).ExecuteCommand(); - _taskLogHubContext.Clients.All.PublicTask(modTask.Adapt<WcsTaskOutput>()); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); Log.Information($"銆愬爢鍨涙満銆憌cs浠诲姟鍙樻洿婊″彇寮傚父锛屼换鍔″彿锛歿modTask.TaskNo}"); var modTaskRequest = modTask.Adapt<TaskRequest>(); HttpService httpService = new HttpService(); @@ -629,7 +677,7 @@ // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modcTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(modcTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } } @@ -647,13 +695,171 @@ } } /// <summary> + /// 鍫嗗灈鏈轰笉绌鸿窇 + /// </summary> + /// <param name="modTask">鎿嶄綔瀹屾垚鐨勪换鍔�</param> + /// <param name="plcConn">plc杩炴帴</param> + /// <param name="modDevice">璁惧淇℃伅</param> + private static void ContinuousOperation(WcsTask modTask, PLCUtil plcConn, WcsDeviceDto modDevice) + { + // 鏌ヨ鎵�鏈夊緟鎵ц鐨勪换鍔� + var listTask = _db.Queryable<WcsTask>().Where(s => s.Status == TaskStatusEnum.Wait).ToList(); + WcsTask modNextTask = null; + switch (modTask.TaskType) + { + case TaskTypeEnum.In: + { + // 鍏堟壘鍑哄搴旀帓鍒楀眰鐨勫叆搴撲换鍔� + var listInTask = listTask.Where(s => s.TaskType == TaskTypeEnum.In) + .Select(s => s.EndLocate.Substring(0, 6)) + .ToHashSet(); + + // 鎵惧嚭搴撲换鍔★紝瀵瑰簲宸烽亾鐨勪换鍔� + var listNextTask = listTask.Where(s => s.TaskType == TaskTypeEnum.Out && s.StartRoadway == modTask.EndRoadway).ToList(); + + foreach (var modNext in listNextTask) + { + // 濡傛灉鏈夊搴旀帓鍒楀眰鐨勫叆搴撲换鍔★紝閭e氨涓嶈兘浼樺厛鎵ц + if (listInTask.Contains(modNext.EndLocate.Substring(0, 6))) + { + continue; + } + + // todo: 鍐欏叆modNext浠诲姟淇℃伅缁檖lc + Console.WriteLine($"鍏ュ簱浠诲姟{modTask.TaskNo}鎵ц瀹屾垚鍚庯紝涓嶇┖璺戦�昏緫妫�娴嬩笅涓�浠诲姟涓簕modNext.TaskNo}"); + modNextTask = modNext; + break; + } + } + break; + case TaskTypeEnum.Out: + { + // 鍏堟壘鍑哄搴旀帓鍒楀眰鐨勫嚭搴撲换鍔� + var listInTask = listTask.Where(s => s.TaskType == TaskTypeEnum.Out) + .Select(s => s.EndLocate.Substring(0, 6)) + .ToHashSet(); + + // 鎵惧叆搴撲换鍔★紝瀵瑰簲宸烽亾鐨勪换鍔� + var listNextTask = listTask.Where(s => s.TaskType == TaskTypeEnum.In && s.StartRoadway == modTask.EndRoadway).ToList(); + + foreach (var modNext in listNextTask) + { + // 濡傛灉鏈夊搴旀帓鍒楀眰鐨勫嚭搴撲换鍔★紝閭e氨涓嶈兘浼樺厛鎵ц + if (listInTask.Contains(modNext.EndLocate.Substring(0, 6))) + { + continue; + } + + // todo: 鍐欏叆modNext浠诲姟淇℃伅缁檖lc + Console.WriteLine($"鍑哄簱浠诲姟{modTask.TaskNo}鎵ц瀹屾垚鍚庯紝涓嶇┖璺戦�昏緫妫�娴嬩笅涓�浠诲姟涓簕modNext.TaskNo}"); + modNextTask = modNext; + break; + } + } + break; + case TaskTypeEnum.Move: + { + var modDevicePos = _db.Queryable<WcsDevice>().Where(s => s.PlcId == plcConn.PlcId && s.DeviceType == DeviceTypeEnum.Show).First(); + var (result, value) = plcConn.GetPlcDBValue(modDevicePos.PosType, modDevicePos.DbNumber, modDevicePos.PlcPos); + //褰撳墠鍫嗗灈鏈烘墍鍦ㄤ綅缃� + var height = Math.Round(value / 790000d * 200).ToInt(); + //todo:杩欓噷鐪嬭兘涓嶈兘鎵惧埌鍫嗗灈鏈烘墍鍦ㄤ綅缃湪鍝釜鎺掑垪灞傦紝浼樺厛瀵绘壘闄勮繎鐨勪换鍔★紵 + } + break; + } + if (modNextTask != null) + { + // 鑾峰彇杞崲鍚庣殑璧峰鎺掑垪灞� 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)); + + // 缁橮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)); + var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + listResult.Add(plcConn.SetPlcDBValue(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)); + var modPosColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "鍙栬揣鍒�"); + listResult.Add(plcConn.SetPlcDBValue(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)); + // 鐩爣鏀捐揣宸ヤ綅(鍥哄畾鎺掑垪灞�) + 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)); + var modPosEndColumn = modDevice.listStation.FirstOrDefault(s => s.Text == "鏀捐揣鍒�"); + listResult.Add(plcConn.SetPlcDBValue(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)); + + // 鏄惁鍐欏叆鎴愬姛 + if (listResult.All(s => s.IsSucceed)) + { + // 鍐欏叆璺烘満浠诲姟涓嬪彂瀹屾垚 + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "830"); + + // 灏嗙Щ搴撲换鍔″緟鎵ц鏀逛负姝e湪鎵ц + _db.Updateable<WcsTask>() + .SetColumns(s => s.Status == TaskStatusEnum.Doing) + .Where(s => s.Id == modTask.Id) + .ExecuteCommand(); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); + WcsTaskMonitor modInsertTaskMonitor; + if (string.IsNullOrEmpty(taskInfo.EndStation)) + { + // 鍚屽贩閬撶Щ搴� + modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护锛歿modTask.StartLocate}鍌ㄤ綅====銆媨modTask.EndLocate}鍌ㄤ綅銆�", + PalletNo = modTask.PalletNo, + Status = TaskStatusEnum.Complete, + StartLocat = modTask.StartLocate, + EndLocat = modTask.EndLocate, + }; + } + else + { + // 鍑哄簱浠诲姟 璺ㄥ贩閬撶Щ搴� + modInsertTaskMonitor = new WcsTaskMonitor() + { + TaskNo = modTask.TaskNo, + PlcId = modDevice.Id, + PlcName = modDevice.Text, + InteractiveMsg = $"鍐欏叆鎸囦护锛歿modTask.StartLocate}鍌ㄤ綅====銆媨taskInfo.EndStation}宸ヤ綅銆�", + PalletNo = modTask.PalletNo, + Status = TaskStatusEnum.Complete, + StartLocat = modTask.StartLocate, + EndLocat = modTask.EndLocate, + }; + } + + // 鎻掑叆浜や簰鏃ュ織 + _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + //淇敼led灞忎俊鎭� + //LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modTask.EndLocate, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿modTask.StartLocate}", "鎵樼洏鍙�:" + modTask.PalletNo); + } + } + } + + /// <summary> /// 杈撻�佺嚎涓氬姟澶勭悊 /// </summary> /// <param name="modDevice"></param> private static void ConveyorLine(WcsDeviceDto modDevice) { var plcConn = modDevice.PLCUtil; - // 鑾峰彇妤煎眰鏁� + // 鑾峰彇妤煎眰鏁癱eshi var louCeng = PLCCommon.GetRoadwayByStationNew(modDevice.StationNum); switch (modDevice.Value.ToString()) { @@ -677,12 +883,16 @@ var http = new HttpService(); string TaskNo = "", EndLocate = ""; strMsg = http.RequestRoadWay(palletVal, modDevice.StationNum, taskModel, louCeng, ref EndLocate, ref TaskNo); - + if (!strMsg.Contains("-1")) { + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == TaskNo); + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.StartLocate).Select(s => s.LedIP).First(); + // 鍐欏叆330 var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "330"); - + if (ret.IsSucceed) { // 鎻掑叆浠诲姟鏄庣粏 @@ -697,30 +907,27 @@ StartLocat = modDevice.StationNum, EndLocat = EndLocate, }; - + // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - if (PLCTaskAction.boRefresh) - { - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - // led鏇存柊鍐呭 - //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; - //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "宸ヤ綅:" + EndLocat, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿StartLocat}", "鎵樼洏鍙�:" + PalletNo); + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // led鏄剧ず鍐呭 + LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modDevice.StationNum, "鐢宠鍏ュ簱 " + $"鐩爣宸烽亾锛歿EndLocate}", "鎵樼洏鍙�:" + palletVal); } } else { // 鐢宠宸烽亾澶辫触锛丩ED鏄剧ず - Log.Error(string.Format($"鐢宠宸烽亾澶辫触:{ strMsg },璇诲啓plc閿欒")); + Log.Error(string.Format($"鐢宠宸烽亾澶辫触:{strMsg},璇诲啓plc閿欒")); } } break; case "330": { + // 鍐欏叆浠诲姟 鎵樼洏绉诲姩 340 // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� @@ -732,13 +939,13 @@ } 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 && s.StartRoadway == modDevice.StationNum); + 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); if (modTask == null) { // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず break; } - + // 鑾峰彇宸烽亾鍙e叆搴撳伐浣� string endLocatVlue = PLCCommon.RoadwayToStationNum(modTask.EndRoadway, louCeng); // 缁橮LC鍐欏叆浠诲姟鏁版嵁 @@ -746,8 +953,9 @@ // 浠诲姟鍙枫�佷换鍔$被鍨嬨�佹墭鐩樺彿 var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); listResult.Add(plcConn.SetPlcDBValue(modPosTask.PosType, modDevice.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); - var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); - listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, modTask.TaskType.ToString())); + var modPosTaskType = modDevice.listStation.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); + var taskTypeStr = (int)modTask.TaskType; + listResult.Add(plcConn.SetPlcDBValue(modPosTaskType.PosType, modDevice.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); var modPosPalletNo = modDevice.listStation.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); listResult.Add(plcConn.SetPlcDBValue(modPosPalletNo.PosType, modDevice.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); // 璧峰宸ヤ綅銆佺洰鐨勫伐浣� @@ -755,7 +963,7 @@ listResult.Add(plcConn.SetPlcDBValue(modPosStrLocat.PosType, modDevice.DbNumber, modPosStrLocat.PlcPos, modDevice.StationNum)); var modPosEndLocat = modDevice.listStation.FirstOrDefault(s => s.Text == "鐩殑宸ヤ綅"); listResult.Add(plcConn.SetPlcDBValue(modPosEndLocat.PosType, modDevice.DbNumber, modPosEndLocat.PlcPos, endLocatVlue)); - + if (listResult.All(s => s.IsSucceed)) { @@ -765,10 +973,12 @@ .Where(s => s.Id == modTask.Id) .ExecuteCommand(); // 鍐欏叆娴佺▼瀛� 330 340 - + var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "340"); - - + + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == modTask.StartLocate).Select(s => s.LedIP).First(); + if (ret.IsSucceed) { // 鎻掑叆浠诲姟鏄庣粏 @@ -788,13 +998,10 @@ _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - if (PLCTaskAction.boRefresh) - { - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - // led鏇存柊鍐呭 - //LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modTask.EndLocate, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿modTask.StartLocate}", "鎵樼洏鍙�:" + modTask.PalletNo); + // led鏄剧ず鍐呭 + LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modDevice.StationNum, "鍏ュ簱涓� " + $"鐩爣宸烽亾锛歿endLocatVlue}", "鎵樼洏鍙�:" + palletVal); } } @@ -803,7 +1010,7 @@ case "620": { // 鐢宠鍌ㄤ綅 鏇存柊鍏ュ簱浠诲姟(鍌ㄤ綅鍦板潃) 630 - + var strMsg = ""; var taskModel = ""; // 鍒ゆ柇鏄惁婕旂ず妯″紡 @@ -829,6 +1036,11 @@ string TaskNo = ""; // 鍚慦MS鐢宠鍌ㄤ綅淇℃伅 strMsg = http.RequestLocate(palletVal, modDevice.StationNum, taskModel, roadway, ref TaskNo); + + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇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 @@ -853,13 +1065,9 @@ _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - if (PLCTaskAction.boRefresh) - { - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - // led鏇存柊鍐呭 - //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; - //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "宸ヤ綅:" + EndLocat, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿StartLocat}", "鎵樼洏鍙�:" + PalletNo); + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // led鏄剧ず鍐呭 + LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modDevice.StationNum, "鍏ュ簱涓� " + $"鐢宠鍌ㄤ綅鍦板潃:{strMsg}", "鎵樼洏鍙�:" + palletVal); } } else @@ -867,7 +1075,7 @@ // 鐢宠鍌ㄤ綅澶辫触锛丩ED鏄剧ず Log.Error(string.Format($"鐢宠鍌ㄤ綅澶辫触:{strMsg},璇诲啓plc閿欒")); } - + } break; case "630": @@ -877,10 +1085,10 @@ // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� var modPosPallet = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鐮�"); var (res, palletVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosPallet.PlcPos); - // 鑾峰彇宸ヤ綅鎵樼洏鐮佷俊鎭� + // 鑾峰彇宸ヤ綅浠诲姟鍙蜂俊鎭� var modPosTaskNo = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); var (taskRes, taskNoVal) = plcConn.GetPlcDBValue(PLCDataTypeEnum.String, modDevice.DbNumber, modPosTaskNo.PlcPos); - if (!res.IsSucceed || !taskRes.IsSucceed ) + if (!res.IsSucceed || !taskRes.IsSucceed) { break; } @@ -893,13 +1101,13 @@ // 姝ゆ墭鐩樻病鏈夊搴旂殑杞Щ浠诲姟 led鏄剧ず break; } - + var sInfo = PLCCommon.GetStokePlc(modTask.EndRoadway, louCeng); if (string.IsNullOrWhiteSpace(sInfo.Ip)) { //闇�鍔犱笂LED鏄剧ず Log.Error(string.Format($"鏍规嵁宸烽亾鑾峰彇璺烘満IP澶辫触锛岃鑱旂郴绠$悊鍛�")); - break; + break; } // 璺烘満杩炴帴 var plcStackeConn = PLCTaskAction.listPlcConn.First(m => m.PlcIP == sInfo.Ip); @@ -918,15 +1126,17 @@ string lie = int.Parse(endLocate.Substring(2, 2)).ToString(); string ceng = int.Parse(endLocate.Substring(4, 2)).ToString(); - var djMod = PLCTaskAction.plcDevices.First(m => m.StationNum == modTask.EndRoadway + var djmodel = _db.Queryable<WcsPlc>().First(m => m.IP == sInfo.Ip); + + var djMod = PLCTaskAction.plcDevices.First(m => m.PlcId == djmodel.Id && m.DeviceType == DeviceTypeEnum.Business && m.IsDelete == false); var djInfos = PLCTaskAction.plcPositions.Where(m => m.IsDelete == false && m.DeviceId == djMod.Id).ToList(); var djInfo = djInfos.First(m => m.Text == "PLC娴佺▼瀛�"); // 鑾峰彇璺烘満褰撳墠鐘舵�� var (djRes, djVal) = plcStackeConn.GetPlcDBValue(djMod.PosType, djMod.DbNumber, djMod.PlcPos); - - if (!djRes.IsSucceed || djVal != "820") + + if (!djRes.IsSucceed || djVal.ToString() != "820") { // 璺烘満闈炵┖闂茬瓑寰� break; @@ -938,12 +1148,13 @@ var modPosTask = djInfos.FirstOrDefault(s => s.Text == "浠诲姟鍙�"); listResult.Add(plcStackeConn.SetPlcDBValue(modPosTask.PosType, djMod.DbNumber, modPosTask.PlcPos, modTask.TaskNo)); var modPosTaskType = djInfos.FirstOrDefault(s => s.Text == "浠诲姟绫诲瀷"); - listResult.Add(plcStackeConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, modTask.TaskType.ToString())); - var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鍙�"); - listResult.Add(plcStackeConn.SetPlcDBValue(modPosPallet.PosType, djMod.DbNumber, modPosPallet.PlcPos, modTask.PalletNo)); - + var taskTypeStr = (int)modTask.TaskType; + listResult.Add(plcStackeConn.SetPlcDBValue(modPosTaskType.PosType, djMod.DbNumber, modPosTaskType.PlcPos, taskTypeStr.ToString())); + var modPosPalletNo = djInfos.FirstOrDefault(s => s.Text == "鎵樼洏鐮�"); + listResult.Add(plcStackeConn.SetPlcDBValue(modPosPalletNo.PosType, djMod.DbNumber, modPosPalletNo.PlcPos, modTask.PalletNo)); + //璧峰宸ヤ綅 - var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "鍙栬揣鎺�"); + var modPosStrStationNum = djInfos.FirstOrDefault(s => s.Text == "璧峰宸ヤ綅"); listResult.Add(plcStackeConn.SetPlcDBValue(modPosStrStationNum.PosType, djMod.DbNumber, modPosStrStationNum.PlcPos, modDevice.StationNum)); //鍙栬揣鎺掋�佸垪銆佸眰 @@ -983,7 +1194,7 @@ // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); break; } @@ -991,17 +1202,18 @@ // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); if (PLCTaskAction.boRefresh) - { //涓嬪彂浠诲姟鏃ュ織 - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + { + //涓嬪彂浠诲姟鏃ュ織 + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); } - - } - - - + } + + + + } - + #endregion } break; @@ -1014,7 +1226,7 @@ // led鏄剧ず鎵樼洏淇℃伅 // 鍐欏叆430 var ret = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "430"); - + if (ret.IsSucceed) { var modPosTask = modDevice.listStation.FirstOrDefault(m => m.Text == "浠诲姟鍙�"); @@ -1040,14 +1252,14 @@ _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - if (PLCTaskAction.boRefresh) - { - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - - // led鏇存柊鍐呭 - //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; - //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "宸ヤ綅:" + EndLocat, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿StartLocat}", "鎵樼洏鍙�:" + PalletNo); + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + + // 鏍规嵁浠诲姟鍙疯幏鍙栬捣濮嬪伐浣嶅湴鍧�锛屾牴鎹捣濮嬪伐浣嶅湴鍧�鑾峰彇LEDIP 鎺ㄩ�佸埌LED灞忓箷銆� + var taskInfo = _db.Queryable<WcsTask>().First(w => w.TaskNo == modInsertTaskMonitor.TaskNo); + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == taskInfo.StartLocate).Select(s => s.LedIP).First(); + + // led鏄剧ず鍐呭 + LedDisplay(modDevice.LedIP, "鍒拌揪宸ヤ綅:" + modDevice.StationNum, "鍑哄簱瀹屾垚 " + $"鍌ㄤ綅鍦板潃锛歿modInsertTaskMonitor.StartLocat}", "鎵樼洏鍙�:" + palletVal); } // 鍙嶉WMS鍑哄簱瀹屾垚 //TaskReques taskReques = new TaskReques(); @@ -1071,30 +1283,61 @@ var (res2, palletVal) = plcConn.GetPlcDBValue(modPosPallet.PosType, modDevice.DbNumber, modPosPallet.PlcPos); var modPosStarStationNum = modDevice.listStation.FirstOrDefault(m => m.Text == "璧峰宸ヤ綅"); var (res3, starVal) = plcConn.GetPlcDBValue(modPosStarStationNum.PosType, modDevice.DbNumber, modPosStarStationNum.PlcPos); + + string tasknoVal = taskVal.ToString(); + var modTask = _db.Queryable<WcsTask>().First(m => m.Status == TaskStatusEnum.Doing && m.TaskNo == tasknoVal && m.IsDelete == false); + if (modTask == null) + { + Log.Error(string.Format("杈撻�佺嚎440:鏈壘鍒板搴旂殑浠诲姟銆�")); + break; + } + // 鏀瑰彉浠诲姟鐘舵�� + modTask.Status = TaskStatusEnum.Complete; + modTask.FinishDate = DateTime.Now; + _db.Updateable(modTask).ExecuteCommand(); + HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); // 鎻掑叆浠诲姟鏄庣粏 var modInsertTaskMonitor = new WcsTaskMonitor() { - TaskNo = taskVal, + TaskNo = modTask.TaskNo, PlcId = modDevice.Id, PlcName = modDevice.Text, InteractiveMsg = $"鍐欏叆鎸囦护450锛歿modDevice.StationNum}鎷i�夊畬鎴�,鎵樼洏绂诲紑宸ヤ綅", PalletNo = palletVal, Status = TaskStatusEnum.Complete, - StartLocat = starVal, + StartLocat = starVal.ToString(), EndLocat = modDevice.StationNum, }; + if (modTask.Origin == "WMS") + { + // 鍙嶉WMS + var requestMode = new TaskRequestWMS() + { + TaskNo = modTask.TaskNo, + PalletNo = modTask.PalletNo, + TaskType = ((int)TaskTypeEnum.Out).ToString(), + TaskStatus = ((int)TaskStatusEnum.Complete).ToString() + }; + HttpService httpService = new HttpService(); + var modResponseTask = httpService.RequestTask(requestMode).Result; + if (modResponseTask.StatusCode == 0) + { + modInsertTaskMonitor.InteractiveMsg += "锛岃繑鍥炵粰WMS浠诲姟瀹屾垚"; + } + else + { + Log.Error(string.Format("浠诲姟鍙嶉澶辫触锛歋tatusCode锛歿0};Msg锛歿1}", modResponseTask.StatusCode, modResponseTask.Msg)); + } + } // 鎻掑叆浜や簰鏃ュ織 _db.Insertable(modInsertTaskMonitor).ExecuteCommand(); // 閫氱煡浠诲姟鐣岄潰浠诲姟宸插瓨鍦ㄦ洿鏂� 璇锋洿鏂扮晫闈� - if (PLCTaskAction.boRefresh) - { - _taskLogHubContext.Clients.All.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); - } - // led鏇存柊鍐呭 - //DataRow ConveyorsRow10 = PlcInfoDt.Select($"Level = '2' and StationNum = '{EndLocat}'")[0]; - //LedDisplay(ConveyorsRow10["LedIP"].ToString(), "宸ヤ綅:" + EndLocat, "鍑哄簱涓� " + $"鍌ㄤ綅鍦板潃锛歿StartLocat}", "鎵樼洏鍙�:" + PalletNo); + HubUtil.PublicTaskMonitor(modInsertTaskMonitor.Adapt<WcsTaskMonitorOutput>()); + // led鏄剧ず鍐呭 + modDevice.LedIP = _db.Queryable<WcsDevice>().Where(w => w.StationNum == modTask.StartLocate).Select(s => s.LedIP).First(); + LedDisplay(modDevice.LedIP, "宸ヤ綅:" + modTask.StartLocate, $"鎷i�夊畬鎴愶紝鎵樼洏绂诲紑宸ヤ綅", "鎵樼洏鍙�:" + modTask.PalletNo); } #endregion } @@ -1120,7 +1363,408 @@ /// <param name="modDevice"></param> private static void PalletMachine(WcsDeviceDto modDevice) { + var plcConn = modDevice.PLCUtil; + switch (modDevice.Value.ToString()) + { + case "220": + // 娉ㄩ噴1 + { + + } + break; + case "230": + // 娉ㄩ噴2 + { + + } + break; + case "240": + { + } + break; + default: break; + } + } + + /// <summary> + /// 浠剁杈撻�佸拰鐮佸灈鏈哄櫒浜轰笟鍔″鐞� 閰嶇疆鐨勬槸浠剁杈撻�� + /// </summary> + /// <param name="modDevice"></param> + private static async void BoxConveyorLine(WcsDeviceDto modDevice) + { + var plcConn = modDevice.PLCUtil; + + if (modDevice.DbNumber == "DB101") + { + // 涓绘壂浜や簰娴佺▼ + switch (modDevice.Value.ToString()) + { + case "1": + // 涓绘壂鐢宠鍒嗛亾 wcs鍐欏叆2 + { + // 鍒ゆ柇鏄惁婕旂ず妯″紡 true锛氭紨绀烘ā寮� false:鐢熶骇妯″紡 + if (PLCTaskAction.boDemo) + { + // 閫氶亾鍙� + 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) + { + Log.Error("婕旂ず妯″紡鍐欏叆鍒嗛亾鍙峰け璐�!"); + break; + } + } + } + else + { + // 閫氶亾鍙� + var modPosTask = modDevice.listStation.FirstOrDefault(s => s.Text == "閫氶亾鍙�"); + + // 璇诲彇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())) + { + // 绠辩爜涓簄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("绠辩爜涓簄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; + default: break; + } + } + else + { + // 鎻掔爜浜や簰 + switch (modDevice.Value.ToString()) + { + case "1": + // 鎵樼洏鏉$爜鍙 + { + // 鑾峰彇鎵樼洏鏉$爜閰嶇疆 + var modPalletNo = modDevice.listStation.FirstOrDefault(m => m.Text == "鎵樼洏鏉$爜"); + // 璇诲彇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; + } + + // 鏍规嵁宸ヤ綅鍙峰皢鎵樼洏鍙蜂繚瀛樺湪鍒嗛亾琛� + 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; + } + checkTaskMedel.PalletNo = palletNo; + var rowCount = _db.Updateable(checkTaskMedel).ExecuteCommand(); + if (rowCount > 0 ) + { + // plc鍐欏叆璇诲彇鎴愬姛琛ㄧず 2 + var retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "2"); + if (retVal.IsSucceed) + { + // liudl 姝ゅ闇�娣诲姞 + // 閫氱煡鍒嗘嫞鐮佸灈椤垫洿鏂� + } + } + } + break; + case "20": + // 鐢宠鎻掔爜 + { + // 鑾峰彇鎵樼洏鏉$爜閰嶇疆 + var modAddCode = modDevice.listStation.FirstOrDefault(m => m.Text == "鎻掔爜缁撴灉"); + // 鍒ゆ柇鏄惁婕旂ず妯″紡 true锛氭紨绀烘ā寮� false:鐢熶骇妯″紡 + if (PLCTaskAction.boDemo) + { + // 婕旂ず妯″紡鐩存帴鍐欏叆鎻掔爜缁撴灉 1锛氭垚鍔� + var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); + break; + } + else + { + // 鑾峰彇绠辨潯鐮� + // 鑾峰彇绠辨潯鐮侀厤缃� + var modBoxNo = modDevice.listStation.FirstOrDefault(m => m.Text == "绠辨潯鐮�"); + var (res, boxVal) = plcConn.GetPlcDBValue(modBoxNo.PosType, modDevice.DbNumber, modBoxNo.PlcPos); + string boxNo = boxVal.ToString(); + if (string.IsNullOrEmpty(boxNo)) + { + Log.Error(string.Format("鐮佸灈宸ヤ綅{0}锛岀鐮佷负null鎻掔爜澶辫触!璇蜂汉宸ュ己鍒剁粨鎵广��"), modDevice.StationNum); + // 鍐欏叆鎻掑叆缁撴灉 2锛氭彃鐮佸け璐� + var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); + break; + } + // 楠岃瘉绠辩爜琛ㄦ槸鍚﹀瓨鍦ㄦ绠辩爜 + var boxInfo = _db.Queryable<WcsBoxInfo>().First(w => w.IsDelete == false && w.BoxNo == boxNo); + if (boxInfo == null) + { + 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)); + break; + } + // 淇敼鎻掔爜琛� + boxInfo.PalletNo = palletNo; + boxInfo.UpdateTime = DateTime.Now; + var rowCount = _db.Updateable(boxInfo).ExecuteCommand(); + if (rowCount > 0) + { + // 鎻掔爜鎴愬姛 + var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "1"); + } + else + { + // 鎻掔爜澶辫触 + Log.Error(string.Format("绠辩爜{0};鐮佸灈宸ヤ綅{1}锛屾彃鐮佸け璐ワ紝璇峰己鍒剁粨鎵�"),boxNo,modDevice.StationNum); + var retVal = plcConn.SetPlcDBValue(modAddCode.PosType, modDevice.DbNumber, modAddCode.PlcPos, "2"); + } + } + } + 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); + 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)); + + // 鍐欏叆浜や簰宸ヤ綅鐩爣鍦板潃 + var retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, "234"); + if (retVal.IsSucceed) + { + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + } + break; + } + + // 鐮佸灈宸ヤ綅鎵樼洏鍙� + 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)); + break; + } + else + { + // 鑾峰彇鍏ュ簱浠诲姟淇℃伅 + 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 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(); + } + } + } + } + else + { + // 鏍规嵁鎵樼洏鍙凤紝灏嗙粍鎵樹俊鎭彃鍏oxinfolog琛� 骞跺垹闄oxinfo琛ㄦ暟鎹� + var boxInfoList = await _db.Queryable<WcsBoxInfo>().Where(w => w.IsDelete == false && w.PalletNo == palletNo).ToListAsync(); + 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"); + } + 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")) + { + Log.Error(string.Format("鐢宠宸烽亾澶辫触锛岀爜鍨涘伐浣峽0};鍘熷洜{1}", modDevice.StationNum, strMsg)); + break; + } + else + { + // 鑾峰彇鍏ュ簱浠诲姟淇℃伅 + 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 retVal = plcConn.SetPlcDBValue(posModel.PosType, numModel.DbNumber, posModel.PlcPos, endLocatVlue); + if (retVal.IsSucceed) + { + // 鍐欏叆缁勬墭鍥炲娴佺▼瀛� + retVal = plcConn.SetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.WcsPos, "50"); + if (retVal.IsSucceed) + { + // 灏嗗叆搴撲换鍔$敱姝e湪鎵ц鏀逛负姝e湪鎵ц + taskModel.Status = TaskStatusEnum.Doing; + _db.Updateable(taskModel).ExecuteCommand(); + } + } + } + } + } + } + break; + default:break; + } + } + } + + /// <summary> + /// 鎷嗗灈鏈哄櫒浜轰笟鍔″鐞� + /// </summary> + /// <param name="modDevice"></param> + private static void StackingRobot(WcsDeviceDto modDevice) + { + var plcConn = modDevice.PLCUtil; + switch (modDevice.Value.ToString()) + { + case "0": + { + // 鑻ユ媶鍨涘伐浣嶄负绌洪棽锛屾煡璇换鍔¤〃鏄惁鏈夋湭缁戝畾鐨勫嚭搴撲换鍔★紝鍋氱粦瀹氭搷浣� + } + break; + default: + break; + } + } + + /// <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) + { + try + { + LedDll Led = new LedDll(); + Led.LEDstr(ip, top, content, foot); + } + catch { } } private static void Test(WcsDeviceDto modDevice) -- Gitblit v1.8.0