From 2120c4a86e6b7bfe2b8e27f79c0ebe2efddbc0e0 Mon Sep 17 00:00:00 2001
From: kingno <30263@KINGNO>
Date: 星期二, 01 四月 2025 17:25:38 +0800
Subject: [PATCH] 数据汇总调整

---
 src/Bro.M141.Process/UI/UI.cs                  |    2 
 src/Bro.M141.Process/UI/UIPrinter.cs           |    5 
 src/Bro.M141_AOI1.Process/AOI1Process.cs       |   94 ++++++++++-----
 src/Bro.M135.Common/ProductModel.cs            |    9 
 src/Bro.M141.Process/M141Process_Mysql.cs      |  110 +++++++++++++++---
 src/Bro.M141.Process/M141Config.cs             |   37 ++++++
 src/Bro.M135.DBManager/Models/P_PRODUCT.cs     |    3 
 src/Bro.M141.Process/M141Process.cs            |   77 +++++++++++-
 src/Bro.M141.Process/M141Process_ImageCheck.cs |   12 -
 9 files changed, 273 insertions(+), 76 deletions(-)

diff --git a/src/Bro.M135.Common/ProductModel.cs b/src/Bro.M135.Common/ProductModel.cs
index 5e1df4b..ecca1b3 100644
--- a/src/Bro.M135.Common/ProductModel.cs
+++ b/src/Bro.M135.Common/ProductModel.cs
@@ -193,7 +193,7 @@
                 });
             });
 
-            head = $"PID,鏉$爜,姹囨�绘娴嬬粨鏋�,";
+            head = $"鏃堕棿,PID,鏍忓叿鐮�,鐗╂枡鐮�,鏉$爜,姹囨�绘娴嬬粨鏋�,";
 
             positionList = new List<string>();
             Details = Details.OrderBy(u => u.PositionName).ToList();
@@ -233,7 +233,8 @@
                 });
             });
 
-            string data = $"{PID},{SN},{Result},";
+            //鏃堕棿,PID,鏍忓叿鐮�,鐗╂枡鐮�,鏉$爜,姹囨�绘娴嬬粨鏋�,";
+            string data = $"{DateTime.Now.ToString("yyyyMMddHHmmss")}T,{PID},{BasketCode},{SEQUENCE},{SN},{Result},";
             positionList.ForEach(pName =>
             {
                 var detail = Details.FirstOrDefault(u => $"{u.STATION_CODE}_{u.PositionName}" == pName);
@@ -301,7 +302,7 @@
                 });
             });
 
-            head = $"鏃堕棿,PID,搴忓彿,鏉$爜,";
+            head = $"鏃堕棿,鏍忓叿鐮�,PID,搴忓彿,鏉$爜,";
 
             foreach (var d in positionDetail)
             {
@@ -338,7 +339,7 @@
                 });
             });
 
-            string data = $"{DateTime.Now.ToString("HH:mm:ss.fff")}T,{PID},{SEQUENCE},{SN},";
+            string data = $"{DateTime.Now.ToString("HH:mm:ss.fff")}T,{BasketCode},{PID},{SEQUENCE},{SN},";
             positionDetail.ForEach(detail =>
             {
                 if (!detail.IsDone)
diff --git a/src/Bro.M135.DBManager/Models/P_PRODUCT.cs b/src/Bro.M135.DBManager/Models/P_PRODUCT.cs
index 11da7c0..659c26e 100644
--- a/src/Bro.M135.DBManager/Models/P_PRODUCT.cs
+++ b/src/Bro.M135.DBManager/Models/P_PRODUCT.cs
@@ -11,6 +11,9 @@
 
         public string SN { get; set; } = "NOREAD";
 
+
+        public string BasketCode { get; set; } = "NOREAD";
+
         public string Result { get; set; } = "";
 
         [NotMapped]
diff --git a/src/Bro.M141.Process/M141Config.cs b/src/Bro.M141.Process/M141Config.cs
index 065be49..1cd2cdd 100644
--- a/src/Bro.M141.Process/M141Config.cs
+++ b/src/Bro.M141.Process/M141Config.cs
@@ -100,12 +100,49 @@
         public ImageFormat ImageFormatOK { get; set; } = ImageFormat.Png;
 
 
+
+        [Category("鏁版嵁搴撻厤缃�")]
+        [Description("IP")]
+        [DisplayName("IP")]
+        public string IPforall { get; set; } = "192.168.44.122";
+
+        [Category("鏁版嵁搴撻厤缃�")]
+        [Description("鏄惁涓虹粓鐐硅澶�")]
+        [DisplayName("鏄惁涓虹粓鐐硅澶�")]
+        public bool IsfinDevice { get; set; } = false;
+
+
+
+
+        [Category("鏍忓叿鏉$爜閰嶇疆")]
+        [Description("褰撳墠鏍忓叿鐮�")]
+        [DisplayName("褰撳墠鏍忓叿鐮�")]
+        public string basketcode { get; set; } = "NoRead";
+
+        [Category("鏍忓叿鏉$爜閰嶇疆")]
+        [Description("鏈珯鏄惁璇诲彇鏍忓叿鐮�")]
+        [DisplayName("鏈珯鏄惁璇诲彇鏍忓叿鐮�")]
+        public bool Isreadbasketcode { get; set; } = false;
+
+
+        //[Category("鏁版嵁搴撻厤缃�")]
+        //[Description("鏄惁涓虹粓鐐硅澶�")]
+        //[DisplayName("鏄惁涓虹粓鐐硅澶�")]
+        //public bool IsfinDevice { get; set; } = false;
+
+
     }
 
 
     public class WorkPositionSet : IComplexDisplay
     {
         [Category("plc鍦板潃")]
+        [Description("鏄惁鍙栧浘鍗冲畬鎴�")]
+        [DisplayName("鏄惁鍙栧浘鍗冲畬鎴�")]
+        public bool ispiccover { get; set; } = false;
+
+
+        [Category("plc鍦板潃")]
         [Description("瀹屾垚鍦板潃")]
         [DisplayName("瀹屾垚鍦板潃")]
         public int plcover { get; set; }
diff --git a/src/Bro.M141.Process/M141Process.cs b/src/Bro.M141.Process/M141Process.cs
index 91e0e62..4444bcc 100644
--- a/src/Bro.M141.Process/M141Process.cs
+++ b/src/Bro.M141.Process/M141Process.cs
@@ -97,6 +97,7 @@
             _positionCheckTimeDict.Clear();
             _positionSpecHeads.Clear();
 
+            mysqlhelper.IniDBIP(M141Config.IPforall);
 
             if (ThHeartPlc == null)
             {
@@ -263,6 +264,15 @@
 
             if (isSaveDB)
             {
+                if (M141Config.Isreadbasketcode)
+                {
+                    p.BasketCode = M141Config.basketcode;
+                }
+                else
+                {
+                    p.BasketCode = mysqlhelper.Getbasketcode(p.SEQUENCE);
+                }
+
                 mysqlhelper.NewProduct(p);
             }
 
@@ -294,7 +304,7 @@
                     p.PID = p.PID + "_" + sequence.Split('_')[sequence.Split('_').Length - 1];
 
                     p.Initial(M141Config.StationCode, M141Config.WorkPositionCollection.Where(u => u.IsEnabled).Select(u => u.PositionName).ToList());
-                    //LogAsync(DateTime.Now, EnumHelper.LogLevel.Warning, $"鏈兘浠庢暟鎹簱鑾峰彇浜у搧瀵硅薄锛屼娇鐢ㄤ复鏃舵柊寤轰骇鍝佸璞�");
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Warning, $"鏈兘浠庢暟鎹簱鑾峰彇浜у搧瀵硅薄锛屼娇鐢ㄤ复鏃舵柊寤轰骇鍝佸璞�");
                 }
 
                 NewProductIntoList(p, false);
@@ -704,6 +714,7 @@
             try
             {
                 ConcurrentDictionary<MeasureBind, IImageSet> imgSetDicts = new ConcurrentDictionary<MeasureBind, IImageSet>();
+                var positionSet = M141Config.WorkPositionCollection.Where(u => u.IsEnabled).FirstOrDefault(u => u.TriggerValue == triggerDatas[0]);
 
                 measureBinds.AsParallel().ForAll(b =>
                 {
@@ -715,6 +726,10 @@
                         try
                         {
                             imgSetDicts[b] = CollectHImage(camera, b.SnapshotOpConfig);
+                            if (positionSet.ispiccover)
+                            {
+                                Plc1.WriteSingleAddress(positionSet.plcover,1,out _);
+                            }
                         }
                         catch (Exception ea)
                         {
@@ -930,10 +945,8 @@
                         plcresult.Add(isOK);
                         List<string> specHeads = new List<string>();
                         string head = p.GetCSVHead(ref specHeads, positionName);
-                        if (!_positionSpecHeads.ContainsKey(positionName))
-                        {
-                            _positionSpecHeads[positionName] = specHeads;
-                        }
+
+                        _positionSpecHeads[positionName] = specHeads;
 
                         string data = p.GetCSVData(_positionSpecHeads[positionName], positionName);
                         CSVRecordAsync($"{positionName}_Record_{DateTime.Now.ToString("yyyyMMdd")}.csv", data, head);
@@ -941,10 +954,15 @@
                         //UpdatePositionResultToDB(detail);
                         var seqData = p.SEQUENCE.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries).ToList();
 
-
+                        mysqlhelper.UpdateProduct(p);
                         if (positionSet.IsLastPosition)
                         {
                             UpdateProductResultAsync(p);
+                            mysqlhelper.NewForAll(p, M141Config.StationCode);
+                            if (M141Config.IsfinDevice)
+                            {
+                                SummaryAllprodata(p);
+                            }
                         }
                     });
                     ReplyPlcData(positionSet, plcresult);
@@ -993,6 +1011,53 @@
         }
 
 
+
+
+
+        public void SummaryAllprodata(ProductModel p)
+        {
+            _taskFactory.StartNew(() =>
+            {
+                try
+                {
+
+                    ProductModel newp = new ProductModel();
+                    newp.SEQUENCE = p.SEQUENCE;
+                    newp.PID = p.PID;
+                    newp.BasketCode = p.BasketCode;
+                    newp.Result = p.Result;
+                    newp.SN = p.SN;
+                    newp.Details.AddRange(p.Details);
+
+                    var plist = mysqlhelper.GetProductList(p.SEQUENCE);
+
+                    if (plist != null)
+                    {
+                        foreach (var item in plist)
+                        {
+                            newp.Details.AddRange(item.Details);
+                        }
+                    }
+
+                    List<string> specHeadListforall = new List<string>();
+                    List<string> positionListforall = new List<string>();
+                    string csvHeadforall = p.GetCSVHead(ref specHeadListforall, ref positionListforall);
+                    CSVRecordAsync($"AllDeviceProductRecord.csv", p.GetCSVData(specHeadListforall, positionListforall), csvHeadforall);
+
+                }
+                catch(Exception exx)
+                {
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, "AllDeviceProductRecord鏁版嵁姹囨�诲紓甯�  " + exx.ToString());
+                }
+            });
+
+        }
+
+
+
+
+
+
         #endregion
     }
 
diff --git a/src/Bro.M141.Process/M141Process_ImageCheck.cs b/src/Bro.M141.Process/M141Process_ImageCheck.cs
index 78e0296..e76e5cf 100644
--- a/src/Bro.M141.Process/M141Process_ImageCheck.cs
+++ b/src/Bro.M141.Process/M141Process_ImageCheck.cs
@@ -436,8 +436,6 @@
         }
 
 
-
-
         [ProcessMethod("", "ProductDataUpload", "浜у搧鏁版嵁姹囨��", InvokeType.TestInvoke)]
         public ResponseMessage ProductDataUpload(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
         {
@@ -498,11 +496,6 @@
 
             return msg;
         }
-
-
-
-
-
 
 
 
@@ -638,10 +631,7 @@
 
             _taskFactory.StartNew(() =>
             {
-                if (string.IsNullOrWhiteSpace(_csvHead))
-                {
-                    _csvHead = p.GetCSVHead(ref _specHeadList, ref _positionList);
-                }
+                _csvHead = p.GetCSVHead(ref _specHeadList, ref _positionList);
                 CSVRecordAsync($"ProductRecord_{DateTime.Now.ToString("yyyyMMdd")}.csv", p.GetCSVData(_specHeadList, _positionList), _csvHead);
                 //_manager_P_Product.UpdateProductResult(p.ID, p.PID, p.SN, p.Result);
             });
diff --git a/src/Bro.M141.Process/M141Process_Mysql.cs b/src/Bro.M141.Process/M141Process_Mysql.cs
index d6b7296..b9f00c8 100644
--- a/src/Bro.M141.Process/M141Process_Mysql.cs
+++ b/src/Bro.M141.Process/M141Process_Mysql.cs
@@ -1,4 +1,5 @@
 锘縰sing Bro.Common.Helper;
+using Bro.Common.Interface;
 using Bro.M135.Common;
 using MySql.Data.MySqlClient;
 using Newtonsoft.Json;
@@ -17,8 +18,8 @@
     public class M141Process_Mysql
     {
 
-        string connStrAll = "server=127.0.0.1;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
-        string connStrLocal = "server=127.0.0.1;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
+        string connStrAll = "server=localhost;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
+        string connStrLocal = "server=localhost;port=3306;user id=root;password=123456;database=BroDB;charset=utf8";
 
 
 
@@ -43,7 +44,7 @@
             }
             catch (Exception e)
             {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴搷浣滃紓甯� {e.ToString()}");
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴搷浣滃紓甯� {sql} {e.ToString()}");
             }
             con.Close();
         }
@@ -64,7 +65,7 @@
             }
             catch (Exception e)
             {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈠紓甯� {e.ToString()}");
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈠紓甯� {str} {e.ToString()}");
             }
             con.Close();
             return dt;
@@ -88,7 +89,7 @@
             }
             catch (Exception e)
             {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈡暟鎹紓甯� {e.ToString()}");
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴撴煡璇㈡暟鎹紓甯� {str}  {e.ToString()}");
             }
 
             con.Close();
@@ -103,7 +104,18 @@
         {
             try
             {
-                string mysqlstr = $"insert into forlocal (pid,plcnum,sn,data,time) values('{pro.PID}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro)}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
+                //淇濈暀鏁版嵁搴撴渶鏂扮殑1000鏉℃暟鎹�
+                //string destr = "delete from forlocal where id not in (select id from (select id from forlocal order BY id desc limit 1000) as subquery)";
+                //Operatoremysql(destr, connStrAll);
+
+                string str1 = "select id from forlocal  order by id desc limit 1";
+                string index = selectmysql(str1, connStrLocal);
+
+                string str2 = $"delete from forlocal where id < ({index}-1000)";
+                Operatoremysql(str2, connStrLocal);
+
+
+                string mysqlstr = $"insert into forlocal (basketcode,pid,plcnum,sn,data,time) values('{pro.BasketCode}','{pro.PID}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro)}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
 
                 Operatoremysql(mysqlstr, connStrLocal);
             }
@@ -128,32 +140,46 @@
 
         public void NewForAll(ProductModel pro, string devicestr)
         {
-            try
+            Task.Run(() =>
             {
-                string mysqlstr = $"insert into forall (device,plcnum,sn,data,time) values('{devicestr}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro)}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
+                try
+                {
 
-                Operatoremysql(mysqlstr, connStrAll);
-            }
-            catch (Exception e)
-            {
-                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orall鎻掑叆鏁版嵁寮傚父 {e.ToString()}");
-            }
+                    //淇濈暀鏁版嵁搴撴渶鏂扮殑1000鏉℃暟鎹�
+                    //string destr = "delete from forall where id not in (select id from (select id from forall order BY id desc limit 1000) as subquery)";
+                    //Operatoremysql(destr, connStrAll);
+
+                    string str1 = "select id from forall  order by id desc limit 1";
+                    string index = selectmysql(str1, connStrAll);
+
+                    string str2 = $"delete from forall where id < ({index}-1000)";
+                    Operatoremysql(str2, connStrAll);
+
+
+                    string mysqlstr = $"insert into forall (basketcode,device,plcnum,sn,data,time) values('{pro.BasketCode}','{devicestr}','{pro.SEQUENCE}','{pro.SN}','{JsonConvert.SerializeObject(pro)}','{DateTime.Now.ToString("yyyyMMddHHmmss")}')";
+
+                    Operatoremysql(mysqlstr, connStrAll);
+                }
+                catch (Exception e)
+                {
+                    CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orall鎻掑叆鏁版嵁寮傚父 {e.ToString()}");
+                }
+            });
         }
-
 
         public ProductModel GetProduct(string plcnum)
         {
             try
             {
-                string mysqlstr = $"select data from forlocal where plcnum='{plcnum}'";
-                string str= selectmysql(mysqlstr, connStrLocal);
+                string mysqlstr = $"select data from forlocal where plcnum='{plcnum}' order by id desc limit 1";
+                string str = selectmysql(mysqlstr, connStrLocal);
                 if (string.IsNullOrEmpty(str))
                 {
                     return null;
                 }
                 else
                 {
-                    ProductModel p = JsonConvert.DeserializeObject<ProductModel>(str);
+                    ProductModel p = JsonConvert.DeserializeObject<ProductModel>(str, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
                     return p;
                 }
             }
@@ -164,6 +190,54 @@
             return null;
         }
 
+        public string Getbasketcode(string plcnum)
+        {
+            try
+            {
+                string mysqlstr = $"select basketcode from forall where plcnum='{plcnum}' && device='S2' order by id desc limit 1";
+                string str = selectmysql(mysqlstr, connStrAll);
+                if (!string.IsNullOrEmpty(str))
+                {
+                    return str;
+                }
+            }
+            catch (Exception e)
+            {
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orlocal鏇存柊鏁版嵁寮傚父 {e.ToString()}");
+            }
+            return "NoRead";
+        }
+
+
+        public List<ProductModel> GetProductList(string plcnum)
+        {
+            try
+            {
+                string mysqlstr = $"select data from forall where plcnum='{plcnum}'";
+                var dt = selectdt(mysqlstr, connStrAll);
+                if (dt == null)
+                {
+                    return null;
+                }
+                else
+                {
+                    List<ProductModel> plist = new List<ProductModel>();
+                    for (int i = 0; i < dt.Rows.Count; i++)
+                    {
+                        ProductModel p = JsonConvert.DeserializeObject<ProductModel>(dt.Rows[i][0].ToString(), new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
+
+                        //JsonConvert.DeserializeObject<IProcessConfig>(_configBackupStr, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All });
+                        plist.Add(p);
+                    }
+                    return plist;
+                }
+            }
+            catch (Exception e)
+            {
+                CommonLogger.LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏁版嵁搴揻orall鏁版嵁寮傚父 {e.ToString()}");
+            }
+            return null;
+        }
 
 
     }
diff --git a/src/Bro.M141.Process/UI/UI.cs b/src/Bro.M141.Process/UI/UI.cs
index 43d859a..3f0436d 100644
--- a/src/Bro.M141.Process/UI/UI.cs
+++ b/src/Bro.M141.Process/UI/UI.cs
@@ -14,7 +14,7 @@
 
 namespace Bro.M141.Process
 {
-    [MenuNode("ProductStatus", "浜у搧妫�娴嬬姸鎬佹樉绀虹晫闈�1", 1, EnumHelper.TopMenu.SystemInfo, MenuNodeType.Form)]
+    //[MenuNode("ProductStatus", "浜у搧妫�娴嬬姸鎬佹樉绀虹晫闈�1", 1, EnumHelper.TopMenu.SystemInfo, MenuNodeType.Form)]
     public partial class ProUI : MenuFormBase
 
     //public partial class ProUI : UserControl
diff --git a/src/Bro.M141.Process/UI/UIPrinter.cs b/src/Bro.M141.Process/UI/UIPrinter.cs
index e0aa2ab..950a1d0 100644
--- a/src/Bro.M141.Process/UI/UIPrinter.cs
+++ b/src/Bro.M141.Process/UI/UIPrinter.cs
@@ -18,9 +18,8 @@
 
 namespace Bro.M141.Process
 {
-    [MenuNode("PrinterStatus", "鎵撳嵃鏈烘樉绀虹晫闈�", 1, EnumHelper.TopMenu.SystemInfo, MenuNodeType.Form)]
+    [MenuNode("PrinterStatus", "鎵撳嵃鏈烘樉绀虹晫闈�", 2, EnumHelper.TopMenu.SystemInfo, MenuNodeType.Form)]
     public partial class UIPrinter : MenuFormBase
-
     //public partial class UIPrinter : UserControl
     {
         M141Config Config141 => Process.IConfig as M141Config;
@@ -50,7 +49,7 @@
             ttheigh = 160;
             message = str;
 
-            this.printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = "Honeywell PX240 (300 dpi)";
+            this.printDocument1.DefaultPageSettings.PrinterSettings.PrinterName = "Honeywell PX240S (300 dpi)"; 
             this.printDocument1.DefaultPageSettings.PaperSize = new PaperSize("Custum", ttwith, ttheigh);
 
             this.printDocument1.PrintController = new System.Drawing.Printing.StandardPrintController();
diff --git a/src/Bro.M141_AOI1.Process/AOI1Process.cs b/src/Bro.M141_AOI1.Process/AOI1Process.cs
index 139b24d..78b73b9 100644
--- a/src/Bro.M141_AOI1.Process/AOI1Process.cs
+++ b/src/Bro.M141_AOI1.Process/AOI1Process.cs
@@ -28,19 +28,18 @@
         #endregion
 
         AOI1Config ConfigAOI1 => Config as AOI1Config;
-        TcpClientWrapBase BarcodeScanner = null;
+
 
 
         public override void Open()
         {
             base.Open();
-            BarcodeScanner = DeviceCollection.FirstOrDefault(u => u is TcpClientWrapBase) as TcpClientWrapBase;
+
         }
 
         [ProcessMethod("", "PositionCheck_P1", "宸ヤ綅1妫�娴�", InvokeType.TestInvoke)]
         public ResponseMessage PositionCheck_P1(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
         {
-
             var positionSet = M141Config.WorkPositionCollection.Where(u => u.IsEnabled).FirstOrDefault(u => u.TriggerValue == "1#");
             if (positionSet == null)
             {
@@ -97,65 +96,94 @@
             ResponseMessage msg = new ResponseMessage();
             if (config is IImageCheckOperationConfig opConfig)
             {
-                var results = opConfig.Products.Select(u =>
+                if (invokeDevice is TcpClientWrapBase BarcodeScanner)
                 {
-                    DetectResult result = new DetectResult();
-                    result.PID = u.PID;
-                    result.Specs = GetSpecListFromConfigSelection(opConfig.SpecCollection);
-                    return result;
-                }).ToList();
+                    var results = opConfig.Products.Select(u =>
+                    {
+                        DetectResult result = new DetectResult();
+                        result.PID = u.PID;
+                        result.Specs = GetSpecListFromConfigSelection(opConfig.SpecCollection);
+                        return result;
+                    }).ToList();
 
-                msg.DataObj = results;
+                    msg.DataObj = results;
 
-                string barcode = BarcodeScannerCommunicate();
+                    string barcode = BarcodeScannerCommunicate(BarcodeScanner);
 
-                List<double> ret = new List<double>();
-                if ("NOREAD".Equals(barcode.ToUpper()))
-                {
-                    ret.Add(999);
+                    List<double> ret = new List<double>();
+                    if ("NOREAD".Equals(barcode.ToUpper()))
+                    {
+                        ret.Add(999);
+                    }
+                    else
+                    {
+                        ret.Add(1);
+                    }
+
+                    FillSpecResults(results[0].PID, results[0].Specs, ret, opConfig.Products[0].SEQUENCE);
+
+
+                    opConfig.Products[0].SN = barcode;
+                    opConfig.Products[0].Details.ForEach(u => u.SN = barcode);
+
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"浜у搧{opConfig.Products[0].PID}鏉$爜鑾峰彇涓簕barcode}");
                 }
-                else
-                {
-                    ret.Add(1);
-                }
-
-                FillSpecResults(results[0].PID, results[0].Specs, ret, opConfig.Products[0].SEQUENCE);
-
-
-                opConfig.Products[0].SN = barcode;
-                opConfig.Products[0].Details.ForEach(u => u.SN = barcode);
-
-                LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"浜у搧{opConfig.Products[0].PID}鏉$爜鑾峰彇涓簕barcode}");
-
             }
             return msg;
         }
 
 
+        [ProcessMethod("ImageCheck", "ReadBarcode2", "璇绘爮鍏风爜", InvokeType.TestInvoke)]
+        public ResponseMessage ReadBarcode2(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            ResponseMessage msg = new ResponseMessage();
 
-        private string BarcodeScannerCommunicate()
+            if (invokeDevice is TcpClientWrapBase BarcodeScanner2)
+            {
+                string barcode = BarcodeScannerCommunicate(BarcodeScanner2);
+                if (string.IsNullOrEmpty(barcode) || "noread".Equals(barcode.ToLower()))
+                {
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"鏍忓叿鐮佽幏鍙栧け璐�");
+                    Plc1.WriteSingleAddress(1524, 2, out _);
+                    Plc1.WriteSingleAddress(1514, 1, out _);
+                }
+                else
+                {
+                    Plc1.WriteSingleAddress(1524, 1, out _);
+                    Plc1.WriteSingleAddress(1514, 1, out _);
+                    ConfigAOI1.basketcode = barcode;
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"鑾峰彇鍒版爮鍏风爜涓簕barcode}");
+                }
+            }
+
+            return msg;
+        }
+
+
+
+        private string BarcodeScannerCommunicate(TcpClientWrapBase client)
         {
             string barcode = "";
 
             for (int i = 0; i < 3; i++)
             {
-                if (BarcodeScanner.WriteAndRead("start", out string error, out barcode, true))
+                if (client.WriteAndRead("start", out string error, out barcode, true))
                 {
                     barcode = barcode.Trim(' ', '\r', '\n');
                     if (CheckBarcodeValid(barcode))
                     {
-                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"{BarcodeScanner.Name}鎵爜瀹屾垚锛屽弽棣坽barcode}");
+                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"{client.Name}鎵爜瀹屾垚锛屽弽棣坽barcode}");
                         return barcode;
                     }
                     else
                     {
-                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"{BarcodeScanner.Name}绗瑊i + 1}鎵爜瀹屾垚锛屽弽棣坽barcode}锛屼笉鏄悎娉曟潯鐮�");
+                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"{client.Name}绗瑊i + 1}鎵爜瀹屾垚锛屽弽棣坽barcode}锛屼笉鏄悎娉曟潯鐮�");
                         Thread.Sleep(200);
                     }
                 }
                 else
                 {
-                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"{BarcodeScanner.Name}鎵爜澶辫触锛寋error}");
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"{client.Name}鎵爜澶辫触锛寋error}");
                     break;
                 }
             }

--
Gitblit v1.8.0