From 18475c9ceff517b7ba292b9f8b90933b0ce3fb78 Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期三, 23 十二月 2020 16:38:53 +0800
Subject: [PATCH] 添加MES日志开关配置和详细数据日志

---
 src/Bro.M071.Process/M071Process.cs |  285 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 193 insertions(+), 92 deletions(-)

diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index a382503..47498b8 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -2,7 +2,7 @@
 using Bro.Common.Helper;
 using Bro.Common.Interface;
 using Bro.Common.Model;
-using Bro.M071.DBManager;
+//using Bro.M071.DBManager;
 using Bro.M071.Model;
 using Bro.M071.Model.Model;
 using Bro.M071.Process.UI;
@@ -50,7 +50,6 @@
 
         string _precision = "f3";
 
-
         public override void Open()
         {
             InitialSetting();
@@ -71,6 +70,9 @@
             {
                 _precision = "f" + Config.Precision;
             }
+
+            IncomingCheckMethod = InitialMESWebServiceMethod(IncomingCheckMethodName, out IncomingCheckObj);
+            DataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj);
         }
 
         private void InitialMotionCardBaseAxisAlarm()
@@ -183,8 +185,6 @@
         }
         #endregion
 
-        public string BarCode { get; set; }
-
         List<ProductionMeasurement> productionList = new List<ProductionMeasurement>();
 
         [ProcessMethod("", "StartJob", "寮�濮嬫壂鎻�", InvokeType.TestInvoke)]
@@ -195,16 +195,25 @@
                 throw new ProcessException(SafetyMsg, null, ExceptionLevel.Fatal);
             }
 
+            string hint = "";
             if (MachineState != MachineState.Ready)
-                throw new ProcessException("鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�", null, ExceptionLevel.Fatal);
+            {
+                hint = "鏈哄彴鏈氨缁紝璇峰嬁寮�濮嬫祴閲�";
+                OnCheckHintUpload?.Invoke(hint, true);
+                throw new ProcessException(hint, null, ExceptionLevel.Fatal);
+            }
 
             if (string.IsNullOrWhiteSpace(BarCode))
             {
+                hint = "鏈緭鍏ヤ骇鍝佹潯鐮侊紝璇峰嬁寮�濮嬫祴閲�";
                 OnClearBarcode?.Invoke();
-                throw new ProcessException("鏈緭鍏ヤ骇鍝佹潯鐮侊紝璇峰嬁寮�濮嬫祴閲�");
+                OnCheckHintUpload?.Invoke(hint, true);
+                throw new ProcessException(hint);
             }
 
             MachineState = MachineState.Running;
+
+            OnCheckHintUpload?.Invoke(hint, true);
             OnMeasureStart?.Invoke();
 
             //var measurements = Config.MeasurementUnitCollection.Where(u => u.IsEnabled).ToList().DeepSerializeClone();
@@ -294,7 +303,7 @@
                   });
 
             LogAsync(DateTime.Now, $"{pMeasure.Barcode}娴嬮噺鍔ㄤ綔瀹屾垚", "");
-            
+
             GC.Collect(0, GCCollectionMode.Optimized);
 
             return new ProcessResponse(true);
@@ -352,6 +361,74 @@
 
             return new ProcessResponse();
         }
+
+        [ProcessMethod("Demostration", "CheckBasePlan", "鍩哄噯骞抽潰妫�鏍�", InvokeType.TestInvoke)]
+        public ProcessResponse CheckBasePlan(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (opConfig is DemostrationOperationConfig config)
+            {
+                config.DemoOperations.ForEach(d =>
+                {
+                    IDevice device = DeviceCollection.FirstOrDefault(u => u.Id == d.MotionOp.Device);
+                    if (device != null)
+                    {
+                        IMotionCard motionDevice = device as IMotionCard;
+
+                        if (motionDevice != null)
+                        {
+                            var response = motionDevice.Run(d.MotionOp.OpConfig);
+                            if (!response.Result)
+                            {
+                                throw new ProcessException($"{device.Name}寮傚父锛寋response.Message}", null, ExceptionLevel.Fatal);
+                            }
+                        }
+                    }
+
+                    CameraBase camera = DeviceCollection.FirstOrDefault(u => u.Id == d.CameraOp.Device) as CameraBase;
+                    if (camera != null)
+                    {
+                        IImageSet set = null;
+                        try
+                        {
+                            set = CollectHImage(camera, d.CameraOp.OpConfig);
+                        }
+                        catch (ProcessException pEx)
+                        {
+                            pEx.Level = ExceptionLevel.Fatal;
+                            throw pEx;
+                        }
+
+                        if (set != null)
+                        {
+                            LaserScanParam scanParam = JsonConvert.DeserializeObject<LaserScanParam>(set.ImageData);
+                            LogAsync(DateTime.Now, $"鎵弿鍙傛暟:{set.ImageData}", "");
+
+                            var tool = GetHalconTool(d.CameraOp.OpConfig, config.MonitorSetId);
+                            if (tool != null)
+                            {
+                                using (tool.InputImageDic["INPUT_Image"] = set.HImage)
+                                {
+                                    tool.InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z / 1000000.0;
+
+                                    if (!tool.RunProcedure(out string error))
+                                    {
+                                        LogAsync(DateTime.Now, $"{tool.ProcedureName}鎵ц寮傚父", error);
+                                    }
+                                    else
+                                    {
+                                        var diffX = tool.GetResultTuple("OUTPUT_Result_X").D;
+                                        var diffY = tool.GetResultTuple("OUTPUT_Result_Y").D;
+                                        LogAsync(DateTime.Now, $"妫�娴嬪钩闈紝X鏂瑰悜鏋佸樊锛歿diffX.ToString(_precision)}锛孻鏂瑰悜鏋佸樊锛歿diffY.ToString(_precision)}", "");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                });
+            }
+
+            return new ProcessResponse();
+        }
         #endregion
 
         #region 绉佹湁鏂规硶
@@ -374,7 +451,8 @@
                             {
                                 if (m.KeyUnitCollection.Any(k => k.IsDone == false))
                                 {
-                                    m.Spec.ActualValue = -999;
+                                    //m.Spec.ActualValue = -999;
+                                    m.Spec.ActualValue = null;
                                 }
                                 else
                                 {
@@ -382,7 +460,8 @@
                                     if (!_halconToolDict.ContainsKey(toolKey))
                                     {
                                         LogAsync(DateTime.Now, $"{m.GetDisplayText()}{m.Spec.Code}绠楁硶鏈垵濮嬪寲", "");
-                                        m.Spec.ActualValue = -999;
+                                        //m.Spec.ActualValue = -999;
+                                        m.Spec.ActualValue = null;
                                     }
                                     else
                                     {
@@ -392,7 +471,8 @@
                                         if (array == null || array.Length == 0)
                                         {
                                             LogAsync(DateTime.Now, $"{m.GetDisplayText()}{m.Spec.Code}鏈兘鑾峰彇瀵瑰簲妫�娴嬪��", "");
-                                            m.Spec.ActualValue = -999;
+                                            //m.Spec.ActualValue = -999;
+                                            m.Spec.ActualValue = null;
                                         }
                                         else
                                         {
@@ -401,7 +481,8 @@
                                             if (!_halconToolDict[toolKey].RunProcedure(out string error))
                                             {
                                                 LogAsync(DateTime.Now, $"{m.GetDisplayText()}{m.Spec.Code}绠楁硶寮傚父,{error}", "");
-                                                m.Spec.ActualValue = -999;
+                                                //m.Spec.ActualValue = -999;
+                                                m.Spec.ActualValue = null;
                                             }
                                             else
                                             {
@@ -415,7 +496,8 @@
                                 //LogAsync(DateTime.Now, $"{m.GetDisplayText()}妫�娴嬬粨鏋�", $"{((m.Spec.MeasureResult ?? false) ? "OK" : "NG")}");
 
                                 KeyIndicator indicator = new KeyIndicator(m.Id, m.DisplayLocation);
-                                indicator.Text = (m.Spec.ActualValue == null || m.Spec.ActualValue == -999) ? "NA" : m.Spec.ActualValue.Value.ToString(_precision);
+                                //indicator.Text = (m.Spec.ActualValue == null || m.Spec.ActualValue == -999) ? "NA" : m.Spec.ActualValue.Value.ToString(_precision);
+                                indicator.Text = m.Spec.ActualValue == null ? "NA" : m.Spec.ActualValue.Value.ToString(_precision);
                                 indicator.ResultState = m.Spec.MeasureResult;
                                 pMeasure.ElementList.Add(indicator);
                                 //杈撳嚭鍥惧舰鍩哄厓鍒扮晫闈� 
@@ -435,9 +517,27 @@
                 }
 
                 pMeasure.EndTime = DateTime.Now;
-                bool pResult = pMeasure.Measurements.All(u => u.Spec.MeasureResult == true);
-                pMeasure.PResult = pResult ? "OK" : "NG";
-                OnUpdateResult?.Invoke(DateTime.Now, pResult ? 1 : 0);
+                //bool pResult = pMeasure.Measurements.All(u => u.Spec.MeasureResult == true);
+                //pMeasure.PResult = pResult ? "OK" : "NG";
+                //OnUpdateResult?.Invoke(DateTime.Now, pResult ? 1 : 0);
+                //OnUpdateCT?.Invoke((float)(pMeasure.EndTime.Value - pMeasure.StartTime.Value).TotalSeconds);
+
+                int result = -1;
+                if (pMeasure.Measurements.Any(u => u.Spec.MeasureResult == null))
+                {
+                    pMeasure.PResult = "NA";
+                }
+                else if (pMeasure.Measurements.Any(u => u.Spec.MeasureResult == false))
+                {
+                    pMeasure.PResult = "NG";
+                    result = 0;
+                }
+                else
+                {
+                    pMeasure.PResult = "OK";
+                    result = 1;
+                }
+                OnUpdateResult?.Invoke(DateTime.Now, result);
                 OnUpdateCT?.Invoke((float)(pMeasure.EndTime.Value - pMeasure.StartTime.Value).TotalSeconds);
 
                 LogAsync(DateTime.Now, $"{pMeasure.Barcode} 妫�娴嬪畬鎴愶紝缁撴灉 {pMeasure.PResult}", "");
@@ -447,9 +547,10 @@
 
                 var measurementUnitResultAndKeyUnitDataSet = GetMeasurementUnitResultAndKeyUnitData(pMeasure);
 
-                //MES杈撳嚭 todo
-                if (Config.IsEnableMESUpload)
+                if (pMeasure.PResult != "NA")
                 {
+                    //MES杈撳嚭
+                    MESCheckDataUpload(pMeasure);
                 }
 
                 //Excel鎶ヨ〃杈撳嚭 锛堝崟涓骇鍝佺殑excel瀵煎嚭锛�
@@ -467,44 +568,44 @@
             }
         }
 
-        KeyUnitDataManager keyUnitDataManager = new KeyUnitDataManager();
-        MeasurementUnitResultManager measurementUnitResultManager = new MeasurementUnitResultManager();
-        MeasurementAndKeyDataRelationManager measurementAndKeyDataRelationManager = new MeasurementAndKeyDataRelationManager();
-        ProductionMeasurementRecordsManager productionMeasurementRecordsManager = new ProductionMeasurementRecordsManager();
+        //KeyUnitDataManager keyUnitDataManager = new KeyUnitDataManager();
+        //MeasurementUnitResultManager measurementUnitResultManager = new MeasurementUnitResultManager();
+        //MeasurementAndKeyDataRelationManager measurementAndKeyDataRelationManager = new MeasurementAndKeyDataRelationManager();
+        //ProductionMeasurementRecordsManager productionMeasurementRecordsManager = new ProductionMeasurementRecordsManager();
 
         static object dataSaveLock = new object();
 
-        private async void SaveProductionData(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet)
-        {
-            await Task.Run(() =>
-            {
-                try
-                {
-                    lock (dataSaveLock)
-                    {
-                        // 鑾峰彇 浜у搧鏁版嵁 骞朵繚瀛�
-                        var productionMeasurementRecords = measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord;
-                        productionMeasurementRecordsManager.CreateModel(productionMeasurementRecords);
+        //private async void SaveProductionData(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet)
+        //{
+        //    await Task.Run(() =>
+        //    {
+        //        try
+        //        {
+        //            lock (dataSaveLock)
+        //            {
+        //                // 鑾峰彇 浜у搧鏁版嵁 骞朵繚瀛�
+        //                var productionMeasurementRecords = measurementUnitResultAndKeyUnitDataSet.ProductionMeasurementRecord;
+        //                productionMeasurementRecordsManager.CreateModel(productionMeasurementRecords);
 
-                        // 鑾峰彇 鍘熷鏁版嵁 骞朵繚瀛�
-                        var keyUnitDatas = measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList;
-                        keyUnitDataManager.BatchAddKeyUnitData(keyUnitDatas);
+        //                // 鑾峰彇 鍘熷鏁版嵁 骞朵繚瀛�
+        //                var keyUnitDatas = measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList;
+        //                keyUnitDataManager.BatchAddKeyUnitData(keyUnitDatas);
 
-                        // 鑾峰彇 妫�娴嬬粨鏋滄暟鎹� 骞朵繚瀛�
-                        var measurementUnitResults = measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList;
-                        measurementUnitResultManager.BatchAddMeasurementUnitResult(measurementUnitResults);
+        //                // 鑾峰彇 妫�娴嬬粨鏋滄暟鎹� 骞朵繚瀛�
+        //                var measurementUnitResults = measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList;
+        //                measurementUnitResultManager.BatchAddMeasurementUnitResult(measurementUnitResults);
 
-                        // 鑾峰彇 鍏崇郴鏁版嵁骞朵繚瀛�
-                        var measurementAndKeyDataRelationList = measurementUnitResultAndKeyUnitDataSet.MeasurementAndKeyDataRelationList;
-                        measurementAndKeyDataRelationManager.BatchAddMeasurementAndKeyDataRelation(measurementAndKeyDataRelationList);
-                    }
-                }
-                catch (Exception ex)
-                {
-                    LogAsync(DateTime.Now, "鏁版嵁淇濆瓨寮傚父", ex.GetExceptionMessage());
-                }
-            });
-        }
+        //                // 鑾峰彇 鍏崇郴鏁版嵁骞朵繚瀛�
+        //                var measurementAndKeyDataRelationList = measurementUnitResultAndKeyUnitDataSet.MeasurementAndKeyDataRelationList;
+        //                measurementAndKeyDataRelationManager.BatchAddMeasurementAndKeyDataRelation(measurementAndKeyDataRelationList);
+        //            }
+        //        }
+        //        catch (Exception ex)
+        //        {
+        //            LogAsync(DateTime.Now, "鏁版嵁淇濆瓨寮傚父", ex.GetExceptionMessage());
+        //        }
+        //    });
+        //}
 
         private ProductionMeasurementUnitResultAndKeyUnitDataSet GetMeasurementUnitResultAndKeyUnitData(ProductionMeasurement pData)
         {
@@ -587,49 +688,49 @@
             return measurementUnitResultAndKeyUnitDataSet;
         }
 
-        private async void ExportProductionExcel(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet)
-        {
-            if (!Config.IsCSVOutputEnabled)
-                return;
+        //private async void ExportProductionExcel(ProductionMeasurementUnitResultAndKeyUnitDataSet measurementUnitResultAndKeyUnitDataSet)
+        //{
+        //    if (!Config.IsCSVOutputEnabled)
+        //        return;
 
-            await Task.Run(() =>
-            {
-                ExcelExportSet excelExportDto = new ExcelExportSet();
-                excelExportDto.Worksheets = new List<string>() { "鍘熷鏁版嵁", "妫�娴嬬粨鏋�" };
-                var keyUnitColumns = new Dictionary<string, string>()
-                {
-                    {"ProductionBarcode", "浜у搧鏉$爜"},
-                    {"Key", "閿�"},
-                    {"MeasurementItem", "妫�娴嬮」"},
-                    {"ItemValue", "妫�娴嬪��"}
-                };
-                var measurementUnitResultColumns = new Dictionary<string, string>()
-                {
-                    {"ProductionBarcode", "浜у搧鏉$爜"},
-                    {"MeasurementName", "妫�娴嬪悕绉�"},
-                    {"MeasurementType", "妫�娴嬬被鍨�"},
-                    {"MeasurementValue", "妫�娴嬪��"},
-                    {"MeasurementResult", "妫�娴嬬粨鏋�"},
-                };
-                excelExportDto.WorksheetColumns[excelExportDto.Worksheets[0]] = keyUnitColumns;
-                excelExportDto.WorksheetColumns[excelExportDto.Worksheets[1]] = measurementUnitResultColumns;
+        //    await Task.Run(() =>
+        //    {
+        //        ExcelExportSet excelExportDto = new ExcelExportSet();
+        //        excelExportDto.Worksheets = new List<string>() { "鍘熷鏁版嵁", "妫�娴嬬粨鏋�" };
+        //        var keyUnitColumns = new Dictionary<string, string>()
+        //        {
+        //            {"ProductionBarcode", "浜у搧鏉$爜"},
+        //            {"Key", "閿�"},
+        //            {"MeasurementItem", "妫�娴嬮」"},
+        //            {"ItemValue", "妫�娴嬪��"}
+        //        };
+        //        var measurementUnitResultColumns = new Dictionary<string, string>()
+        //        {
+        //            {"ProductionBarcode", "浜у搧鏉$爜"},
+        //            {"MeasurementName", "妫�娴嬪悕绉�"},
+        //            {"MeasurementType", "妫�娴嬬被鍨�"},
+        //            {"MeasurementValue", "妫�娴嬪��"},
+        //            {"MeasurementResult", "妫�娴嬬粨鏋�"},
+        //        };
+        //        excelExportDto.WorksheetColumns[excelExportDto.Worksheets[0]] = keyUnitColumns;
+        //        excelExportDto.WorksheetColumns[excelExportDto.Worksheets[1]] = measurementUnitResultColumns;
 
-                excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[0]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList, keyUnitColumns);
-                excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[1]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList, measurementUnitResultColumns); ;
+        //        excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[0]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.KeyUnitDataList, keyUnitColumns);
+        //        excelExportDto.WorksheetDataTable[excelExportDto.Worksheets[1]] = ExcelExportHelper.ListToDataTable(measurementUnitResultAndKeyUnitDataSet.MeasurementUnitResultList, measurementUnitResultColumns); ;
 
-                if (!Directory.Exists(Config.LogPath))
-                {
-                    Directory.CreateDirectory(Config.LogPath);
-                }
-                var fileName = Path.Combine(Config.LogPath, $"ProductionData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx");
+        //        if (!Directory.Exists(Config.LogPath))
+        //        {
+        //            Directory.CreateDirectory(Config.LogPath);
+        //        }
+        //        var fileName = Path.Combine(Config.LogPath, $"ProductionData_{DateTime.Now.ToString("yyyyMMdd")}.xlsx");
 
-                byte[] filecontent = ExcelExportHelper.CreateOrAppendExcel(excelExportDto, fileName);
-                FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
-                fs.Write(filecontent, 0, filecontent.Length);
-                fs.Flush();
-                fs.Close();
-            });
-        }
+        //        byte[] filecontent = ExcelExportHelper.CreateOrAppendExcel(excelExportDto, fileName);
+        //        FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
+        //        fs.Write(filecontent, 0, filecontent.Length);
+        //        fs.Flush();
+        //        fs.Close();
+        //    });
+        //}
 
         static object excelExportLock = new object();
         private async void ExportProductionInColumns(ProductionMeasurementUnitResultAndKeyUnitDataSet exportData)
@@ -782,11 +883,11 @@
                         #endregion
 
                         #region Slant
-                        var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "Slant").ToList();
+                        var slantMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Slant")).ToList();
                         if (slantMeasures.Count > 0)
                         {
                             int slantStartCol = slantSheet.Dimension.Columns;
-                            
+
                             var barcodeCell = slantSheet.Cells[1, slantStartCol + 1];
                             barcodeCell.Value = exportData.ProductionMeasurementRecord.ProductionBarcode;
                             SetTitleCell(barcodeCell);
@@ -821,7 +922,7 @@
 
                         #region Alignment
                         {
-                            var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "Alignment").ToList();
+                            var alignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("Alignment")).ToList();
                             if (alignmentMeasures.Count > 0)
                             {
                                 List<string> keysList = new List<string>();
@@ -880,7 +981,7 @@
 
                         #region RowAlignment
                         {
-                            var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType == "RowAlignment").ToList();
+                            var rowAlignmentMeasures = exportData.MeasurementUnitResultList.Where(u => u.MeasurementType.StartsWith("RowAlignment")).ToList();
                             if (rowAlignmentMeasures.Count > 0)
                             {
                                 List<string> keysList = new List<string>();

--
Gitblit v1.8.0