领胜LDS 键盘AOI检测项目
wells.liu
2020-07-07 5918194fccdb2a2303e713b8d2f3335243b9e2ef
板卡驱动
2个文件已修改
78 ■■■■ 已修改文件
src/Bro.Common.Model/Model/MotionCardRelated.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Device.GTSCard/GTSCardDriver.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Bro.Common.Model/Model/MotionCardRelated.cs
@@ -84,10 +84,10 @@
        //[Description("IsUseWarning:是否启用报警")]
        //public bool IsUseWarning { get; set; } = false;
        //[Category("暂停配置")]
        //[DisplayName("是否启用立即暂停")]
        //[Description("IsImmediatePause:是否启用立即暂停")]
        //public bool IsImmediatePause { get; set; } = false;
        [Category("暂停配置")]
        [DisplayName("是否启用立即暂停")]
        [Description("IsImmediatePause:是否启用立即暂停")]
        public bool IsImmediatePause { get; set; } = false;
        //[Category("暂停配置")]
        //[DisplayName("轴位置处于区间内时适用的暂停操作")]
src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -37,6 +37,13 @@
        /// </summary>
        bool _isResetting = false;
        /// <summary>
        /// 运动轴立即暂停
        /// </summary>
        Dictionary<int, ManualResetEvent> axisImmediatePauseHandleDict = new Dictionary<int, ManualResetEvent>();
        Dictionary<int, CancellationTokenSource> axisMoveCancelDict = new Dictionary<int, CancellationTokenSource>();
        public void SetResetFlag(bool isReset)
        {
            _isResetting = isReset;
@@ -52,16 +59,24 @@
        protected override void Init()
        {
            InitialMotionCard();
            axisImmediatePauseHandleDict = IConfig.AxisSettings.ToDictionary(a => a.AxisIndex, a => new ManualResetEvent(true));
            axisMoveCancelDict = IConfig.AxisSettings.ToDictionary(a => a.AxisIndex, a => new CancellationTokenSource());
            axisMoveCancelDict.Values.ToList().ForEach(c =>
            {
                c = new CancellationTokenSource();
            });
        }
        ManualResetEvent _pauseHandle = new ManualResetEvent(true);
        protected override void Pause()
        {
            throw new NotImplementedException();
        }
        protected override void Resume()
        {
            throw new NotImplementedException();
        }
        protected override void Start()
@@ -83,13 +98,16 @@
        public override ResponseMessage Run(IOperationConfig config)
        {
            ResponseMessage responseMessage = new ResponseMessage();
            var motionCardOperationConfig = config as MotionCardOperationConfigBase;
            if (config is MotionCardOperationConfigBase motionCardOperationConfig)
            {
                _pauseHandle.WaitOne();
            foreach (var operationSet in motionCardOperationConfig.OperationCollection)
            {
                responseMessage = RunOperationSet(operationSet);
                if (!responseMessage.Result)
                {
                    return responseMessage;
                    }
                }
            }
            return responseMessage;
@@ -185,6 +203,43 @@
        }
        #endregion
        #region ImmediatePause
        /// <summary>
        /// 启动立即暂停
        /// </summary>
        public void SetImmediatePause()
        {
            if (!_isResetting)
            {
                var immediatePauseAxis = IConfig.AxisSettings.Where(u => u.IsImmediatePause).Select(u => u.AxisIndex).ToList();
                immediatePauseAxis.ForEach(async axisIndex =>
                {
                    axisImmediatePauseHandleDict[axisIndex].Reset();
                    axisMoveCancelDict[axisIndex].Cancel();
                    await MoveStop(axisIndex, 0);
                });
            }
        }
        /// <summary>
        /// 恢复立即暂停
        /// </summary>
        public void ResetImmediatePause()
        {
            var immediatePauseAxis = IConfig.AxisSettings.Where(u => u.IsImmediatePause).Select(u => u.AxisIndex).ToList();
            immediatePauseAxis.ForEach(axisIndex =>
            {
                axisMoveCancelDict[axisIndex] = new CancellationTokenSource();
                axisImmediatePauseHandleDict[axisIndex].Set();
            });
        }
        #endregion
        #region GTSCard
        /// <summary>
@@ -266,7 +321,9 @@
        public override ResponseMessage MoveToPoint(IOperationConfig opConfig)
        {
            ResponseMessage responseMessage = new ResponseMessage();
            var gtsOperationCollection = opConfig as MotionOperationCollection;
            if (opConfig is MotionOperationCollection gtsOperationCollection)
            {
                _pauseHandle.WaitOne();
            List<Task<bool>> taskList = new List<Task<bool>>();
            foreach (var movingOp in gtsOperationCollection.MovingOps)
            {
@@ -279,6 +336,7 @@
            if (!responseMessage.Result)
            {
                responseMessage.Message = $"点位运动异常";
                }
            }
            return responseMessage;
        }
@@ -322,6 +380,8 @@
                {
                    if (IConfig.AxisSettings.FirstOrDefault(a => a.AxisIndex == optionPara.AxisIndex)?.IsAxisEnabled ?? false)
                    {
                        axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne();
                        string _position = "";
                        string motionType = optionPara.MoveMode == EnumHelper.MotionMode.Normal ? (optionPara.IsAbsolute ? "Abs" : "Rel") : optionPara.MoveMode.ToString();
@@ -575,6 +635,8 @@
        {
            try
            {
                axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne();
                if (_isResetting)
                {
                    LogAsync(DateTime.Now, "复位过程异常", "轴" + optionPara.AxisIndex + "试图在复位过程中运动");