patrick.xu
2021-06-01 aefe9f2572eac7c61f6d2952593ec18a700dfcf0
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);
                    }
@@ -1032,18 +1075,34 @@
        #region 事件
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            Stop();
            SaveMeasureTTL();
            Task.Factory.StartNew(() =>
            try
            {
                Stop();
                SaveMeasureTTL();
                //Task.Factory.StartNew(() =>
                //{
                SpotCheckData data = new SpotCheckData();
                data.UpdateLastBreakProductQty(measureResultTTL.ProductQuntity);
                DownTimeData downTimeData = new DownTimeData();
                DownTime downTime = new DownTime() { BeginTime = DateTime.Now, Type = DownTimeType.Closed };
                downTimeData.SaveDownTime(downTime);
            });
                //});
            MessageHandler.MessageHandlerInstance.Close();
                MessageHandler.MessageHandlerInstance.Close();
            }
            catch (Exception ex)
            {
                Trace.TraceError($"界面关闭异常:{ex.Message}");
            }
            finally
            {
                lock (CommonUtil.UploadDataLock)
                {
                    //CommonUtil.UploadDoneHandle.WaitOne();
                    CommonUtil.UploadDataEnable = false;
                    System.Environment.Exit(0);
                }
            }
        }
        private void btnConfig_Click(object sender, EventArgs e)
@@ -1604,8 +1663,11 @@
        private void btnPlcOperation_Click(object sender, EventArgs e)
        {
            FormPlcOperation frm = new FormPlcOperation(opc);
            frm.ShowDialog();
            //if (new ConfigPassword("").ShowDialog() == DialogResult.OK)
            {
                FormPlcOperation frm = new FormPlcOperation(opc);
                frm.ShowDialog();
            }
        }
        private void btnCheck_Click(object sender, EventArgs e)