From c65d55e3235dbdb17b7d13937a39c866f1822437 Mon Sep 17 00:00:00 2001 From: wells.liu <wells.liu@broconcentric.com> Date: 星期四, 09 七月 2020 09:54:19 +0800 Subject: [PATCH] 暂停与继续 --- src/Bro.Device.GTSCard/GTSCardDriver.cs | 55 ++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs index 918ed22..240c375 100644 --- a/src/Bro.Device.GTSCard/GTSCardDriver.cs +++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs @@ -38,11 +38,16 @@ bool _isResetting = false; /// <summary> + /// 鏄惁鏆傚仠涓� + /// </summary> + bool _isPause = false; + + /// <summary> /// 杩愬姩杞寸珛鍗虫殏鍋� /// </summary> Dictionary<int, ManualResetEvent> axisImmediatePauseHandleDict = new Dictionary<int, ManualResetEvent>(); - Dictionary<int, CancellationTokenSource> axisMoveCancelDict = new Dictionary<int, CancellationTokenSource>(); + //Dictionary<int, CancellationTokenSource> axisMoveCancelDict = new Dictionary<int, CancellationTokenSource>(); public void SetResetFlag(bool isReset) { @@ -70,12 +75,12 @@ { InitialMotionCard(); 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 = IConfig.AxisSettings.FindAll(a => a.IsAxisEnabled).ToDictionary(a => a.AxisIndex, a => new CancellationTokenSource()); - axisMoveCancelDict.Values.ToList().ForEach(c => - { - c = new CancellationTokenSource(); - }); + //axisMoveCancelDict.Values.ToList().ForEach(c => + //{ + // c = new CancellationTokenSource(); + //}); } protected override void Pause() @@ -225,9 +230,9 @@ { axisImmediatePauseHandleDict[axisIndex].Reset(); - axisMoveCancelDict[axisIndex].Cancel(); + //axisMoveCancelDict[axisIndex].Cancel(); - await MoveStop(axisIndex, 0); + await MoveStop(axisIndex, 0);//鎵�鏈夎酱閮芥殏鍋� }); } } @@ -241,7 +246,7 @@ immediatePauseAxis.ForEach(axisIndex => { - axisMoveCancelDict[axisIndex] = new CancellationTokenSource(); + //axisMoveCancelDict[axisIndex] = new CancellationTokenSource(); axisImmediatePauseHandleDict[axisIndex].Set(); }); @@ -381,14 +386,13 @@ public override async Task<bool> SingleAxisMoving(MovingOption optionPara) { return await Task.Run(() => - { + { + axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne(); bool isSuccessAndStop = false; try { 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(); @@ -670,7 +674,7 @@ short ret = 0; bool isSuccessSetAxisParam = false; int timeout = optionPara.MovingTimeout; - while (CurrentState == DeviceState.DSOpen) + while (CurrentState == DeviceState.DSOpen&&!_isPause) { //璁剧疆 杩愬姩鍙傛暟 isSuccessSetAxisParam = SetAxisParam(optionPara); @@ -691,12 +695,12 @@ bool isStop = false; repeatTime = 1000; - do + while (!isStop && repeatTime > 0) { isStop = IsStop((short)optionPara.AxisIndex); Thread.Sleep(50); repeatTime--; - } while (!isStop && repeatTime > 0); + } return (ret == (short)GTSRetCode.GRCRunOK) && isStop; } @@ -773,7 +777,7 @@ { try { - GTSCardAPI.GT_ZeroPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, 1); + PositionReset(movingOption.AxisIndex, 1); GTSCardAPI.THomePrm thomeprm; GTSCardAPI.THomeStatus homests; short rtn = GTSCardAPI.GT_GetHomePrm((short)IConfig.CardNum, (short)movingOption.AxisIndex, out thomeprm); @@ -800,7 +804,7 @@ if (isStop && homests.error == 0) { Thread.Sleep(200); - GTSCardAPI.GT_ZeroPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, 1); + PositionReset(movingOption.AxisIndex, 1); } repeatTime--; } while (!isStop && repeatTime > 0); @@ -897,10 +901,19 @@ return rtn == (short)GTSRetCode.GRCRunOK; } + /// <summary> + /// 浣嶇疆鍥為浂 + /// </summary> + /// <param name="startAxisIndex"></param> + /// <param name="count"></param> + /// <returns></returns> 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; + lock (moveLock) + { + var rtn = GTSCardAPI.GT_ZeroPos((short)IConfig.CardNum, (short)startAxisIndex, (short)count); + return rtn == (short)GTSRetCode.GRCRunOK; + } } #endregion @@ -1100,8 +1113,8 @@ { var rst = GTSCardAPI.GT_AxisOn((short)IConfig.CardNum, (short)axisSetting.AxisIndex); } - // 浣嶇疆璇烽浂 - GTSCardAPI.GT_ZeroPos((short)IConfig.CardNum, 1, (short)axisSettings.Count); + // 鎵�鏈変綅缃闆� + PositionReset(1, axisSettings.Count); // 姝f瀬闄愭姤璀� if ((axis_sts & 0x20) != 0) { -- Gitblit v1.8.0