Esempio n. 1
0
        private void btn_extract_Click(object sender, EventArgs e)
        {
            if (hDisplay1.GetSearchRegions().Count == 0)
            {
                MessageBox.Show("请先添加搜索区域");
                return;
            }
            HTuple  hv_Number;
            HObject _roi              = hDisplay1.GetSearchRegions().ElementAt(0);
            HObject _region           = new HObject();
            HObject _imagereduced     = new HObject();
            HObject ho_ObjectSelected = new HObject();

            HOperatorSet.ReduceDomain(m_image, _roi, out _imagereduced);
            HOperatorSet.Threshold(_imagereduced, out _region, m_OcrParam.GrayMin, m_OcrParam.GrayMax);
            HOperatorSet.Connection(_region, out _region);
            HOperatorSet.SelectShape(_region, out _region, "area", "and", m_OcrParam.AreaMin, m_OcrParam.AreaMax);

            HOperatorSet.CountObj(_region, out hv_Number);
            HTuple         hv_Index     = new HTuple();
            List <RegionX> _listregionx = new List <RegionX>();

            for (hv_Index = 1; hv_Index.Continue(hv_Number, 1); hv_Index = hv_Index.TupleAdd(1))
            {
                ho_ObjectSelected.Dispose();
                HOperatorSet.SelectObj(_region, out ho_ObjectSelected, hv_Index);
                RegionX _hregion = new RegionX(ho_ObjectSelected.CopyObj(1, -1), "green");
                _listregionx.Add(_hregion);
            }
            DelegateUIControl.GetInstance().UpdateHDisplay("FormSetHDisplay", m_image, _listregionx, null);
        }
        private async void button1_Click_1(object sender, EventArgs e)
        {
            HObject _image = HardWareManager.Instance.Cmaera.SnapShot();

            VisionManager.Instance.ShapeModle.BackImage = _image.Clone();
            //DelegateControls.Instance.
            ModleFindResult result = VisionManager.Instance.ShapeModle.FindSimple();

            // return;
            if (result != null)
            {
                HTuple hommate2d;
                HOperatorSet.VectorAngleToRigid(0, 0, 0, result.Row, result.Column, result.Angle, out hommate2d);
                HOperatorSet.AffineTransContourXld(result.ModleRegion, out HObject hObject, hommate2d);
                RegionX regionX = new RegionX(hObject, "green");
                DelegateControls.Instance.DelegateHdisplay("FormMain_hDisplay1", _image, new List <HalWindow.RegionX>()
                {
                    regionX
                });
                HTuple calibratedata = VisionManager.Instance.Calibrate.CalibrateData;

                HTuple _x = new HTuple();
                HTuple _y = new HTuple();
                HOperatorSet.AffineTransPoint2d(calibratedata, result.Row, result.Column, out HTuple x, out HTuple y);
                HOperatorSet.AffineTransPoint2d(calibratedata, 1024, 1536, out _x, out _y);
                double   ox       = -x + _x + VisionManager.Instance.Calibrate.ToolOffsetX;
                double   oy       = -y + _y + VisionManager.Instance.Calibrate.ToolOffsetY;
                RobotPos robotPos = await HardWareManager.Instance.YaskawaRobot.GetRobotCPoint();

                double x1 = ox + robotPos.Y;
                double x2 = oy + robotPos.Z;
            }
        }
        private void btn_getPixelPoint_Click(object sender, EventArgs e)
        {
            DataGridViewRow dataGridViewRow = null;

            if (dGV_pixelPoint.SelectedRows.Count == 0)
            {
                MessageBox.Show("请选择一行来更新点位数据");
                return;
            }
            dataGridViewRow = dGV_pixelPoint.SelectedRows[0];


            Bitmap _image = camClient.GrabOneFrame("AWG");

            visionFun.Bitmap2HObjectBpp32(_image, out HObject _himage);


            GetAwgPosition(_himage, out HTuple x, out HTuple y, out HObject corss);
            dataGridViewRow.Cells[1].Value = x.D;
            dataGridViewRow.Cells[2].Value = y.D;
            hDisplay1.HImageX = _himage;
            RegionX crossr = new RegionX(corss, "green");

            hDisplay1.HRegionXList = new List <RegionX>()
            {
                crossr
            };
        }
Esempio n. 4
0
        public int parse(string strMid, string strMif)
        {
            m_listRegion.Clear();

            int nRegions = 0;

            RegionX      region  = null;
            StringReader srMid   = new StringReader(strMid);
            string       strLine = srMid.ReadLine();

            while (strLine != null)
            {
                ++nRegions;
                region  = new RegionX();
                strLine = strLine.Replace("\"", string.Empty);
                region.m_straAttributes = strLine.Split(',');
                m_listRegion.Add(region);

                strLine = srMid.ReadLine();
            }
            srMid.Close();

            int nItem = -1, nItems = 0, nRegion = -1;

            System.IO.StringReader srMif = new StringReader(strMif);
            strLine = srMif.ReadLine();
            while (strLine != null)
            {
                if (nItems > 0)
                {
                    if (nItem == -1)
                    {
                        ++nRegion;
                        region             = m_listRegion[nRegion];
                        region.m_listPoint = new List <System.Drawing.Point>(nItems);
                    }

                    if (++nItem < nItems)
                    {
                        region.m_listPoint.Add(UTM.getCoordinate(m_nUTMZoneNo, strLine));
                    }
                    else
                    {
                        nItem  = -1;
                        nItems = 0;
                    }
                }
                else if (strLine.Length >= 6 && strLine.Substring(0, 6) == "Region")
                {
                    nItems = int.Parse(srMif.ReadLine());
                }

                strLine = srMif.ReadLine();
            }
            srMif.Close();

            return(nRegions);
        }
Esempio n. 5
0
        private async Task <RobotPos> GetHolePoint(HObject image)
        {
            try
            {
                DelegateControls.Instance.DelegateHdisplay("FormMain_hDisplay1", image, null);
                HOperatorSet.Threshold(image, out HObject region1, 0, 100);
                HOperatorSet.Connection(region1, out HObject connectionregion);
                HOperatorSet.OpeningCircle(connectionregion, out HObject regionopening, 7.5);
                HOperatorSet.SelectShape(regionopening, out HObject selectedregion, "area", "and", 9000, 79999);

                HOperatorSet.SelectShape(selectedregion, out selectedregion, "circularity", "and", 0.4, 1);
                HOperatorSet.FillUp(selectedregion, out HObject regionfillup);
                HOperatorSet.Union1(regionfillup, out HObject regionunion);
                HOperatorSet.ReduceDomain(image, regionunion, out HObject imagereduced);
                HOperatorSet.MinMaxGray(regionunion, imagereduced, 0, out HTuple min, out HTuple max, out HTuple range);//20191128

                HOperatorSet.Threshold(imagereduced, out HObject region2, 0, min + 5);
                HOperatorSet.ErosionCircle(region2, out HObject erosionregion, 2.5);
                HOperatorSet.Connection(erosionregion, out HObject connectionregion2);
                HOperatorSet.CountObj(connectionregion2, out HTuple number);
                HOperatorSet.SelectShape(connectionregion2, out HObject selectregiion2, "area", "and", 2000, 6500);

                HOperatorSet.CountObj(selectregiion2, out number);
                HOperatorSet.SelectShape(selectregiion2, out HObject selectregiion3, "circularity", "and", 0.3, 1);
                HOperatorSet.SelectShape(selectregiion3, out HObject selectregiion4, "outer_radius", "and", 25, 50);

                HOperatorSet.AreaCenter(selectregiion4, out HTuple area, out HTuple r, out HTuple c);
                HOperatorSet.ShapeTrans(selectregiion4, out HObject regiiontrans, "outer_circle");
                RegionX regionX = new RegionX(regiiontrans, "green");
                DelegateControls.Instance.DelegateHdisplay("FormMain_hDisplay1", image, new List <HalWindow.RegionX>()
                {
                    regionX
                });

                HTuple _x = new HTuple();
                HTuple _y = new HTuple();
                VisionManager.Instance.Calibrate.GetRobotpoint(r, c, ref _x, ref _y);
                lengthY = _x + Param.Instance.HMakeUp;
                lengthX = _y + Param.Instance.VMakeUp;
                RobotPos robotPos = await HardWareManager.Instance.YaskawaRobot.GetRobotCPoint();

                // RobotPos robotPos = new RobotPos();
                robotPos.Y += _x;
                robotPos.Z += _y;
                return(robotPos);
            }
            catch (Exception ex)
            {
                HOperatorSet.WriteImage(image, "bmp", 0, AppDomain.CurrentDomain.BaseDirectory + "Images\\Ng.bmp");
                throw new Exception("GetHolePoint exception:第二次取像未找到螺丝孔位置");
            }
        }
 private void UpdateDisplay(HDisplay _hDisplay, HObject image, HObject region)
 {
     if (_hDisplay.InvokeRequired)
     {
         _hDisplay.BeginInvoke(new Action(() =>
         {
             _hDisplay.HImageX      = image;
             RegionX crossr         = new RegionX(region, "green");
             _hDisplay.HRegionXList = new List <RegionX>()
             {
                 crossr
             };
         }));
     }
     else
     {
         _hDisplay.HImageX = image;
         RegionX crossr = new RegionX(region, "green");
         _hDisplay.HRegionXList = new List <RegionX>()
         {
             crossr
         };
     }
 }
Esempio n. 7
0
        private void btn_TrainOcr_Click(object sender, EventArgs e)
        {
            if (hDisplay1.GetSearchRegions().Count == 0)
            {
                MessageBox.Show("请先添加搜索区域");
                return;
            }
            if (string.IsNullOrEmpty(txt_CharacterTrained.Text))
            {
                MessageBox.Show("请先填写要训练的字符");
                return;
            }
            HTuple  hv_Number;
            HObject _roi              = hDisplay1.GetSearchRegions().ElementAt(0);
            HObject _region           = new HObject();
            HObject _imagereduced     = new HObject();
            HObject ho_ObjectSelected = new HObject();

            HOperatorSet.ReduceDomain(m_image, _roi, out _imagereduced);
            HOperatorSet.Threshold(_imagereduced, out _region, m_OcrParam.GrayMin, m_OcrParam.GrayMax);
            HOperatorSet.Connection(_region, out _region);
            HOperatorSet.SelectShape(_region, out _region, "area", "and", m_OcrParam.AreaMin, m_OcrParam.AreaMax);
            if (cklb_SortRegionModle.GetItemChecked(0))
            {
                HOperatorSet.SortRegion(_region, out _region, "character", "true", "row");
            }
            else
            {
                HOperatorSet.SortRegion(_region, out _region, "character", "true", "column");
            }
            HOperatorSet.CountObj(_region, out hv_Number);

            if (hv_Number.I == 0)
            {
                MessageBox.Show("分割字符为空");
                return;
            }
            string[] _characterTrained = new string[] { };
            _characterTrained = txt_CharacterTrained.Text.Split(',');
            if (_characterTrained.Length != hv_Number.I)
            {
                MessageBox.Show("字符区域与字符个数不相等");
                return;
            }

            HTuple         hv_Index     = new HTuple();
            List <RegionX> _listregionx = new List <RegionX>();

            for (hv_Index = 1; hv_Index.Continue(hv_Number, 1); hv_Index = hv_Index.TupleAdd(1))
            {
                ho_ObjectSelected.Dispose();
                HOperatorSet.SelectObj(_region, out ho_ObjectSelected, hv_Index);
                RegionX _hregion = new RegionX(ho_ObjectSelected.CopyObj(1, -1), "green");
                _listregionx.Add(_hregion);
            }
            string path             = string.Empty;
            string Foldername       = string.Empty;
            string trffilepath      = string.Empty;
            FolderBrowserDialog fbd = new FolderBrowserDialog();

            fbd.ShowNewFolderButton = true;
            if (fbd.ShowDialog() == DialogResult.OK)
            {
                path = fbd.SelectedPath;
                if (!Directory.Exists(path))
                {
                    MessageBox.Show($"不存在 '{path}' 路径!");
                    return;
                }
                string[] _f = path.Split('\\');
                Foldername  = _f[_f.Length - 1];
                trffilepath = path + "\\" + Foldername + ".trf";
            }
            else
            {
                return;
            }
            HObject _characterRegion = new HObject();

            HOperatorSet.GenEmptyObj(out _characterRegion);
            for (int i = 0; i < hv_Number.I; i++)
            {
                HOperatorSet.AppendOcrTrainf(_region[i + 1], m_image, _characterTrained[i], trffilepath);
            }

            HTuple _ocrhandle = new HTuple();
            HTuple error      = new HTuple();
            HTuple errorlog   = new HTuple();

            HOperatorSet.CreateOcrClassMlp(m_TrainParam.CharacterWidth, m_TrainParam.CharacterHeiht, m_TrainParam.ZoomModle, "default", _characterTrained,
                                           80, "none", 10, 42, out _ocrhandle);
            HOperatorSet.TrainfOcrClassMlp(_ocrhandle, trffilepath, 200, 1, 0.01, out error, out errorlog);
            HOperatorSet.WriteOcrTrainf(_region, m_image, _characterTrained, trffilepath);
            HOperatorSet.WriteOcrClassMlp(_ocrhandle, path + "\\" + Foldername);
            DelegateUIControl.GetInstance().UpdateHDisplay("FormSetHDisplay", m_image, _listregionx, null);
        }
Esempio n. 8
0
        private void btn_ReadCharacter_Click(object sender, EventArgs e)
        {
            if (m_ocrhandle == null)
            {
                MessageBox.Show("请先读取字符库");
                return;
            }
            if (hDisplay1.GetSearchRegions().Count == 0)
            {
                MessageBox.Show("请先添加搜索区域");
                return;
            }
            HTuple  hv_Number;
            HObject _roi              = hDisplay1.GetSearchRegions().ElementAt(0);
            HObject _region           = new HObject();
            HObject _imagereduced     = new HObject();
            HObject ho_ObjectSelected = new HObject();

            HOperatorSet.ReduceDomain(m_image, _roi, out _imagereduced);
            HOperatorSet.Threshold(_imagereduced, out _region, m_OcrParam.GrayMin, m_OcrParam.GrayMax);
            HOperatorSet.Connection(_region, out _region);
            HOperatorSet.SelectShape(_region, out _region, "area", "and", m_OcrParam.AreaMin, m_OcrParam.AreaMax);

            HOperatorSet.CountObj(_region, out hv_Number);
            HTuple                 hv_Index     = new HTuple();
            List <RegionX>         _listregionx = new List <RegionX>();
            List <ViewROI.StringX> _liststringx = new List <ViewROI.StringX>();

            for (hv_Index = 1; hv_Index.Continue(hv_Number, 1); hv_Index = hv_Index.TupleAdd(1))
            {
                ho_ObjectSelected.Dispose();
                HOperatorSet.SelectObj(_region, out ho_ObjectSelected, hv_Index);
                RegionX _hregion = new RegionX(ho_ObjectSelected.CopyObj(1, -1), "green");
                _listregionx.Add(_hregion);
            }



            HTuple _characters = new HTuple();
            HTuple _confidence = new HTuple();

            // DelegateUIControl.GetInstance().UpdateHDisplay("FormSetHDisplay", m_image, _listregionx, null);
            HOperatorSet.DoOcrMultiClassMlp(_region, m_image, m_ocrhandle, out _characters, out _confidence);


            HTuple _row    = new HTuple();
            HTuple _column = new HTuple();
            HTuple _area   = new HTuple();

            for (hv_Index = 1; hv_Index.Continue(hv_Number, 1); hv_Index = hv_Index.TupleAdd(1))
            {
                ho_ObjectSelected.Dispose();
                HOperatorSet.SelectObj(_region, out ho_ObjectSelected, hv_Index);
                HOperatorSet.AreaCenter(ho_ObjectSelected, out _area, out _row, out _column);
                ViewROI.StringX sx = new ViewROI.StringX(19, true, false);
                sx.SetString(_characters[hv_Index - 1], (int)_row.D + 50, (int)_column.D, Color.Green);
                _liststringx.Add(sx);
            }
            DelegateUIControl.GetInstance().UpdateHDisplay("FormSetHDisplay", m_image, _listregionx, _liststringx);

            List <OcrResult> ocrresultlist = new List <OcrResult>();

            for (int i = 0; i < _characters.TupleLength(); i++)
            {
                OcrResult _ocrresult = new OcrResult();
                _ocrresult.character = _characters[i];
                _ocrresult.scale     = _confidence[i].D.ToString("F4");
                ocrresultlist.Add(_ocrresult);
            }
            dGV_CharacterResult.DataSource = ocrresultlist;
        }
Esempio n. 9
0
File: useful.cs Progetto: zadark/par
    private Packet InImprovedInstantMessageHandler(Packet packet, IPEndPoint sim)
    {
        if (RegionHandle != 0)
        {
            SoundTriggerPacket sound = new SoundTriggerPacket();
            sound.SoundData.SoundID  = new UUID("4c366008-65da-2e84-9b74-f58a392b94c6");
            sound.SoundData.OwnerID  = frame.AgentID;
            sound.SoundData.ObjectID = frame.AgentID;
            sound.SoundData.ParentID = UUID.Zero;
            sound.SoundData.Handle   = RegionHandle;
            sound.SoundData.Position = CameraCenter;
            sound.SoundData.Gain     = 0.5f;
            sound.Header.Reliable    = false;
            if (!File.Exists("mutesound.on"))
            {
                proxy.InjectPacket(sound, Direction.Incoming);
            }
        }

        ImprovedInstantMessagePacket im = (ImprovedInstantMessagePacket)packet;

        //block repeated crap



        if (im.MessageBlock.Dialog == (byte)InstantMessageDialog.StartTyping)
        {
            if (PeopleWhoIMedMe.Contains(im.AgentData.AgentID) == false)
            {
                PeopleWhoIMedMe.Add(im.AgentData.AgentID);
                ImprovedInstantMessagePacket im2 = new ImprovedInstantMessagePacket();
                im2.AgentData                   = new ImprovedInstantMessagePacket.AgentDataBlock();
                im2.AgentData.AgentID           = im.AgentData.AgentID;
                im2.AgentData.SessionID         = im.AgentData.SessionID;
                im2.MessageBlock                = new ImprovedInstantMessagePacket.MessageBlockBlock();
                im2.MessageBlock.FromGroup      = im.MessageBlock.FromGroup;
                im2.MessageBlock.ToAgentID      = im.MessageBlock.ToAgentID;
                im2.MessageBlock.ParentEstateID = im.MessageBlock.ParentEstateID;
                im2.MessageBlock.RegionID       = im.MessageBlock.RegionID;
                im2.MessageBlock.Position       = im.MessageBlock.Position;
                im2.MessageBlock.Offline        = im.MessageBlock.Offline;
                im2.MessageBlock.Dialog         = 0;
                im2.MessageBlock.ID             = im.MessageBlock.ID;
                im2.MessageBlock.Timestamp      = im.MessageBlock.Timestamp;
                im2.MessageBlock.FromAgentName  = im.MessageBlock.FromAgentName;
                im2.MessageBlock.Message        = Utils.StringToBytes("/me is typing a message...");
                im2.MessageBlock.BinaryBucket   = im.MessageBlock.BinaryBucket;
                proxy.InjectPacket(im2, Direction.Incoming);
            }
        }
        else if (im.MessageBlock.Dialog == 22) // teleport lure
        {
            string[] bbfields = Utils.BytesToString(im.MessageBlock.BinaryBucket).Split('|');
            if (bbfields.Length < 5)
            {
                return(packet);
            }
            ushort MapX;
            ushort MapY;
            double RegionX;
            double RegionY;
            double RegionZ;
            try
            {
                MapX    = (ushort)(uint.Parse(bbfields[0]) / 256);
                MapY    = (ushort)(uint.Parse(bbfields[1]) / 256);
                RegionX = double.Parse(bbfields[2]);
                RegionY = double.Parse(bbfields[3]);
                RegionZ = double.Parse(bbfields[4]);
            }
            catch
            {
                frame.SayToUser("WARNING! " + Utils.BytesToString(im.MessageBlock.FromAgentName) + "'s teleport lure IM seems to have unusual data in its BinaryBucket!");
                return(packet);
            }

            // request region name

            System.Timers.Timer myTimer = new System.Timers.Timer(10000);

            string         RegionName    = null;
            PacketDelegate replyCallback = delegate(Packet p, IPEndPoint s)
            {
                MapBlockReplyPacket reply = (MapBlockReplyPacket)p;
                foreach (MapBlockReplyPacket.DataBlock block in reply.Data)
                {
                    if ((block.X == MapX) && (block.Y == MapY))
                    {
                        RegionName = Utils.BytesToString(block.Name);
                        StringBuilder sb = new StringBuilder();
                        sb.Append(Utils.BytesToString(im.MessageBlock.FromAgentName) + "'s teleport lure is to ");
                        sb.Append(RegionName + " " + RegionX.ToString() + ", " + RegionY.ToString() + ", " + RegionZ.ToString() + " ");
                        sb.Append("secondlife://" + RegionName.Replace(" ", "%20") + "/" + RegionX.ToString() + "/" + RegionY.ToString() + "/" + RegionZ.ToString());
                        frame.SayToUser(sb.ToString());
                    }
                }
                return(null);
            };

            System.Timers.ElapsedEventHandler timerCallback = delegate(object sender, System.Timers.ElapsedEventArgs e)
            {
                if (RegionName == null)
                {
                    frame.SayToUser("Couldn't resolve the destination of " + Utils.BytesToString(im.MessageBlock.FromAgentName) + "'s teleport lure: " + Utils.BytesToString(im.MessageBlock.BinaryBucket));
                }
                proxy.RemoveDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
                myTimer.Stop();
            };

            proxy.AddDelegate(PacketType.MapBlockReply, Direction.Incoming, replyCallback);
            myTimer.Elapsed += timerCallback;
            myTimer.Start();

            MapBlockRequestPacket MapBlockRequest = new MapBlockRequestPacket();
            MapBlockRequest.AgentData           = new MapBlockRequestPacket.AgentDataBlock();
            MapBlockRequest.AgentData.AgentID   = frame.AgentID;
            MapBlockRequest.AgentData.SessionID = frame.SessionID;
            MapBlockRequest.AgentData.Flags     = 0;
            MapBlockRequest.AgentData.Godlike   = false;
            MapBlockRequest.PositionData        = new MapBlockRequestPacket.PositionDataBlock();
            MapBlockRequest.PositionData.MinX   = MapX;
            MapBlockRequest.PositionData.MaxX   = MapX;
            MapBlockRequest.PositionData.MinY   = MapY;
            MapBlockRequest.PositionData.MaxY   = MapY;
            proxy.InjectPacket(MapBlockRequest, Direction.Outgoing);
        }
        else if (im.MessageBlock.Dialog == (byte)InstantMessageDialog.InventoryOffered)
        {
            if (im.MessageBlock.BinaryBucket[0] == (byte)AssetType.Simstate)
            {
                frame.SayToUser(Utils.BytesToString(im.MessageBlock.FromAgentName) + " offered you a SimState :O");
                return(null);
            }
        }
        else if (im.MessageBlock.Dialog == 9)
        {
            if (im.MessageBlock.BinaryBucket[0] == (byte)AssetType.Simstate)
            {
                frame.SayToUser(im.AgentData.AgentID.ToString() + " offered you a SimState from an object at " + im.MessageBlock.Position.ToString() + " :O Message = " + Utils.BytesToString(im.MessageBlock.Message));
                return(null);
            }
        }
        // Don't get spammed bro
        if (im.MessageBlock.Dialog == 0)
        {
            im.MessageBlock.ID = frame.AgentID.Equals(im.AgentData.AgentID) ? frame.AgentID : im.AgentData.AgentID ^ frame.AgentID;
            packet             = (Packet)im;
        }
        return(packet);
    }
Esempio n. 10
0
        private async void MainProc()
        {
            Step = MainStep.CheckInPlace;
            float      verticalOffset = 0;
            double     angle          = 0;
            float      instance1      = 0;
            float      instance2      = 0;
            float      instance3      = 0;
            Time_Meter time_Meter1    = new Time_Meter();
            Time_Meter time_Meter2    = new Time_Meter();
            RobotPos   robotPos1      = new RobotPos();
            RobotPos   robotPos2      = new RobotPos();

            while (!tokenSource.IsCancellationRequested)
            {
                try
                {
                    switch (Step)
                    {
                    case MainStep.CheckInPlace:

                        bool isInPlace = await HardWareManager.Instance.XinJiePlc.ReadM(100);

                        if (!isInPlace)
                        {
                            break;
                        }
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_hRanging", null);
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vRanging1", null);
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vRanging2", null);
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vRanging3", null);
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_hOffset", null);
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vOffset", null);
                        DelegateControls.Instance.DelegateTextbox("FormMain_instanceScrew", null);
                        DelegateControls.Instance.DelegateTextbox("FormMain_productType", null);
                        verticalOffset = await HardWareManager.Instance.XinJiePlc.ReadD(510);    //读取横向偏移量

                        if (Math.Abs(verticalOffset) > 80)
                        {
                            DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "水平方向偏移超限", Color.Red);
                            break;
                        }

                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_hRanging", verticalOffset.ToString());
                        HardWareManager.Instance.XinJiePlc.SetM(101, true);
                        //   await HardWareManager.Instance.YaskawaRobot.SetRobotPoint(100, $"0,{verticalOffset} ,0,0,0,0");
                        DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "水平测距完成");
                        time_Meter1.Start();
                        Step = MainStep.GetAngleInstance;
                        break;

                    case MainStep.GetAngleInstance:
                        bool getInstance = await HardWareManager.Instance.XinJiePlc.ReadM(110);

                        if (!getInstance)
                        {
                            break;
                        }

                        instance1 = await HardWareManager.Instance.XinJiePlc.ReadD(500);

                        instance2 = await HardWareManager.Instance.XinJiePlc.ReadD(502);

                        HardWareManager.Instance.XinJiePlc.SetM(111, true);

                        instance1 = -instance1;
                        instance2 = -instance2;
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vRanging1", instance1.ToString());
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vRanging2", instance2.ToString());
                        await HardWareManager.Instance.YaskawaRobot.SetRobotPoint(13, $"{instance1},{verticalOffset},0,0,0,{0}");

                        Thread.Sleep(300);
                        await HardWareManager.Instance.YaskawaRobot.SetRobotPoint(14, $"{instance1},{verticalOffset},0,0,0,{0}");

                        Thread.Sleep(300);
                        await HardWareManager.Instance.YaskawaRobot.SetRobotPoint(15, $"{instance2},{verticalOffset},0,0,0,{0}");

                        Thread.Sleep(300);

                        await HardWareManager.Instance.YaskawaRobot.SetTypeBData(3, "1");

                        DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "垂直测距完成");

                        Step = MainStep.GetHolePoint2;
                        break;

                    case MainStep.GetInstance://获取两个差距值,用来计算角度
                        //bool getInstance1 = await HardWareManager.Instance.XinJiePlc.ReadM(120);
                        //if (!getInstance1)
                        //    break;
                        //instance3 = await HardWareManager.Instance.XinJiePlc.ReadD(504);
                        //instance3 = -instance3;
                        //HardWareManager.Instance.XinJiePlc.SetM(121, true);
                        //DelegateControls.Instance.DelegateTextbox("FormMain_txt_vRanging3", instance3.ToString());

                        //Step = MainStep.GetHolePoint2;
                        break;



                    case MainStep.GetHolePoint1:
                        string rtn = await HardWareManager.Instance.YaskawaRobot.GetTypeBData(1);

                        if (rtn != "2\r\0")
                        {
                            break;
                        }


                        bool getInstance1 = await HardWareManager.Instance.XinJiePlc.ReadM(120);

                        if (!getInstance1)
                        {
                            break;
                        }
                        instance3 = await HardWareManager.Instance.XinJiePlc.ReadD(504);

                        // instance3 = -instance3;
                        HardWareManager.Instance.XinJiePlc.SetM(121, true);
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vRanging3", instance3.ToString());


                        HObject _image = HardWareManager.Instance.Cmaera.SnapShot();


                        robotPos1 = await  GetHolePoint(_image);

                        //  length = 700 - length;
                        await HardWareManager.Instance.YaskawaRobot.SetRobotPoint(100, $"{-lengthX},{-lengthY},{instance3},0,0,{0}");

                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_hOffset", (lengthY).ToString("f2"));
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vOffset", (lengthX).ToString("f2"));

                        await HardWareManager.Instance.YaskawaRobot.SetTypeBData(2, "2");

                        DelegateControls.Instance.DelegateTextbox("FormMain_instanceScrew", Math.Abs(robotPos1.Y - robotPos2.Y).ToString());


                        if ((robotPos1.Y - robotPos2.Y) < Param.Instance.InstanceMax + Param.Instance.InstanceOffset &&
                            (robotPos1.Y - robotPos2.Y) > Param.Instance.InstanceMax - Param.Instance.InstanceOffset)
                        {
                            DelegateControls.Instance.DelegateTextbox("FormMain_productType", "大号产品");

                            await HardWareManager.Instance.YaskawaRobot.SetTypeBData(5, "3");
                        }
                        else if (Math.Abs(robotPos1.Y - robotPos2.Y) < Param.Instance.InstanceLittle + Param.Instance.InstanceOffset &&
                                 (robotPos1.Y - robotPos2.Y) > Param.Instance.InstanceLittle - Param.Instance.InstanceOffset)
                        {
                            DelegateControls.Instance.DelegateTextbox("FormMain_productType", "小号产品");

                            await HardWareManager.Instance.YaskawaRobot.SetTypeBData(5, "1");
                        }
                        else if (Math.Abs(robotPos1.Y - robotPos2.Y) < Param.Instance.InstanceMiddle + Param.Instance.InstanceOffset &&
                                 (robotPos1.Y - robotPos2.Y) > Param.Instance.InstanceMiddle - Param.Instance.InstanceOffset)
                        {
                            DelegateControls.Instance.DelegateTextbox("FormMain_productType", "中号产品");

                            await HardWareManager.Instance.YaskawaRobot.SetTypeBData(5, "2");
                        }
                        else
                        {
                            throw new Exception("螺丝孔位置 无法匹配产品");
                        }
                        DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "第二次拍照完成");

                        Step = MainStep.LockScrew;
                        break;

                    case MainStep.GetHolePoint2:
                        rtn = await HardWareManager.Instance.YaskawaRobot.GetTypeBData(1);

                        if (rtn != "1\r\0")
                        {
                            break;
                        }
                        _image = HardWareManager.Instance.Cmaera.SnapShot();

                        //robotPos2 = await GetHolePoint(_image);
                        //await HardWareManager.Instance.YaskawaRobot.SetTypeBData(2, "1");
                        //Step = MainStep.GetHolePoint1;
                        //DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "第一次拍照完成");

                        //break;


                        VisionManager.Instance.ShapeModle.BackImage = _image.Clone();

                        ModleFindResult result = VisionManager.Instance.ShapeModle.FindSimple();
                        if (result != null)
                        {
                            HTuple hommate2d;
                            HOperatorSet.VectorAngleToRigid(0, 0, 0, result.Row, result.Column, result.Angle, out hommate2d);
                            HOperatorSet.AffineTransContourXld(result.ModleRegion, out HObject hObject, hommate2d);
                            RegionX regionX = new RegionX(hObject, "green");
                            DelegateControls.Instance.DelegateHdisplay("FormMain_hDisplay1", _image, new List <HalWindow.RegionX>()
                            {
                                regionX
                            });


                            HTuple _x = new HTuple();
                            HTuple _y = new HTuple();
                            VisionManager.Instance.Calibrate.GetRobotpoint(result.Row, result.Column, ref _x, ref _y);


                            robotPos2 = await HardWareManager.Instance.YaskawaRobot.GetRobotCPoint();

                            robotPos2.Y += _x;
                            robotPos2.Z += _y;

                            await HardWareManager.Instance.YaskawaRobot.SetTypeBData(2, "1");
                        }
                        else
                        {
                            DelegateControls.Instance.DelegateHdisplay("FormMain_hDisplay1", _image, null);
                            DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "第一次取像未能找到第一个螺丝孔");
                            HardWareManager.Instance.XinJiePlc.SetM(125, true);
                            Step = MainStep.CheckInPlace;
                            break;
                        }
                        await HardWareManager.Instance.YaskawaRobot.SetTypeBData(2, "1");

                        Step = MainStep.GetHolePoint1;
                        DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "第一次拍照完成");

                        break;

                    case MainStep.LockScrew:
                        rtn = await HardWareManager.Instance.YaskawaRobot.GetTypeBData(11);

                        if (rtn != "1\r\0")
                        {
                            DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", "本周期结束");

                            Step = MainStep.CheckInPlace;
                            break;
                        }
                        rtn = await HardWareManager.Instance.YaskawaRobot.GetTypeBData(10);

                        if (rtn != "1\r\0")
                        {
                            break;
                        }
                        _image = HardWareManager.Instance.Cmaera.SnapShot();

                        await GetHolePoint(_image);

                        await HardWareManager.Instance.YaskawaRobot.SetRobotPoint(100, $"{-lengthX},{-lengthY},{instance3},0,0,{0}");

                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_hOffset", (lengthY).ToString("f2"));
                        DelegateControls.Instance.DelegateTextbox("FormMain_txt_vOffset", (lengthX).ToString("f2"));

                        await HardWareManager.Instance.YaskawaRobot.SetTypeBData(9, "1");

                        break;
                    }
                }
                catch (Exception ex)
                {
                    HardWareManager.Instance.XinJiePlc.SetM(125, true);

                    DelegateControls.Instance.DelegateRichTextBoxZd("FormMain_RichTextBoxZd", ex.Message);
                    Step = MainStep.CheckInPlace;
                }
                Thread.Sleep(100);
            }
        }