public override async Task <byte[]> ReadAll(int outtime = 300) { if (!m_Client.Connected) { throw new InvalidOperationException("not connect to server"); } byte[] data = await Task <byte[]> .Run(() => { byte[] rtn; NetworkStream ns = m_Client.GetStream(); { Time_Meter time_Meter = new Time_Meter(); while (m_Client.Available == 0) { if (time_Meter.IstimeOn(outtime)) { throw new Exception("time out"); } Thread.Sleep(5); } long bufferLength = m_Client.Available; rtn = new byte[bufferLength + 1]; if (ns.CanRead) { ns.Read(rtn, 0, Convert.ToInt32(bufferLength + 1)); } } return(rtn); }); return(data); }
public override async Task <byte[]> ReadBytes(int length, int outtime = 300) { if (!m_Client.Connected) { throw new InvalidOperationException("not connect to server"); } byte[] data = await Task <byte[]> .Run(() => { NetworkStream ns = m_Client.GetStream(); { Time_Meter time_Meter = new Time_Meter(); byte[] rtn = new byte[length]; while (m_Client.Available < length) { if (time_Meter.IstimeOn(outtime)) { throw new Exception("time out"); } Thread.Sleep(5); } if (ns.CanRead) { ns.Read(rtn, 0, length); } return(rtn); } }); return(data); }
//public HObject InputImage //{ // get { return m_image; } // set { m_image = value; } //} private void btn_Decode_Click(object sender, EventArgs e) { List <HObject> region = new List <HObject>(); List <HObject> imageReduced = new List <HObject>(); region = hDisplay1.GetSearchRegions(); Time_Meter time_Meter = new Time_Meter(); foreach (var member in region) { HObject _iamge = new HObject(); HOperatorSet.ReduceDomain(m_image, member, out _iamge); HOperatorSet.CropDomain(_iamge, out _iamge); imageReduced.Add(_iamge); } TDCode tdcode; CodeResult sss = new CodeResult(); CodeResult[] results = new CodeResult[] { }; if (_form is FormDMCodeParam) { FormDMCodeParam form = (FormDMCodeParam)_form; tdcode = new DMCode(); tdcode.SetCodeParam(form.CodeParameter); results = tdcode.Decode(imageReduced); txt_TimeUse.Text = (time_Meter.TimePass() * 1000).ToString(); } else if (_form is FormQRCodeParam) { FormQRCodeParam form = (FormQRCodeParam)_form; tdcode = new QRCode(); tdcode.SetCodeParam(form.CodeParameter); results = tdcode.Decode(imageReduced); } List <StringX> ss = new List <StringX>(); List <HalWindow.RegionX> regions = new List <HalWindow.RegionX>(); foreach (var member in results) { if (member.code != string.Empty) { HTuple area = new HTuple(); HTuple row = new HTuple(); HTuple column = new HTuple(); HOperatorSet.AreaCenter(member.codexld, out area, out row, out column); StringX sx = new StringX(15, false, false); sx.SetString(member.code, (int)row.D, (int)column.D, System.Drawing.Color.Green); ss.Add(sx); HalWindow.RegionX regionX = new HalWindow.RegionX(member.codexld, "green"); regions.Add(regionX); } } DelegateUIControl.GetInstance().UpdateHDisplay("FormSetHDisplay", m_image, regions, ss); }
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); } }