From 1319cb7072623dff12369a889af766db2d166def Mon Sep 17 00:00:00 2001 From: lss <2538410689@qq.com> Date: 星期一, 28 七月 2025 17:58:47 +0800 Subject: [PATCH] 叠盘机优化 --- HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/DeviceProcess.cs | 361 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 329 insertions(+), 32 deletions(-) diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/DeviceProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/DeviceProcess.cs index ae84134..656e571 100644 --- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/DeviceProcess.cs +++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/DeviceProcess.cs @@ -7,8 +7,11 @@ using S7.Net; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Threading; +using System.Threading.Tasks; +using System.Web.Services.Description; using static HH.WCS.JiaTong.LISTA.process.HttpModel; using static System.Collections.Specialized.BitVector32; @@ -47,17 +50,17 @@ /// <summary> /// 鍙犵洏鏈虹┖鎵樿繑鍥� /// </summary> - internal static void Traystacker(string loc, int qty) + internal static void Traystacker(string loc, int qty, int type, string cntrcode = "") { try { //涓婁紶鏁版嵁 - Traystacker result1 = new Traystacker(){ station = loc, taskSource = 1, Qty = qty }; - + Traystacker result1 = new Traystacker() { station = loc, taskSource = 1, Qty = qty, dpType = type }; + HttpHelper httpHelper = new HttpHelper(); Result result = new Result(); string date = JsonConvert.SerializeObject(result1); - var url = Settings.tableUrls.Find(a => a.id == 2); + var url = Settings.tableUrls.Find(a => a.id == 3); if (url != null) { LogHelper.Info($"鍙犵洏鏈虹┖鎵樿繑鍥烇細鍦板潃:{url.url}锛屽唴瀹癸細{date}"); @@ -75,13 +78,13 @@ } else { - LogHelper.Info($"鍙犵洏鏈虹┖鎵�鏍规嵁id=2锛屾湭鎵惧埌閰嶇疆閾炬帴锛岃妫�煡閰嶇疆鏂囦欢"); + LogHelper.Info($"鍙犵洏鏈虹┖鎵�鏍规嵁id=3锛屾湭鎵惧埌閰嶇疆閾炬帴锛岃妫�煡閰嶇疆鏂囦欢"); } } catch (Exception ex) { - LogHelper.Info($"鍙犵洏鏈虹┖鎵樿繑鍥� Error=>{ex.ToString()}"); + LogHelper.Error($"鍙犵洏鏈虹┖鎵樿繑鍥� Error=>{ex.ToString()}", ex); } } @@ -90,8 +93,9 @@ /// </summary> internal static void Traffic() { + Console.WriteLine("寮�鍘熸潗鏂欏彔鐩樹綅缃垽鏂�); var db = new SqlHelper<object>().GetInstance(); - List<string> locs = new List<string>() { "LCDP-001" }; + List<string> locs = new List<string>() { "LCDP-001", "BADPW-01" }; var location = db.Queryable<Location>().Where(a => locs.Contains(a.S_CODE)).ToList(); if (location.Count > 0) { @@ -104,8 +108,8 @@ var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); if (cntr.Count > 0) { - var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); - cntrcode = string.Join(",", cntrcodes); + cntrcode = cntr.OrderBy(a => a.T_CREATE).First().S_CNTR_CODE; + // cntrcode = string.Join(",", cntrcodes); } //鍒涘缓杩囨湭瀹屾垚鐨勪换鍔′笉鍙戣捣璇锋眰 @@ -125,9 +129,9 @@ internal static void KjTraffic() { - + Console.WriteLine("寮�浜曟澗agv鍙犵洏鍥炲簱浣嶇疆鍒ゆ柇"); var db = new SqlHelper<object>().GetInstance(); - List<string> locs = new List<string>() { "PMDDW-001" }; + List<string> locs = new List<string>() { "AGV12DP-001", "AGV01DP-001", "AGV05DP-001" }; var location = db.Queryable<Location>().Where(a => locs.Contains(a.S_CODE)).ToList(); if (location.Count > 0) { @@ -143,49 +147,323 @@ // var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); // cntrcode = string.Join(",", cntrcodes); //} - + string cntrcode = ""; + var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); + if (cntr.Count > 0) + { + cntrcode = cntr.OrderBy(a => a.T_CREATE).First().S_CNTR_CODE; + // cntrcode = string.Join(",", cntrcodes); + } + LogHelper.Info($"璐т綅{item.S_CODE}鍙犳弧6涓紑濮嬪洖璋冩帴鍙�); //鍒涘缓杩囨湭瀹屾垚鐨勪换鍔′笉鍙戣捣璇锋眰 var mst = WCSHelper.GetTaskByStartloc(item.S_CODE); if (mst == null) { - Traystacker(item.S_CODE, item.N_CURRENT_NUM); + Traystacker(item.S_CODE, item.N_CURRENT_NUM, 2, cntrcode); + } + else + { + LogHelper.Info($"鏈夋墽琛屼腑鐨勫彔鐩樺洖搴撲换鍔mst.S_CODE}锛屼笉瑙﹀彂鍙犵洏浠诲姟"); } } } } } + + //public static Dictionary<string, DpjErrorInfo> DpjInfoDirectory = new Dictionary<string, DpjErrorInfo>(); + public static Dictionary<string, DpjInfo> DpjInfoDirectory = new Dictionary<string, DpjInfo>(); /// <summary> /// 浜曟澗鍙犵洏鏈哄彔鐩樺洖搴� /// </summary> internal static void DpjTraffic() { - string startBti = "CMB17-DP-001"; - - var value = S7Helper.ReadDpj(2014, S7.Net.VarType.Int); - - if (value >= 7) + var devices = Settings.deviceInfos.Where(a => a.deviceType == 1).ToList(); + //var db = new SqlHelper<object>().GetInstance(); + //var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + try { - //var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); - //if (cntr.Count > 0) - //{ - // var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); - // cntrcode = string.Join(",", cntrcodes); - //} - - //鍒涘缓杩囨湭瀹屾垚鐨勪换鍔′笉鍙戣捣璇锋眰 - var mst = WCSHelper.GetTaskByStartloc(startBti); - if (mst == null) + if (devices.Count > 0) { - Traystacker(startBti, value); + foreach (var device in devices) + { + + try + { + // 涓烘瘡涓澶囧垱寤虹嫭绔嬪鐞嗗尯 + Task.Run(() => + { + DpjTraffic1(device); + }); + + } + catch (Exception ex) + { + // 鎹曡幏鍗曚釜璁惧寮傚父锛屼笉褰卞搷鍏朵粬璁惧 + LogHelper.Error($"鍙犵洏鏈簕device.deviceName}({device.address})澶勭悊澶辫触: {ex.Message}", ex); + } + Thread.Sleep(100); + } + } + //Thread.Sleep(5000); + } + catch (Exception ex) + { + LogHelper.Error($"ReadDpj DpjTraffic:{ex}", ex); + + } + + } + /// <summary> + /// 鍙犵洏鏈虹嚎绋嬭鍙�+ /// </summary> + internal static void DpjTrafficRead() + { + var devices = Settings.deviceInfos.Where(a => a.deviceType == 1).ToList(); + //var db = new SqlHelper<object>().GetInstance(); + //var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + try + { + if (devices.Count > 0) + { + foreach (var device in devices) + { + + try + { + // 涓烘瘡涓澶囧垱寤虹嫭绔嬪鐞嗗尯 + Task.Run(() => + { + DpjTrafficRead(device); + }); + + } + catch (Exception ex) + { + // 鎹曡幏鍗曚釜璁惧寮傚父锛屼笉褰卞搷鍏朵粬璁惧 + LogHelper.Error($"鍙犵洏鏈簕device.deviceName}({device.address})澶勭悊澶辫触: {ex.Message}", ex); + } + Thread.Sleep(100); + } + } + //Thread.Sleep(5000); + } + catch (Exception ex) + { + LogHelper.Error($"ReadDpj DpjTraffic:{ex}", ex); + + } + + } + internal static void DpjCreateTask() + { + var devices = DpjInfoDirectory; + //var db = new SqlHelper<object>().GetInstance(); + //var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList(); + try + { + if (devices.Count > 0) + { + foreach (var device in devices.Values) + { + + try + { + // 涓烘瘡涓澶囧垱寤虹嫭绔嬪鐞嗗尯 + Task.Run(() => + { + DpjTraffic2(device); + }); + + } + catch (Exception ex) + { + // 鎹曡幏鍗曚釜璁惧寮傚父锛屼笉褰卞搷鍏朵粬璁惧 + LogHelper.Error($"鍙犵洏鏈簕device.Address}澶勭悊澶辫触: {ex.Message}", ex); + } + Thread.Sleep(100); + } + } + //Thread.Sleep(5000); + } + catch (Exception ex) + { + LogHelper.Error($"ReadDpj DpjTraffic:{ex}", ex); + + } + + } + internal static void DpjTrafficRead(Settings.deviceInfo device) + { + while (true) + { + try + { + var IsDp = S7Helper.ReadDpj(device.address, 2001, S7.Net.VarType.Byte); + var value = S7Helper.ReadDpj(device.address, 2014, S7.Net.VarType.Int); + int value2004 = S7Helper.ReadDpj(device.address, 2004, S7.Net.VarType.Byte); + LogHelper.Info($"璇诲彇鍙犵洏鏈簕device.address},鍙犵洏淇″彿{IsDp},鏁伴噺{value},瀹夊叏浜や簰淇″彿{value2004}"); + if (DpjInfoDirectory.ContainsKey(device.address)) + { + DpjInfoDirectory[device.address].Address = device.address; + DpjInfoDirectory[device.address].Loc = device.TN_Location; + DpjInfoDirectory[device.address].PickUp = IsDp; + DpjInfoDirectory[device.address].qty = value; + DpjInfoDirectory[device.address].value2004 = value2004; + + } + else + { + + DpjInfoDirectory.Add(device.address, new DpjInfo() { Address = device.address, Loc = device.TN_Location, PickUp = IsDp, qty = value, value2004 = value2004 }); + } + + } + catch (Exception ex) + { + + LogHelper.Error($"ReadDpj DpjTraffic:{ex}", ex); } } + + + } + internal static void DpjTraffic1(Settings.deviceInfo device) + { + + try + { + var IsDp = S7Helper.ReadDpj(device.address, 2001, S7.Net.VarType.Byte); + var value = S7Helper.ReadDpj(device.address, 2014, S7.Net.VarType.Int); + // int value2004 = S7Helper.ReadDpj(device.address, 2004, S7.Net.VarType.Byte); + //var ErrorCode = S7Helper.ReadDpj(device.address, 2016, S7.Net.VarType.Int); + ////璁板綍鍙犵洏鏈烘姤閿欎俊鎭�+ //if (DpjInfoDirectory.ContainsKey(device.address)) + //{ + // DpjInfoDirectory[device.address].Address = device.address; + // DpjInfoDirectory[device.address].DeviceName = device.deviceName; + // var ErrorInfo = Settings.dpjErrorInfos.Where(a => a.ErrorCode == ErrorCode).First(); + // if (ErrorInfo != null) + // { + // DpjInfoDirectory[device.address].ErrorInfo = ErrorInfo.ErrorInfo; + // } + //} + //else + //{ + // string errorinfo = ""; + // var ErrorInfo = Settings.dpjErrorInfos.Where(a => a.ErrorCode == ErrorCode).First(); + // if (ErrorInfo != null) + // { + // errorinfo = ErrorInfo.ErrorInfo; + // } + // DpjInfoDirectory.Add(device.address, new DpjErrorInfo() { Address = device.address, DeviceName = device.deviceName, ErrorInfo = errorinfo }); + //} + + if (value >= 1 && IsDp == 1) + { + //var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); + //if (cntr.Count > 0) + //{ + // var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); + // cntrcode = string.Join(",", cntrcodes); + //} + + //鍒涘缓杩囨湭瀹屾垚鐨勪换鍔′笉鍙戣捣璇锋眰 + var mst = WCSHelper.GetTaskByStartloc(device.TN_Location); + if (mst == null) + { + Traystacker(device.TN_Location, value, 2); + } + else + { + LogHelper.Info($"鏈夋墽琛屼腑鐨勫彔鐩樺洖搴撲换鍔mst.S_CODE}锛屼笉瑙﹀彂鍙犵洏浠诲姟"); + } + //var loc = LocationHelper.GetLocByLoc(device.TN_Location); + //if (loc != null) + //{ + // if (loc.N_LOCK_STATE == 0) { + // Traystacker(device.TN_Location, value, 2); + // } + // else + // { + // LogHelper.Info($"璁惧璧风偣锛歿device.TN_Location}鏈夐攣锛屼笉鐢熸垚浠诲姟"); + // } + //} + //else + //{ + // LogHelper.Info($"鏍规嵁璁惧锛歿device.deviceName}锛岃捣鐐癸細{device.TN_Location},鏈壘鍒拌揣浣�); + //} + } + } + catch (Exception ex) + { + + LogHelper.Error($"ReadDpj DpjTraffic:{ex}", ex); + } + + + + + } + + internal static void DpjTraffic2(DpjInfo dpj) + { + + try + { + LogHelper.Info($"鍙犵洏鏈簕dpj.Address},鍙犵洏淇″彿{dpj.PickUp},鏁伴噺{dpj.qty}"); + if (dpj.qty >= 1 && dpj.PickUp == 1) + { + //var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == item.S_CODE).ToList(); + //if (cntr.Count > 0) + //{ + // var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray(); + // cntrcode = string.Join(",", cntrcodes); + //} + + //鍒涘缓杩囨湭瀹屾垚鐨勪换鍔′笉鍙戣捣璇锋眰 + var mst = WCSHelper.GetTaskByStartloc(dpj.Loc); + if (mst == null) + { + Traystacker(dpj.Loc, dpj.qty, 2); + } + else + { + LogHelper.Info($"鏈夋墽琛屼腑鐨勫彔鐩樺洖搴撲换鍔mst.S_CODE}锛屼笉瑙﹀彂鍙犵洏浠诲姟"); + } + //var loc = LocationHelper.GetLocByLoc(device.TN_Location); + //if (loc != null) + //{ + // if (loc.N_LOCK_STATE == 0) { + // Traystacker(device.TN_Location, value, 2); + // } + // else + // { + // LogHelper.Info($"璁惧璧风偣锛歿device.TN_Location}鏈夐攣锛屼笉鐢熸垚浠诲姟"); + // } + //} + //else + //{ + // LogHelper.Info($"鏍规嵁璁惧锛歿device.deviceName}锛岃捣鐐癸細{device.TN_Location},鏈壘鍒拌揣浣�); + //} + } + } + catch (Exception ex) + { + + LogHelper.Error($"ReadDpj DpjTraffic:{ex}", ex); + } + + + + } /// <summary> /// 鍘熸潗鏂欏簱鎺ュ彛璁块棶 /// </summary> - internal static void AgvEmptyBack(string loc, string cntrcode) + internal static Resultmobox AgvEmptyBack(string loc, string cntrcode) { + Resultmobox result = new Resultmobox(); try { string partNumber = ""; @@ -195,7 +473,7 @@ result1.data = traystacker; HttpHelper httpHelper = new HttpHelper(); //璋冪敤鎺ュ彛 - Resultmobox result = new Resultmobox(); + string date = JsonConvert.SerializeObject(result1); string url = Settings.tableUrls.Find(a => a.id == 11).url; LogHelper.Info($"绌烘墭杩斿洖锛氬湴鍧�{url}锛屽唴瀹癸細{date}"); @@ -210,12 +488,31 @@ { LogHelper.Info($"绌烘墭杩斿洖璇锋眰澶辫触=>msg:{result.err_msg}"); } - + return result; } catch (Exception ex) { LogHelper.Info($"绌烘墭杩斿洖 Error=>{ex.ToString()}"); + return result; } } + + public class DpjErrorInfo + { + + public string Address { get; set; } + public string DeviceName { get; set; } + public string ErrorInfo { get; set; } + } + + public class DpjInfo + { + + public string Address { get; set; } + public string Loc { get; set; } + public int PickUp { get; set; } + public int qty { get; set; } + public int value2004 { get; set; } + } } } -- Gitblit v1.9.1