Exemple #1
0
        /// <summary>
        /// PLC触发更新数据
        /// </summary>
        protected virtual void PLCRefreshPar()
        {
            try
            {
                ShowState("PLC触发更新参数数据");
                //如果新建的型号相同
                if (ComConfigPar.C_I.NameModel != ParLogicPLC.P_I.NameModel)
                {
                    WinMsgBox.ShowMsgBox("当前名称型号参数不存在,请新建型号!");
                    return;
                }

                #region 将PLC中读取的参数复制到配置文件类
                ReadParProductFromPLC();
                #endregion 将DealPLC中读取的参数复制到配置文件类

                //换型
                if (RefreshPar())
                {
                    ShowState("PLC触发更新产品参数");
                }
                else
                {
                    ShowAlarm("PLC触发更新产品参数失败");
                }
                //每次换型时,需要写入PLC的值
                WritePLCModelPar();//回调
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
            }
        }
Exemple #2
0
        /// <summary>
        /// 恢复参数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public virtual void btnRecover_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                FunBackup.F_I.BackupAdjust();//备份调整值

                base.IndexP = this.dgDir.SelectedIndex;
                if (WinMsgBox.ShowMsgBox("使用备份参数永久覆盖当前所有调整值,是否继续?"))
                {
                    DirectoryInfo theFolder = new DirectoryInfo(ParRecover.P_I.g_BaseParRecoverDir_L[base.IndexP].Path);
                    foreach (FileInfo item in theFolder.GetFiles())
                    {
                        //edit by xc-190401,传入filename
                        if (item.Name == FileName + ".ini")
                        {
                            File.Copy(item.FullName, ParAdjust.PathAdjust, true);
                        }
                    }

                    RecoverPar_event();//刷新参数
                }
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                WinMsgBox.ShowMsgBox("参数恢复失败", false);
            }
        }
        private void BtnSave_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (!blSideIndexSetOK)
                {
                    WinMsgBox.ShowMsgBox("边序号设置不合法,请检查");
                    TxtSideMatch.Focus();
                    return;
                }
                var a_Var = g_ParAll[0].IntArrSidesMatch.Intersect(g_ParAll[1].IntArrSidesMatch).ToArray();
                if (g_ParAll[0].IntArrSidesMatch.Intersect(g_ParAll[1].IntArrSidesMatch).ToArray().Length != 0)
                {
                    WinMsgBox.ShowMsgBox("边序号设置重复,请检查");
                    return;
                }

                if (g_ParAll.WriteIni())
                {
                    WinMsgBox.ShowMsgBox("保存完成");
                    Close();
                }
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(g_NameClass, ex);
            }
        }
        private void PasswordBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                if (PsdBx.Password == "ccd1234" || PsdBx.Password == "finevision")
                {
                    StackTrace stack = new StackTrace();

                    Assembly assembly = Assembly.GetExecutingAssembly();
                    string   path     = assembly.Location;
                    string   path1    = assembly.CodeBase;;
                    string   path3    = assembly.EscapedCodeBase;
                    if (File.Exists("PathVsion.log"))
                    {
                        File.Delete("PathVsion.log");
                    }
                    Log.L_I.WriteLog("PathVsion.log", path, path1, path3);
                    WinMsgBox.ShowMsgBox("已输出!");
                    Close();
                }
                else
                {
                    LblState.Content = "密码错误";
                }
            }
        }
Exemple #5
0
        /// <summary>
        /// 恢复参数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public override void btnRecover_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                FunBackup.F_I.BackupStd();//备份基准值

                base.IndexP = this.dgDir.SelectedIndex;
                if (WinMsgBox.ShowMsgBox("使用备份参数永久覆盖当前所有基准值,是否继续?"))
                {
                    DirectoryInfo theFolder = new DirectoryInfo(ParRecover.P_I.g_BaseParRecoverDir_L[base.IndexP].Path);
                    foreach (FileInfo item in theFolder.GetFiles())
                    {
                        if (item.Name == "Std.ini")
                        {
                            File.Copy(item.FullName, ParStd.PathStd, true);
                        }
                    }

                    RecoverPar_event();//刷新参数
                }
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                WinMsgBox.ShowMsgBox("参数恢复失败", false);
            }
        }
Exemple #6
0
        /// <summary>
        /// 计算相机的映射系数
        /// </summary>
        /// <param name="par1">基准相机参数</param>
        /// <param name="index1">算子索引号</param>
        /// <param name="par2"></param>
        /// <param name="index2">算子索引号</param>
        /// <returns></returns>
        bool CalibMult_Co(BaseParComprehensive par1, int index1, BaseParComprehensive par2, int index2)
        {
            try
            {
                //第一个相机
                List <string> name1_L = par1.GetAllNameCellByType("多目校准");
                if (name1_L.Count < index1)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string       name1         = name1_L[index1 - 1];
                ParCalibMult parCalibMult1 = par1.GetCellParCalibrate(name1) as ParCalibMult;

                //第二个相机
                List <string> name2_L = par2.GetAllNameCellByType("多目校准");
                if (name2_L.Count < index1)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string       name2         = name2_L[index1 - 1];
                ParCalibMult parCalibMult2 = par2.GetCellParCalibrate(name2) as ParCalibMult;

                //计算系数
                FunCalibMult fun = new FunCalibMult();
                fun.CalCalibMult(parCalibMult1, parCalibMult2);

                //保存此单元格
                bool blSave = par1.WriteXmlDoc(par1.NameCell);
                if (blSave)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到本地成功", par1.NoCamera.ToString(), par1.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到本地失败", par1.NoCamera.ToString(), par1.NameCell));
                    return(false);
                }

                blSave = par2.WriteXmlDoc(par2.NameCell);
                if (blSave)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到本地成功", par2.NoCamera.ToString(), par2.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到本地失败", par2.NoCamera.ToString(), par2.NameCell));
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
Exemple #7
0
 private void Win_RecoverPar_event()
 {
     try
     {
         ShowPar();
         WinMsgBox.ShowMsgBox("基准值按照恢复的历史参数完成刷新", true, 2000);
     }
     catch (Exception ex)
     {
         Log.L_I.WriteError(NameClass, ex);
     }
 }
        void InitMotionCtler()
        {
            if (!ParMotionCtrler.P_I.IsEnable)
            {
                return;
            }
            //包括初始化IO模块
            LogicMotionCtler.L_I.InitModule();
            DmcResult result = LogicMotionCtler.L_I.Dmc_card_init();

            //板卡初始化之后初始化实deng例
            InitLight();
            InitAirCylider();

            if (result.resultType == ResultType.OK)
            {
                ParMotionCtrler.P_I.IsInitialized = true;

                if (WinMsgBox.ShowMsgBox("开始按照既定的顺序\n执行回零?"))
                {
                    this.Dispatcher.Invoke(new Action(() =>
                    {
                        this.gdRoot.Children.Add(uiShield);
                    }));

                    ShowState("打开气缸,等待气缸到达限位");
                    g_AirCyliderUpDown.OnAirCylinder(4000);
                    ShowState("气缸已打开,开始回零");


                    LogicMotionCtler.L_I.Home();
                    this.Dispatcher.Invoke(new Action(() =>
                    {
                        this.gdRoot.Children.Remove(uiShield);
                    }));

                    ShowState("回零动作结束,已回到初始位!");
                }
                else
                {
                    ShowState("已拒绝回零!");
                }
            }
            else
            {
                WinError.GetWinInst().ShowError("控制卡初始化失败!\n" + result.resultInfo);
            };
        }
Exemple #9
0
 /// <summary>
 /// 显示换型结果
 /// </summary>
 void ShowResultChangeModel()
 {
     try
     {
         if (g_BlFinishBasePar &&
             g_BlFinishComprehensive)
         {
             if (numError > 0)
             {
                 ShowAlarm("换型失败");
                 WinMsgBox.ShowMsgBox("换型失败!", false);
             }
             else
             {
                 ShowState("换型成功");
                 WinMsgBox.ShowMsgBox("换型成功!", true, 3000);
             }
         }
     }
     catch (Exception ex)
     {
         Log.L_I.WriteError(NameClass, ex);
     }
 }
Exemple #10
0
        /// 创建启动屏幕对象,显示系统初始化信息,最后显示主窗体
        static void ShowSplashScreen()
        {
            try
            {
                g_StartUpWindow = new StartUpWindow();
                g_StartUpWindow.ShowDialog();
                //显示主窗体
                Application application = new Application();
                application.Run(new MainWindow());
            }
            catch (Exception ex)
            {
                WinMsgBox.ShowMsgBox("软件发生异常\r①点击确定或取消后软件将关闭 \r②移开此窗口并手动对主界面截屏\r③观察机台内当前巡边玻璃是否已往后流\r④记录时间,发送异常信息日志和运行报警日志到开发人员邮箱");

                BinaryFormatter formatter = null;
                string          path      = Log.CreateAllTimeFile(Log.L_I.PathErrorLog) + "Exception" + DateTime.Now.ToString(" HH-mm-ss") + ".dat";
                using (FileStream ms = new FileStream(path, FileMode.Create))
                {
                    formatter = new BinaryFormatter();
                    formatter.Serialize(ms, ex);
                }
                Log.L_I.WriteError("Program", ex);
            }
        }
        /// <summary>
        /// 自动校准旋转中心,1401表示位置1第一次拍照,
        /// </summary>
        /// <param name="pos">算子序号,不表示拍照位置</param>
        /// <param name="index"></param>
        /// <param name="htResult">哈希表结果</param>
        /// <returns></returns>
        bool CalibRotate(int pos, int index, out Hashtable htResult)
        {
            htResult = null;
            Stopwatch sw = new Stopwatch();

            try
            {
                //获取该算子所有的单元格
                List <string> nameCell_L = g_BaseParComprehensive.GetAllNameCellByType("旋转中心变换");
                if (nameCell_L.Count < pos)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string nameCell = nameCell_L[pos - 1];//单元格名称

                ParCalibRotate par = g_BaseParComprehensive.GetCellParCalibrate(nameCell) as ParCalibRotate;

                int indexCell = int.Parse(nameCell.Replace("C", ""));//单元格索引

                ParCellExeReference  parCellExeReference  = par.g_ParCellExecuteReference;
                ParGetResultFromCell parGetResultFromCell = par.g_ParGetResultFromCellForRC;//用来计算旋转中心

                //调用执行
                g_BaseDealComprehensive.DealComprehensivePosCell_ForTestRun(g_UCDisplayCamera, parCellExeReference, par.g_ParCellExecuteReference.g_CellExecute_L, out htResult);//执行算法且显示

                string cellError = "";
                if (!GetErrorCell(htResult, pos, out cellError))
                {
                    WinMsgBox.ShowMsgBox(string.Format("相机{0}位置{1},单元格{2}校准计算错误", g_NoCamera.ToString(), pos.ToString(), par.NameCell));
                    return(false);
                }

                FunCellDataReferenc fun = new FunCellDataReferenc();
                fun.GetResultValue(htResult, parGetResultFromCell, index - 1);

                string info = string.Format("相机{0}位置{1},单元格{2}", g_NoCamera.ToString(), pos.ToString(), par.NameCell);
                if (index == 1)
                {
                    info += "旋转中心校准第一次拍照";
                    ShowState(info);

                    SaveStdImage(par, "旋转中心位置1");
                }
                else if (index == 2)
                {
                    info += "旋转中心校准第二次拍照";
                    ShowState(info);
                    SaveStdImage(par, "旋转中心位置2");

                    FunCalibRotate funCalibRotate = new FunCalibRotate();
                    Point2D        point          = funCalibRotate.GetOriginPoint(par);
                    par.XRC = point.DblValue1;
                    par.YRC = point.DblValue2;

                    //显示求取的旋转中心
                    info = string.Format("旋转中心:X{0},Y{1}", par.XRC.ToString(), par.YRC.ToString());

                    ShowState(info);

                    //保存此单元格
                    bool blSave = g_BaseParComprehensive.WriteXmlDoc(par.NameCell);

                    if (blSave)
                    {
                        ShowState(string.Format("将参数旋转中心校准{0}保存到本地成功", par.NameCell));
                    }
                    else
                    {
                        ShowAlarm(string.Format("将参数旋转中心校准{0}保存到本地失败", par.NameCell));
                        return(false);
                    }

                    //将参数保存到结果中
                    bool blSaveResult = g_BaseDealComprehensive.InitCalibRotate(indexCell);
                    if (blSaveResult)
                    {
                        ShowState(string.Format("将参数旋转中心校准{0}保存到结果成功", par.NameCell));
                    }
                    else
                    {
                        ShowAlarm(string.Format("将参数旋转中心校准{0}保存到结果失败", par.NameCell));
                        return(false);
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                ShowAlarm(string.Format("相机{0}旋转中心计算进入Catch", g_NoCamera.ToString()));
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
Exemple #12
0
 private void tb_Checked(object sender, RoutedEventArgs e)
 {
     //WinLogImage.GetWinInst().Show();
     WinMsgBox.ShowMsgBox("123", false);
 }
Exemple #13
0
        /// <summary>
        /// 自动轴,1301表示位置1第一次拍照,轴坐标的计算是双数点进行保存,轴计算是两个数据表示一根轴,20181111-zx
        /// </summary>
        /// <param name="pos">算子的序号,并非拍照位置</param>
        /// <param name="index"></param>
        /// <param name="htResult">哈希表结果</param>
        /// <returns></returns>
        bool CalibAxis(int pos, int index, out Hashtable htResult)
        {
            htResult = null;
            Stopwatch sw = new Stopwatch();

            sw.Restart();
            try
            {
                List <string> nameCell_L = g_BaseParComprehensive.GetAllNameCellByType("轴坐标校准");
                if (nameCell_L.Count < pos)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string nameCell = nameCell_L[pos - 1];

                ParCalibAxis par       = g_BaseParComprehensive.GetCellParCalibrate(nameCell) as ParCalibAxis;
                int          indexCell = int.Parse(nameCell.Replace("C", ""));//单元格索引

                ParCellExeReference  parCellExeReference  = par.g_ParCellExecuteReference;
                ParGetResultFromCell parGetResultFromCell = par.g_ParGetResultFromCell;//用来计算轴

                //调用执行
                g_BaseDealComprehensive.DealComprehensivePosCell_ForTestRun(g_UCDisplayCamera, parCellExeReference, par.g_ParCellExecuteReference.g_CellExecute_L, out htResult);//执行算法且显示

                string cellError = "";
                if (!GetErrorCell(htResult, pos, out cellError))
                {
                    WinMsgBox.ShowMsgBox(string.Format("相机{0}位置{1},单元格{2}校准计算错误", g_NoCamera.ToString(), pos.ToString(), par.NameCell));
                    return(false);
                }
                FunCellDataReferenc fun = new FunCellDataReferenc();
                fun.GetResultValue(htResult, parGetResultFromCell, index - 1);

                string info = string.Format("相机{0}位置{1},单元格{2}", g_NoCamera.ToString(), pos.ToString(), par.NameCell);

                //保存基准图片
                SaveStdImage(par, "轴校准" + index.ToString());

                if (index % 2 == 1)
                {
                    info += string.Format("轴校准第{0}次拍照", index);
                    //日志
                    ShowState_Cam(info);
                }
                else
                {
                    info += string.Format("轴校准第{0}次拍照", index);
                    //保存基准图片
                    SaveStdImage(par, "旋转中心位置2");
                    //日志
                    ShowState_Cam(info);

                    FunCalibAxis funCalibCoord = new FunCalibAxis();
                    Point4D      pResult       = funCalibCoord.GetAxisAngleDir(par);
                    par.XAxisAngle_J = pResult.DblValue1;
                    par.YAxisAngle_J = pResult.DblValue2;

                    par.XAxisDir = (int)pResult.DblValue3;
                    par.YAxisDir = (int)pResult.DblValue4;

                    //显示求取的轴角度
                    info = string.Format("轴角度:X轴{0},Y轴{1}", par.XAxisAngle_J.ToString(), par.YAxisAngle_J.ToString());
                    //日志
                    ShowState_Cam(info);

                    //显示求取的轴方向
                    info = string.Format("轴方向:X轴{0},Y轴{1}", par.XAxisDir.ToString(), par.YAxisDir.ToString());
                    //日志
                    ShowState_Cam(info);

                    //保存此单元格
                    bool blSave = g_BaseParComprehensive.WriteXmlDoc(par.NameCell);

                    if (blSave)
                    {
                        //日志
                        ShowState_Cam(string.Format("将参数{0}保存到本地成功", par.NameCell));
                    }
                    else
                    {
                        //日志
                        ShowAlarm_Cam(string.Format("将参数{0}保存到本地失败", par.NameCell));
                        return(false);
                    }

                    //将参数保存到结果中
                    bool blSaveResult = g_BaseDealComprehensive.InitCalibAxis(indexCell);
                    if (blSaveResult)
                    {
                        //日志
                        ShowState_Cam(string.Format("将参数{0}保存到结果成功", par.NameCell));
                    }
                    else
                    {
                        //日志
                        ShowAlarm_Cam(string.Format("将参数{0}保存到结果失败", par.NameCell));
                        return(false);
                    }
                }
                return(true);
            }
            catch (Exception ex)
            {
                //日志
                ShowAlarm_Cam("轴校准计算进入Catch");
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
Exemple #14
0
        /// <summary>
        /// 自动相机校准,1201表示位置1第一次拍照,
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        bool CalibHandEye(int pos, int index, out Hashtable htResult)
        {
            htResult = null;
            Stopwatch sw = new Stopwatch();

            sw.Restart();
            try
            {
                string info = "";

                ParCalibHandEye par       = g_BaseParComprehensive.GetCellParCalibByType("手眼校准", pos) as ParCalibHandEye;
                string          nameCell  = par.NameCell;                         //单元格名称
                int             indexCell = int.Parse(nameCell.Replace("C", "")); //单元格索引

                if (index != 9)
                {
                    //关联算法,用来获取角点
                    ParCellExeReference  parCellExeReference  = par.g_ParCellExecuteReference;
                    ParGetResultFromCell parGetResultFromCell = par.g_ParGetResultFromCell;

                    //调用执行
                    g_BaseDealComprehensive.DealComprehensivePosCell_ForTestRun(g_UCDisplayCamera, parCellExeReference, par.g_ParCellExecuteReference.g_CellExecute_L, out htResult);//执行算法且显示

                    string cellError = "";
                    if (!GetErrorCell(htResult, pos, out cellError))
                    {
                        WinMsgBox.ShowMsgBox(string.Format("相机{0}位置{1},单元格{2}手眼校准计算错误", g_NoCamera.ToString(), pos.ToString(), par.NameCell));
                        return(false);
                    }
                    FunCellDataReferenc fun = new FunCellDataReferenc();
                    fun.GetResultValue(htResult, parGetResultFromCell, index - 1);

                    info = string.Format("相机{0}位置{1},单元格{2}手眼校准触发拍照", g_NoCamera.ToString(), pos.ToString(), par.NameCell);
                    ShowState(info);

                    //标定开始,清空值
                    if (index == 0)
                    {
                        par.XDelta = 0;
                        par.YDelta = 0;
                        parGetResultFromCell.ClearResult();
                    }
                }

                //保存基准图片
                SaveStdImage(par, "手眼校准" + index.ToString());

                //表示标定结束
                if (index == 99)
                {
                    FunCalibHandEye    funCalibHandEye = new FunCalibHandEye();
                    ResultCalibHandEye result          = funCalibHandEye.CalCalibHandEye(par);

                    //自校准
                    funCalibHandEye.CheckSelf(par, -1);

                    List <double> XDelta_L = new List <double>();
                    List <double> YDelta_L = new List <double>();
                    //自动计算偏差
                    funCalibHandEye.CalDeltaforCalib(par, out XDelta_L, out YDelta_L);
                    string xInfo = "";
                    string yInfo = "";
                    for (int i = 0; i < XDelta_L.Count; i++)
                    {
                        xInfo += XDelta_L[i].ToString() + ",";
                        yInfo += YDelta_L[i].ToString() + ",";
                    }

                    ShowState(string.Format("自校准的偏差为X{0}", xInfo));
                    ShowState(string.Format("自校准的偏差为Y{0}", yInfo));

                    info = "将标定参数保存到结果";
                    ShowState(info);

                    //参数保存到Par
                    bool blSavePar = funCalibHandEye.SaveResultToPar(par, result);
                    //将参数保存到结果中
                    bool blSaveResult = funCalibHandEye.SaveResultToStdResult(par, htResult);

                    if (blSaveResult)
                    {
                        ShowState(string.Format("将相机{0}手眼校准参数{1}保存到结果成功", g_NoCamera.ToString(), par.NameCell));
                    }
                    else
                    {
                        ShowAlarm(string.Format("将相机{0}手眼校准参数{1}保存到结果失败", g_NoCamera.ToString(), par.NameCell));
                        return(false);
                    }

                    //保存此单元格
                    bool blSave = g_BaseParComprehensive.WriteXmlDoc(par.NameCell);

                    if (blSave)
                    {
                        ShowState(string.Format("将相机{0}手眼校准参数{1}保存到本地成功", g_NoCamera.ToString(), par.NameCell));
                    }
                    else
                    {
                        ShowAlarm(string.Format("将相机{0}手眼校准参数{1}保存到本地失败", g_NoCamera.ToString(), par.NameCell));
                        return(false);
                    }
                }

                return(true);
            }
            catch (Exception ex)
            {
                WinMsgBox.ShowMsgBox(string.Format("手眼{0}校准计算进入Catch", g_NoCamera.ToString()));
                ShowAlarm("手眼校准计算进入Catch");
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
        /// <summary>
        /// 自动相机校准,1201表示位置1第一次拍照,
        /// </summary>
        /// <param name="pos"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        bool CalibCamera(int pos, int index, out Hashtable htResult)
        {
            htResult = null;
            Stopwatch sw = new Stopwatch();

            sw.Restart();
            try
            {
                ParCalibCamera par       = g_BaseParComprehensive.GetCellParCalibByType("相机校准", pos) as ParCalibCamera;
                string         nameCell  = par.NameCell;                         //单元格名称
                int            indexCell = int.Parse(nameCell.Replace("C", "")); //单元格索引

                //关联算法,用来获取角点
                ParCellExeReference  parCellExeReference  = par.g_ParCellExecuteReference;
                ParGetResultFromCell parGetResultFromCell = par.g_ParGetResultFromCell;

                //调用执行
                g_BaseDealComprehensive.DealComprehensivePosCell_ForTestRun(g_UCDisplayCamera, parCellExeReference, par.g_ParCellExecuteReference.g_CellExecute_L, out htResult);//执行算法但不显示

                string cellError = "";
                if (!GetErrorCell(htResult, pos, out cellError))
                {
                    WinMsgBox.ShowMsgBox(string.Format("相机{0}位置{1},单元格{2}校准计算错误", g_NoCamera.ToString(), pos.ToString(), par.NameCell));
                    return(false);
                }
                FunCellDataReferenc fun = new FunCellDataReferenc();
                fun.GetResultValue(htResult, parGetResultFromCell, index - 1);

                string info = string.Format("相机{0}位置{1},单元格{2}相机校准触发拍照", g_NoCamera.ToString(), pos.ToString(), par.NameCell);
                ShowState(info);

                FunCalibCamera    funCalibCamera = new FunCalibCamera();
                ResultCalibCamera result         = funCalibCamera.DealCalibCamera(par);

                info = "将标定参数保存到结果";
                ShowState(info);

                //参数保存到Par
                bool blSavePar = funCalibCamera.SaveResultToPar(par, result);
                //将参数保存到结果中
                bool blSaveResult = funCalibCamera.SaveResultToStdResult(par, htResult);


                if (blSaveResult)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到结果成功", g_NoCamera.ToString(), par.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到结果失败", g_NoCamera.ToString(), par.NameCell));
                    return(false);
                }

                //保存基准图片
                SaveStdImage(par, "相机校准");
                //保存此单元格
                bool blSave = g_BaseParComprehensive.WriteXmlDoc(par.NameCell);

                if (blSave)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到本地成功", g_NoCamera.ToString(), par.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到本地失败", g_NoCamera.ToString(), par.NameCell));
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                WinMsgBox.ShowMsgBox(string.Format("相机{0}校准计算进入Catch", g_NoCamera.ToString()));
                ShowAlarm("相机校准计算进入Catch");
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
Exemple #16
0
        /// <summary>
        /// 多目校准,获取坐标
        /// </summary>
        /// <param name="pos">算子的序号,并非拍照位置</param>
        /// <param name="index">拍照次序</param>
        /// <param name="htResult">哈希表结果</param>
        /// <returns></returns>
        bool CalibMult_GetPoint(int pos, int index, out Hashtable htResult)
        {
            htResult = null;
            Stopwatch sw = new Stopwatch();

            sw.Restart();
            try
            {
                List <string> nameCell_L = g_BaseParComprehensive.GetAllNameCellByType("多目校准");
                if (nameCell_L.Count < pos)
                {
                    WinMsgBox.ShowMsgBox("算子个数小于序号!");
                    return(false);
                }
                string       nameCell = nameCell_L[pos - 1];
                ParCalibMult par      = g_BaseParComprehensive.GetCellParCalibrate(nameCell) as ParCalibMult;

                int indexCell = int.Parse(nameCell.Replace("C", ""));//单元格索引

                //关联算法,用来获取角点
                ParCellExeReference  parCellExeReference  = par.g_ParCellExecuteReference;
                ParGetResultFromCell parGetResultFromCell = par.g_ParGetResultFromCell;

                //第一次获取坐标的时候,清空历史记录,不能Clear,只能赋值0
                if (index == 1)
                {
                    for (int i = 0; i < parGetResultFromCell.ResultforCalib_L.Count; i++)
                    {
                        parGetResultFromCell.ResultforCalib_L[i].XResult = 0;
                        parGetResultFromCell.ResultforCalib_L[i].YResult = 0;
                    }
                }

                //调用执行
                g_UCDisplayCamera.GrabImageAndShow();
                g_BaseDealComprehensive.DealComprehensivePosCell_ForTestRun(g_UCDisplayCamera, parCellExeReference, par.g_ParCellExecuteReference.g_CellExecute_L, out htResult);//执行算法且显示

                //比对对应的单元格名称,判断结果是否正确
                string cellError = "";
                if (!GetErrorCell(htResult, par.g_ParCellExecuteReference.NameCellExecute_L, out cellError))
                {
                    WinMsgBox.ShowMsgBox(string.Format("相机{0}位置{1},单元格{2}校准计算错误", g_NoCamera.ToString(), pos.ToString(), par.NameCell));
                    return(false);
                }

                FunCellDataReferenc fun = new FunCellDataReferenc();
                fun.GetResultValue(htResult, parGetResultFromCell, index - 1);

                string info = string.Format("相机{0}位置{1},单元格{2}相机多目校准触发拍照", g_NoCamera.ToString(), pos.ToString(), par.NameCell);
                ShowState(info);

                //保存基准图片
                SaveStdImage(par, "多目校准");

                //保存此单元格
                bool blSave = g_BaseParComprehensive.WriteXmlDoc(par.NameCell);

                if (blSave)
                {
                    ShowState(string.Format("将相机{0}参数{1}保存到本地成功", g_NoCamera.ToString(), par.NameCell));
                }
                else
                {
                    ShowAlarm(string.Format("将相机{0}参数{1}保存到本地失败", g_NoCamera.ToString(), par.NameCell));
                    return(false);
                }
                return(true);
            }
            catch (Exception ex)
            {
                WinMsgBox.ShowMsgBox(string.Format("相机{0}多目校准计算进入Catch", g_NoCamera.ToString()));
                ShowAlarm("相机校准计算进入Catch");
                Log.L_I.WriteError(NameClass, ex);
                return(false);
            }
        }
Exemple #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);
            }
        }