From 6f92829951f3ec228b18df8c157239573edd9cb4 Mon Sep 17 00:00:00 2001
From: xcd <834800634@qq.com>
Date: 星期三, 09 九月 2020 15:20:53 +0800
Subject: [PATCH] 1. 取消ImageSet中的HImage释放动作,转移到业务流程中 2. 拆分板卡的IO监听和轴状态,轴位置监听
---
src/Bro.Device.GTSCard/GTSCardDriver.cs | 95 ++++++++++++++-
src/Bro.Process/Bro.Process.csproj | 4
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs | 17 ++
src/Bro.M071.Process/M071Process.cs | 236 ++++++++++++++++++++-------------------
src/Bro.Common.Device/DeviceBase/CameraBase.cs | 8
5 files changed, 230 insertions(+), 130 deletions(-)
diff --git a/src/Bro.Common.Device/DeviceBase/CameraBase.cs b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
index 42d1be2..82b529d 100644
--- a/src/Bro.Common.Device/DeviceBase/CameraBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/CameraBase.cs
@@ -912,11 +912,11 @@
autoDisposeTimer.Change(-1, -1);
autoDisposeTimer.Dispose();
- Image?.Dispose();
- Image = null;
+ //Image?.Dispose();
+ //Image = null;
- HImage?.Dispose();
- HImage = null;
+ //HImage?.Dispose();
+ //HImage = null;
}
#endregion
}
diff --git a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
index f5214fe..ef22a40 100644
--- a/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
+++ b/src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -22,7 +22,8 @@
public event Action<DateTime, IDevice, IWarningSet> OnMonitorAlarm;
public event Action<int, string> OnAxisAlarmRaised;
public event Action<int, int, int> OnAxisStatusChanged;
-
+ public event Action<int, int> OnAxisPositionChanged;
+
public void AxisAlarmRaised(int axisIndex, string msg)
{
OnAxisAlarmRaised?.Invoke(axisIndex, msg);
@@ -33,8 +34,22 @@
OnAxisStatusChanged?.Invoke(axisIndex, preStatus, curStatus);
}
+ public void AxisPositionChanged(int axisIndex, int currentPosition)
+ {
+ OnAxisPositionChanged?.Invoke(axisIndex, currentPosition);
+ }
+
protected override void Start()
{
+ AxisStatusList = IConfig.AxisSettings.Where(a => a.IsAxisEnabled).ToList().ConvertAll(a =>
+ {
+ AxisMovingStatus axisSts = new AxisMovingStatus();
+ axisSts.AxisIndex = a.AxisIndex;
+ axisSts.AxisName = a.AxisName;
+
+ return axisSts;
+ });
+
Task.Run(() =>
{
Monitor();
diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index c430886..a721273 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -99,6 +99,9 @@
{
AllAxisOn();
+ MonitorPosition();
+ MonitorAxisStatus();
+
base.Start();
}
@@ -1131,7 +1134,6 @@
return axisMovingStatusesList;
}
-
public List<IOItem> GetMonitorValues()
{
var result = new List<IOItem>();
@@ -1164,6 +1166,79 @@
return result;
}
+ SpinWait _positionWait = new SpinWait();
+ private async void MonitorPosition()
+ {
+ await Task.Run(() =>
+ {
+ while (CurrentState != EnumHelper.DeviceState.DSClose && CurrentState != EnumHelper.DeviceState.DSExcept && CurrentState != EnumHelper.DeviceState.DSUninit)
+ {
+ try
+ {
+ if (!IConfig.IsEnableMonitor)
+ return;
+
+ AxisStatusList.ForEach(a =>
+ {
+ int curPosition = (int)GetPrfPosition(a.AxisIndex);
+
+ if (a.CurPosition != curPosition)
+ {
+ a.CurPosition = curPosition;
+ AxisPositionChanged(a.AxisIndex, curPosition);
+ }
+ });
+
+ _positionWait.SpinOnce();
+ }
+ catch (Exception ex)
+ {
+ if (CurrentState == DeviceState.DSOpen)
+ {
+ LogAsync(DateTime.Now, $"{this.Name}鐩戝惉杞翠俊鎭紓甯�", ex.GetExceptionMessage());
+ }
+ }
+ }
+ });
+ }
+
+ SpinWait _statusWait = new SpinWait();
+ private async void MonitorAxisStatus()
+ {
+ await Task.Run(() =>
+ {
+ while (CurrentState != EnumHelper.DeviceState.DSClose && CurrentState != EnumHelper.DeviceState.DSExcept && CurrentState != EnumHelper.DeviceState.DSUninit)
+ {
+ try
+ {
+ if (!IConfig.IsEnableMonitor)
+ return;
+
+ AxisStatusList.ForEach(a =>
+ {
+ int curStatus = GetAxisStatus(a.AxisIndex);
+
+ if (a.AxisStatus != curStatus)
+ {
+ int temp = a.AxisStatus;
+ a.AxisStatus = curStatus;
+ AxisStatusChanged(a.AxisIndex, temp, curStatus);
+ }
+ });
+
+ _statusWait.SpinOnce();
+ }
+ catch (Exception ex)
+ {
+ if (CurrentState == DeviceState.DSOpen)
+ {
+ LogAsync(DateTime.Now, $"{this.Name}鐩戝惉杞翠俊鎭紓甯�", ex.GetExceptionMessage());
+ }
+ }
+ }
+ });
+ }
+
public async override void Monitor()
{
await Task.Run(() =>
@@ -1176,9 +1251,9 @@
return;
var newValues = GetMonitorValues();
- var newAxisMovingStatus = GetAxisMovingStatus();
+ //var newAxisMovingStatus = GetAxisMovingStatus();
- if (newValues == null || newValues.Count == 0 || newAxisMovingStatus == null || newAxisMovingStatus.Count == 0)
+ if (newValues == null || newValues.Count == 0 )
continue;
//Stopwatch sw = new Stopwatch();
@@ -1192,14 +1267,14 @@
MonitorCheckAndInvoke(tempNew, tempOld);
}
- if (AxisStatusList.Count == newAxisMovingStatus.Count)
- {
- var tempNew = new List<AxisMovingStatus>(newAxisMovingStatus);//clone
- var tempOld = new List<AxisMovingStatus>(AxisStatusList);
- AxisStatusCheck(tempNew, tempOld);
- }
+ //if (AxisStatusList.Count == newAxisMovingStatus.Count)
+ //{
+ // var tempNew = new List<AxisMovingStatus>(newAxisMovingStatus);//clone
+ // var tempOld = new List<AxisMovingStatus>(AxisStatusList);
+ // AxisStatusCheck(tempNew, tempOld);
+ //}
- AxisStatusList = new List<AxisMovingStatus>(newAxisMovingStatus);
+ //AxisStatusList = new List<AxisMovingStatus>(newAxisMovingStatus);
MonitorValues = new List<IOItem>(newValues);
//sw.Stop();
diff --git a/src/Bro.M071.Process/M071Process.cs b/src/Bro.M071.Process/M071Process.cs
index a3a23dc..155f253 100644
--- a/src/Bro.M071.Process/M071Process.cs
+++ b/src/Bro.M071.Process/M071Process.cs
@@ -1061,139 +1061,147 @@
private async void RunImageHandle(IOperationConfig opConfig, IImageSet imgSet, string snapshotId, string snapshotName, List<MeasurementUnit> measureList)
{
await Task.Run(() =>
- {
- var keys = Config.KeyUnitCollection.Where(u => u.IsEnabled && u.SnapshotPointId == snapshotId);
- var keyBindCollection = measureList.SelectMany(u => u.KeyUnitCollection).Where(u => keys.Any(k => k.Key == u.Key)).ToList();
+ {
+ var keys = Config.KeyUnitCollection.Where(u => u.IsEnabled && u.SnapshotPointId == snapshotId);
+ var keyBindCollection = measureList.SelectMany(u => u.KeyUnitCollection).Where(u => keys.Any(k => k.Key == u.Key)).ToList();
- string toolKey = (opConfig as CameraOprerationConfigBase).AlgorithemPath;
- //HObject images = imgSet.HImage;
+ string toolKey = (opConfig as CameraOprerationConfigBase).AlgorithemPath;
+ //HObject images = imgSet.HImage;
- HObject images = new HObject();
- LaserScanParam scanParam = JsonConvert.DeserializeObject<LaserScanParam>(imgSet.ImageData);
- LogAsync(DateTime.Now, $"鎵弿鍙傛暟:{imgSet.ImageData}", "");
+ HObject images = new HObject();
+ LaserScanParam scanParam = JsonConvert.DeserializeObject<LaserScanParam>(imgSet.ImageData);
+ LogAsync(DateTime.Now, $"鎵弿鍙傛暟:{imgSet.ImageData}", "");
- if (!string.IsNullOrWhiteSpace(toolKey))
- {
- toolKey = snapshotId + "|" + toolKey;
- if (!_halconToolDict.ContainsKey(toolKey))
- {
- LogAsync(DateTime.Now, $"{snapshotName}鏈垵濮嬪寲鍙栧浘绠楁硶閰嶇疆", "");
- keyBindCollection.ForEach(k => k.FillKeyValues(null));
- return;
- }
+ if (!string.IsNullOrWhiteSpace(toolKey))
+ {
+ toolKey = snapshotId + "|" + toolKey;
+ if (!_halconToolDict.ContainsKey(toolKey))
+ {
+ LogAsync(DateTime.Now, $"{snapshotName}鏈垵濮嬪寲鍙栧浘绠楁硶閰嶇疆", "");
+ keyBindCollection.ForEach(k => k.FillKeyValues(null));
+ return;
+ }
- //string fileName = Path.Combine(Config.ImageSaveFolder, "BeforeRun", $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.tif");
- //imgSet.HImage.WriteImage("tiff", 0, fileName);
+ //string fileName = Path.Combine(Config.ImageSaveFolder, "BeforeRun", $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.tif");
+ //imgSet.HImage.WriteImage("tiff", 0, fileName);
- _halconToolDict[toolKey].InputImageDic["INPUT_Image"] = imgSet.HImage;
- if (!_halconToolDict[toolKey].RunProcedure(out string error))
- {
- LogAsync(DateTime.Now, $"{snapshotName}鍙栧浘绠楁硶寮傚父锛寋error}", "");
- keyBindCollection.ForEach(k => k.FillKeyValues(null));
- return;
- }
+ if (imgSet.HImage == null)
+ {
+ LogAsync(DateTime.Now, $"{snapshotName}鍥剧墖涓虹┖瀵硅薄", "");
+ keyBindCollection.ForEach(k => k.FillKeyValues(null));
+ return;
+ }
- images = _halconToolDict[toolKey].GetResultObject("OUTPUT_Images");
- }
+ _halconToolDict[toolKey].InputImageDic["INPUT_Image"] = imgSet.HImage;
+ if (!_halconToolDict[toolKey].RunProcedure(out string error))
+ {
+ LogAsync(DateTime.Now, $"{snapshotName}鍙栧浘绠楁硶寮傚父锛寋error}", "");
+ keyBindCollection.ForEach(k => k.FillKeyValues(null));
+ return;
+ }
- HOperatorSet.CountObj(images, out HTuple count);
- LogAsync(DateTime.Now, $"{snapshotName}鍒囧浘{count.I}寮�", "");
+ images = _halconToolDict[toolKey].GetResultObject("OUTPUT_Images");
+ }
- if (count == 0)
- {
- LogAsync(DateTime.Now, $"{snapshotName}鍙栧浘绠楁硶鏈緭鍑哄浘鍍�", "");
- keyBindCollection.ForEach(k => k.FillKeyValues(null));
- return;
- }
+ HOperatorSet.CountObj(images, out HTuple count);
+ LogAsync(DateTime.Now, $"{snapshotName}鍒囧浘{count.I}寮�", "");
- var excludeKeys = keys.Where(u => u.ImageSeq > count.I).ToList();
- if (excludeKeys.Count > 0)
- {
- LogAsync(DateTime.Now, $"{string.Join(" ", excludeKeys.Select(u => u.AliasName))}鏈湪鍥剧墖鑾峰彇搴忓垪涓�", "");
- keyBindCollection.Where(k => excludeKeys.Any(u => u.Key == k.Key)).ToList().ForEach(k =>
- {
- k.FillKeyValues(null);
- });
- }
+ if (count == 0)
+ {
+ LogAsync(DateTime.Now, $"{snapshotName}鍙栧浘绠楁硶鏈緭鍑哄浘鍍�", "");
+ keyBindCollection.ForEach(k => k.FillKeyValues(null));
+ return;
+ }
- //string dir = Path.Combine(Config.ImageSaveFolder, "Clips", $"{DateTime.Now.ToString("yyyyMMdd")}", $"{snapshotName}_{DateTime.Now.ToString("HHmmss")}");
- //if (!Directory.Exists(dir))
- //{
- // Directory.CreateDirectory(dir);
- //}
+ var excludeKeys = keys.Where(u => u.ImageSeq > count.I).ToList();
+ if (excludeKeys.Count > 0)
+ {
+ LogAsync(DateTime.Now, $"{string.Join(" ", excludeKeys.Select(u => u.AliasName))}鏈湪鍥剧墖鑾峰彇搴忓垪涓�", "");
+ keyBindCollection.Where(k => excludeKeys.Any(u => u.Key == k.Key)).ToList().ForEach(k =>
+ {
+ k.FillKeyValues(null);
+ });
+ }
- //Parallel.For(1, count.I + 1, (i) =>
- for (int i = 1; i <= count.I; i++)
- {
- HOperatorSet.SelectObj(images, out HObject image, i);
+ //string dir = Path.Combine(Config.ImageSaveFolder, "Clips", $"{DateTime.Now.ToString("yyyyMMdd")}", $"{snapshotName}_{DateTime.Now.ToString("HHmmss")}");
+ //if (!Directory.Exists(dir))
+ //{
+ // Directory.CreateDirectory(dir);
+ //}
- //string fileName = Path.Combine(dir, $"{i}.tif");
- //using (HImage temp = image.ConvertHObjectToHImage())
- //{
- // temp.WriteImage("tiff", 0, fileName);
- //}
+ //Parallel.For(1, count.I + 1, (i) =>
+ for (int i = 1; i <= count.I; i++)
+ {
+ HOperatorSet.SelectObj(images, out HObject image, i);
- keys.Where(u => u.ImageSeq == i).ToList().ForEach(k =>
- {
- Dictionary<string, double> resultDict = null;
+ //string fileName = Path.Combine(dir, $"{i}.tif");
+ //using (HImage temp = image.ConvertHObjectToHImage())
+ //{
+ // temp.WriteImage("tiff", 0, fileName);
+ //}
- var keyBindList = keyBindCollection.Where(u => u.Key == k.Key).ToList();
+ keys.Where(u => u.ImageSeq == i).ToList().ForEach(k =>
+ {
+ Dictionary<string, double> resultDict = null;
- string keyToolKey = k.AliasName + "|" + k.KeyAlgorithemPath;
- if (!_halconToolDict.ContainsKey(keyToolKey))
- {
- LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬畻娉曟湭鍒濆鍖�", "");
- }
- else
- {
- _halconToolDict[keyToolKey].InputImageDic["INPUT_Image"] = image;
- _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X / 1000000.0;
- _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Y"] = scanParam.Resolution_Y / 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}", "");
- }
- else
- {
- var results = _halconToolDict[keyToolKey].GetResultTuple("OUTPUT_Results").DArr.ToList();
- if (results.Count == 0 || results.Any(u => u < 0))
- {
- LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁寮傚父", "");
- }
- else
- {
- //LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁", $"{string.Join(" ", results)}");
+ var keyBindList = keyBindCollection.Where(u => u.Key == k.Key).ToList();
- results = results.Select(u => u - Config.PlanCompensation).ToList();
- resultDict = k.KeyResultList.ToDictionary(u => u, u =>
- {
- int index = k.KeyResultList.IndexOf(u);
- return results[index];
- });
- }
- }
- }
+ string keyToolKey = k.AliasName + "|" + k.KeyAlgorithemPath;
+ if (!_halconToolDict.ContainsKey(keyToolKey))
+ {
+ LogAsync(DateTime.Now, $"{k.AliasName}妫�娴嬬畻娉曟湭鍒濆鍖�", "");
+ }
+ else
+ {
+ _halconToolDict[keyToolKey].InputImageDic["INPUT_Image"] = image;
+ _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_X"] = scanParam.Resolution_X / 1000000.0;
+ _halconToolDict[keyToolKey].InputTupleDic["INPUT_Resolution_Y"] = scanParam.Resolution_Y / 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}", "");
+ }
+ else
+ {
+ var results = _halconToolDict[keyToolKey].GetResultTuple("OUTPUT_Results").DArr.ToList();
+ if (results.Count == 0 || results.Any(u => u < 0))
+ {
+ LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁寮傚父", "");
+ }
+ else
+ {
+ //LogAsync(DateTime.Now, $"{k.AliasName}鍘熷鏁版嵁", $"{string.Join(" ", results)}");
- keyBindList.ForEach(kb =>
- {
- kb.KeyImages.Add(image.ConvertHObjectToHImage());
- kb.FillKeyValues(resultDict);
- });
- });
+ results = results.Select(u => u - Config.PlanCompensation).ToList();
+ resultDict = k.KeyResultList.ToDictionary(u => u, u =>
+ {
+ int index = k.KeyResultList.IndexOf(u);
+ return results[index];
+ });
+ }
+ }
+ }
- image.Dispose();
- }
- //);
+ keyBindList.ForEach(kb =>
+ {
+ kb.KeyImages.Add(image.ConvertHObjectToHImage());
+ kb.FillKeyValues(resultDict);
+ });
+ });
- images.Dispose();
- //if (count.I != 1)
- //{
- // hImage?.Dispose();
- // hImage = null;
- //}
- });
+ image.Dispose();
+ }
+ //);
+
+ imgSet.HImage.Dispose();
+ images.Dispose();
+ //if (count.I != 1)
+ //{
+ // hImage?.Dispose();
+ // hImage = null;
+ //}
+ });
}
#endregion
}
diff --git a/src/Bro.Process/Bro.Process.csproj b/src/Bro.Process/Bro.Process.csproj
index e56f5e8..cbf405b 100644
--- a/src/Bro.Process/Bro.Process.csproj
+++ b/src/Bro.Process/Bro.Process.csproj
@@ -128,7 +128,9 @@
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
- <None Include="Setting.json" />
+ <None Include="Setting.json">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </None>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Forms\Calibration\FrmCalibration_9P.resx">
--
Gitblit v1.8.0