From e41fb4bea3afa879caaf6c9f316f01bacf262545 Mon Sep 17 00:00:00 2001
From: kingno <30263@KINGNO>
Date: 星期一, 23 六月 2025 20:03:12 +0800
Subject: [PATCH] S2和S4结果联动.S2抛条码NG,其余NG到S4抛料

---
 src/Bro.M141.Process/M141Process_ImageCheck.cs |  137 +++++++++++++++++++++++++++++++++++++--------
 1 files changed, 112 insertions(+), 25 deletions(-)

diff --git a/src/Bro.M141.Process/M141Process_ImageCheck.cs b/src/Bro.M141.Process/M141Process_ImageCheck.cs
index 222cddc..f8d90da 100644
--- a/src/Bro.M141.Process/M141Process_ImageCheck.cs
+++ b/src/Bro.M141.Process/M141Process_ImageCheck.cs
@@ -2,13 +2,16 @@
 using Bro.Common.Helper;
 using Bro.Common.Interface;
 using Bro.Common.Model;
+using Bro.DataBase.Model;
 using Bro.M135.Common;
 using Bro.M135.DBManager;
 using HalconDotNet;
 using Microsoft.VisualBasic;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using NPOI.SS.UserModel;
 using NPOI.Util;
+using NPOI.XSSF.UserModel;
 using Sunny.UI;
 using System.Data;
 using System.Data.SqlTypes;
@@ -441,6 +444,8 @@
         }
 
 
+
+
         [ProcessMethod("", "ProductDataUpload", "浜у搧鏁版嵁姹囨��", InvokeType.TestInvoke)]
         public ResponseMessage ProductDataUpload(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
         {
@@ -477,29 +482,99 @@
             } while (true);
 
 
-            var Defaultclass = M141Config.DefectClassCollection.FirstOrDefault(u => u.IsDefault);
-            productList.ForEach(p =>
-            {
-                if (Defaultclass == null)
-                {
-                    if (string.IsNullOrEmpty(p.Result))
-                    {
-                        p.Result = "NG";
-                    }
-                }
-                else
-                {
-                    if (string.IsNullOrEmpty(p.Result))
-                    {
-                        p.Result = Defaultclass.ClassName;
-                    }
-                }
+            var Defaultclass = M141Config.DefectClassCollection.FirstOrDefault(u => u.ClassName == productList[0].Result);
 
-                Plc1.WriteSingleAddress(1526, p.Result.ToUpper().Contains("NG") ? 2 : 1, out _);
-            });
+            if (M141Config.StationCode == "S4" && productList[0].Result == "OK")
+            {
+                ////mysqlhelper.GetS2Result(productList[0].SEQUENCE);
+                Plc1.WriteSingleAddress(1526, mysqlhelper.GetS2Result(productList[0].SEQUENCE) ? 1 : 2, out _);
+            }
+            else
+            {
+                Plc1.WriteSingleAddress(1526, Defaultclass?.ClassValue ?? 2, out _);
+            }
+
             Plc1.WriteSingleAddress(1516, 1, out _);
 
             return msg;
+        }
+
+
+        private bool _isDemoStarted = false;
+        [ProcessMethod("OfflineDemo", "OfflineDemo", "绂荤嚎娴嬭瘯", InvokeType.CalibInvoke)]
+        public ResponseMessage OfflineDemo(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (config is OfflineDemoOperationConfig opConfig)
+            {
+                if (_isDemoStarted)
+                {
+                    _isDemoStarted = false;
+                }
+                else
+                {
+                    _isDemoStarted = true;
+                    OfflineDemoAsync(opConfig.ImageFolder, opConfig.IsOK, opConfig.SaveImageTime);
+                }
+            }
+
+            return new ResponseMessage();
+        }
+
+        private async void OfflineDemoAsync(string imageFolder, bool isok, int saveimagetime)
+        {
+            await Task.Run(() =>
+            {
+                var imageFileNames = new DirectoryInfo(imageFolder).GetFiles().Select(u => u.FullName).ToList();
+
+                for (int i = 0; i < imageFileNames.Count; i++)
+                {
+                    if (!_isDemoStarted)
+                    {
+                        return;
+                    }
+                    var imageFile = Path.GetFileNameWithoutExtension(imageFileNames[i]);
+                    if (imageFile.EndsWith("Fit"))
+                    {
+                        continue;
+                    }
+                    if (imageFile.EndsWith("OK") & isok == false)
+                    {
+                        continue;
+                    }
+                    if (imageFile.EndsWith("NG") & isok == true)
+                    {
+                        continue;
+                    }
+                    var nameDatas = imageFile.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries).ToList();
+                    if (nameDatas.Count != 5)
+                    {
+                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"鏂囦欢{imageFile}鍛藉悕涓嶇鍚堣鑼冿紝涓嶆墽琛岀绾挎祴璇�");
+                        continue;
+                    }
+
+                    var sn = nameDatas[0];
+                    var imageSeq = nameDatas[2][^1].ToString();
+                    var measureBind = M141Config.MeasureBindCollection.FirstOrDefault(u => u.ImageSaveSeq == imageSeq);
+
+                    if (measureBind == null || !measureBind.IsFixed)
+                    {
+                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"绂荤嚎娴嬭瘯锛屽伐浣峽(measureBind == null ? "鏈尮閰�" : $"{measureBind.WorkPosition}鏈紑鍚�")}");
+                        continue;
+                    }
+
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"绂荤嚎娴嬭瘯锛屼骇鍝亄sn}寮�濮嬪伐浣峽measureBind.WorkPosition}绂荤嚎妫�娴�");
+                    MLImageSet imgSet = new MLImageSet();
+
+                    imgSet.HImage = new HalconDotNet.HImage(imageFileNames[i]);
+                    imgSet.PID = sn;
+
+                    var detectResults = ML.RunMLDetectionSync(imgSet, null, measureBind.DetectionId);
+                    Thread.Sleep(saveimagetime);
+                    imgSet.HImage?.Dispose();
+                    imgSet.HImage = null;
+
+                }
+            });
         }
 
 
@@ -516,9 +591,9 @@
         }
 
 
-        public void PlcwritePrinter(int add,int value)
+        public void PlcwritePrinter(int add, int value)
         {
-            Plc2.WriteSingleAddress(add,value,out _);
+            Plc2.WriteSingleAddress(add, value, out _);
         }
 
 
@@ -560,6 +635,9 @@
             return specList;
         }
 
+
+
+
         protected void FillSpecResults(string pid, List<ISpec> detectSpec, List<double> results, string SEQUENCE)
         {
             detectSpec.ForEach(s =>
@@ -583,8 +661,6 @@
                         }
                     }
 
-
-
                     LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"浜у搧{pid}妫�娴嬮」{s.Code}璧嬪�納s.GetMeasureValueStr()}锛岀粨鏋渰s.GetMeasureResultStr()}");
                 }
                 else
@@ -607,6 +683,15 @@
         {
             isOK = false;
 
+            int num = 0;
+
+            while (p.Details.Any(u => !u.IsDone) && num < 10)
+            {
+                num++;
+                Thread.Sleep(500);
+            }
+
+
             p.InitialDetailSpecs();
             var resultList = p.Details.SelectMany(u => u.ResultList).ToList();
             resultList.ForEach(u => u.SetResult());
@@ -622,16 +707,18 @@
             {
                 defects.Add("TBD");
             }
+
+
             defects = defects.Distinct().ToList();
 
             isOK = defects.Count <= 0;
 
             UpdateDefectAsync(defects);
             var defectClass = GetDefectClassFromDefectList(defects);
-            UpdateResult(DateTime.Now, p.SN, defectClass.ClassName, "");
+            UpdateResult(DateTime.Now, p.SN, defectClass.ClassName, "", p.ImagePaths);
 
             //浜у搧搴忓彿+1
-            Interlocked.Increment(ref _productIndex);
+            //Interlocked.Increment(ref _productIndex);
 
             List<ISpec> specList = new List<ISpec>();
             specList.AddRange(p.Details.SelectMany(u => u.SpecList).ToList().ConvertAll(u => (ISpec)u));

--
Gitblit v1.8.0