From c8131be7ad55d2c652205527666075c1b5034b27 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期二, 06 五月 2025 11:11:21 +0800 Subject: [PATCH] 去除console --- Admin.NET/WCS.Application/PLC/PLCTaskAction.cs | 397 +++++++++++++++++++------------------------------------- 1 files changed, 138 insertions(+), 259 deletions(-) diff --git a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs index 17bcb90..38b08f4 100644 --- a/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs +++ b/Admin.NET/WCS.Application/PLC/PLCTaskAction.cs @@ -9,6 +9,7 @@ using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using OnceMi.AspNetCore.OSS; +using Qiniu.Storage; using System; using System.Drawing.Drawing2D; using System.Net.NetworkInformation; @@ -52,6 +53,7 @@ private static List<ModbusUtil> listModbusUtil = new List<ModbusUtil>(); + public static List<ModbusUtil> modbusUtilConn { get { return listModbusUtil; } @@ -86,11 +88,12 @@ boDrumReversal = _sysConfigService.GetConfigValue<bool>("sys_DrumReversal").Result; boOutLock = _sysConfigService.GetConfigValue<bool>("sys_BoOutLock").Result; boEnterLock = _sysConfigService.GetConfigValue<bool>("sys_BoEnterLock").Result; + } /// <summary> /// 鍒濆鍖朠LC杩炴帴 /// </summary> - public static void Init() + public static void Init() { cts.Cancel(); listPlc = _db.Queryable<WcsPlc>() @@ -209,15 +212,6 @@ var (result, value) = modPlcUtil.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos); if (result.IsSucceed) { - ////濡傛灉鏄┛姊溅锛岃繖閲屽彂閫佸績璺� - //if (modPlc.Type == PLCTypeEnum.ShuttleCar) - //{ - // var modHeart = listPlcPosition.Where(s => s.DeviceId == modDevice.Id && s.Text == "蹇冭烦").FirstOrDefault(); - // if (modHeart != null) - // { - // modPlcUtil.SetPlcDBValue(modHeart.PosType, modHeart.PlcPos, "1"); - // } - //} //鏃犳祦绋嬭烦鍑� if (Convert.ToInt32(value) == 0) continue; @@ -338,7 +332,7 @@ - Thread.Sleep(1000); + Thread.Sleep(3000); } catch (OperationCanceledException) { @@ -363,7 +357,7 @@ { while (true) { - Console.WriteLine("寮�鍚洓鍚戣溅浠诲姟鑷垎閰�"); + //Console.WriteLine("寮�鍚洓鍚戣溅浠诲姟鑷垎閰�"); //鍙栨秷绾跨▼ 鍏抽棴PLC杩炴帴 if (cts.Token.IsCancellationRequested) { @@ -376,16 +370,89 @@ } try { + + // 鑾峰彇瀵嗛泦搴撴湭鎵ц浠诲姟 鏍规嵁鍒涘缓鏃堕棿鎺掑簭 - var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => s.CreateTime).First(); + var waitTask = _db.Queryable<WcsTask>().Where(s => s.IsDelete == false && s.Status == TaskStatusEnum.Wait && s.Type == PLCTypeEnum.ShuttleCar).OrderBy(s => new {s.Levels, s.CreateTime}).First(); if (waitTask == null) { continue; } + var starLocate = ""; + var endLocate = ""; + var taskceng = 0; //01010101: 01鎺� 01鍒� 01灞� 01娣卞害-姝ら」鐩笉鍋氬垽鏂� - var taskpai = int.Parse(waitTask.StartLocate.Substring(0, 2)); - var tasklie = int.Parse(waitTask.StartLocate.Substring(2, 2)); - var taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2)); + + if (waitTask.TaskType == TaskTypeEnum.In ) + { + //鍏ュ簱浠诲姟璧峰宸烽亾灏辨槸璧峰宸ヤ綅 + if (string.IsNullOrWhiteSpace(waitTask.StartRoadway) || string.IsNullOrWhiteSpace(waitTask.EndLocate)) + { + continue; + } + + taskceng = int.Parse(waitTask.StartRoadway.Substring(4, 2)); + starLocate = waitTask.StartRoadway; + endLocate = waitTask.EndLocate; + } + else if (waitTask.TaskType == TaskTypeEnum.Out) + { + taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2)); + starLocate = waitTask.StartLocate; + endLocate = waitTask.EndRoadway; + + #region 娣诲姞杈撻�佺嚎涓庝换鍔¢獙璇� + + + + var text = ""; + var devStation = ""; + var carcon = new carConverModel(); + if (carcon.conveyorBei.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍖�"; + devStation = carcon.conveyorBei[endLocate]; + } + else if (carcon.conveyorNan.Keys.Contains(endLocate)) + { + text = "杈撻�佺嚎鍗�"; + devStation = carcon.conveyorNan[endLocate]; + } + if (text != "") + { + var modPlc = PLCTaskAction.plcs.FirstOrDefault(s => s.Text == text); + var modConn = new PLCUtil(modPlc); + + var modDevice = PLCTaskAction.plcDevices.First(s => s.StationNum == devStation); + var (plcResult, palletVal) = modConn.GetPlcDBValue(modDevice.PosType, modDevice.DbNumber, modDevice.PlcPos); + if (!plcResult.IsSucceed || Convert.ToInt32(palletVal) != 720) + { + continue;//鏀捐揣宸ヤ綅娌℃湁璇诲彇鎴愬姛鎴栦笉鏄┖闂� + } + modConn.Close(); + + var gongwei = carcon.conveyorRuKu[endLocate]; + //鍒ゆ柇浠诲姟 + var convarTask = _db.Queryable<WcsTask>().First(m => m.IsDelete == false && m.StartLocate == gongwei && m.Type == PLCTypeEnum.ConveyorLine); + if (convarTask != null) + { + continue;//鏀捐揣宸ヤ綅鏈変换鍔� + } + } + + + #endregion + } + else if (waitTask.TaskType == TaskTypeEnum.Move) + { + taskceng = int.Parse(waitTask.StartLocate.Substring(4, 2)); + starLocate = waitTask.StartLocate; + endLocate = waitTask.EndLocate; + } + else + { + continue; + } #region 鑾峰彇褰撳墠浠诲姟鎵�鍦ㄥ眰鎵�鏈夌┖闂插皬杞� @@ -412,6 +479,19 @@ { //鑾峰彇宸ヤ綅WCSPLCPosition淇℃伅 var plcPosition = listPlcPosition.Where(s => s.DeviceId == modDevice.Id).ToList(); + if (value == 3) + { + var modCarDl = plcPosition.FirstOrDefault(s => s.Text == "鐢垫睜鐢甸噺"); + var (resultDl, valueDl) = modbusUtil.GetDBValue(modCarDl.PosType, modCarDl.PlcPos); + if (resultDl.IsSucceed && valueDl> (int)FourWayCarDLEnum.Dl) + { + //鍐欏叆缁撴潫鍏呯數鍛戒护 + var modCdEnd = plcPosition.FirstOrDefault(s => s.Text == "鍏呯數鍛戒护"); + var resultDl22 = modbusUtil.SetDBValue(modCdEnd.PosType, modCdEnd.PlcPos.ToString(), "3") ; + carErr = true; + break; //鏆傜紦鍒嗛厤锛岄槻姝㈠悓灞傚皬杞﹀叧鏈烘垨澶辫仈瀵艰嚧闃绘尅璺緞 + } + } //灏忚溅绌洪棽鍔犲叆闆嗗悎 if (value == 1) { @@ -430,7 +510,7 @@ { var carVal = ((int)valuex).ToString().PadLeft(2, '0') + ((int)valuey).ToString().PadLeft(2, '0') + ((int)valuez).ToString().PadLeft(2, '0'); //灏忚溅鍒板彇璐у偍浣嶈矾寰� - var d = FourWayCarUtil.GetCarPath(carVal, waitTask.StartLocate); + var d = FourWayCarUtil.GetCarPath(carVal, starLocate); kXCarList.Add(new CarInfo() { CarPlcIp = modbusUtil.PlcIP, @@ -460,266 +540,65 @@ #endregion - #region 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級 + // 鑾峰彇閫傚悎鎵ц褰撳墠浠诲姟鐨勫皬杞� 鐢熸垚璺緞锛堥渶鑰冭檻灏忚溅闃婚樆鎸★級 var assignCar = kXCarList.OrderBy(m => m.Level).FirstOrDefault(); if (assignCar == null) { continue;//娌℃湁绌洪棽灏忚溅 } - var data = new List<CarModel>(); - if (assignCar.Level != 0) + + if (assignCar.Level != 1) { //鍒ゆ柇灏忚溅浣嶇疆鏄惁涓庝换鍔$殑璧峰鍌ㄤ綅鐩稿悓,涓嶇浉鍚岋細鑾峰彇灏忚溅鍒板彇璐у偍浣嶈矾寰� var carLocate = assignCar.X.ToString().PadLeft(2, '0')+assignCar.Y.ToString().PadLeft(2, '0')+ assignCar.Z.ToString().PadLeft(2, '0'); //鑾峰彇灏忚溅鍘诲彇璐у偍浣嶄换鍔¤矾寰� - var data1 = FourWayCarUtil.GetCarPath(carLocate, waitTask.StartLocate); - var datas = FourWayCarUtil.GetCarPathUp(data1, 0); - data.AddRange(datas); + var data1 = FourWayCarUtil.GetCarPath(carLocate, starLocate); + var datas1 = FourWayCarUtil.GetCarPathUp(data1, 0); + if (datas1 == null) + { + continue; + } + else + { + var bl = FourWayCarUtil.AddCarTask(datas1, kXCarList, assignCar, waitTask,0); + //鍒嗛厤閿欒锛屽垹闄ゅ垎閰嶄俊鎭� + if (!bl) + { + var carTask = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && m.TaskNo == waitTask.TaskNo).ToList(); + _db.Deleteable(carTask).ExecuteCommand(); + } + } + } + var typeStr = "1"; + var typeStr2 = 1; + if (waitTask.Levels == 888 ) + { + typeStr = "0";//灏忚溅浠诲姟鏄厖鐢典换鍔� + typeStr2 = 0; } //鑾峰彇灏忚溅鍘绘斁璐у偍浣嶄换鍔¤矾寰� - var data2 = FourWayCarUtil.GetCarPath(waitTask.StartLocate, waitTask.EndLocate, "1"); - var datas2 = FourWayCarUtil.GetCarPathUp(data2, 1); - data.AddRange(datas2); - if (data == null) { continue; } - - var preId1 = "";//鍓嶇疆浠诲姟Id - var executionPath1 = "";//浜や簰璺緞 - var executionPath2 = "";//浜や簰璺緞 - var path = "";//鎵�鏈夎矾寰� - var isOk = "1"; //鏄惁瀹屾暣璺緞 1瀹屾暣 2 涓ゆ潯璺緞 - for (int i = 0; i < data.Count; i++) - { - //璺緞鑺傜偣 - var pathXYZ = data[i].X.ToString().PadLeft(2, '0') + data[i].Y.ToString().PadLeft(2, '0') + data[i].Z.ToString().PadLeft(2, '0')+ data[i].NodeCom.ToString(); - path += pathXYZ + ";"; - - //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟 - var taskList = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing) && m.Path.Contains(pathXYZ)).Select(m => m.Id).Distinct().ToList(); - - foreach (var item in taskList) - { - //鍒ゆ柇濡傛灉鏄畬鏁磋矾寰� 璁板綍浜や簰璺緞 - if (isOk == "1") - { - //if (i == 0) - //{ - // return;//绗竴涓妭鐐规湁鍜屽叾浠栦换鍔¤矾寰勫啿绐侊紝鏃犳硶閬垮厤 - //} - var pathXYZQian = data[i - 1].X.ToString().PadLeft(2, '0') + data[i - 1].Y.ToString().PadLeft(2, '0') + data[i - 1].Z.ToString().PadLeft(2, '0') + data[i].NodeCom.ToString(); - if (!executionPath1.Contains(pathXYZQian)) - { - executionPath1 += pathXYZQian + ";"; - } - executionPath2 += pathXYZQian + ";"; - } - //鍒ゆ柇娣诲姞鍓嶇疆浠诲姟Id - if (!preId1.Contains(item + "")) - { - preId1 += item + ";"; - } - - isOk = "2"; - } - - if (data[i].IsSendPlc) - { - if (isOk == "1") - { - executionPath1 += pathXYZ + ";"; - } - else - { - executionPath2 += pathXYZ + ";"; - } - - } - + var data2 = FourWayCarUtil.GetCarPath(starLocate, endLocate, typeStr); + var datas2 = FourWayCarUtil.GetCarPathUp(data2, typeStr2); + + if (datas2 == null) + { + continue; } - - #endregion - - #region 鍒ゆ柇鏄惁鏈夌┖闂插皬杞﹂樆鎸¤矾寰� 3 - var preId3 = "";//鍓嶇疆浠诲姟Id - foreach (var item in kXCarList) + else { - if (item == assignCar) + var bl = FourWayCarUtil.AddCarTask(datas2,kXCarList,assignCar,waitTask,1); + //鍒嗛厤閿欒锛屽垹闄ゅ垎閰嶄俊鎭� + if (!bl) { - continue;//鎺掗櫎褰撳墠鍒嗛厤浠诲姟鐨勫皬杞� - } - //灏忚溅浣嶇疆 - var carXYZ = item.X.ToString().PadLeft(2, '0') + item.Y.ToString().PadLeft(2, '0') + item.Z.ToString().PadLeft(2, '0') ; - //鍒嗛厤鐨勪换鍔¤矾寰勪腑 褰撳墠灏忚溅鏄惁闃绘尅 - if (path.Contains(carXYZ)) - { - //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟 - var taskList3 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)).ToList(); - - var str3 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜� - - foreach (var item2 in taskList3) - { - str3 += item2.Path; - } - var endLocate3 = ""; - var executionPath3 = ""; - var path3 = ""; - var datas3 = new List<CarModel>(); - //鏌ユ壘鐩爣浣嶇疆 - while (endLocate3 == "" || datas3.Count == 0 || datas3 == null) - { - endLocate3 = FourWayCarUtil.GetCarEndLocation(carXYZ, str3); - var data3 = FourWayCarUtil.GetCarPath(carXYZ, endLocate3, "0"); - datas3 = FourWayCarUtil.GetCarPathUp(data3, 0); - } - foreach (var itemPath in datas3) - { - var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString(); - - path3 += pathXYZ + ";"; - if (itemPath.IsSendPlc) - { - executionPath3 += pathXYZ + ";"; - } - } - WcsTask modTask = new WcsTask() - { - TaskNo = _taskService.GetTaskCode(), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.ShuttleCar, - StartLocate = carXYZ, - EndLocate = endLocate3, - PalletNo = "", - Status = TaskStatusEnum.Wait, - Levels = 2, - Origin = "WCS" - }; - _db.Insertable(modTask).ExecuteCommand(); - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); - //绉诲姩灏忚溅 - var carTaskYC = new WcsCarTasks() - { - TaskNo = modTask.TaskNo, - PreId = "", - ExecutionPath = executionPath3, - Path = path3, - CarNo = item.CarPlcIp, - Status = TaskStatusEnum.Wait - }; - var idLong = _db.Insertable(carTaskYC).ExecuteReturnBigIdentity(); - preId3 += idLong + ";"; + waitTask.Status = TaskStatusEnum.Wait; + _db.Updateable(waitTask).ExecuteCommand(); + var carTask = _db.Queryable<WcsCarTasks>().Where(m=>m.IsDelete == false && m.TaskNo == waitTask.TaskNo).ToList(); + _db.Deleteable(carTask).ExecuteCommand(); } } - #endregion - - #region 鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� 4 - - //鑾峰彇绛夊緟鎴栨鍦ㄦ墽琛岀殑浠诲姟涓寘鍚綋鍓嶈妭鐐圭殑灏忚溅浠诲姟锛屼笉浼氭湁澶浠诲姟锛屽悓灞傛湁鍑犱釜灏忚溅鏈�澶氭湁鍑犱釜浠诲姟 - var taskList4 = _db.Queryable<WcsCarTasks>().Where(m => m.IsDelete == false && (m.Status == TaskStatusEnum.Wait || m.Status == TaskStatusEnum.Doing)).ToList(); - var preId4 = "";//鍓嶇疆浠诲姟Id - var str4 = "";//鎵�鏈夊凡鍒嗛厤鎴栨墽琛岀殑浠诲姟鍏ㄨ矾寰勪箣鍜� - - foreach (var item in taskList4) - { - str4 += item.Path; - } - //鍒ゆ柇鐜版湁浠诲姟涓渶缁堣妭鐐规槸鍚﹀湪褰撳墠鍒嗛厤璺緞涓紝濡傛湁 娣诲姞绉昏蛋灏忚溅浠诲姟骞跺姞鍏ュ墠缃换鍔� - foreach (var item in taskList4) - { - var lastPathList = item.ExecutionPath.Split(';'); - // a;b;c; 鏈�鍚庝竴涓綅鏄�溾�濓紝鎵�浠astPathList.Length - 2 - var lastPath = lastPathList[lastPathList.Length - 2]; - - //濡傛灉姝ゆ鍒嗛厤璺緞鍖呭惈閱夎垶涓渶缁堣妭鐐硅矾寰勶紝娣诲姞绉昏蛋灏忚溅 - if (path.Contains(lastPath)) - { - var endLocate = ""; - var executionPath4 = ""; - var path4 = ""; - var datas4 = new List<CarModel>(); - //鏌ユ壘鐩爣浣嶇疆 - while (endLocate == "" || datas4.Count == 0 || datas4 == null) - { - endLocate = FourWayCarUtil.GetCarEndLocation(lastPath, str4); - var data4 = FourWayCarUtil.GetCarPath(lastPath, endLocate); - datas4 = FourWayCarUtil.GetCarPathUp(data4, 0); - } - foreach (var itemPath in datas4) - { - var pathXYZ = itemPath.X.ToString().PadLeft(2, '0') + itemPath.Y.ToString().PadLeft(2, '0') + itemPath.Z.ToString().PadLeft(2, '0') + itemPath.NodeCom.ToString(); - - path4 += pathXYZ + ";"; - if (itemPath.IsSendPlc) - { - executionPath4 += pathXYZ + ";"; - } - } - WcsTask modTask = new WcsTask() - { - TaskNo = _taskService.GetTaskCode(), - TaskType = TaskTypeEnum.Move, - Type = PLCTypeEnum.ShuttleCar, - StartLocate = lastPath, - EndLocate = endLocate, - PalletNo = "", - Status = TaskStatusEnum.Wait, - Levels = 2, - Origin = "WCS" - }; - _db.Insertable(modTask).ExecuteCommand(); - HubUtil.PublicTask(modTask.Adapt<WcsTaskOutput>()); - //绉诲姩灏忚溅 - var carTaskYC = new WcsCarTasks() - { - TaskNo = modTask.TaskNo, - PreId = "", - ExecutionPath = executionPath4, - Path = path4, - CarNo = item.CarNo, - Status = TaskStatusEnum.Wait - }; - var idLong = _db.Insertable(carTaskYC).ExecuteReturnBigIdentity(); - preId4 += idLong + ";"; - } - } - - #endregion - - #region 鎻掑叆浠诲姟鏁版嵁 鏀瑰彉浠诲姟鐘舵�� - - // 鎻掑叆鍥涘悜杞︿换鍔¤〃 - var carTask1 = new WcsCarTasks() - { - TaskNo = waitTask.TaskNo, - PreId = preId1+ preId3+preId4, - ExecutionPath = executionPath1, - Path = path, - CarNo = assignCar.CarPlcIp, - Status = TaskStatusEnum.Wait - }; - _db.Insertable(carTask1).ExecuteCommand(); - if (!string.IsNullOrWhiteSpace(executionPath1) && isOk == "2") - { - // 鎻掑叆鍥涘悜杞︿换鍔¤〃 - var carTask2 = new WcsCarTasks() - { - TaskNo = waitTask.TaskNo, - PreId = preId1, - ExecutionPath = executionPath2, - Path = path, - CarNo = assignCar.CarPlcIp, - Status = TaskStatusEnum.Wait - }; - _db.Insertable(carTask2).ExecuteCommand(); - } - // 鏀瑰彉鎬讳换鍔¤〃鐘舵�� - waitTask.Status = TaskStatusEnum.Doing; - waitTask.UpdateTime = DateTime.Now; - _db.Updateable(waitTask).ExecuteCommand(); - HubUtil.PublicTask(waitTask.Adapt<WcsTaskOutput>()); - - #endregion + Thread.Sleep(3000); } -- Gitblit v1.8.0