领胜LDS 键盘AOI检测项目
xcd
2020-07-03 3cba54c4ee8d29d33ed21a2c749a9d2f2d03e22d
src/Bro.M071.Process/M071Process.cs
@@ -42,6 +42,16 @@
            InitialSetting();
            base.Open();
            CheckMachineState();
        }
        /// <summary>
        /// 检查设备状态
        /// </summary>
        private void CheckMachineState()
        {
            throw new NotImplementedException();
        }
        private void InitialSetting()
@@ -100,7 +110,7 @@
                    if (keyRespone.Count == 0)
                        throw new ProcessException($"{u.GetDisplayText()}对应的单键不存在或不可用");
                    if (b.KeyResult == "All")
                    if (b.KeyResultId == "All")
                    {
                        keyRespone.SelectMany(kr => kr.KeyResultList).ToList().ForEach(r =>
                          {
@@ -109,7 +119,7 @@
                    }
                    else
                    {
                        b.MeasureValueDict[b.KeyResult] = null;
                        b.MeasureValueDict[b.KeyResultId] = null;
                    }
                });
            });
@@ -154,6 +164,8 @@
            }
        }
        List<ProductionMeasurement> productionList = new List<ProductionMeasurement>();
        [ProcessMethod("", "StartJob", "开始扫描", InvokeType.TestInvoke)]
        public ProcessResponse StartJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        {
@@ -176,6 +188,16 @@
                Measurements = measurements,
            };
            var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode);
            if (existedProduction != null)
            {
                productionList.Remove(existedProduction);
                existedProduction.Dispose();
                existedProduction = null;
            }
            productionList.Add(pMeasure);
            pMeasure.InitialMeasurementsPropertyChanged();
            pMeasure.PropertyChanged += MeasureProduction_PropertyChanged;
@@ -183,27 +205,24 @@
                  {
                      _pauseHandle.WaitHandle.WaitOne();
                      IDevice device = DeviceCollection.FirstOrDefault(u => u.Id == s.MotionDevice);
                      IDevice device = DeviceCollection.FirstOrDefault(u => u.Id == s.MotionOp.Device);
                      if (device == null)
                          throw new ProcessException($"{s.Name}拍照点位未设置运动设备");
                      IMotion motionDevice = device as IMotion;
                      IMotionCard motionDevice = device as IMotionCard;
                      if (motionDevice == null)
                          throw new ProcessException($"{s.Name}拍照点位设置{device.Name}不是运动设备");
                      if (!motionDevice.MoveToPoint(null))
                      var response = motionDevice.Run(s.MotionOp.OpConfig);
                      if (!response.Result)
                      {
                          throw new ProcessException("运动中止", null, ExceptionLevel.Info);
                          throw new ProcessException($"{device.Name}异常,{response.Message}", null, ExceptionLevel.Info);
                      }
                      CameraBase camera = DeviceCollection.FirstOrDefault(u => u.Id == s.CameraOp.Device) as CameraBase;
                      if (camera == null)
                          return;
                      //IImageSet imgSet = camera.Snapshot(s.CameraOp.OpConfig);
                      //if (imgSet == null)
                      //    return;
                      HImage hImage = CollectHImage(camera, s.CameraOp.OpConfig, out string imgSetId);
                      if (string.IsNullOrWhiteSpace(imgSetId))
@@ -215,40 +234,8 @@
                  });
            BarCode = "";
            return new ProcessResponse(true);
        }
        /// <summary>
        /// 暂停标志
        /// WaitHandle 暂停句柄  默认为非阻塞 可执行
        /// WaitResult 暂停标志 true 正常执行  false 暂停中
        /// </summary>
        ManualWaitConfirm _pauseHandle = new ManualWaitConfirm()
        {
            WaitHandle = new ManualResetEvent(true),
            WaitResult = true,
        };
        [ProcessMethod("", "PauseJob", "暂停流程", InvokeType.TestInvoke)]
        public ProcessResponse PauseJob(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice)
        {
            if (_pauseHandle.WaitResult)
            {
                #region 板卡暂停动作
                #endregion
                _pauseHandle.WaitHandle.Reset();
            }
            else
            {
                #region 板卡恢复动作
                #endregion
                _pauseHandle.WaitHandle.Set();
            }
            _pauseHandle.WaitResult = !_pauseHandle.WaitResult;
            return new ProcessResponse(_pauseHandle.WaitResult);
        }
        #region 私有方法
@@ -294,8 +281,12 @@
                                    }
                                }
                                LogAsync(DateTime.Now, $"{m.GetDisplayText()}检测结果", $"{((m.Spec.MeasureResult ?? false) ? "OK" : "NG")}");
                                IShapeElement indicator = null;
                                pMeasure.ElementList.Add(indicator);
                                //输出图形基元到界面 todo
                                OnElementUpdated?.BeginInvoke(null, null, null);
                                OnElementUpdated?.BeginInvoke(indicator, null, null);
                                SaveKeyImages(pMeasure.Barcode, m);
@@ -309,8 +300,6 @@
                        return;
                    }
                    //MES输出 todo
                    //Excel报表输出 todo
@@ -318,6 +307,8 @@
                    //数据库保存 todo
                    SaveWholeImage(pMeasure);
                    productionList.RemoveAll(p => p.Barcode == pMeasure.Barcode);
                    pMeasure.Dispose();
                }
            }