领胜LDS 键盘AOI检测项目
wells.liu
2020-07-07 5918194fccdb2a2303e713b8d2f3335243b9e2ef
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;
            foreach (var operationSet in motionCardOperationConfig.OperationCollection)
            if (config is MotionCardOperationConfigBase motionCardOperationConfig)
            {
                responseMessage = RunOperationSet(operationSet);
                if (!responseMessage.Result)
                _pauseHandle.WaitOne();
                foreach (var operationSet in motionCardOperationConfig.OperationCollection)
                {
                    return responseMessage;
                    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,19 +321,22 @@
        public override ResponseMessage MoveToPoint(IOperationConfig opConfig)
        {
            ResponseMessage responseMessage = new ResponseMessage();
            var gtsOperationCollection = opConfig as MotionOperationCollection;
            List<Task<bool>> taskList = new List<Task<bool>>();
            foreach (var movingOp in gtsOperationCollection.MovingOps)
            if (opConfig is MotionOperationCollection gtsOperationCollection)
            {
                var task = SingleAxisMoving(movingOp);
                taskList.Add(task);
            }
                _pauseHandle.WaitOne();
                List<Task<bool>> taskList = new List<Task<bool>>();
                foreach (var movingOp in gtsOperationCollection.MovingOps)
                {
                    var task = SingleAxisMoving(movingOp);
                    taskList.Add(task);
                }
            Task.WaitAll(taskList.ToArray());
            responseMessage.Result = taskList.All(u => u.GetAwaiter().GetResult());
            if (!responseMessage.Result)
            {
                responseMessage.Message = $"点位运动异常";
                Task.WaitAll(taskList.ToArray());
                responseMessage.Result = taskList.All(u => u.GetAwaiter().GetResult());
                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();
@@ -472,7 +532,7 @@
                    if (ret != (short)GTSRetCode.GRCRunOK)
                    {
                        LogAsync(DateTime.Now, "轴" + optionPara.AxisIndex + "APS_absolute_move异常", "错误码:" + ret + ";" + "重试次数:" + repeatTime);
                        LogAsync(DateTime.Now, "轴" + optionPara.AxisIndex + "JogMove异常", "错误码:" + ret + ";" + "重试次数:" + repeatTime);
                        Thread.Sleep(10);
                    }
                    repeatTime--;
@@ -575,6 +635,8 @@
        {
            try
            {
                axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne();
                if (_isResetting)
                {
                    LogAsync(DateTime.Now, "复位过程异常", "轴" + optionPara.AxisIndex + "试图在复位过程中运动");