using HalconDotNet; using Rs.Controls; using Rs.Framework; using Rs.MotionPlat.Commom; using Rs.MotionPlat.Flow; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Rs.MotionPlat.SysConfig { public partial class NozzleDistance : BaseForm { public NozzleDistance() { InitializeComponent(); cameraTemplate1.ItemName = "吸嘴间距标定"; cameraTemplate1.SetFindShapeMode(EFindShapeMode.SelfDefine); cameraTemplate1.FindShapeEvent += CameraTemplate1_FindShapeEvent; //cameraTemplate1.ManualGrab += CameraTemplate1_ManualGrab; } private void CameraTemplate1_ManualGrab() { AxisControl.LoadX.ComparePulse(1); } private void CameraTemplate1_FindShapeEvent(ChoiceTech.Halcon.Control.HWindow_Final arg1, HalconDotNet.HObject arg2) { HOperatorSet.Threshold(arg2, out HObject Region, new HTuple(0), new HTuple(100)); HOperatorSet.Connection(Region, out HObject connectedRegion); if(connectedRegion.IsInitialized()&&connectedRegion.CountObj()>0) { HOperatorSet.SelectShape(connectedRegion, out HObject selectedRegion, "area","and", new HTuple(2000), new HTuple(3000)); if(selectedRegion.IsInitialized()&&selectedRegion.CountObj()>0) { HOperatorSet.SelectShape(selectedRegion, out HObject lastRegion, "circularity", "and", new HTuple(0.8), new HTuple(1)); if(lastRegion.IsInitialized()&&lastRegion.CountObj()>0) { HOperatorSet.SmallestCircle(lastRegion, out HTuple row, out HTuple column, out HTuple radius); HOperatorSet.GenCrossContourXld(out HObject cross, row, column, new HTuple(20), new HTuple(0)); arg1.DispObj(cross, "green"); } } } } private void NozzleDistance_Load(object sender, EventArgs e) { foreach (var item in groupBox1.Controls) { if(item is TextBox) { TextBox txt=(TextBox)item; txt.Text = SysConfigParam.GetValue(txt.Name.Replace("txt", "")).ToString("0.000"); } } } private void NozzleDistance_FormClosing(object sender, FormClosingEventArgs e) { cameraTemplate1.RemoveGrabEvent(); } protected void Fetch_Position(object sender, EventArgs e) { AxisControl.LoadX.GetEncoderPosition(out double curX); AxisControl.LoadY.GetEncoderPosition(out double curY); Button btn=(Button)sender; string txtCenterX=$"txt{btn.Name.Replace("btnFetchPostion","")}CenterX"; string txtCenterY = $"txt{btn.Name.Replace("btnFetchPostion", "")}CenterY"; foreach (var item in groupBox1.Controls) { if (item is TextBox) { TextBox txt = (TextBox)item; if(txt.Name==txtCenterX) { txt.Text = curX.ToString("0.000"); } if(txt.Name== txtCenterY) { txt.Text = curY.ToString("0.000"); } } } SysConfigParam.Update(txtCenterX.Replace("txt", ""), curX.ToString()); SysConfigParam.Update(txtCenterY.Replace("txt", ""), curY.ToString()); } protected void GotoThis(object sender, EventArgs e) { if (Ops.IsHomed("LoadX", "LoadY")) { double targetX = 0.0; double targetY = 0.0; Button btn = (Button)sender; string txtCenterX = $"txt{btn.Name.Replace("btnGoto", "")}CenterX"; string txtCenterY = $"txt{btn.Name.Replace("btnGoto", "")}CenterY"; Control[] ctls = groupBox1.Controls.Find(txtCenterX, true); if(ctls!=null&&ctls.Length>0) { targetX = double.Parse(ctls[0].Text); } else { Msg.ShowError("未找到运动目的地"); return; } ctls = groupBox1.Controls.Find(txtCenterY, true); if (ctls != null && ctls.Length > 0) { targetY = double.Parse(ctls[0].Text); } else { Msg.ShowError("未找到运动目的地"); return; } AxisControl.LoadX.MovePos(targetX, 10); AxisControl.LoadY.MovePos(targetY, 10); } else { Msg.ShowInfo("轴未回原,请回原后再运动"); } } } }