예제 #1
0
        private void btnSaveUVXY2D_Click(object sender, EventArgs e)
        {
            this.btnSaveUVXY2D.Focus();
            HTuple uvHxy = null;

            try
            {
                GetDGVValue(dgvUVXY2D, new int[] { 0, 1 }, new int[] { 0, 2 }, ref uvHxy);
            }
            catch (Exception)
            {
                MessageBox.Show("获取2D相机UV-XY矩阵数据失败!");
                return;
            }
            //保存
            string filePath = _station.SystemUV2XYDir + "\\Camera_" + _station.SelectedIndex + "\\" + "UV2XY" + ".dat";

            try
            {
                string dir = Directory.GetParent(filePath).FullName;
                if (!Directory.Exists(dir))
                {
                    Directory.CreateDirectory(dir);
                }
                tool_vision.save_hom2d(filePath, uvHxy);
                _station.List_UV2XYResult[_station.SelectedIndex] = uvHxy;
            }
            catch (Exception ex)
            {
                HTUi.PopError("2D相机UV-XY矩阵保存失败!\n" + ex.ToString());
                return;
            }
            HTUi.TipHint("2D相机UV-XY矩阵保存成功!");
            HTLog.Info("2D相机UV-XY矩阵保存成功!");
        }
예제 #2
0
        /// <summary>
        /// 加载产品
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void btnLoadProduct_Click(object sender, EventArgs e)
        {
            string Errstring = "";

            if (lbxProductCategory.SelectedIndex == -1)
            {
                return;
            }
            btnLoadProduct.Enabled = false;

            string pdt = null;

            pdt = lbxProductCategory.SelectedValue.ToString();

            btnLoadProduct.Enabled = true;
            Form_Wait.ShowForm();
            await Task.Run(new Action(() =>
            {
                try
                {
                    //需要加载当前产品相关的参数
                    _operation = JFHubCenter.Instance.RecipeManager.GetRecipe("Product", pdt) as JFDLAFProductRecipe;
                    if (_operation == null)
                    {
                        HTUi.TipError("Recipe Manager中不存在配方:" + pdt);
                        return;
                    }

                    if (Errstring == "")
                    {
                        HTLog.Info("加载产品完成.");
                        HTUi.TipHint("加载产品完成");
                        if (_operation.MgzIdx == -1)
                        {
                            HTLog.Error("注意:当前产品未选择料盒型号,开始流程需要选择料盒型号.");
                        }
                    }
                    else
                    {
                        HTLog.Error("加载产品失败!!!" + Errstring);
                        HTUi.TipError("加载产品失败");
                        HTUi.PopWarn("产品加载失败\n" + Errstring);
                    }
                }
                catch (Exception EXP)
                {
                    HTLog.Error(String.Format("{0}加载新产品失败\n", EXP.ToString()));
                    HTUi.TipError("加载新产品失败");
                }
            }));

            if (_operation != null)
            {
                SetupUI();
            }
            JFHubCenter.Instance.SystemCfg.SetItemValue("CurrentID", pdt);
            JFHubCenter.Instance.SystemCfg.Save();
            Form_Wait.CloseForm();
        }
예제 #3
0
        private async void btnUVXYCalib2D_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.aoiModels == null)
                {
                    this.aoiModels = new Model();
                    string folderPath = _station.SystemUV2XYDir + "\\Camera_" + _station.SelectedIndex;
                    if (!this.aoiModels.ReadModel(folderPath))
                    {
                        HTUi.PopError("未创建2D标定模板!");
                        return;
                    }
                    HOperatorSet.ReadTuple(folderPath + "\\Pos_Uv2Xy.tup", out Pos_Uv2Xy);
                }
                //设定走位范围
                CalibSearchRange csRangeFrm = new CalibSearchRange();
                if (csRangeFrm.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                double xyRange = csRangeFrm.Range;
                //条件:标定板中心在2D相机视野中心位置时的chuck x y的粗略位置已知,即
                //料片视野为左下芯片为中心作为初始点位
                _station.operation.XUv2xy = Pos_Uv2Xy[0]; //App.obj_Chuck.ref_x + ((App.obj_Pdt.BlockNumber - 1) * App.obj_Pdt.BlockSpace + (App.obj_Pdt.ColumnNumber - 1) * App.obj_Pdt.ColomnSpace)/2 + App.obj_Pdt.RightEdge;
                _station.operation.YUv2xy = Pos_Uv2Xy[1]; //App.obj_Chuck.ref_y + App.obj_Pdt.TopEdge + (App.obj_Pdt.RowNumber - 1) * App.obj_Pdt.RowSpace/2;
                _station.operation.ZUv2xy = Pos_Uv2Xy[2]; //App.obj_Pdt.ZFocus;
                HTuple uvHxy  = new HTuple();
                bool   status = await Task.Run(() =>
                {
                    return(_station.operation.calibUV2XY
                           (
                               _station.SelectedIndex,
                               ref uvHxy,
                               this.aoiModels,
                               xyRange, 20
                           ));
                });

                if (!status)
                {
                    HTUi.PopError("2D相机uvHxy标定失败!");
                    return;
                }
                for (int i = 0; i < dgvUVXY2D.RowCount; i++)
                {
                    dgvUVXY2D.Rows[i].Cells[0].Value = uvHxy[i * 3].D;
                    dgvUVXY2D.Rows[i].Cells[1].Value = uvHxy[i * 3 + 1].D;
                    dgvUVXY2D.Rows[i].Cells[2].Value = uvHxy[i * 3 + 2].D;
                }
                HTUi.TipHint("2D相机uvHxy标定成功!");
                HTLog.Info("2D相机uvHxy标定成功!");
            }
            catch (Exception ex)
            {
                HTUi.PopError("2D相机uvHxy标定失败:" + ex.Message);
                btnSnap.Enabled = true;
            }
        }
예제 #4
0
 /// <summary>
 /// UV2XY标定时加载光源、点位和视觉参数
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void btnLoadPara_Click(object sender, EventArgs e)
 {
     try
     {
         //App.obj_light.FlashMultiLight(LightUseFor.ScanPoint1st);
         HTUi.TipHint("参数加载成功");
     }
     catch (Exception exp)
     {
         HTUi.PopError(exp.ToString());
         return;
     }
 }
예제 #5
0
        private void btnCreateCalibModel2D_Click(object sender, EventArgs e)
        {
            try
            {
                if (modelForm == null || modelForm.IsDisposed)
                {
                    modelForm = new Form();
                    if (this.mTmpFrm != null && !this.mTmpFrm.IsDisposed)
                    {
                        this.mTmpFrm.Dispose();
                    }
                    this.mTmpFrm = new MainTemplateForm(ToolKits.TemplateEdit.MainTemplateForm.TemplateScence.Match,
                                                        this.htWindowCalibration, new MainTemplateForm.TemplateParam());
                    modelForm.Controls.Clear();
                    this.modelForm.Controls.Add(this.mTmpFrm);
                    this.mTmpFrm.Dock = DockStyle.Fill;
                    modelForm.Size    = new Size(300, 450);
                    modelForm.TopMost = true;
                    modelForm.Show();
                    int SH = Screen.PrimaryScreen.Bounds.Height;
                    int SW = Screen.PrimaryScreen.Bounds.Width;
                    modelForm.Location = new Point(SW - modelForm.Size.Width, SH / 8);

                    Task.Run(() =>
                    {
                        while (!mTmpFrm.WorkOver)
                        {
                            Thread.Sleep(200);
                        }
                        HTUi.TipHint("创建标定模板完成!");
                        HTLog.Info("创建标定模板完成!");
                        modelForm.Close();
                    });
                }
                else
                {
                    modelForm.Activate();
                }
            }
            catch (Exception ex)
            {
                HTUi.PopError("创建标定模板失败:" + ex.Message);
                btnSnap.Enabled = true;
            }
        }
예제 #6
0
        /// <summary>
        /// 重命名产品
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnRename_Click(object sender, EventArgs e)
        {
            string souce = (string)lbxProductCategory.SelectedValue;

            if (souce == (string)JFHubCenter.Instance.SystemCfg.GetItemValue("CurrentID"))
            {
                HTUi.PopError("当前产品名称不可修改");
                return;
            }

            String newname = "";

            if (!MSG.Inputbox("new", "rename", out newname))
            {
                return;
            }

            if (newname == string.Empty)
            {
                HTUi.PopWarn("命名错误,名字不能为空");
                return;
            }
            var pdtlist = GetProductList();

            foreach (var pdt in pdtlist)
            {
                if (pdt == newname)
                {
                    HTUi.PopWarn("命名冲突,当前产品已存在");
                    return;
                }
            }

            //重新命名Recipe manager中recipe ID
            JFDLAFProductRecipe jFDLAFProductRecipe = JFHubCenter.Instance.RecipeManager.GetRecipe("Product", (string)souce) as JFDLAFProductRecipe;

            if (jFDLAFProductRecipe == null)
            {
                HTUi.PopWarn("Recipe Manager中不存在recipe:" + souce);
                return;
            }
            jFDLAFProductRecipe.Categoty = "Product";
            jFDLAFProductRecipe.ID       = newname;

            JFDLAFBoxRecipe jFDLAFBoxRecipe = JFHubCenter.Instance.RecipeManager.GetRecipe("Box", (string)souce) as JFDLAFBoxRecipe;

            if (jFDLAFBoxRecipe == null)
            {
                HTUi.PopWarn("Recipe Manager中不存在recipe:" + souce);
                return;
            }
            jFDLAFBoxRecipe.Categoty = "Box";
            jFDLAFBoxRecipe.ID       = newname;

            JFHubCenter.Instance.RecipeManager.AddRecipe(jFDLAFProductRecipe.Categoty, jFDLAFProductRecipe.ID, jFDLAFProductRecipe as IJFRecipe);
            JFHubCenter.Instance.RecipeManager.AddRecipe(jFDLAFBoxRecipe.Categoty, jFDLAFBoxRecipe.ID, jFDLAFBoxRecipe as IJFRecipe);
            JFHubCenter.Instance.RecipeManager.RemoveRecipe("Product", souce);
            JFHubCenter.Instance.RecipeManager.RemoveRecipe("Box", souce);
            JFHubCenter.Instance.RecipeManager.Save();

            ChangeProdcutName(newname, souce);
            HTUi.TipHint("重命名成功!");
            lbxProductCategory.DataSource = GetProductList();
            return;
        }
예제 #7
0
        /// <summary>
        /// 创建产品
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCreateProduct_Click(object sender, EventArgs e)
        {
            String newfile = "";

            if (!MSG.Inputbox("Copy&New", "请输入新的产品名", out newfile))
            {
                return;
            }

            if (newfile == string.Empty)
            {
                HTUi.PopWarn("命名错误,名字不能为空");
                return;
            }
            //新增Product Recipe到recipe Dictionary中
            JFDLAFProductRecipe jFDLAFProductRecipe = new JFDLAFProductRecipe();

            if (JFHubCenter.Instance.RecipeManager.GetRecipe("Product", (string)JFHubCenter.Instance.SystemCfg.GetItemValue("CurrentID")) != null)
            {
                jFDLAFProductRecipe = ((JFDLAFProductRecipe)JFHubCenter.Instance.RecipeManager.GetRecipe("Product", (string)JFHubCenter.Instance.SystemCfg.GetItemValue("CurrentID"))).Clone();
            }

            jFDLAFProductRecipe.ID       = newfile;
            jFDLAFProductRecipe.Categoty = "Product";
            jFDLAFProductRecipe.SaveParamsToCfg();
            JFHubCenter.Instance.RecipeManager.AddRecipe(jFDLAFProductRecipe.Categoty, jFDLAFProductRecipe.ID, jFDLAFProductRecipe as IJFRecipe);


            ////新增Box Recipe到recipe Dictionary中
            JFDLAFBoxRecipe jFDLAFBoxRecipe = new JFDLAFBoxRecipe();

            if (JFHubCenter.Instance.RecipeManager.GetRecipe("Box", (string)JFHubCenter.Instance.SystemCfg.GetItemValue("CurrentID")) != null)
            {
                jFDLAFBoxRecipe = ((JFDLAFBoxRecipe)JFHubCenter.Instance.RecipeManager.GetRecipe("Box", (string)JFHubCenter.Instance.SystemCfg.GetItemValue("CurrentID"))).Clone();
            }
            jFDLAFBoxRecipe.MagezineBox = jFDLAFProductRecipe.MagezineBox;
            jFDLAFBoxRecipe.MgzIdx      = jFDLAFProductRecipe.MgzIdx;
            jFDLAFBoxRecipe.ID          = newfile;
            jFDLAFBoxRecipe.Categoty    = "Box";
            jFDLAFBoxRecipe.SaveParamsToCfg();
            JFHubCenter.Instance.RecipeManager.AddRecipe(jFDLAFBoxRecipe.Categoty, jFDLAFBoxRecipe.ID, jFDLAFBoxRecipe as IJFRecipe);

            //此处后面需要保存
            JFHubCenter.Instance.RecipeManager.Save();

            var pdtlist = GetProductList();

            foreach (var pdt in pdtlist)
            {
                if (pdt == newfile)
                {
                    HTUi.PopWarn("无法新建,当前产品已存在");
                    return;
                }
            }
            string souce = (string)JFHubCenter.Instance.SystemCfg.GetItemValue("CurrentID");

            if (!CreateProduct(souce, newfile))
            {
                HTUi.PopWarn("产品创建失败!");
                return;
            }
            HTLog.Info("产品创建成功!");
            HTUi.TipHint("产品创建成功!");
            lbxProductCategory.DataSource = GetProductList();
            return;
        }
예제 #8
0
        private async void btnSaveCalibModel2D_Click(object sender, EventArgs e)
        {
            if (!this.mTmpFrm.tmpResult.createTmpOK)
            {
                HTUi.PopError("创建标定模板失败!");
                return;
            }
            Form_Wait.ShowForm();
            bool result = await Task.Run(() =>
            {
                try
                {
                    this.aoiModels = new Model();
                    this.aoiModels.Dispose();
                    this.aoiModels.showContour = this.mTmpFrm.tmpResult.showContour.CopyObj(1, -1);
                    this.aoiModels.defRows     = this.mTmpFrm.tmpResult.defRows;
                    this.aoiModels.defCols     = this.mTmpFrm.tmpResult.defCols;
                    this.aoiModels.modelType   = this.mTmpFrm.tmpResult.modelType;
                    this.aoiModels.modelID     = Vision.CopyModel(this.mTmpFrm.tmpResult.modelID, this.mTmpFrm.tmpResult.modelType);
                    this.aoiModels.scoreThresh = this.mTmpFrm.mte_TmpPrmValues.Score;
                    this.aoiModels.angleStart  = this.mTmpFrm.mte_TmpPrmValues.AngleStart;
                    this.aoiModels.angleExtent = this.mTmpFrm.mte_TmpPrmValues.AngleExtent;
                    //保存至硬盘
                    string folderPath             = _station.SystemUV2XYDir + "\\Camera_" + _station.SelectedIndex;
                    _station.CalibrUV2XYModelPath = folderPath;
                    if (!this.aoiModels.WriteModel(folderPath))
                    {
                        HTLog.Error("保存标定模板失败!");
                        HTUi.PopError("保存标定模板失败!");
                        return(false);
                    }

                    string errMsg = "";
                    Pos_Uv2Xy     = new HTuple();
                    double xUV2xy = 0, yUV2xy = 0, zUV2xy = 0;

                    if (!_station.GetAxisPosition(_station.AxisXYZ[0], out xUV2xy, out errMsg))
                    {
                        HTLog.Error(errMsg + ":保存获取X轴反馈坐标失败!");
                        HTUi.PopError(errMsg + ":保存获取X轴反馈坐标失败!");
                        return(false);
                    }

                    if (!_station.GetAxisPosition(_station.AxisXYZ[1], out yUV2xy, out errMsg))
                    {
                        HTLog.Error(errMsg + ":保存获取Y轴反馈坐标失败!");
                        HTUi.PopError(errMsg + ":保存获取Y轴反馈坐标失败!");
                        return(false);
                    }

                    if (!_station.GetAxisPosition(_station.AxisXYZ[2], out zUV2xy, out errMsg))
                    {
                        HTLog.Error(errMsg + ":保存获取Z轴反馈坐标失败!");
                        HTUi.PopError(errMsg + ":保存获取Z轴反馈坐标失败!");
                        return(false);
                    }

                    _station.operation.YUv2xy = yUV2xy;
                    _station.operation.XUv2xy = xUV2xy;
                    _station.operation.ZUv2xy = zUV2xy;

                    Pos_Uv2Xy.Append(_station.operation.XUv2xy);
                    Pos_Uv2Xy.Append(_station.operation.YUv2xy);
                    Pos_Uv2Xy.Append(_station.operation.ZUv2xy);
                    HOperatorSet.WriteTuple(Pos_Uv2Xy, folderPath + "\\Pos_Uv2Xy.tup");
                    HTUi.TipHint("保存标定模板成功!");
                    HTLog.Info("保存标定模板成功!");
                    return(true);
                }
                catch (Exception ex)
                {
                    HTLog.Error(ex.ToString());
                    HTUi.PopError(ex.ToString());

                    return(false);
                }
            });

            Form_Wait.CloseForm();
            if (!result)
            {
                HTLog.Error("保存标定模板失败!");
                HTUi.PopError("保存标定模板失败!");
                return;
            }
            HTUi.TipHint("保存标定模板成功!");
            HTLog.Info("保存标定模板成功!");
        }