| | |
| | | |
| | | public override List<AxisInfo> GetCurrentAxisInfo(params string[] axisName) |
| | | { |
| | | throw new NotImplementedException(); |
| | | List<AxisInfo> axisInfos = new List<AxisInfo>(); |
| | | IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisSetting => |
| | | { |
| | | AxisInfo axisInfo = new AxisInfo(); |
| | | axisInfo.AxisName = axisSetting.AxisName; |
| | | var axisMovingStatus = AxisMovingOptionValues.FirstOrDefault(u => u.AxisIndex == axisSetting.AxisIndex); |
| | | axisInfo.AxisLocation = axisMovingStatus == null ? 0 : Convert.ToDouble(axisMovingStatus.CurPosition); |
| | | |
| | | axisInfos.Add(axisInfo); |
| | | }); |
| | | return axisInfos; |
| | | } |
| | | |
| | | #region DeviceBase |
| | |
| | | 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()); |
| | | axisImmediatePauseHandleDict = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ToDictionary(a => a.AxisIndex, a => new ManualResetEvent(true)); |
| | | axisMoveCancelDict = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ToDictionary(a => a.AxisIndex, a => new CancellationTokenSource()); |
| | | |
| | | axisMoveCancelDict.Values.ToList().ForEach(c => |
| | | { |
| | |
| | | }); |
| | | } |
| | | |
| | | ManualResetEvent _pauseHandle = new ManualResetEvent(true); |
| | | protected override void Pause() |
| | | { |
| | | |
| | |
| | | ResponseMessage responseMessage = new ResponseMessage(); |
| | | if (config is MotionCardOperationConfigBase motionCardOperationConfig) |
| | | { |
| | | _pauseHandle.WaitOne(); |
| | | foreach (var operationSet in motionCardOperationConfig.OperationCollection) |
| | | { |
| | | responseMessage = RunOperationSet(operationSet); |
| | |
| | | { |
| | | if (!_isResetting) |
| | | { |
| | | var immediatePauseAxis = IConfig.AxisSettings.Where(u => u.IsImmediatePause).Select(u => u.AxisIndex).ToList(); |
| | | var immediatePauseAxis = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled && a.IsImmediatePause).Select(u => u.AxisIndex).ToList(); |
| | | |
| | | immediatePauseAxis.ForEach(async axisIndex => |
| | | { |
| | |
| | | /// </summary> |
| | | public void ResetImmediatePause() |
| | | { |
| | | var immediatePauseAxis = IConfig.AxisSettings.Where(u => u.IsImmediatePause).Select(u => u.AxisIndex).ToList(); |
| | | var immediatePauseAxis = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled && a.IsImmediatePause).Select(u => u.AxisIndex).ToList(); |
| | | |
| | | immediatePauseAxis.ForEach(axisIndex => |
| | | { |
| | |
| | | { |
| | | var res = GTSCardAPI.GT_Open((short)IConfig.CardNum, 0, 1); //打开运动控制器。参数必须为(0,1),不能修改。 |
| | | res += GTSCardAPI.GT_LoadConfig((short)IConfig.CardNum, IConfig.InitialConfigFilePath); |
| | | res += GTSCardAPI.GT_ClrSts(0, 1, 8); |
| | | ClearStatus(1, IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count); |
| | | if (res != (short)GTSRetCode.GRCRunOK) |
| | | { |
| | | throw new Exception("板卡载入配置文件异常,错误码:" + res); |
| | |
| | | } |
| | | |
| | | |
| | | public bool AllAxisOn() |
| | | public override bool AllAxisOn() |
| | | { |
| | | List<Task<bool>> taskList = new List<Task<bool>>(); ; |
| | | // 如果是多个轴的运动 等每个轴开启 |
| | | IConfig.AxisSettings.Where(a => a.IsAxisEnabled).ToList().ForEach(axisNum => |
| | | IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisNum => |
| | | { |
| | | var task = AxisOnAsync((short)IConfig.CardNum, (short)axisNum.AxisIndex); |
| | | var task = AxisOnAsync(axisNum.AxisIndex); |
| | | taskList.Add(task); |
| | | }); |
| | | Task.WaitAll(taskList.ToArray()); |
| | |
| | | return resultOK; |
| | | } |
| | | |
| | | public bool AllAxisOff() |
| | | public override bool AllAxisOff() |
| | | { |
| | | List<Task<bool>> taskList = new List<Task<bool>>(); ; |
| | | // 如果是多个轴的运动 等每个轴关闭 |
| | | IConfig.AxisSettings.Where(a => a.IsAxisEnabled).ToList().ForEach(axisNum => |
| | | IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ForEach(axisNum => |
| | | { |
| | | var task = AxisOffAsync((short)IConfig.CardNum, (short)axisNum.AxisIndex); |
| | | var task = AxisOffAsync(axisNum.AxisIndex); |
| | | taskList.Add(task); |
| | | }); |
| | | Task.WaitAll(taskList.ToArray()); |
| | |
| | | /// 单个轴开启 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public async Task<bool> AxisOnAsync(short cardNum, short axisNum) |
| | | public override async Task<bool> AxisOnAsync(int axisNum) |
| | | { |
| | | return await Task.Run(() => |
| | | { |
| | | var ret = GTSCardAPI.GT_AxisOn(cardNum, axisNum); |
| | | var ret = GTSCardAPI.GT_AxisOn((short)IConfig.CardNum, (short)axisNum); |
| | | return ret == (short)GTSRetCode.GRCRunOK; |
| | | }); |
| | | } |
| | |
| | | /// 单个轴关闭 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | public async Task<bool> AxisOffAsync(short cardNum, short axisNum) |
| | | public override async Task<bool> AxisOffAsync(int axisNum) |
| | | { |
| | | return await Task.Run(() => |
| | | { |
| | | var ret = GTSCardAPI.GT_AxisOff(cardNum, axisNum); |
| | | var ret = GTSCardAPI.GT_AxisOff((short)IConfig.CardNum, (short)axisNum); |
| | | return ret == (short)GTSRetCode.GRCRunOK; |
| | | }); |
| | | } |
| | |
| | | ResponseMessage responseMessage = new ResponseMessage(); |
| | | if (opConfig is MotionOperationCollection gtsOperationCollection) |
| | | { |
| | | _pauseHandle.WaitOne(); |
| | | List<Task<bool>> taskList = new List<Task<bool>>(); |
| | | foreach (var movingOp in gtsOperationCollection.MovingOps) |
| | | { |
| | |
| | | /// 单个轴 运动(点到点 jog 回零...) |
| | | /// </summary> |
| | | /// <param name="optionPara">运动参数对象</param> |
| | | public async Task<bool> SingleAxisMoving(MovingOption optionPara) |
| | | public override async Task<bool> SingleAxisMoving(MovingOption optionPara) |
| | | { |
| | | return await Task.Run(() => |
| | | { |
| | |
| | | /// <param name="axisNum">axisNo</param> |
| | | /// <param name="option">0表示平滑停止,1表示紧急停止</param> |
| | | /// <returns></returns> |
| | | public async Task<bool> MoveStop(int axisNum, int option) |
| | | public override async Task<bool> MoveStop(int axisNum, int option) |
| | | { |
| | | return await Task.Run(() => |
| | | { |
| | |
| | | /// <summary> |
| | | /// 读取轴状态 |
| | | /// </summary> |
| | | /// <param name="cardNum">板卡号</param> |
| | | /// <param name="axisNum">轴号</param> |
| | | /// <returns></returns> |
| | | public int GetAxisStatus(int axisNum) |
| | | public override int GetAxisStatus(int axisNum) |
| | | { |
| | | lock (moveLock) |
| | | { |
| | |
| | | return sts; |
| | | } |
| | | } |
| | | |
| | | public override bool ClearStatus(int startAxisIndex, int count) |
| | | { |
| | | var rtn = GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, (short)startAxisIndex, (short)count); |
| | | return rtn == (short)GTSRetCode.GRCRunOK; |
| | | } |
| | | |
| | | public override bool PositionReset(int startAxisIndex, int count) |
| | | { |
| | | var rtn = GTSCardAPI.GT_ZeroPos((short)IConfig.CardNum, (short)startAxisIndex, (short)count); |
| | | return rtn == (short)GTSRetCode.GRCRunOK; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region IMonitor |
| | |
| | | { |
| | | int axis_sts; |
| | | var axisSettings = IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled); |
| | | GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)axisSettings.Count); |
| | | ClearStatus(1, axisSettings.Count); |
| | | foreach (var axisSetting in axisSettings) |
| | | { |
| | | axis_sts = GetAxisStatus((short)axisSetting.AxisIndex); |
| | |
| | | } |
| | | |
| | | // 清除状态 |
| | | GTSCardAPI.GT_ClrSts((short)IConfig.CardNum, 1, (short)IConfig.AxisSettings.FindAll(u => u.IsAxisEnabled).Count); |
| | | ClearStatus(1, axisSettings.Count); |
| | | } |
| | | |
| | | object _alarmLock = new object(); |