领胜LDS 键盘AOI检测项目
1. 取消ImageSet中的HImage释放动作,转移到业务流程中
2. 拆分板卡的IO监听和轴状态,轴位置监听
5个文件已修改
130 ■■■■ 已修改文件
src/Bro.Common.Device/DeviceBase/CameraBase.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardDriver.cs 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.M071.Process/M071Process.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Process/Bro.Process.csproj 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
    }
src/Bro.Common.Device/DeviceBase/MotionCardBase.cs
@@ -22,6 +22,7 @@
        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)
        {
@@ -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();
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();
src/Bro.M071.Process/M071Process.cs
@@ -1085,6 +1085,13 @@
                     //string fileName = Path.Combine(Config.ImageSaveFolder, "BeforeRun", $"{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.tif");
                     //imgSet.HImage.WriteImage("tiff", 0, fileName);
                    if (imgSet.HImage == null)
                    {
                        LogAsync(DateTime.Now, $"{snapshotName}图片为空对象", "");
                        keyBindCollection.ForEach(k => k.FillKeyValues(null));
                        return;
                    }
                     _halconToolDict[toolKey].InputImageDic["INPUT_Image"] = imgSet.HImage;
                     if (!_halconToolDict[toolKey].RunProcedure(out string error))
                     {
@@ -1187,6 +1194,7 @@
                 }
                 //);
                imgSet.HImage.Dispose();
                 images.Dispose();
                 //if (count.I != 1)
                 //{
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">