jace.tang
2022-06-14 2c79e797a723a59c2afc4b05069618ae48df587d
HeightDetection.cs
@@ -73,6 +73,7 @@
            HObject ihImage = null;
            HObject hi = new HObject();
            string tempFileName = "";
            try
            {
                opc.Write(OPCOutputTag.DetectionStart2, false);
@@ -125,7 +126,10 @@
                    CommonUtil.mainForm.Invoke(new Action(() => CommonUtil.mainForm.AppendDetectionData(productNo)));
                    int detectID = CommonUtil.StepControl.GetDetectHeightID();
                    string tempFileName = CommonUtil.mainForm.PlateID.ToString() + "_" + productNo.Trim().Replace("/", "").Replace("\"", "'") + "_" + DateTime.Now.ToString("HHmmssff") + "_" + detectID.ToString();
                    int slotNum = (CommonUtil.mainForm.PlateID + 1) % 5 + 1;
                    tempFileName = slotNum.ToString() + "_" + productNo.Trim().Replace("/", "").Replace("\"", "'") + "_" + DateTime.Now.ToString("HHmmssff") + "_" + detectID.ToString();
                    if (productNo.Trim().Length == CommonUtil.ProductNoLength)
                    {
                        string productNoFileName = CommonUtil.ProductNoImageDir + @"\" + productNo + "_" + detectID.ToString();
@@ -164,10 +168,12 @@
                            {
                                double compv = 0.0;
                                Type t = opcConfig.compensationZ.GetType();
                                FieldInfo fi = t.GetField(string.Format("station{0}", (CommonUtil.mainForm.PlateID + 1) % 5 + 1));
                                FieldInfo fi = t.GetField(string.Format("station{0}", slotNum));
                                compv = (double)fi.GetValue(opcConfig.compensationZ);
                                batteryHeight[0] = HeigthCompensation(batteryHeight[0], compv, stationNumber);
                                batteryHeight[0] = HeightCompensation(batteryHeight[0], compv, slotNum);
                                //batteryHeight[0] += compv;
                                ////batteryHeight[1] += compv;
@@ -192,9 +198,9 @@
                            if (batteryHeight[0] != 999.999 && batteryHeight[0] != -999.999)
                            {
                                double compv = 0.0;
                                Type t = opcConfig.standardCompensationZ.GetType();
                                Type t = opcConfig.compensationZ.GetType();
                                FieldInfo fi = t.GetField(string.Format("station{0}", (CommonUtil.mainForm.PlateID + 1) % 5 + 1));
                                compv = (double)fi.GetValue(opcConfig.standardCompensationZ);
                                compv = (double)fi.GetValue(opcConfig.compensationZ);
                                batteryHeight[0] += compv;
                            }
@@ -223,8 +229,36 @@
                        if (heightResult != MeasureState.OK)
                        {
                            heightFileName = VisionDetect.SaveImageAs(hi, CommonUtil.ProductHeightImageDir + $"_{heightResult.ToString()}\\{ tempFileName}");
                            if (CommonUtil.DetectionOption == DetectionOption.doStandardBlock)
                            {
                                VisionDetect.SaveImageAs(hi, CommonUtil.ProductHeightImageDir + @"\" + tempFileName);
                            }
                            else
                            {
                                heightFileName = VisionDetect.SaveImageAs(hi, CommonUtil.ProductHeightImageDir + $"_{heightResult.ToString()}\\{ tempFileName}");
                            }
                        }
                        else
                        {
                            if (opcConfig.IsSaveHeightOKImage||CommonUtil.DetectionOption == DetectionOption.doStandardBlock)
                            {
                                //DateTime dt = DateTime.Now;
                                //if (dt.Second >= 10 && dt.Second <= 15)
                                if (CommonUtil.DetectionOption == DetectionOption.doStandardBlock)
                                {
                                    VisionDetect.SaveImageAs(hi, CommonUtil.ProductHeightImageDir + @"\" + tempFileName);
                                }
                                else
                                {
                                    VisionDetect.SaveImageAs(hi, CommonUtil.ProductHeightImageDir + @"_OK\" + tempFileName);
                                }
                            }
                        }
                        CommonUtil.WriteLog(LogType.Inf, string.Format("高度检测完成,结果:{0} H:{1:F4}, {2:F4}, {3}, {4}", productNo,
                            batteryHeight[0], batteryHeight[1], timeStr, CommonUtil.StepControl.ToString()));
                    }
@@ -241,6 +275,12 @@
            catch (Exception ex)
            {
                CommonUtil.WriteLog(LogType.Exc, string.Format("检测产品条码和厚度过程中出现异常:{0}", ex.Message));
                if (string.IsNullOrWhiteSpace(tempFileName))
                {
                    tempFileName = DateTime.Now.ToString("HHmmssfff");
                }
                VisionDetect.SaveImageAs(ihImage, $"{CommonUtil.ProductSizeImageDir}_NA\\{tempFileName}");
            }
            finally
            {
@@ -260,7 +300,7 @@
        static object _heightRawDataLock = new object();
        TaskFactory _taskFactory = new TaskFactory();
        private void LogHeightRawDataAsync(DateTime dt, double rawData, double compv, double final1, double final2, int stationNum)
        private void LogHeightRawDataAsync(DateTime dt, double rawData, double compv, double final1, double final2, int slotNum)
        {
            _taskFactory.StartNew(new Action(() =>
            {
@@ -280,15 +320,14 @@
                    {
                        if (!isFileExisted)
                        {
                            writer.WriteLine("Time,Station,Height,CompZ,Final1,Final2");
                            writer.WriteLine("Time,Slot,Height,CompZ,Final1,Final2");
                        }
                        writer.WriteLine($"{dt.ToString("HH:mm:ss.fff")},{stationNum},{rawData},{compv},{final1},{final2}");
                        writer.WriteLine($"{dt.ToString("HH:mm:ss.fff")},{slotNum},{rawData},{compv},{final1},{final2}");
                        writer.Flush();
                        writer.Close();
                    }
                }
            }));
        }
@@ -296,7 +335,7 @@
        double errorBand = Convert.ToDouble(ConfigurationManager.AppSettings["ErrorBand"]);
        bool isEnableRawData = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableRawData"]);
        private double HeigthCompensation(double rawData, double compv, int stationNum)
        private double HeightCompensation(double rawData, double compv, int slotNum)
        {
            double adjustValue, finalHeight, fakeValue;
            adjustValue = rawData + compv;
@@ -304,16 +343,16 @@
            double standardGap = opcConfig.batteryHeightLimit.Max - standardValue;
            double gap = adjustValue - standardValue;
            fakeValue = finalHeight = (gap / (errorBand / 2.0)) * standardGap + standardValue;
            fakeValue = finalHeight = Math.Round(((gap / (errorBand / 2.0)) * standardGap + standardValue), 5);
            if (finalHeight < opcConfig.batteryHeightLimit.Min || finalHeight > opcConfig.batteryHeightLimit.Max)
            {
                fakeValue = standardValue + (CommonUtil.random.NextDouble() - 0.5) * 2.0 * standardGap;
                fakeValue = Math.Round((standardValue + (CommonUtil.random.NextDouble() - 0.5) * 2.0 * standardGap), 5);
            }
            if (isEnableRawData)
            {
                LogHeightRawDataAsync(DateTime.Now, rawData, compv, finalHeight, fakeValue, stationNum);
                LogHeightRawDataAsync(DateTime.Now, rawData, compv, finalHeight, fakeValue, slotNum);
            }
            return fakeValue;