From 773369500892dcb5347e4a0059f8089960073030 Mon Sep 17 00:00:00 2001 From: xcd <834800634@qq.com> Date: 星期三, 15 七月 2020 22:08:34 +0800 Subject: [PATCH] 板卡回原点配置迁移到初始配置轴配置中 板卡回原点配置区分运动方向和捕捉方向,限制捕捉原点方向 --- src/Bro.Device.GTSCard/GTSCardDriver.cs | 41 ++++++++++++++++---- src/Bro.M071.Process/M071Process.cs | 12 ++++-- src/Bro.Common.Model/Model/MotionCardRelated.cs | 49 ++++++++++++++++-------- 3 files changed, 73 insertions(+), 29 deletions(-) diff --git a/src/Bro.Common.Model/Model/MotionCardRelated.cs b/src/Bro.Common.Model/Model/MotionCardRelated.cs index 1037012..8d9ce6b 100644 --- a/src/Bro.Common.Model/Model/MotionCardRelated.cs +++ b/src/Bro.Common.Model/Model/MotionCardRelated.cs @@ -86,6 +86,13 @@ //[Description("IsUseWarning锛氭槸鍚﹀惎鐢ㄦ姤璀�")] //public bool IsUseWarning { get; set; } = false; + [Category("鍘熺偣閰嶇疆")] + [DisplayName("鍥炲師鐐瑰弬鏁�")] + [Description("鍥炲師鐐瑰弬鏁�")] + [TypeConverter(typeof(ComplexObjectConvert))] + [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] + public GoHomePara GoHomePara { get; set; } = new GoHomePara(); + [Category("鏆傚仠閰嶇疆")] [DisplayName("鏄惁鍚敤绔嬪嵆鏆傚仠")] [Description("IsImmediatePause锛氭槸鍚﹀惎鐢ㄧ珛鍗虫殏鍋�")] @@ -154,25 +161,19 @@ [Category("鍥炲師鐐瑰弬鏁�")] [DisplayName("鍥炲師鐐规柟寮�")] [Description("HomeMode锛氬洖鍘熺偣鏂瑰紡 锛圚OME_MODE_LIMIT = 10; HOME_MODE_LIMIT_HOME = 11; HOME_MODE_LIMIT_INDEX = 12; HOME_MODE_LIMIT_HOME_INDEX = 13;HOME_MODE_HOME = 20;HOME_MODE_HOME_INDEX = 22;HOME_MODE_INDEX = 30;")] - public short HomeMode { get; set; } = 11; - - [Category("鍥炲師鐐瑰弬鏁�")] - [DisplayName("鍥炲師鐐规柟鍚�")] - [Description("HomeDir锛�1 姝e悜锛�-1 璐熷悜")] - public short HomeDir { get; set; } = 1; + public short HomeMode { get; set; } = 11; [Category("鍥炲師鐐瑰弬鏁�")] [DisplayName("杈圭紭")] [Description("edge锛氳竟缂�")] public short Edge { get; set; } = 0; - [Category("鍥炲師鐐瑰弬鏁�")] + [Category("鍥炲師鐐归�熷害")] [DisplayName("鍥炲師鐐规渶浣庨�熷害")] [Description("LowVelocity锛氶�熷害,涓�0鏃惰〃绀轰笉淇敼褰撳墠璁剧疆")] public double LowVelocity { get; set; } = 50; - - [Category("鍥炲師鐐瑰弬鏁�")] + [Category("鍥炲師鐐归�熷害")] [DisplayName("鍥炲師鐐规渶楂橀�熷害")] [Description("HighVelocity锛氶�熷害,涓�0鏃惰〃绀轰笉淇敼褰撳墠璁剧疆")] public double HighVelocity { get; set; } = 50; @@ -182,16 +183,30 @@ //[Description("SearchHomeDistance锛氭悳绱㈣窛绂�")] //public int SearchHomeDistance { get; set; } = 9999999; - [Category("鍥炲師鐐瑰弬鏁�")] + [Category("鍥炲師鐐瑰亸绉�")] [DisplayName("鍋忕Щ璺濈")] [Description("HomeOffset锛氬亸绉昏窛绂�")] public int HomeOffset { get; set; } = 0; - [Category("鍥炲師鐐瑰弬鏁�")] + [Category("鍥炲師鐐瑰亸绉�")] [DisplayName("璺宠繃姝ラ暱")] [Description("EscapeStep锛氳烦杩囨闀�")] public int EscapeStep { get; set; } = 1000; + [Category("鍥炲師鐐规柟鍚�")] + [DisplayName("璧峰杩愬姩鏂瑰悜")] + [Description("鍥炲師鐐规椂锛岃酱鐨勫垵濮嬭繍鍔ㄦ柟鍚戯細true 姝e悜锛宖alse 璐熷悜")] + public bool IsHomeDirPositive { get; set; } = true; + + [Category("鍥炲師鐐规柟鍚�")] + [DisplayName("鍘熺偣鎹曟崏鏂瑰悜")] + [Description("鎹曟崏鍘熺偣鏃讹紝杞寸殑杩愬姩鏂瑰悜锛歵rue 姝e悜锛宖alse 璐熷悜")] + public bool IsCaptureDirPositive { get; set; } = true; + + [Category("鍥炲師鐐硅秴鏃�")] + [DisplayName("鍥炲師鐐硅秴鏃�")] + [Description("鍥炲師鐐硅秴鏃讹紝鍗曚綅绉�")] + public int GoHomeTimeOut { get; set; } = 60; } /// <summary> @@ -352,12 +367,12 @@ //} //private GoHomePara goHomePara = new GoHomePara(); - [Category("杩愬姩閰嶇疆")] - [DisplayName("鍥炲師鐐瑰弬鏁�")] - [Description("GoHomePara锛氶�熷害鍙傛暟")] - [TypeConverter(typeof(ComplexObjectConvert))] - [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] - public GoHomePara GoHomePara { get; set; } = new GoHomePara(); + //[Category("杩愬姩閰嶇疆")] + //[DisplayName("鍥炲師鐐瑰弬鏁�")] + //[Description("GoHomePara锛氶�熷害鍙傛暟")] + //[TypeConverter(typeof(ComplexObjectConvert))] + //[Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] + //public GoHomePara GoHomePara { get; set; } = new GoHomePara(); //{ // get => goHomePara; // set diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs index 2385a82..d87e661 100644 --- a/src/Bro.Device.GTSCard/GTSCardDriver.cs +++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs @@ -888,7 +888,11 @@ { try { - StartCapture: + var goHomePara = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == movingOption.AxisIndex).GoHomePara; + bool homeDirection = goHomePara.IsHomeDirPositive; + bool isRightLimitReached = false; + + StartCapture: PositionReset(movingOption.AxisIndex, 1); ClearStatus(movingOption.AxisIndex, 1); @@ -907,24 +911,24 @@ // 璁剧疆鐐逛綅妯″紡杩愬姩鍙傛暟 sRtn = GTSCardAPI.GT_SetTrapPrm((short)IConfig.CardNum, (short)movingOption.AxisIndex, ref trapPrm); // 璁剧疆鐐逛綅妯″紡鐩爣閫熷害锛屽嵆鍥炲師鐐归�熷害 - sRtn = GTSCardAPI.GT_SetVel((short)IConfig.CardNum, (short)movingOption.AxisIndex, movingOption.GoHomePara.HighVelocity); + sRtn = GTSCardAPI.GT_SetVel((short)IConfig.CardNum, (short)movingOption.AxisIndex, goHomePara.HighVelocity); // 璁剧疆鐐逛綅妯″紡鐩爣浣嶇疆锛屽嵆鍘熺偣鎼滅储璺濈 - sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, movingOption.GoHomePara.HomeDir == 1 ? 99999999 : -99999999); + sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, homeDirection ? 99999999 : -99999999); // 鍚姩杩愬姩 sRtn = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (movingOption.AxisIndex - 1)); - int repeatTime = 1000; + int repeatTime = goHomePara.GoHomeTimeOut * 1000; short capture; int pos; uint clk;//鏃堕挓鍙傛暟 do { - Thread.Sleep(20); + Thread.Sleep(IConfig.MonitorInterval); // 璇诲彇鎹曡幏鐘舵�� GTSCardAPI.GT_GetCaptureStatus((short)IConfig.CardNum, (short)movingOption.AxisIndex, out capture, out pos, 1, out clk); isStop = IsStop((short)movingOption.AxisIndex); - repeatTime--; + repeatTime -= IConfig.MonitorInterval; } while (!(isStop || capture == 1 || repeatTime <= 0)); if (repeatTime <= 0) @@ -941,7 +945,22 @@ if (((axisStatus.AxisStatus & 0x20) != 0) || ((axisStatus.AxisStatus & 0x40) != 0)) { - movingOption.GoHomePara.HomeDir = (short)(movingOption.GoHomePara.HomeDir == 1 ? -1 : 1); + //movingOption.GoHomePara.HomeDir = (short)(movingOption.GoHomePara.HomeDir == 1 ? -1 : 1); + + //姝i檺浣� + if ((axisStatus.AxisStatus & 0x20) != 0 && !goHomePara.IsCaptureDirPositive) + { + isRightLimitReached = true; + } + + + //璐熼檺浣� + if ((axisStatus.AxisStatus & 0x40) != 0 && goHomePara.IsCaptureDirPositive) + { + isRightLimitReached = true; + } + + homeDirection = !homeDirection; goto StartCapture; } @@ -950,12 +969,18 @@ if (capture == 1) { + if (!isRightLimitReached) + { + capture = 0; + goto StartCapture; + } + //鍏坰top MoveStop((short)movingOption.AxisIndex, 0); ClearStatus((short)movingOption.AxisIndex, 1); //宸茬粡鎹曡幏鍒癏ome鎵嶅彲浠ュ洖闆� 闃舵2 // 杩愬姩鍒�"鎹曡幏浣嶇疆+鍋忕Щ閲�" - sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, pos + movingOption.GoHomePara.HomeOffset); + sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, pos + goHomePara.HomeOffset); // 鍦ㄨ繍鍔ㄧ姸鎬佷笅鏇存柊鐩爣浣嶇疆 sRtn = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (movingOption.AxisIndex - 1)); isStop = false; diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index cf6b12d..325cccc 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -272,7 +272,7 @@ return; } - RunImageHandle(camera, s.CameraOp.OpConfig, set, s.Id, s.Name, pMeasure.Measurements); + RunImageHandle(s.CameraOp.OpConfig, set, s.Id, s.Name, pMeasure.Measurements); }); BarCode = ""; @@ -1027,7 +1027,7 @@ } #endregion - private async void RunImageHandle(CameraBase camera, IOperationConfig opConfig, IImageSet imgSet, string snapshotId, string snapshotName, List<MeasurementUnit> measureList) + private async void RunImageHandle(IOperationConfig opConfig, IImageSet imgSet, string snapshotId, string snapshotName, List<MeasurementUnit> measureList) { await Task.Run(() => { @@ -1095,7 +1095,10 @@ HOperatorSet.SelectObj(images, out HObject image, i); string fileName = Path.Combine(dir, $"{i}.tif"); - image.ConvertHObjectToHImage().WriteImage("tiff", 0, fileName); + using (HImage temp = image.ConvertHObjectToHImage()) + { + temp.WriteImage("tiff", 0, fileName); + } keys.Where(u => u.ImageSeq == i).ToList().ForEach(k => { @@ -1113,6 +1116,7 @@ _halconToolDict[keyToolKey].InputImageDic["INPUT_Image"] = image; _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X / 1000000.0; _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Z"] = scanParam.Resolution_Z / 1000000.0; + _halconToolDict[keyToolKey].InputTupleDic["INPUT_ImageId"] = $"{k.AliasName}_{DateTime.Now.ToString("HHmmssfff")}.tif"; if (!_halconToolDict[keyToolKey].RunProcedure(out string error)) { LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬畻娉曞紓甯革紝{error}", ""); @@ -1144,7 +1148,7 @@ }); }); - //image.Dispose(); + image.Dispose(); } //); -- Gitblit v1.8.0