예제 #1
0
        /// <summary>
        /// Load Camera theo Index
        /// </summary>
        /// <param name="CameraIndex"></param>
        /// <returns></returns>
        public bool Load(int CameraIndex)
        {
            currentCameraIndex = CameraIndex;
            string[] writeStrings = new string[10];
            string   urlTool      = Helper.CreatDirectionCameraVpro(CameraIndex);

            if (!Directory.Exists(urlTool))
            {
                CopyTemplateCamera(urlTool);
            }
            try
            {
                CogAcqFifoEdit.Subject = (CogAcqFifoTool)Cognex.VisionPro.CogSerializer.LoadObjectFromFile(urlTool + "\\CogAcqFifoEdit.vpp");
                CogCalibGrid.Subject   = (CogCalibCheckerboardTool)Cognex.VisionPro.CogSerializer.LoadObjectFromFile(urlTool + "\\CogCalibGrid.vpp");
                CogPMAlign.Subject     = (CogPMAlignTool)Cognex.VisionPro.CogSerializer.LoadObjectFromFile(urlTool + "\\CogPMAlign.vpp");
                RTCAutoCalibTool.Load(CameraIndex);
                currentCameraIndex = CameraIndex;
                //
                CogDisplayOut.BackColor           = System.Drawing.ColorTranslator.FromHtml("#FF394261");
                CogDisplayOut.HorizontalScrollBar = false;
                CogDisplayOut.VerticalScrollBar   = false;
                DisplayGraphic();
                Helper.WriteLogString($"Load Camera {CameraIndex}");
                Console.WriteLine($"Load Camera {CameraIndex}");
            }
            catch
            {
                Console.WriteLine($"Fail Load Camera {CameraIndex}");
                return(false);
            }
            return(true);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public PointWithTheta CalculateAlignRB()
        {
            PointWithTheta outputAlign = null;

            CogAcqFifoEdit.Subject.Run();
            // Chụp ảnh, gửi ảnh sang Tool Calib
            if (CogAcqFifoEdit.Subject.RunStatus.Result != CogToolResultConstants.Accept)
            {
                MessageBox.Show(CogAcqFifoEdit.Subject.RunStatus.Exception.Message);
                return(null);
            }
            else
            {
                CogCalibGrid.Subject.InputImage = CogAcqFifoEdit.Subject.OutputImage;
            }
            CogCalibGrid.Subject.Run();
            // Calib xong gửi ảnh qua Tool Align
            if (CogCalibGrid.Subject.RunStatus.Result != CogToolResultConstants.Accept)
            {
                MessageBox.Show(CogCalibGrid.Subject.RunStatus.Exception.Message);
                return(null);
            }
            else
            {
                CogPMAlign.Subject.InputImage = CogCalibGrid.Subject.OutputImage;
            }
            CogPMAlign.Subject.Run();
            // Chạy xong Tool Align trả tọa độ + góc ra đầu ra
            if (CogPMAlign.Subject.RunStatus.Result != CogToolResultConstants.Accept)
            {
                MessageBox.Show(CogPMAlign.Subject.RunStatus.Exception.Message);
                return(null);
            }
            else
            {
                DisplayGraphic();
                try
                {
                    float tempX     = (float)CogPMAlign.Subject.Results[0].GetPose().TranslationX;
                    float tempY     = (float)CogPMAlign.Subject.Results[0].GetPose().TranslationY;
                    float tempTheta = (float)CogPMAlign.Subject.Results[0].GetPose().Rotation;
                    // Trả hiển thị ra CogDisplay
                    //CogDisplayOut.Image = CogAcqFifoEdit.Subject.OutputImage;
                    //CogDisplayOut.StaticGraphics.Add(CogPMAlign.Subject.Results[0].CreateResultGraphics(CogPMAlignResultGraphicConstants.CoordinateAxes), "");
                    outputAlign = new PointWithTheta(tempX, tempY, tempTheta);
                }
                catch
                {
                    outputAlign = null;
                }
            }
            if (outputAlign != null)
            {
                return(RTCAutoCalibTool.Trans(outputAlign));
            }
            return(null);
        }
예제 #3
0
        /// <summary>
        /// Lưu Tool Camera theo Index
        /// </summary>
        /// <param name="CameraIndex"></param>
        /// <returns></returns>
        public bool Save(int CameraIndex)
        {
            string[] writeStrings = new string[10];
            string   urlTool      = Helper.CreatDirectionCameraVpro(CameraIndex);

            if (!Directory.Exists(urlTool))
            {
                Directory.CreateDirectory(urlTool);
            }
            try
            {
                //
                Cognex.VisionPro.CogSerializer.SaveObjectToFile(CogAcqFifoEdit.Subject as CogAcqFifoTool, urlTool + "\\CogAcqFifoEdit.vpp");
                Cognex.VisionPro.CogSerializer.SaveObjectToFile(CogCalibGrid.Subject as CogCalibCheckerboardTool, urlTool + "\\CogCalibGrid.vpp");
                Cognex.VisionPro.CogSerializer.SaveObjectToFile(CogPMAlign.Subject as CogPMAlignTool, urlTool + "\\CogPMAlign.vpp");
                //
                RTCAutoCalibTool.Save(CameraIndex);
            }
            catch
            {
                return(false);
            }
            return(true);
        }
예제 #4
0
        /// <summary>
        /// Xử lý Command nhận vào từ cổng TCP
        /// </summary>
        /// <param name="cmd"></param>
        public string Command(string cmd)
        {
            Console.WriteLine(cmd);
            switch (Helper.GetCommandId(cmd))
            {
            case "HEB":
                string result = CheckConditionStartAutoCalib();
                if (result == "OK")
                {
                    RTCAutoCalibTool.ResetReceiveData();
                    AutoCalibRunning = true;
                }
                else
                {
                    MessageBox.Show("Không đủ điều kiện chạy!\r\n" + result);
                    return("HE,0");
                }
                break;

            case "HE":
                PointWithTheta tempCamPoint   = GetNormalAlign();
                PointWithTheta tempRobotPoint = Helper.GetRobotPointFromCmd(cmd);
                if (tempCamPoint != null)
                {
                    RTCAutoCalibTool.AddPoint(tempCamPoint, tempRobotPoint);
                }
                else
                {
                    return("HE,0");
                }
                break;

            case "HEE":
                if (RTCAutoCalibTool.NumberPoints < 11)
                {
                    MessageBox.Show("Not Enough Calib Point! N = " + RTCAutoCalibTool.NumberPoints.ToString());
                    return("HE,0");
                }
                if (RTCAutoCalibTool.Calculate())
                {
                    MessageBox.Show("AutoCalib Done!");
                    AutoCalibRunning = false;
                }
                else
                {
                    MessageBox.Show("AutoCalib Fail!");
                    AutoCalibRunning = false;
                    return("HE,0");
                }
                break;

            case "TT":
                var tempPointTT = GetNormalAlign();
                if (tempPointTT != null)
                {
                    RTCAutoCalibTool.CalTTTransMatrix(cmd, tempPointTT);
                }
                return("TT,1");

            case "XT":
                string         tempMessage;
                PointWithTheta tempPoint = CalculateAlignRB();
                if (tempPoint != null)
                {
                    tempMessage = Helper.CreatXTMessage(tempPoint);
                }
                else
                {
                    return("XT,0");
                }
                return(tempMessage);

            default:
                break;
            }
            return("HE,1");
        }