Пример #1
0
 void DealComprehensive_Camera5_event(TriggerSource_enum trigerSource_e, int i)
 {
     g_MtCamera5.WaitOne();
     try
     {
         //同一流程内,第几次拍照
         StateComprehensive_enum stateComprehensive_e = DealComprehensiveResult5.D_I.DealComprehensiveResultFun(trigerSource_e, i);
         ShowInfo(trigerSource_e, stateComprehensive_e, 5, i);
     }
     catch (Exception ex)
     {
         Log.L_I.WriteError("MainWindow", ex);
     }
     finally
     {
         g_MtCamera5.ReleaseMutex();
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="htResult"></param>
        /// <returns></returns>
        public override StateComprehensive_enum DealComprehensiveResultFun3(
            TriggerSource_enum trigerSource_e, int index, out Hashtable htResult)
        {
            #region 定义
            htResult = g_HtResult;
            //int pos = 3;
            bool blResult = true;

            Stopwatch sw = new Stopwatch();
            sw.Restart();
            #endregion 定义
            try
            {
                //标定旋转中心
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(
                    g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = htResult[Camera2Match1] as BaseResult;

                if (!DealTypeResult(result))
                {
                    ShowAlarm("精定位相机2标定旋转中心拍照NG!");
                    LogicRobot.L_I.WriteRobotCMD(Protocols.BotCmd_PreciseNG);
                    MessageBox.Show("标定旋转中心失败,请重新标定!", "提示");
                    return(StateComprehensive_enum.False);
                }

                Pt2MarkRC.DblValue1 = result.X;
                Pt2MarkRC.DblValue2 = result.Y;
                CalibRC();

                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                #region 显示和日志记录
                Display(Pos_enum.Pos1, htResult, blResult, sw);
                #endregion 显示和日志记录
            }
        }
        public override StateComprehensive_enum DealComprehensiveResultFun2(
            TriggerSource_enum trigerSource_e, int index, out Hashtable htResult)
        {
            #region 定义
            htResult = g_HtResult;
            PosNow_e = Pos_enum.Pos2;  //当前位置
            bool      blResult = true; //结果是否正确
            Stopwatch sw       = new Stopwatch();
            sw.Restart();
            #endregion 定义

            try
            {
                //标定基准位
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(
                    g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = htResult[Camera1Match1] as BaseResult;

                if (!DealTypeResult(result))
                {
                    ShowAlarm("精定位相机1第二次拍照NG!");
                    LogicRobot.L_I.WriteRobotCMD(Protocols.BotCmd_PreciseNG);
                    return(StateComprehensive_enum.False);
                }

                Pt2Mark1.DblValue1 = result.X;
                Pt2Mark1.DblValue2 = result.Y;
                Camera1Done        = true;
                CalibDual(index);

                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                #region 显示和日志记录
                Display(Pos_enum.Pos1, htResult, blResult, sw);
                #endregion 显示和日志记录
            }
        }
Пример #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="htResult"></param>
        /// <returns></returns>
        public override StateComprehensive_enum DealComprehensiveResultFun1(TriggerSource_enum trigerSource_e, int station, out Hashtable htResult)
        {
            #region 定义
            htResult = g_HtResult;
            //int pos = 1;
            bool blResult = true;

            Stopwatch sw = new Stopwatch();
            sw.Restart();
            #endregion 定义
            try
            {
                if (ParStateSoft.StateMachine_e == StateMachine_enum.NullRun)
                {
                    return(StateComprehensive_enum.True);
                }
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = (BaseResult)htResult[strCamera3Match1];
                if (result.Num != 1)
                {
                    ShowAlarm("相机3--双目定位拍照NG!");
                    LogicRobot.L_I.WriteRobotCMD(PCToRbt.PRP_PreciseNG);
                    return(StateComprehensive_enum.False);
                }
                biyMark2[(int)PtType_Binary.AutoMark] = new Point2D(result.X, result.Y);
                ShowState(string.Format("双目自动流程Mark2像素:X_{0},Y_{1}", result.X, result.Y));
                CalcAutoStPos(station);
                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                #region 显示和日志记录

                Display(Pos_enum.Pos1, htResult, blResult, sw);

                #endregion 显示和日志记录
            }
        }
Пример #5
0
        /// <summary>
        /// 触发拍照并传入区分参考数组
        /// </summary>
        /// <param name="trigerSource_e"></param>
        /// <param name="i"></param>
        /// <param name="index"></param>
        protected virtual void DealComprehensive_Camera8_event(TriggerSource_enum trigerSource_e, int i, int[] index)
        {
            g_MtCamera8.WaitOne();
            try
            {
                //同一流程内,第几次拍照
                StateComprehensive_enum stateComprehensive_e = DealComprehensiveResult8.DealComprehensiveResultFun(trigerSource_e, i, index);

                ShowInfo(trigerSource_e, stateComprehensive_e, 8, i);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
            }
            finally
            {
                g_MtCamera8.ReleaseMutex();
            }
        }
Пример #6
0
        /// <summary>
        /// 传入参考数组
        /// </summary>
        /// <param name="trigerSource_e"></param>
        /// <param name="i"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public StateComprehensive_enum DealComprehensiveResultFun(TriggerSource_enum trigerSource_e, int i, int[] index)
        {
            try
            {
                Hashtable htResult = null;
                StateComprehensive_enum stateComprehensive_e = StateComprehensive_enum.False;
                switch (i)
                {
                case 1:
                    stateComprehensive_e = DealComprehensiveResultFun1(trigerSource_e, index, out htResult);
                    break;

                case 2:
                    stateComprehensive_e = DealComprehensiveResultFun2(trigerSource_e, index, out htResult);
                    break;

                case 3:
                    stateComprehensive_e = DealComprehensiveResultFun3(trigerSource_e, index, out htResult);
                    break;

                case 4:
                    stateComprehensive_e = DealComprehensiveResultFun4(trigerSource_e, index, out htResult);
                    break;

                case 5:
                    stateComprehensive_e = DealComprehensiveResultFun5(trigerSource_e, index, out htResult);
                    break;

                case 6:
                    stateComprehensive_e = DealComprehensiveResultFun6(trigerSource_e, index, out htResult);
                    break;
                }

                string cellError = "";
                GetErrorCell(htResult, i, out cellError);//显示错误信息
                return(stateComprehensive_e);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
        }
Пример #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="htResult"></param>
        /// <returns></returns>
        public override StateComprehensive_enum DealComprehensiveResultFun3(TriggerSource_enum trigerSource_e, int station, out Hashtable htResult)
        {
            #region 定义
            htResult = g_HtResult;
            //int pos = 3;
            bool      blResult = true;//结果是否正确
            Stopwatch sw       = new Stopwatch();
            sw.Restart();
            #endregion 定义
            try
            {
                if (ParStateSoft.StateMachine_e == StateMachine_enum.NullRun)
                {
                    return(StateComprehensive_enum.True);
                }
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = (BaseResult)htResult[strCamera3Match1];
                if (result.Num != 1)
                {
                    ShowAlarm("相机3--双目定位标定流程拍照NG!");
                    LogicPLC.L_I.WriteRegData1((int)DataRegister1.PCAlarm, (int)PCAlarm_Enum.标定失败);
                    return(StateComprehensive_enum.False);
                }
                biyMark2[(int)PtType_Binary.Calib] = new Point2D(result.X, result.Y);
                ShowState(string.Format("双目标定流程Mark2像素:X_{0},Y_{1}", result.X, result.Y));
                CalcCalibPos(station);
                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                #region 显示和日志记录

                Display(Pos_enum.Pos1, htResult, blResult, sw);

                #endregion 显示和日志记录
            }
        }
Пример #8
0
        /// <summary>
        /// 开始进行皮带线扫描
        /// </summary>
        /// <param name="htResult"></param>
        public void BeltScan(out Hashtable htResult)
        {
            htResult = null;
            try
            {
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(
                    g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = (BaseResult)htResult[strCamera8Match1];

                if (result.X * result.Y != 0)
                {
                    LogicPLC.L_I.WriteRegData1((int)DataRegister1.StopBelt, 1);
                    StopBelt?.Invoke();
                }
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
            }
        }
        public void FinishPhotoRobot(int cameraNo, int pos, StateComprehensive_enum stateComprehensive_e)
        {
            if (ParSetRobot.P_I.TypeRobot_e == TypeRobot_enum.Null)
            {
                return;
            }
            int result = 0;

            if (stateComprehensive_e == StateComprehensive_enum.False)
            {
                result = 2;
            }
            else
            {
                result = 1;
            }
            //添加机器人拍照正确或错误处理

            //
        }
Пример #10
0
        /// <summary>
        /// 背光不规则区域基准值保存
        /// </summary>
        /// <param name="index"></param>
        /// <param name="cellName"></param>
        /// <param name="htResult"></param>
        /// <returns></returns>
        public StateComprehensive_enum CalibStdValue(int index, string cellName, out Hashtable htResult)
        {
            htResult = null;
            try
            {
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(
                    g_UCDisplayCamera, g_HtUCDisplay, 1, out htResult);
                ResultBlob resultBlob = (ResultBlob)htResult[cellName];

                if (!DealTypeResult(resultBlob))
                {
                    ShowState(string.Format("精定位自动标定第{0}点拍照失败", index + 1));
                    return(StateComprehensive_enum.False);
                }
                //保存当前匹配结果
                pt2Calib[index] = new Point2D(resultBlob.X, resultBlob.Y);

                if (index == 1)
                {
                    LogicRobot.L_I.WriteRobotCMD(ModelParams.cmd_PreciseCalib2);

                    //第二次的话保存基准值到算子中
                    if (!(RecordStdValue(cellName, pt2Calib[0], pt2Calib[1])))
                    {
                        return(StateComprehensive_enum.False);
                    }
                }
                else
                {
                    ShowState(string.Format("相机{0}基准值标定第1点计算成功", g_NoCamera));
                    LogicRobot.L_I.WriteRobotCMD(ModelParams.cmd_PreciseCalib1);
                }

                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
        }
Пример #11
0
        public override StateComprehensive_enum DealComprehensiveResultFun2(TriggerSource_enum trigerSource_e, int station, out Hashtable htResult)
        {
            #region 定义
            htResult = g_HtResult;
            //int pos = 2;
            bool blResult = true;

            Stopwatch sw = new Stopwatch();
            sw.Restart();
            #endregion 定义
            try
            {
                BaseDealComprehensiveResult.BlFinishPos2_Cam2 = false;
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = (BaseResult)htResult[strCamera2Match1];
                if (result.Num != 1)
                {
                    ShowAlarm("相机2--双目定位精度验证Mark已出视野!");

                    return(StateComprehensive_enum.True);
                }
                biyMark1[(int)PtType_Binary.PreciseConfirmMark] = new Point2D(result.X, result.Y);
                ShowState(string.Format("双目精度验证流程Mark1像素:X_{0},Y_{1}", result.X, result.Y));
                BaseDealComprehensiveResult.BlFinishPos2_Cam2 = true;
                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                #region 显示和日志记录

                Display(Pos_enum.Pos1, htResult, blResult, sw);

                #endregion 显示和日志记录
            }
        }
Пример #12
0
        /// <summary>
        /// 传入参考数组
        /// </summary>
        /// <param name="trigerSource_e"></param>
        /// <param name="i"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public StateComprehensive_enum DealComprehensiveResultFun(TriggerSource_enum trigerSource_e, int i, int[] index)
        {
            try
            {
                Hashtable hashtable = null;
                StateComprehensive_enum stateComprehensive_e = StateComprehensive_enum.False;
                switch (i)
                {
                case 1:
                    stateComprehensive_e = DealComprehensiveResultFun1(trigerSource_e, index, out hashtable);
                    break;

                case 2:
                    stateComprehensive_e = DealComprehensiveResultFun2(trigerSource_e, index, out hashtable);
                    break;

                case 3:
                    stateComprehensive_e = DealComprehensiveResultFun3(trigerSource_e, index, out hashtable);
                    break;

                case 4:
                    stateComprehensive_e = DealComprehensiveResultFun4(trigerSource_e, index, out hashtable);
                    break;

                case 5:
                    stateComprehensive_e = DealComprehensiveResultFun5(trigerSource_e, index, out hashtable);
                    break;
                }
                g_UCResult.AddResult(hashtable, g_NoCamera);
                GetErrorCell(hashtable);//显示错误信息
                return(stateComprehensive_e);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
        }
Пример #13
0
        /// <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);
        }
Пример #14
0
        public override StateComprehensive_enum DealComprehensiveResultFun4(TriggerSource_enum trigerSource_e, out Hashtable htResult)
        {
            #region 定义
            htResult = g_HtResult;
            //int pos = 4;
            bool blResult = true;

            Stopwatch sw = new Stopwatch();
            sw.Restart();
            #endregion 定义
            try
            {
                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = (BaseResult)htResult[strCamera2Match1];
                if (!DealTypeResult(result))
                {
                    ShowAlarm("相机2--双目标定旋转中心流程拍照NG!");
                    ShowWinError_Invoke("旋转中心标定失败,请重新标定!");
                    LogicRobot.L_I.WriteRobotCMD(PCToRbt.PRP_FinishCalibRC);
                    return(StateComprehensive_enum.False);
                }
                CalibData_L.Add(new Point2D(result.X, result.Y));
                DealCalibRC(CalibData_L.Count);
                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                #region 显示和日志记录
                Display(Pos_enum.Pos1, htResult, blResult, sw);
                #endregion 显示和日志记录
            }
        }
        /// <summary>
        /// 位置1处理
        /// </summary>
        /// <param name="hashtable"></param>
        /// <returns></returns>
        public override StateComprehensive_enum DealComprehensiveResultFun1(TriggerSource_enum trigerSource_e, out Hashtable htResult)
        {
            htResult = null;
            int pos = 1;

            sw_Tact.Restart();
            try
            {
                StateComprehensive_enum stateComprehensive_e = StateComprehensive_enum.Null;
                return(stateComprehensive_e);
            }
            catch (Exception ex)
            {
                LogicPLC.L_I.FinishPhoto(g_regClearCamera + g_regFinishPhoto, 2);
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                //记录当前整体节拍
                RecordTact(g_NoCamera, pos, htResult);
                g_DealComprehensiveBase.DisplayComprehensivePos(g_UCDisplayCamera, g_HtUCDisplay, pos, htResult);
            }
        }
Пример #16
0
        /// <summary>
        /// 显示信息
        /// </summary>
        /// <param name="trigerSource_e"></param>
        /// <param name="stateComprehensive_e"></param>
        /// <param name="i"></param>
        /// <param name="j"></param>
        public void ShowInfo(TriggerSource_enum trigerSource_e, StateComprehensive_enum stateComprehensive_e, int i, int j)
        {
            try
            {
                switch (stateComprehensive_e)
                {
                case StateComprehensive_enum.False:
                    ShowAlarm(trigerSource_e.ToString() + "触发相机" + i.ToString() + "第" + j.ToString() + "次图像处理异常!");
                    break;

                case StateComprehensive_enum.NGTrue:
                    ShowAlarm(trigerSource_e.ToString() + "触发相机" + i.ToString() + "第" + j.ToString() + "次图像处理异常!但不产生警报!");
                    break;

                case StateComprehensive_enum.True:
                    ShowState(trigerSource_e.ToString() + "触发相机" + i.ToString() + "第" + j.ToString() + "次图像处理成功!");
                    break;
                }
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
            }
        }
Пример #17
0
        /// <summary>
        /// 接收触发信号,计算校准
        /// </summary>
        /// <param name="trigerSource_e"></param>
        /// <param name="i"></param>
        /// <returns></returns>
        public StateComprehensive_enum DealComprehensiveResultFun_Calib(TriggerSource_enum trigerSource_e, int i, out Hashtable htResult)
        {
            htResult = null;
            try
            {
                if (ParStateSoft.StateMachine_e != StateMachine_enum.Calib)
                {
                    if (WinMsgBox.ShowMsgBox("软件非校准模式,不允许进行校准触发,是否切换到校准模式"))
                    {
                        //校准模式
                        ParStateSoft.StateMachine_e = StateMachine_enum.Calib;
                        if (Fun_SoftState != null)
                        {
                            Fun_SoftState();
                        }
                    }
                    return(StateComprehensive_enum.False);
                }
                StateComprehensive_enum stateComprehensive_e = StateComprehensive_enum.False;

                int pos   = i / 1000;                                //提取算子的相对序号,不是拍照位置
                int type  = int.Parse(i.ToString().Substring(1, 1)); //标定类型
                int index = int.Parse(i.ToString().Substring(2, 2)); //序号

                TypeCalib_enum TypeCalib_e = (TypeCalib_enum)type;

                switch (TypeCalib_e)
                {
                //相机校准(标定板)
                case TypeCalib_enum.CalibCamera:
                    ShowState("相机校准");
                    stateComprehensive_e = DealComprehensiveResultFun_CalibCamera(trigerSource_e, pos, index, out htResult);
                    break;

                //旋转中心校准
                case TypeCalib_enum.CalibRotate:
                    ShowState("旋转中心校准");
                    stateComprehensive_e = DealComprehensiveResultFun_CalibRotate(trigerSource_e, pos, index, out htResult);
                    break;

                //轴校准
                case TypeCalib_enum.CalibAxis:
                    ShowState("轴校准");
                    stateComprehensive_e = DealComprehensiveResultFun_CalibAxis(trigerSource_e, pos, index, out htResult);
                    break;

                //投影校准
                case TypeCalib_enum.CalibAffineCamera:
                    ShowState("相机投影校准");
                    stateComprehensive_e = DealComprehensiveResultFun_CalibAffineCamera(trigerSource_e, pos, index, out htResult);
                    break;

                //多目校准
                case TypeCalib_enum.CalibMult:
                    ShowState("多目校准");
                    stateComprehensive_e = DealComprehensiveResultFun_CalibMult(trigerSource_e, pos, index, out htResult);
                    break;

                //校准
                case TypeCalib_enum.CalibHandEye:
                    ShowState("手眼校准");
                    stateComprehensive_e = DealComprehensiveResultFun_CalibHandEye(trigerSource_e, pos, index, out htResult);
                    break;
                }

                switch (g_NoCamera)
                {
                case 1:
                    blCamera1CalibFinish = true;
                    Camera1CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam12_A2A2();
                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[6]);
                    break;

                case 2:
                    blCamera2CalibFinish = true;
                    Camera2CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam12_A2A2();
                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[7]);
                    break;

                case 3:
                    blCamera3CalibFinish = true;
                    Camera3CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam34_A2A2();

                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[8]);
                    break;

                case 4:
                    blCamera4CalibFinish = true;
                    Camera4CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam34_A2A2();

                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[9]);
                    break;

                case 5:
                    blCamera5CalibFinish = true;
                    Camera5CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam56_A2A2();
                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[10]);

                    break;

                case 6:
                    blCamera6CalibFinish = true;
                    Camera6CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam56_A2A2();
                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[11]);
                    break;

                case 7:
                    blCamera7CalibFinish = true;
                    Camera7CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam78_A2A2();
                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[12]);
                    break;

                case 8:
                    blCamera8CalibFinish = true;
                    Camera8CalibResult_e = stateComprehensive_e;
                    WritePlcCalibResult_Cam78_A2A2();
                    LogicPLC.L_I.ClearPLC(RegMonitor.R_I[13]);
                    break;
                }

                return(stateComprehensive_e);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
        }
Пример #18
0
        /// <summary>
        /// 接收外部触发源的指令
        /// </summary>
        /// <param name="trigerSource_e"></param>
        /// <param name="i"></param>
        /// <returns></returns>
        public StateComprehensive_enum DealComprehensiveResultFun(TriggerSource_enum trigerSource_e, int i)
        {
            Hashtable htResult = null;
            StateComprehensive_enum stateComprehensive_e = StateComprehensive_enum.False;

            try
            {
                //if (ParStateSoft.StateMachine_e == StateMachine_enum.Calib
                //    && i < 100)
                //{
                //    if (WinMsgBox.ShowMsgBox("校准模式,不允许触发运行,是否切换到运行模式"))
                //    {
                //        //校准模式
                //        ParStateSoft.StateMachine_e = StateMachine_enum.Auto;
                //        if (Fun_SoftState != null)
                //        {
                //            Fun_SoftState();
                //        }
                //    }

                //    return StateComprehensive_enum.False;
                //}
                switch (i)
                {
                    #region 正常拍照
                case 1:
                    stateComprehensive_e = DealComprehensiveResultFun1(trigerSource_e, out htResult);
                    break;

                case 2:
                    stateComprehensive_e = DealComprehensiveResultFun2(trigerSource_e, out htResult);
                    break;

                case 3:
                    stateComprehensive_e = DealComprehensiveResultFun3(trigerSource_e, out htResult);
                    break;

                case 4:
                    stateComprehensive_e = DealComprehensiveResultFun4(trigerSource_e, out htResult);
                    break;

                case 5:
                    stateComprehensive_e = DealComprehensiveResultFun5(trigerSource_e, out htResult);
                    break;

                case 6:
                    stateComprehensive_e = DealComprehensiveResultFun6(trigerSource_e, out htResult);
                    break;

                case 7:
                    stateComprehensive_e = DealComprehensiveResultFun7(trigerSource_e, out htResult);
                    break;

                case 8:
                    stateComprehensive_e = DealComprehensiveResultFun8(trigerSource_e, out htResult);
                    break;

                case 9:
                    stateComprehensive_e = DealComprehensiveResultFun9(trigerSource_e, out htResult);
                    break;

                case 10:
                    stateComprehensive_e = DealComprehensiveResultFun10(trigerSource_e, out htResult);
                    break;
                    #endregion 正常拍照
                }

                #region 校准触发
                if (i > 100)
                {
                    stateComprehensive_e = DealComprehensiveResultFun_Calib(trigerSource_e, i, out htResult);
                }
                #endregion 校准触发

                string cellError = "";
                GetErrorCell(htResult, i, out cellError);//显示错误信息
                return(stateComprehensive_e);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
        }
Пример #19
0
 /// <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);
     }
 }
Пример #20
0
        public bool BlobAngleCalc(string cellName, out Hashtable htResult)
        {
            htResult = null;
            double[] dblResult = new double[2];
            bool     blResult  = true;

            try
            {
                #region 空跑
                if (ParStateSoft.StateMachine_e == StateMachine_enum.NullRun)
                {
                    ShowState(string.Format("相机{0}空跑,默认发送OK", g_NoCamera));
                    LogicRobot.L_I.WriteRobotCMD(ModelParams.PrecisePos, ModelParams.cmd_PreciseAngle);
                    return(true);
                }
                #endregion

                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(
                    g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                ResultBlob resultBlob = (ResultBlob)htResult[cellName];

                //算子基准值记录到基准值当中
                if (ModelParams.PreciseStdValue.DblValue1 == 0)
                {
                    ModelParams.PreciseStdValue = new Point2D(resultBlob.StdX, resultBlob.StdY);
                }
                //面积判断
                #region 面积检测
                if (!BlobAreaDetect(resultBlob.Area, out dblResult))
                {
                    ShowState("精定位第一次拍照失败");
                    blResult = false;
                    return(false);
                }
                #endregion

                //一次拍照计算偏差,目前用于和二次拍照进行对比
                BackLightLocation.Verify(new Point2D(resultBlob.X, resultBlob.Y),
                                         new Point2D(resultBlob.StdX, resultBlob.StdY), //不规则区域基准值,即旋转中心
                                         resultBlob.R_J,                                //不规则区域角度
                                         ParCalibWorld.V_I[g_NoCamera],                 //相机系数
                                         ModelParams.BLDisplayType,                     //背光在相机显示中的方向
                                         ModelParams.PreciseRobotAngle,                 //精定位机器人u轴角度
                                         ModelParams.BotWastageAngle,                   //机器人残材平台放片角度
                                         ModelParams.BotPlaceAngle,                     //机器人放置角度
                                         ModelParams.DisplayAngle,                      //相机显示角度
                                         ModelParams.BLPlaceAngle);                     //背光放置方向

                blResult = BackLightLocation.BlobAngleCalc(
                    resultBlob.R_J,                //不规则区域角度
                    ModelParams.PrecisePos,        //机器人精定位位置
                    ModelParams.cmd_PreciseAngle,  //精定位角度调整指令
                    ModelParams.cmd_PreciseFailed, //精定位失败指令
                    ModelParams.PreciseThreadR,    //精定位角度偏差阈值
                    ModelParams.BLDisplayType,     //背光在相机显示中的方向
                    RegeditMain.R_I.ID,            //UniqueID
                    ModelParams.IfRecordData,      //是否进行数据记录
                    out phi);                      //输出实际给机器人补偿的角度
                return(blResult);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
            finally
            {
                string strResult = "OK";
                if (!blResult)
                {
                    strResult = "NG";
                }
                g_UCDisplayCamera.ShowResult("面积比例:" + dblResult[1].ToString(ReservDigits) +
                                             "\n角度补正:" + phi.ToString(ReservDigits) +
                                             "\n角度阈值:" + ModelParams.PreciseThreadR.ToString(ReservDigits) +
                                             "\n" + strResult, blResult);
            }
        }
        //double



        #endregion 定义

        #region 位置1拍照
        /// <summary>
        ///
        /// </summary>
        public override StateComprehensive_enum DealComprehensiveResultFun1(
            TriggerSource_enum trigerSource_e, int index, out Hashtable htResult)
        {
            #region 定义
            htResult = g_HtResult;
            PosNow_e = Pos_enum.Pos1;//当前位置
            bool blResult = true;

            Stopwatch sw = new Stopwatch();
            sw.Restart();
            #endregion 定义
            try
            {
                if (ParStateSoft.StateMachine_e == StateMachine_enum.NullRun)
                {
                    ShowState("相机1空跑默认OK");
                    return(StateComprehensive_enum.True);
                }

                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(
                    g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                BaseResult result = htResult[Camera1Match1] as BaseResult;

                if (!DealTypeResult(result))
                {
                    ShowAlarm("精定位相机1拍照NG!");
                    LogicRobot.L_I.WriteRobotCMD(Protocols.BotCmd_PreciseNG);
                    return(StateComprehensive_enum.False);
                }

                Pt2Mark1.DblValue1 = result.X;
                Pt2Mark1.DblValue2 = result.Y;
                Camera1Done        = true;
                DualLocation(index);

                return(StateComprehensive_enum.True);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(StateComprehensive_enum.False);
            }
            finally
            {
                #region 显示和日志记录
                Display(Pos_enum.Pos1, htResult, blResult, sw);
                #endregion 显示和日志记录

                //g_UCDisplayCamera.ShowResult("NG\nX=20\nY=100\n", false);
                //long t = g_UCDisplayCamera.SaveBitFullPath_Screen("Came","D:\\");
                //t = g_UCDisplayCamera.SaveBit_Screen("D:\\");
                //ShowState_Hidden("保存屏幕截图时间:"+t.ToString());

                //ShowResult_Camera1("1",true);
                //ShowResult_Camera2("2", true);
                //ShowResult_Camera3("3", true);
                //ShowResult_Camera4("4", true);
                //ShowResult_Camera5("5", true);
                //ShowResult_Camera6("6", true);
            }
        }
Пример #22
0
        /// <summary>
        /// 不规则区域偏差计算
        /// </summary>
        /// <param name="cellName"></param>
        /// <param name="htResult"></param>
        /// <returns></returns>
        public bool BlobDeviation(string cellName, out Hashtable htResult)
        {
            htResult = null;
            Point2D pDelta   = new Point2D();
            bool    blResult = true;

            double[] dblResult = new double[2];
            try
            {
                #region 空跑
                if (ParStateSoft.StateMachine_e == StateMachine_enum.NullRun)
                {
                    ShowState("空跑默认发送平台1坐标");
                    LogicRobot.L_I.WriteRobotCMD(ModelParams.PosWastagePlat1, ModelParams.cmd_PreciseResult);
                    return(true);
                }
                #endregion

                StateComprehensive_enum stateComprehensive_e = g_BaseDealComprehensive.DealComprehensivePosNoDisplay(
                    g_UCDisplayCamera, g_HtUCDisplay, Pos_enum.Pos1, out htResult);
                ResultBlob resultBlob = (ResultBlob)htResult[cellName];

                #region 面积检测
                if (!BlobAreaDetect(resultBlob.Area, out dblResult))
                {
                    blResult = false;
                    return(false);
                }
                #endregion

                //获取像素偏差
                //Point2D delta = new Point2D((ModelParams.isMirrorX ? 1 : -1) * resultBlob.DeltaX * AMP,
                //    (ModelParams.isMirrorY ? 1 : -1) * resultBlob.DeltaY * AMP);
                double  deltaX = resultBlob.X - ModelParams.PreciseStdValue.DblValue1;
                double  deltaY = resultBlob.Y - ModelParams.PreciseStdValue.DblValue2;
                Point2D delta  = new Point2D((ModelParams.isMirrorX ? 1 : -1) * deltaX * AMP,
                                             (ModelParams.isMirrorY ? 1 : -1) * deltaY * AMP);
                //将像素偏差代入计算
                blResult = BolbDevationCalc(phi, delta, out pDelta);
                return(blResult);
            }
            catch (Exception ex)
            {
                blResult = false;
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
            finally
            {
                string strResult = "OK";
                if (!blResult)
                {
                    strResult = "NG";
                }
                g_UCDisplayCamera.ShowResult(
                    "面积比例:" + dblResult[1].ToString("f3") +
                    "  阈值:" + ModelParams.AreaMin.ToString(ReservDigits) + "-" + ModelParams.AreaMax.ToString(ReservDigits) +
                    "\n补正值X:" + pDelta.DblValue1.ToString("f3") +
                    "  阈值:" + ModelParams.PreciseThreadX.ToString(ReservDigits) +
                    "\n补正值Y:" + pDelta.DblValue2.ToString("f3") +
                    "  阈值:" + ModelParams.PreciseThreadY.ToString(ReservDigits) +
                    "\n" + strResult, blResult);
            }
        }