src/Bro.M141.Process/M141Process_ImageCheck.cs
@@ -2,12 +2,14 @@
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.Formula.Functions;
using NPOI.SS.UserModel;
using NPOI.Util;
using NPOI.XSSF.UserModel;
@@ -441,7 +443,7 @@
            return msg;
        }
@@ -449,7 +451,8 @@
        public ResponseMessage ProductDataUpload(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
        {
            ResponseMessage msg = new ResponseMessage();
            string inputSequence = Plc1.Read(1536, 1, out _)[0].ToString();
            int numplca = Plc1.Read(1536, 1, out _)[0];
            string inputSequence = numplca.ToString();
            var productList = new List<int>() { 1 }.Select(u =>
            {
@@ -457,6 +460,10 @@
                return FindProductBySequence(sequence, true);
            }).ToList();
            if (PlcNumForAll == -1)
            {
                PlcNumForAll = numplca;
            }
            int waitInterval = 300;
            int repeatTime = M141Config.DetectTimeout / waitInterval;
@@ -481,31 +488,145 @@
            } 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 _);
                LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"产品{string.Join(",", productList.Select(u => u.PID))}检测反馈{mysqlhelper.GetS2Result(productList[0].SEQUENCE)}");
            }
            else
            {
                Plc1.WriteSingleAddress(1526, Defaultclass?.ClassValue ?? 2, out _);
            }
            Plc1.WriteSingleAddress(1516, 1, out _);
            //if (M141Config.ISupMES && (M141Config.MESchannel == -1 || M141Config.MESchannel == 1))
            //{
            //    if (M141Config.numpro >= 50)
            //    {
            //        M141Config.numpro = 0;
            //    }
            //    if (productList[0].Result == "OK")
            //    {
            //        M141Config.numpro++;
            //    }
            //    //mqtt.demes(productList[0], M141Config.zwoid);
            //    string Msgreceice = Task.Run(() => mqtt.MESForProduceAsync(productList[0], M141Config.zwoid, M141Config.numpro)).Result;
            //    if (Msgreceice == null)
            //    {
            //        LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"产品{productList[0].PID}数据上传MES异常 返回数据为null");
            //    }
            //    else
            //    {
            //        try
            //        {
            //            var obj = JsonConvert.DeserializeObject<AutoLineMacBarcodeQueueBak>(Msgreceice);
            //            if (obj.zstatus == "200")
            //            {
            //                LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"产品{productList[0].PID}数据上传MES成功  {Msgreceice}");
            //            }
            //            else
            //            {
            //                LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"产品{productList[0].PID}数据上传MES失败  {Msgreceice}");
            //            }
            //        }
            //        catch
            //        {
            //            LogAsync(DateTime.Now, EnumHelper.LogLevel.Exception, $"产品{productList[0].PID}数据上传MES异常  {Msgreceice}");
            //        }
            //    }
            //    lock (plcnumlock)
            //    {
            //        int differ = numplca - PlcNumForAll;
            //        if (differ > 1)
            //        {
            //            for (int i = PlcNumForAll + 1; i < numplca; i++)
            //            {
            //                try
            //                {
            //                    var plist = mysqlhelper.GetProductList(i + "_1");
            //                    ProductModel newp = new ProductModel();
            //                    newp.SEQUENCE = plist[0].SEQUENCE;
            //                    newp.PID = plist[0].PID;
            //                    newp.BasketCode = plist[0].BasketCode;
            //                    newp.Result = "NG";
            //                    newp.SN = plist[0].SN;
            //                    var tems = Task.Run(() => mqtt.MESForProduceAsync(newp, M141Config.zwoid, M141Config.numpro)).Result;
            //                }
            //                catch
            //                {
            //                }
            //            }
            //        }
            //        else if (differ != -29998)
            //        {
            //            for (int i = PlcNumForAll + 1; i <= 29999; i++)
            //            {
            //                try
            //                {
            //                    var plist = mysqlhelper.GetProductList(i + "_1");
            //                    ProductModel newp = new ProductModel();
            //                    newp.SEQUENCE = plist[0].SEQUENCE;
            //                    newp.PID = plist[0].PID;
            //                    newp.BasketCode = plist[0].BasketCode;
            //                    newp.Result = "NG";
            //                    newp.SN = plist[0].SN;
            //                    var tems = Task.Run(() => mqtt.MESForProduceAsync(newp, M141Config.zwoid, M141Config.numpro)).Result;
            //                }
            //                catch
            //                {
            //                }
            //            }
            //            for (int i = 1; i < numplca; i++)
            //            {
            //                try
            //                {
            //                    var plist = mysqlhelper.GetProductList(i + "_1");
            //                    ProductModel newp = new ProductModel();
            //                    newp.SEQUENCE = plist[0].SEQUENCE;
            //                    newp.PID = plist[0].PID;
            //                    newp.BasketCode = plist[0].BasketCode;
            //                    newp.Result = "NG";
            //                    newp.SN = plist[0].SN;
            //                    var tems = Task.Run(() => mqtt.MESForProduceAsync(newp, M141Config.zwoid, M141Config.numpro)).Result;
            //                }
            //                catch
            //                {
            //                }
            //            }
            //        }
            //        PlcNumForAll = numplca;
            //    }
            //}
            return msg;
        }
        object plcnumlock = new object();
        int PlcNumForAll = -1;
        private bool _isDemoStarted = false;
        [ProcessMethod("OfflineDemo", "OfflineDemo", "离线测试", InvokeType.CalibInvoke)]
@@ -527,7 +648,7 @@
            return new ResponseMessage();
        }
        private async void OfflineDemoAsync(string imageFolder,bool isok,int saveimagetime)
        private async void OfflineDemoAsync(string imageFolder, bool isok, int saveimagetime)
        {
            await Task.Run(() =>
            {
@@ -544,7 +665,7 @@
                    {
                        continue;
                    }
                    if (imageFile.EndsWith("OK")& isok == false)
                    if (imageFile.EndsWith("OK") & isok == false)
                    {
                        continue;
                    }
@@ -552,18 +673,18 @@
                    {
                        continue;
                    }
                    var nameDatas = imageFile.Split(new char[] { '_'}, StringSplitOptions.RemoveEmptyEntries).ToList();
                    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 sn = nameDatas[0] + "_1";
                    var imageSeq = nameDatas[2][^1].ToString();
                    var measureBind = M141Config.MeasureBindCollection.FirstOrDefault(u => u.ImageSaveSeq == imageSeq);
                if (measureBind == null || !measureBind.IsFixed)
                    if (measureBind == null || !measureBind.IsFixed)
                    {
                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"离线测试,工位{(measureBind == null ? "未匹配" : $"{measureBind.WorkPosition}未开启")}");
                        continue;
@@ -579,11 +700,11 @@
                    Thread.Sleep(saveimagetime);
                    imgSet.HImage?.Dispose();
                    imgSet.HImage = null;
                }
            });
        }
        [ProcessMethod("printer", "printer", "打印机打印", InvokeType.TestInvoke)]
@@ -722,7 +843,7 @@
            UpdateDefectAsync(defects);
            var defectClass = GetDefectClassFromDefectList(defects);
            UpdateResult(DateTime.Now, p.SN, defectClass.ClassName, "",p.ImagePaths);
            UpdateResult(DateTime.Now, p.SN, defectClass.ClassName, "", p.ImagePaths);
            //产品序号+1
            //Interlocked.Increment(ref _productIndex);