From 1491846b4736bc2e79604086acfd8544aa3ba384 Mon Sep 17 00:00:00 2001
From: wells.liu <wells.liu@broconcentric.com>
Date: 星期一, 07 九月 2020 12:09:46 +0800
Subject: [PATCH] Merge branch 'master' of http://gitblit.broconcentric.com:8088/r/M071

---
 src/Bro.Device.GTSCard/GTSCardDriver.cs |  158 +++++++++++++++++++++++++++-------------------------
 1 files changed, 81 insertions(+), 77 deletions(-)

diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index d87e661..c430886 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -443,7 +443,7 @@
                 {
                     axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne();
 
-                    if (!axisPauseResumeFlag[optionPara.AxisIndex])
+                    if (axisPauseResumeFlag.ContainsKey(optionPara.AxisIndex) && !axisPauseResumeFlag[optionPara.AxisIndex])
                         return true;
 
                     try
@@ -492,7 +492,7 @@
                         isSuccessAndStop = false;
                         LogAsync(DateTime.Now, $"杞磠optionPara.AxisIndex}杩愬姩寮傚父", ex.GetExceptionMessage());
                     }
-                } while (axisImmediatePauseFlag[optionPara.AxisIndex]);
+                } while (axisImmediatePauseFlag.ContainsKey(optionPara.AxisIndex) && axisImmediatePauseFlag[optionPara.AxisIndex]);
                 return isSuccessAndStop;
             });
         }
@@ -891,19 +891,12 @@
                 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;
@@ -913,88 +906,99 @@
                 // 璁剧疆鐐逛綅妯″紡鐩爣閫熷害锛屽嵆鍥炲師鐐归�熷害
                 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);
-
-                        //姝i檺浣�
-                        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);
+
+                            //姝i檺浣�
+                            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;
+                        //鍏坰top
+                        MoveStop((short)movingOption.AxisIndex, 0);
+                        ClearStatus((short)movingOption.AxisIndex, 1);
+
+                        //宸茬粡鎹曡幏鍒癏ome鎵嶅彲浠ュ洖闆� 闃舵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;
-                    }
-
-                    //鍏坰top
-                    MoveStop((short)movingOption.AxisIndex, 0);
-                    ClearStatus((short)movingOption.AxisIndex, 1);
-                    //宸茬粡鎹曡幏鍒癏ome鎵嶅彲浠ュ洖闆� 闃舵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)

--
Gitblit v1.8.0