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 }; }
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); }
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 }; } }
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); }
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; }
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); }
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); } }