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 |  365 +++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 293 insertions(+), 72 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 710915c..656e571 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/DeviceProcess.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/process/DeviceProcess.cs
@@ -10,6 +10,8 @@
 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;
 
@@ -48,7 +50,7 @@
         /// <summary>
         /// 鍙犵洏鏈虹┖鎵樿繑鍥�         /// </summary>    
-        internal static void Traystacker(string loc, int qty, int type)
+        internal static void Traystacker(string loc, int qty, int type, string cntrcode = "")
         {
             try
             {
@@ -106,8 +108,8 @@
                         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);
+                            cntrcode = cntr.OrderBy(a => a.T_CREATE).First().S_CNTR_CODE;
+                            // cntrcode = string.Join(",", cntrcodes);
                         }
 
                         //鍒涘缓杩囨湭瀹屾垚鐨勪换鍔′笉鍙戣捣璇锋眰
@@ -145,12 +147,23 @@
                         //    var cntrcodes = cntr.Select(a => a.S_CNTR_CODE).ToArray();
                         //    cntrcode = string.Join(",", cntrcodes);
                         //}
-                        LogHelper.Info($"璐т綅{location}鍙犳弧6涓紑濮嬪洖璋冩帴鍙�);
+                        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, 1);
+                            Traystacker(item.S_CODE, item.N_CURRENT_NUM, 2, cntrcode);
+                        }
+                        else
+                        {
+                            LogHelper.Info($"鏈夋墽琛屼腑鐨勫彔鐩樺洖搴撲换鍔mst.S_CODE}锛屼笉瑙﹀彂鍙犵洏浠诲姟");
                         }
                     }
                 }
@@ -158,7 +171,8 @@
         }
 
 
-        public static Dictionary<string, DpjErrorInfo> DpjInfoDirectory = new Dictionary<string, DpjErrorInfo>();
+        //public static Dictionary<string, DpjErrorInfo> DpjInfoDirectory = new Dictionary<string, DpjErrorInfo>();
+        public static Dictionary<string, DpjInfo> DpjInfoDirectory = new Dictionary<string, DpjInfo>();
         /// <summary>
         /// 浜曟澗鍙犵洏鏈哄彔鐩樺洖搴�         /// </summary>
@@ -173,87 +187,283 @@
                 {
                     foreach (var device in devices)
                     {
-                        var IsDp = S7Helper.ReadDpj(device.address, 2001, S7.Net.VarType.Byte);
-                        var value = S7Helper.ReadDpj(device.address, 2014, S7.Net.VarType.Int);
-                        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},鏈壘鍒拌揣浣�);
-                            //}
-                        }
-                        else
+                        try
                         {
-                            LogHelper.Info($"鍙犵洏鏈烘暟閲忥細{value},鍙犵洏淇″彿锛歿IsDp}锛屼笉瑙﹀彂鍙犵洏浠诲姟");
+                            // 涓烘瘡涓澶囧垱寤虹嫭绔嬪鐞嗗尯
+                            Task.Run(() =>
+                            {
+                                DpjTraffic1(device);
+                            });
+
                         }
-                        Thread.Sleep(8000);
+                        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 = "";
@@ -263,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}");
@@ -278,11 +488,12 @@
                 {
                     LogHelper.Info($"绌烘墭杩斿洖璇锋眰澶辫触=>msg:{result.err_msg}");
                 }
-
+                return result;
             }
             catch (Exception ex)
             {
                 LogHelper.Info($"绌烘墭杩斿洖  Error=>{ex.ToString()}");
+                return result;
             }
         }
 
@@ -293,5 +504,15 @@
             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