/// <summary> /// 将当前单目运行的结果记录到点位数组对应的位置 /// </summary> /// <param name="index">数组存放该数据的索引</param> /// <param name="cellName">算子序号</param> /// <param name="pos">拍照位置</param> /// <param name="htResult"></param> /// <returns></returns> public bool DealLocation(int index, string cellName, Pos_enum pos, out Hashtable htResult) { htResult = null; try { #region 空跑 if (ParStateSoft.StateMachine_e == StateMachine_enum.NullRun) { ShowState(string.Format("相机{0}第{1}次拍照空跑默认ok", g_NoCamera, index + 1)); FinishPhotoPLC(1); return(true); } #endregion //保存当前匹配结果到指定的点中 if (!SaveMatchResult(index, cellName, pos, out htResult)) { ShowState(string.Format("相机{0}第{1}次拍照失败", g_NoCamera, index + 1)); FinishPhotoPLC(CameraResult.NG); return(false); } ShowState(string.Format("相机{0}第{1}次拍照成功", g_NoCamera, index + 1)); FinishPhotoPLC(CameraResult.OK); return(true); } catch (Exception ex) { FinishPhotoPLC(CameraResult.NG); Log.L_I.WriteError(NameClass, ex); return(false); } }
public ResultMainShow g_ResultMainShow = new DealResult.ResultMainShow();//存储Main_EX里面设定的图像和对象 #endregion 定义 /// <summary> /// 显示 /// </summary> /// <param name="pos_e"></param> /// <param name="htResult"></param> /// <param name="blResult"></param> /// <param name="sw"></param> protected void Display(Pos_enum pos_e, Hashtable htResult, bool blResult, Stopwatch sw) { try { g_BaseDealComprehensive.DisplayComprehensivePos(g_UCDisplayCamera, g_HtUCDisplay, pos_e, htResult, blResult); //记录当前整体节拍 RecordTact(sw, g_NoCamera, (int)pos_e, htResult); } catch (Exception ex) { } }
/// <summary> /// 保存对应单元格的匹配结果 /// </summary> /// <param name="index">当前坐标对应的数组索引</param> /// <param name="cellName">M直线算子序号</param> /// <param name="pos">拍照位置</param> /// <param name="htResult"></param> /// <returns></returns> public bool SaveMatchResult(int index, string cellName, Pos_enum pos, out Hashtable htResult) { htResult = null; try { StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(g_UCDisplayCamera, g_HtUCDisplay, pos, out htResult); ResultCrossLines result = htResult[cellName] as ResultCrossLines; if (!DealTypeResult(result)) { return(false); } //保存当前匹配结果 pt2MarkArray[index].DblValue1 = result.X; pt2MarkArray[index].DblValue2 = result.Y; } catch (Exception ex) { Log.L_I.WriteError(NameClass, ex); return(false); } return(true); }
/// <summary> /// /// </summary> /// <param name="pos"></param> /// <param name="htResult"></param> /// <param name="blResult"></param> /// <param name="sw"></param> /// <param name="funDisplay">显示的委托</param> protected void Display_Task(Pos_enum pos_e, Hashtable htResult, bool blResult, Stopwatch sw, Action funDisplay) { try { FunDisplay = new Action(() => { g_BaseDealComprehensive.DisplayComprehensivePos(g_UCDisplayCamera, g_HtUCDisplay, pos_e, htResult, blResult); // funDisplay(); //记录当前整体节拍 RecordTact(sw, g_NoCamera, (int)pos_e, htResult); if (funDisplay != null) { funDisplay(); } }); BlDisplayChange = true; } catch (Exception ex) { Log.L_I.WriteError(NameClass, ex); } }
/// <summary> /// 处理残材检测 /// </summary> /// <param name="cellName">算子序号</param> /// <param name="pos">表明用的第几次拍照的结果</param> /// <param name="htResult"></param> /// <returns></returns> public StateComprehensive_enum DealSharpness(string cellName, Pos_enum pos, out Hashtable htResult) { htResult = null; double[] dblResult; try { #region 空跑 if (ParStateSoft.StateMachine_e == StateMachine_enum.NullRun) { ShowState(string.Format("相机{0}空跑默认无残边", g_NoCamera)); FinishPhotoPLC(1); return(StateComprehensive_enum.True); } #endregion //获取算子计算结果 StateComprehensive_enum StateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay( g_UCDisplayCamera, g_HtUCDisplay, pos, out htResult); ResultSharpness result = (ResultSharpness)htResult[cellName]; double dblThread = ModelParams.WastageThread1; if (g_NoCamera == 4) { dblThread = ModelParams.WastageThread2; } //对计算结果进行判别 if (WastageDetection.CalcSharpnessRatio(result.Deviation_L, dblThread, g_NoCamera, ModelParams.DefaultOKCamera, ModelParams.IfSingleElectrode, RegeditMain.R_I.ID, ModelParams.IfRecordData, out dblResult)) { FinishPhotoPLC(1); g_UCDisplayCamera.ShowResult("拍照位置:" + pos + "\nCF清晰度:" + dblResult[0].ToString(ReservDigits) + "\nTFT清晰度:" + dblResult[1].ToString(ReservDigits) + "\n比例:" + dblResult[2].ToString(ReservDigits) + "\n阈值:" + dblThread.ToString(ReservDigits) + "\nOK"); return(StateComprehensive_enum.True); } else { //连续低清晰度报警 if (++WastageDetection.WastageInvalidCount[g_NoCamera] > 5) { ShowAlarm(string.Format("相机{0}连续低清晰度报警", g_NoCamera)); LogicPLC.L_I.WriteRegData1((int)DataRegister1.WastageAlarm, 1); } else { WastageDetection.WastageInvalidCount[g_NoCamera] = 0; } FinishPhotoPLC(2); g_UCDisplayCamera.ShowResult("拍照位置:" + pos + "\nTFT清晰度:" + dblResult[0].ToString(ReservDigits) + "\nCF清晰度:" + dblResult[1].ToString(ReservDigits) + "\n比例:" + dblResult[2].ToString(ReservDigits) + "\n阈值:" + dblThread.ToString(ReservDigits) + "\nNG", "red"); return(StateComprehensive_enum.False); } } catch { FinishPhotoPLC(2); ShowAlarm("残才相机处理过程中发生异常"); return(StateComprehensive_enum.False); } }