From 96b6869bb20677f9b945f67c014a9b992ee05ac4 Mon Sep 17 00:00:00 2001 From: patrick.xu <patrick.xu@broconcentric.com> Date: 星期三, 28 四月 2021 11:40:01 +0800 Subject: [PATCH] 1. 添加离线测试功能 2. 单键分开测量修改赋值和释放时判断 --- src/Bro.M071.Process/M071Converters.cs | 9 ++ src/Bro.M071.Process/M071Process_OfflineTest.cs | 129 ++++++++++++++++++++++++++++++++ src/Bro.M071.Process/M071Process.cs | 37 ++++++--- src/Bro.M071.Process/Bro.M071.Process.csproj | 1 src/Bro.M071.Process/M071Config.cs | 5 + src/Bro.Common.Device/DeviceBase/CameraBase.cs | 2 src/Bro.Common.Model/Model/LaserScanParam.cs | 15 +++ 7 files changed, 182 insertions(+), 16 deletions(-) diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs index d96dc0d..6a5accc 100644 --- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs +++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs @@ -785,7 +785,7 @@ [Category("鍥剧墖淇濆瓨")] [Description("鏄惁淇濆瓨鍘熷鍥剧墖")] [DisplayName("淇濆瓨鍘熷鍥剧墖")] - public bool IsSaveOriginImage { get; set; } = true; + public bool IsSaveOriginImage { get; set; } = false; [Category("鍥剧墖淇濆瓨")] [Description("鍥剧墖淇濆瓨鏍煎紡")] diff --git a/src/Bro.Common.Model/Model/LaserScanParam.cs b/src/Bro.Common.Model/Model/LaserScanParam.cs index a7eb899..8c42409 100644 --- a/src/Bro.Common.Model/Model/LaserScanParam.cs +++ b/src/Bro.Common.Model/Model/LaserScanParam.cs @@ -1,4 +1,5 @@ -锘縰sing System; +锘縰sing Bro.Common.Helper; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -6,7 +7,7 @@ namespace Bro.Common.Model { - public class LaserScanParam + public class LaserScanParam : IComplexDisplay { public int Resolution_X { get; set; } public int Resolution_Y { get; set; } @@ -17,5 +18,15 @@ public int Offset_Z { get; set; } public int Angle_Z { get; set; } + + public override string ToString() + { + return GetDisplayText(); + } + + public string GetDisplayText() + { + return $"Resolution:{Resolution_X},{Resolution_Y},{Resolution_Z}; Offset:{Offset_X},{Offset_Y},{Offset_Z}; Angel_Z:{Angle_Z}"; + } } } diff --git a/src/Bro.M071.Process/Bro.M071.Process.csproj b/src/Bro.M071.Process/Bro.M071.Process.csproj index d8872b2..8f9aab1 100644 --- a/src/Bro.M071.Process/Bro.M071.Process.csproj +++ b/src/Bro.M071.Process/Bro.M071.Process.csproj @@ -123,6 +123,7 @@ <Compile Include="M071Process.cs" /> <Compile Include="M071Process_MES.cs" /> <Compile Include="M071Process_MotionCard.cs" /> + <Compile Include="M071Process_OfflineTest.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="UI\KeyIndicator.cs" /> <Compile Include="UI\M071Node.cs" /> diff --git a/src/Bro.M071.Process/M071Config.cs b/src/Bro.M071.Process/M071Config.cs index d2bcd20..34346d5 100644 --- a/src/Bro.M071.Process/M071Config.cs +++ b/src/Bro.M071.Process/M071Config.cs @@ -42,6 +42,11 @@ public List<KeyResult> KeyResultCollection { get; set; } = new List<KeyResult>(); #endregion + [Category("绂荤嚎娴嬭瘯妯″紡")] + [Description("true锛氳澶囩绾挎ā寮� false锛氳澶囪繛绾挎ā寮�")] + [DisplayName("绂荤嚎妯″紡")] + public bool IsOfflineMode { get; set; } = false; + [Category("鏄剧ず閰嶇疆")] [Description("杩愯鑳屾櫙鍥剧墖璺緞")] [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))] diff --git a/src/Bro.M071.Process/M071Converters.cs b/src/Bro.M071.Process/M071Converters.cs index fb8274b..56fd7ef 100644 --- a/src/Bro.M071.Process/M071Converters.cs +++ b/src/Bro.M071.Process/M071Converters.cs @@ -1,4 +1,5 @@ 锘縰sing Autofac; +using Bro.Common.Base; using Bro.Common.Helper; using Bro.Common.Interface; using Bro.Common.Model; @@ -51,7 +52,13 @@ { config.SnapshotPointCollection.Where(u => u.IsEnabled).ToList().ForEach(s => { - table[s.Id] = s.Name; + if (s.CameraOp?.OpConfig is CameraOprerationConfigBase cameraOpConfig) + { + if (!string.IsNullOrWhiteSpace(cameraOpConfig?.AlgorithemPath)) + { + table[s.Id] = s.Name; + } + } }); } } diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs index 69301a8..b3c0725 100644 --- a/src/Bro.M071.Process/M071Process.cs +++ b/src/Bro.M071.Process/M071Process.cs @@ -58,25 +58,31 @@ { InitialSetting(); - base.Open(); + if (!Config.IsOfflineMode) + { + base.Open(); - InitialMotionCardBaseAxisAlarm(); + InitialMotionCardBaseAxisAlarm(); - SwitchBeep(false); - SwitchLightGreen(false); - SwitchLightRed(false); - SwitchLightYellow(false); + SwitchBeep(false); + SwitchLightGreen(false); + SwitchLightRed(false); + SwitchLightYellow(false); - Reset(null, null, null); - FullReset(null); + Reset(null, null, null); + FullReset(null); + } if (Config.Precision > 0) { _precision = "f" + Config.Precision; } - IncomingCheckMethod = InitialMESWebServiceMethod(IncomingCheckMethodName, out IncomingCheckObj); - DataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj); + if (Config.IsEnableMESUpload) + { + IncomingCheckMethod = InitialMESWebServiceMethod(IncomingCheckMethodName, out IncomingCheckObj); + DataUploadMethod = InitialMESWebServiceMethod(DataUploadMethodName, out DataUploadObj); + } var allowedShiftStr = ConfigurationManager.AppSettings["DataShift"]; if (!double.TryParse(allowedShiftStr, out _allowedShift)) @@ -1438,8 +1444,15 @@ keyBindList.ForEach(kb => { - kb.KeyImages.Add(image.ConvertHObjectToHImage()); - kb.FillKeyValues(resultDict); + if (kb.KeyImages != null) + { + kb.KeyImages.Add(image.ConvertHObjectToHImage()); + kb.FillKeyValues(resultDict); + } + else + { + + } }); }); diff --git a/src/Bro.M071.Process/M071Process_OfflineTest.cs b/src/Bro.M071.Process/M071Process_OfflineTest.cs new file mode 100644 index 0000000..9a90e98 --- /dev/null +++ b/src/Bro.M071.Process/M071Process_OfflineTest.cs @@ -0,0 +1,129 @@ +锘縰sing Autofac; +using Bro.Common.Base; +using Bro.Common.Helper; +using Bro.Common.Interface; +using Bro.Common.Model; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing.Design; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Bro.M071.Process +{ + public partial class M071Process + { + [ProcessMethod("OfflineTest", "OfflineTest", "绂荤嚎娴嬭瘯", InvokeType.TestInvoke)] + public ProcessResponse OfflineTest(IOperationConfig opConfig, IDevice invokeDevice, IDevice sourceDevice) + { + if (opConfig is OfflineTestOpConfig config) + { + if (config.SnapshotConfigs.Count > 0) + { + OnMeasureStart?.Invoke(); + + List<MeasurementUnit> measurements = new List<MeasurementUnit>(); + Config.MeasurementUnitCollection.Where(u => u.IsEnabled).ToList().ForEach(u => + { + var m = u.Copy(); + m.InitialKeyUnitMeasureChanged(); + measurements.Add(m); + }); + + var pMeasure = new ProductionMeasurement() + { + Barcode = $"OfflineTest_{DateTime.Now.ToString("HHmmss")}", + Measurements = measurements, + StartTime = DateTime.Now, + }; + + lock (productionLock) + { + var existedProduction = productionList.FirstOrDefault(u => u.Barcode == pMeasure.Barcode); + if (existedProduction != null) + { + productionList.Remove(existedProduction); + existedProduction.Dispose(); + existedProduction = null; + } + + productionList.Add(pMeasure); + } + + pMeasure.InitialMeasurementsPropertyChanged(); + pMeasure.PropertyChanged += MeasureProduction_PropertyChanged; + + config.SnapshotConfigs.ForEach(s => + { + ImageSet set = new ImageSet(); + set.HImage = new HalconDotNet.HImage(s.OfflineImageFilePath); + set.ImageData = JsonConvert.SerializeObject(config.ScanParam); + + var snapshotConfig = Config.SnapshotPointCollection.FirstOrDefault(u => u.Id == s.SnapshotPointId); + + RunImageHandle(snapshotConfig.CameraOp.OpConfig, set, snapshotConfig.Id, snapshotConfig.Name, pMeasure.Measurements); + }); + } + + } + + return new ProcessResponse(true); + } + } + + [Device("OfflineTest", "绂荤嚎娴嬭瘯鎿嶄綔閰嶇疆", EnumHelper.DeviceAttributeType.OperationConfig)] + public class OfflineTestOpConfig : OperationConfigBase + { + [Category("鍙栧儚璁剧疆")] + [Description("鍙栧儚璁剧疆")] + [TypeConverter(typeof(CollectionCountConvert))] + [Editor(typeof(ComplexCollectionEditor<OfflineSnapshotPoint>), typeof(UITypeEditor))] + public List<OfflineSnapshotPoint> SnapshotConfigs { get; set; } = new List<OfflineSnapshotPoint>(); + + //[Category("绂荤嚎鍥惧儚鐩綍")] + //[Description("绂荤嚎鍥剧墖鏂囦欢鐩綍锛岀洰鍓嶅彧鏀寔涓�绾ф枃浠剁洰褰曪紝璇ョ洰褰曞寘鍚笖浠呭寘鍚竴娆″畬鏁存祴璇曢渶瑕佺殑鍥剧墖")] + //[Editor(typeof(FoldDialogEditor),typeof(UITypeEditor))] + //public string OfflineImageFolder { get; set; } + + [Category("鎵弿鍥惧儚鍙傛暟")] + [Description("鎵弿鍥惧儚鍙傛暟")] + [TypeConverter(typeof(ExpandableObjectConverter))] + public LaserScanParam ScanParam { get; set; } = new LaserScanParam(); + } + + public class OfflineSnapshotPoint : IComplexDisplay + { + [Category("鍙栧儚鐐逛綅鍙婇厤缃�")] + [TypeConverter(typeof(SnapshotPointConverter))] + public string SnapshotPointId { get; set; } + + [Category("绂荤嚎鍥惧儚鏂囦欢")] + [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))] + public string OfflineImageFilePath { get; set; } + + public string GetDisplayText() + { + string snapshotPointName = ""; + + using (var scope = GlobalVar.Container.BeginLifetimeScope()) + { + var config = scope.Resolve<IProcessConfig>() as M071Config; + + if (config != null) + { + snapshotPointName = config.SnapshotPointCollection.FirstOrDefault(u => u.Id == SnapshotPointId)?.Name; + } + } + + if (string.IsNullOrWhiteSpace(snapshotPointName)) + { + snapshotPointName = "鏈寚瀹�"; + } + + return snapshotPointName; + } + } +} -- Gitblit v1.8.0