patrick.xu
2021-05-24 f13235bee2e25d091ba13dc3732b83f905565f80
MainForm.cs
@@ -203,6 +203,24 @@
            CommonUtil.IsRunning = true;
            SetControls();
            opc.Write(OPCOutputTag.DetectResult_OK, false);
            opc.Write(OPCOutputTag.DetectResult_NG, false);
            CommonUtil.WriteLog(LogType.Inf, "初始化下料NA");
            //250表示启动时需要大复位报警
            opc.Write(OPCOutputTag.Alarm, 250);
            CommonUtil.WriteLog(LogType.Inf, "软件启动大复位");
            string continuousNGStr = ConfigurationManager.AppSettings["ContinuousNGThreshold"];
            if (int.TryParse(continuousNGStr, out int temp))
            {
                _continuousNGThreshold = temp;
            }
            else
            {
                _continuousNGThreshold = 999;
            }
        }
        public void Stop()
@@ -592,6 +610,9 @@
            lblEmptyQuantity.Text = measureResultTTL.EmptyQuantity.ToString();
        }
        int _continuousNGThreshold = 999;
        int _continuousNG = 0;
        #region PLC 监听
        void OPCEventHandler(object sender, EventTool.ListenEventArgs e)
        {
@@ -611,11 +632,12 @@
                        MeasureState pState = MeasureState.NA;
                        int detectID = CommonUtil.StepControl.GetUnloadStepID();
                        ProductMeasureResult x = null;
                        if (detectID > 0)
                        {
                            var x = (from t in productTestCollection
                                     where t.DetectID == detectID
                                     select t
                            x = (from t in productTestCollection
                                 where t.DetectID == detectID
                                 select t
                                    ).FirstOrDefault();
                            if (x != default(ProductMeasureResult))
                            {
@@ -647,18 +669,28 @@
                            case MeasureState.OK:
                                opc.Write(OPCOutputTag.DetectResult_OK, true);
                                opc.Write(OPCOutputTag.DetectResult_NG, false);
                                CommonUtil.WriteLog(LogType.Inf, $"{x?.DetectID}|{x?.ProductNo}产品应放入OK Tray");
                                _continuousNG = 0;
                                break;
                            case MeasureState.NG:
                                opc.Write(OPCOutputTag.DetectResult_OK, false);
                                opc.Write(OPCOutputTag.DetectResult_NG, true);
                                CommonUtil.WriteLog(LogType.Inf, $"{x?.DetectID}|{x?.ProductNo}产品应放入NG Tray");
                                CommonUtil.StepControl.RemoveById(detectID);
                                _continuousNG++;
                                break;
                            default:
                                opc.Write(OPCOutputTag.DetectResult_OK, false);
                                opc.Write(OPCOutputTag.DetectResult_NG, false);
                                CommonUtil.WriteLog(LogType.Inf, $"{x?.DetectID}|{x?.ProductNo}产品应放入NA Tray");
                                CommonUtil.StepControl.RemoveById(detectID);
                                _continuousNG = 0;
                                break;
                        }
                        #endregion
@@ -682,6 +714,15 @@
                            DisplayCycleTime((int)Math.Round(ts.TotalMilliseconds));
                        }
                        unloadTime = DateTime.Now;
                        if (_continuousNG >= _continuousNGThreshold)
                        {
                            //脚本中设置报警码2000表示连续NG次数到达设定报警上限
                            opc.Write(OPCOutputTag.Alarm, 2000);
                            CommonUtil.WriteLog(LogType.Inf, $"产品连续NG{_continuousNG}次,报警提示");
                            _continuousNG = 0;
                        }
                        //
                    }
                    break;
@@ -878,8 +919,10 @@
                    if ((bool)item.value)
                    {
                        //opc.Write(OPCInputTag.UnloadBatteryDone, false);
                        int batteryId = CommonUtil.StepControl.GetUnloadBatteryID();
                        CommonUtil.WriteLog(LogType.Inf, $"电池下料到位,Id:{batteryId}");
                        CommonUtil.StepControl.RemoveById(batteryId);
                        detectionData.SaveTrayBarcode(batteryId);
                    }