| | |
| | | { |
| | | axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne(); |
| | | |
| | | if (!axisPauseResumeFlag[optionPara.AxisIndex]) |
| | | if (axisPauseResumeFlag.ContainsKey(optionPara.AxisIndex) && !axisPauseResumeFlag[optionPara.AxisIndex]) |
| | | return true; |
| | | |
| | | try |
| | |
| | | isSuccessAndStop = false; |
| | | LogAsync(DateTime.Now, $"轴{optionPara.AxisIndex}运动异常", ex.GetExceptionMessage()); |
| | | } |
| | | } while (axisImmediatePauseFlag[optionPara.AxisIndex]); |
| | | } while (axisImmediatePauseFlag.ContainsKey(optionPara.AxisIndex) && axisImmediatePauseFlag[optionPara.AxisIndex]); |
| | | return isSuccessAndStop; |
| | | }); |
| | | } |
| | |
| | | var goHomePara = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == movingOption.AxisIndex).GoHomePara; |
| | | bool homeDirection = goHomePara.IsHomeDirPositive; |
| | | bool isRightLimitReached = false; |
| | | |
| | | StartCapture: |
| | | |
| | | PositionReset(movingOption.AxisIndex, 1); |
| | | ClearStatus(movingOption.AxisIndex, 1); |
| | | short capture = 0; |
| | | |
| | | GTSCardAPI.TTrapPrm trapPrm; |
| | | bool isStop = false; |
| | | //搜索距离 阶段1 |
| | | // 启动Home捕获 |
| | | short sRtn = GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME); |
| | | |
| | | // 切换到点位运动模式 |
| | | sRtn = GTSCardAPI.GT_PrfTrap((short)IConfig.CardNum, (short)movingOption.AxisIndex); |
| | | short sRtn = GTSCardAPI.GT_PrfTrap((short)IConfig.CardNum, (short)movingOption.AxisIndex); |
| | | // 读取点位模式运动参数 |
| | | sRtn = GTSCardAPI.GT_GetTrapPrm((short)IConfig.CardNum, (short)movingOption.AxisIndex, out trapPrm); |
| | | trapPrm.acc = movingOption.VelocityPara.Acc; |
| | |
| | | // 设置点位模式目标速度,即回原点速度 |
| | | sRtn = GTSCardAPI.GT_SetVel((short)IConfig.CardNum, (short)movingOption.AxisIndex, goHomePara.HighVelocity); |
| | | |
| | | // 设置点位模式目标位置,即原点搜索距离 |
| | | sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, homeDirection ? 99999999 : -99999999); |
| | | // 启动运动 |
| | | sRtn = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (movingOption.AxisIndex - 1)); |
| | | |
| | | int repeatTime = goHomePara.GoHomeTimeOut * 1000; |
| | | short capture; |
| | | int pos; |
| | | uint clk;//时钟参数 |
| | | do |
| | | { |
| | | Thread.Sleep(IConfig.MonitorInterval); |
| | | // 读取捕获状态 |
| | | GTSCardAPI.GT_GetCaptureStatus((short)IConfig.CardNum, (short)movingOption.AxisIndex, out capture, out pos, 1, out clk); |
| | | isStop = IsStop((short)movingOption.AxisIndex); |
| | | repeatTime -= IConfig.MonitorInterval; |
| | | } while (!(isStop || capture == 1 || repeatTime <= 0)); |
| | | PositionReset(movingOption.AxisIndex, 1); |
| | | ClearStatus(movingOption.AxisIndex, 1); |
| | | |
| | | if (repeatTime <= 0) |
| | | { |
| | | MoveStop((short)movingOption.AxisIndex, 0); |
| | | throw new ProcessException($"运动轴{movingOption.AxisIndex} ,回原点超时异常"); |
| | | } |
| | | //搜索距离 阶段1 |
| | | // 启动Home捕获 |
| | | sRtn = GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME); |
| | | |
| | | if (isStop && capture != 1) |
| | | { |
| | | ClearStatus((short)movingOption.AxisIndex, 1); |
| | | // 设置点位模式目标位置,即原点搜索距离 |
| | | sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, homeDirection ? 99999999 : -99999999); |
| | | // 启动运动 |
| | | sRtn = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (movingOption.AxisIndex - 1)); |
| | | |
| | | int repeatTime = goHomePara.GoHomeTimeOut * 1000; |
| | | |
| | | bool isStop = false; |
| | | int pos; |
| | | uint clk;//时钟参数 |
| | | do |
| | | { |
| | | Thread.Sleep(IConfig.MonitorInterval * 5); |
| | | // 读取捕获状态 |
| | | GTSCardAPI.GT_GetCaptureStatus((short)IConfig.CardNum, (short)movingOption.AxisIndex, out capture, out pos, 1, out clk); |
| | | isStop = IsStop((short)movingOption.AxisIndex); |
| | | repeatTime -= IConfig.MonitorInterval * 5; |
| | | } while (!(isStop || capture == 1 || repeatTime <= 0)); |
| | | |
| | | if (repeatTime <= 0) |
| | | { |
| | | MoveStop((short)movingOption.AxisIndex, 0); |
| | | throw new ProcessException($"运动轴{movingOption.AxisIndex} ,回原点超时异常"); |
| | | } |
| | | |
| | | var axisStatus = AxisStatusList.FirstOrDefault(u => u.AxisIndex == movingOption.AxisIndex); |
| | | |
| | | if (((axisStatus.AxisStatus & 0x20) != 0) || ((axisStatus.AxisStatus & 0x40) != 0)) |
| | | if (isStop && capture != 1) |
| | | { |
| | | //movingOption.GoHomePara.HomeDir = (short)(movingOption.GoHomePara.HomeDir == 1 ? -1 : 1); |
| | | |
| | | //正限位 |
| | | if ((axisStatus.AxisStatus & 0x20) != 0 && !goHomePara.IsCaptureDirPositive) |
| | | if (((axisStatus.AxisStatus & 0x20) != 0) || ((axisStatus.AxisStatus & 0x40) != 0)) |
| | | { |
| | | isRightLimitReached = true; |
| | | //movingOption.GoHomePara.HomeDir = (short)(movingOption.GoHomePara.HomeDir == 1 ? -1 : 1); |
| | | |
| | | //正限位 |
| | | if ((axisStatus.AxisStatus & 0x20) != 0 && !goHomePara.IsCaptureDirPositive) |
| | | { |
| | | isRightLimitReached = true; |
| | | } |
| | | |
| | | //负限位 |
| | | if ((axisStatus.AxisStatus & 0x40) != 0 && goHomePara.IsCaptureDirPositive) |
| | | { |
| | | isRightLimitReached = true; |
| | | } |
| | | |
| | | homeDirection = !homeDirection; |
| | | } |
| | | |
| | | ClearStatus(movingOption.AxisIndex, 1); |
| | | } |
| | | |
| | | //负限位 |
| | | if ((axisStatus.AxisStatus & 0x40) != 0 && goHomePara.IsCaptureDirPositive) |
| | | if (capture == 1) |
| | | { |
| | | if (!isRightLimitReached) |
| | | { |
| | | isRightLimitReached = true; |
| | | capture = 0; |
| | | ClearStatus(movingOption.AxisIndex, 1); |
| | | //GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME); |
| | | continue; |
| | | } |
| | | |
| | | homeDirection = !homeDirection; |
| | | goto StartCapture; |
| | | //先stop |
| | | MoveStop((short)movingOption.AxisIndex, 0); |
| | | ClearStatus((short)movingOption.AxisIndex, 1); |
| | | |
| | | //已经捕获到Home才可以回零 阶段2 |
| | | // 运动到"捕获位置+偏移量" |
| | | sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, pos + goHomePara.HomeOffset); |
| | | // 在运动状态下更新目标位置 |
| | | sRtn = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (movingOption.AxisIndex - 1)); |
| | | isStop = false; |
| | | |
| | | repeatTime = 1000; |
| | | do |
| | | { |
| | | Thread.Sleep(20); |
| | | isStop = IsStop((short)movingOption.AxisIndex); |
| | | repeatTime--; |
| | | } while (!isStop && repeatTime > 0); |
| | | PositionReset(movingOption.AxisIndex, 1); |
| | | return (sRtn == (short)GTSRetCode.GRCRunOK) && isStop; |
| | | } |
| | | |
| | | throw new ProcessException($"运动轴{movingOption.AxisIndex} ,回原点超时异常"); |
| | | } |
| | | |
| | | if (capture == 1) |
| | | { |
| | | if (!isRightLimitReached) |
| | | { |
| | | capture = 0; |
| | | goto StartCapture; |
| | | } |
| | | |
| | | //先stop |
| | | MoveStop((short)movingOption.AxisIndex, 0); |
| | | ClearStatus((short)movingOption.AxisIndex, 1); |
| | | //已经捕获到Home才可以回零 阶段2 |
| | | // 运动到"捕获位置+偏移量" |
| | | sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, pos + goHomePara.HomeOffset); |
| | | // 在运动状态下更新目标位置 |
| | | sRtn = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (movingOption.AxisIndex - 1)); |
| | | isStop = false; |
| | | |
| | | repeatTime = 1000; |
| | | do |
| | | { |
| | | Thread.Sleep(20); |
| | | isStop = IsStop((short)movingOption.AxisIndex); |
| | | repeatTime--; |
| | | } while (!isStop && repeatTime > 0); |
| | | PositionReset(movingOption.AxisIndex, 1); |
| | | return (sRtn == (short)GTSRetCode.GRCRunOK) && isStop; |
| | | } |
| | | } while (!(capture == 1 && isRightLimitReached)); |
| | | return false; |
| | | } |
| | | catch (Exception ex) |