From 5bf1b91009a182188d6d2245aa71653801eea60b Mon Sep 17 00:00:00 2001
From: wells <123>
Date: 星期日, 12 七月 2020 18:09:54 +0800
Subject: [PATCH] debug

---
 src/Bro.Device.GTSCard/GTSCardDriver.cs |  230 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 136 insertions(+), 94 deletions(-)

diff --git a/src/Bro.Device.GTSCard/GTSCardDriver.cs b/src/Bro.Device.GTSCard/GTSCardDriver.cs
index a09fda2..a917333 100644
--- a/src/Bro.Device.GTSCard/GTSCardDriver.cs
+++ b/src/Bro.Device.GTSCard/GTSCardDriver.cs
@@ -118,11 +118,17 @@
             {
                 foreach (var operationSet in motionCardOperationConfig.OperationCollection)
                 {
+                    if (operationSet.DelayBefore > 0)
+                        Thread.Sleep(operationSet.DelayBefore);
+
                     responseMessage = RunOperationSet(operationSet);
                     if (!responseMessage.Result)
                     {
                         return responseMessage;
                     }
+
+                    if (operationSet.DelayAfter > 0)
+                        Thread.Sleep(operationSet.DelayAfter);
                 }
             }
             return responseMessage;
@@ -177,13 +183,16 @@
             {
                 foreach (var ioOutput in operationSet.IOOutputCollection)
                 {
-                    var ioData = MonitorValues.FirstOrDefault(u => u.IONum == ioOutput.IOItem.IONum && u.IOType == ioOutput.IOItem.IOType)?.Value;//IO 鏄紑銆佸叧 浠嶮onitorValues 鑾峰彇
-                    if (ioOutput.CheckValue != ioData)
-                    {
-                        responseMessage.Result = false;
-                        responseMessage.Message = $"IO杈撳嚭涓嶉�氳繃锛岄厤缃細{ioOutput.GetDisplayText()}锛屽綋鍓嶅�硷細{ioData}";
-                        return responseMessage;
-                    }
+                    WriteOutput((short)ioOutput.IOItem.IONum, ioOutput.CheckValue);
+
+                    //var ioData = MonitorValues.FirstOrDefault(u => u.IONum == ioOutput.IOItem.IONum && u.IOType == ioOutput.IOItem.IOType)?.Value;//IO 鏄紑銆佸叧 浠嶮onitorValues 鑾峰彇
+
+                    //if (ioOutput.CheckValue != ioData)
+                    //{
+                    //    responseMessage.Result = false;
+                    //    responseMessage.Message = $"IO杈撳嚭涓嶉�氳繃锛岄厤缃細{ioOutput.GetDisplayText()}锛屽綋鍓嶅�硷細{ioData}";
+                    //    return responseMessage;
+                    //}
                 }
             }
 
@@ -338,15 +347,22 @@
             ResponseMessage responseMessage = new ResponseMessage();
             if (opConfig is MotionOperationCollection gtsOperationCollection)
             {
-                List<Task<bool>> taskList = new List<Task<bool>>();
-                foreach (var movingOp in gtsOperationCollection.MovingOps)
+                //List<Task<bool>> taskList = new List<Task<bool>>();
+                //foreach (var movingOp in gtsOperationCollection.MovingOps)
+                //{
+                //    var task = SingleAxisMoving(movingOp);
+                //    taskList.Add(task);
+                //    task.Start();
+                //}
+                //Task.WaitAll(taskList.ToArray());                
+                //responseMessage.Result = taskList.All(u => u.GetAwaiter().GetResult());
+
+                List<bool> resultList = new List<bool>();
+                Parallel.ForEach(gtsOperationCollection.MovingOps, movingOp =>
                 {
-                    var task = SingleAxisMoving(movingOp);
-                    taskList.Add(task);
-                    task.Start();
-                }
-                Task.WaitAll(taskList.ToArray());
-                responseMessage.Result = taskList.All(u => u.GetAwaiter().GetResult());
+                    resultList.Add(SingleAxisMoving(movingOp).Result);
+                });
+                responseMessage.Result = resultList.All(u => u == true);
                 if (!responseMessage.Result)
                 {
                     responseMessage.Message = $"鐐逛綅杩愬姩寮傚父";
@@ -368,11 +384,23 @@
             resultCode.Add(GTSCardAPI.GT_PrfTrap((short)IConfig.CardNum, axisIndex));
             resultCode.Add(GTSCardAPI.GT_GetTrapPrm((short)IConfig.CardNum, axisIndex, out trapprm));
             trapprm.smoothTime = 1;
-            trapprm.acc = optionPara.VelocityPara.Acc != 0 ? optionPara.VelocityPara.Acc : 1;
-            trapprm.dec = optionPara.VelocityPara.Dec != 0 ? optionPara.VelocityPara.Dec : 1;
+
+            if (optionPara.VelocityPara.Acc != 0)
+            {
+                trapprm.acc = optionPara.VelocityPara.Acc;
+            }
+
+            if (optionPara.VelocityPara.Dec != 0)
+            {
+                trapprm.dec = optionPara.VelocityPara.Dec;
+            }
 
             resultCode.Add(GTSCardAPI.GT_SetTrapPrm((short)IConfig.CardNum, axisIndex, ref trapprm));
-            resultCode.Add(GTSCardAPI.GT_SetVel((short)IConfig.CardNum, axisIndex, optionPara.VelocityPara.Velocity * IConfig.AxisVelocityRatio));
+
+            if (optionPara.VelocityPara.Velocity != 0)
+            {
+                resultCode.Add(GTSCardAPI.GT_SetVel((short)IConfig.CardNum, axisIndex, optionPara.VelocityPara.Velocity * IConfig.AxisVelocityRatio));
+            }
 
             var resultOK = resultCode.All(u => u == (short)GTSRetCode.GRCRunOK);
             if (!resultOK)
@@ -389,7 +417,7 @@
         /// <param name="optionPara">杩愬姩鍙傛暟瀵硅薄</param>
         public override Task<bool> SingleAxisMoving(MovingOption optionPara)
         {
-            return new Task<bool>(() =>
+            return Task.Run(() =>
              {
                  axisImmediatePauseHandleDict[optionPara.AxisIndex].WaitOne();
                  bool isSuccessAndStop = false;
@@ -397,10 +425,10 @@
                  {
                      if (IConfig.AxisSettings.FirstOrDefault(a => a.AxisIndex == optionPara.AxisIndex)?.IsAxisEnabled ?? false)
                      {
-                         string _position = "";
+                         // string _position = "";
                          string motionType = optionPara.MoveMode == EnumHelper.MotionMode.Normal ? (optionPara.IsAbsolute ? "Abs" : "Rel") : optionPara.MoveMode.ToString();
 
-                         _position = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff},{optionPara.AxisIndex},{motionType},{GetPosition(optionPara.AxisIndex)},{GetPrfPosition(optionPara.AxisIndex)},{optionPara.Destination},";
+                         // _position = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff},{optionPara.AxisIndex},{motionType},{GetPosition(optionPara.AxisIndex)},{GetPrfPosition(optionPara.AxisIndex)},{optionPara.Destination},";
 
                          switch (optionPara.MoveMode)
                          {
@@ -435,9 +463,9 @@
                                  }
                                  break;
                          }
-                         _position += $"{GetPosition(optionPara.AxisIndex)},";
-                         _position += $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}";
-                         LogAsync(DateTime.Now, "", _position);
+                         //_position += $"{GetPosition(optionPara.AxisIndex)},";
+                         //_position += $"{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}";
+                         //LogAsync(DateTime.Now, "", _position);
                      }
                  }
                  catch (Exception ex)
@@ -680,7 +708,7 @@
                 short ret = 0;
                 bool isSuccessSetAxisParam = false;
                 int timeout = optionPara.MovingTimeout;
-                var AxisRatio = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex) == null ? 1 : IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex).AxisRatio;
+                //var AxisRatio = IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex) == null ? 1 : IConfig.AxisSettings.FirstOrDefault(u => u.AxisIndex == optionPara.AxisIndex).AxisRatio;
                 while (CurrentState == DeviceState.DSOpen && !_isPause)
                 {
                     //璁剧疆 杩愬姩鍙傛暟
@@ -774,63 +802,63 @@
             var resultOK = taskList.All(u => u.GetAwaiter().GetResult());
         }
 
-        /// <summary>
-        /// 鍥炲師鐐�
-        /// </summary>
-        /// <param name="movingOption">鍗″彿</param>
-        /// <param name="axisn">杞村彿</param>
-        /// <param name="homests">杞村洖鍘熺偣鐘舵��</param>
-        public bool GoHome(MovingOption movingOption)
-        {
-            try
-            {
-                PositionReset(movingOption.AxisIndex, 1);
-                GTSCardAPI.THomePrm thomeprm;
-                GTSCardAPI.THomeStatus homests;
-                // 鍚姩Home鎹曡幏
-                short rtn = GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME);
-                // 鍒囨崲鍒扮偣浣嶈繍鍔ㄦā寮�
-                rtn = GTSCardAPI.GT_PrfTrap((short)IConfig.CardNum, (short)movingOption.AxisIndex);
-                // 璇诲彇鐐逛綅妯″紡杩愬姩鍙傛暟
-                rtn = GTSCardAPI.GT_GetHomePrm((short)IConfig.CardNum, (short)movingOption.AxisIndex, out thomeprm);
+        ///// <summary>
+        ///// 鍥炲師鐐�
+        ///// </summary>
+        ///// <param name="movingOption">鍗″彿</param>
+        ///// <param name="axisn">杞村彿</param>
+        ///// <param name="homests">杞村洖鍘熺偣鐘舵��</param>
+        //public bool GoHome(MovingOption movingOption)
+        //{
+        //    try
+        //    {
+        //        PositionReset(movingOption.AxisIndex, 1);
+        //        GTSCardAPI.THomePrm thomeprm;
+        //        GTSCardAPI.THomeStatus homests;
+        //        // 鍚姩Home鎹曡幏
+        //        short rtn = GTSCardAPI.GT_SetCaptureMode((short)IConfig.CardNum, (short)movingOption.AxisIndex, GTSCardAPI.CAPTURE_HOME);
+        //        // 鍒囨崲鍒扮偣浣嶈繍鍔ㄦā寮�
+        //        rtn = GTSCardAPI.GT_PrfTrap((short)IConfig.CardNum, (short)movingOption.AxisIndex);
+        //        // 璇诲彇鐐逛綅妯″紡杩愬姩鍙傛暟
+        //        rtn = GTSCardAPI.GT_GetHomePrm((short)IConfig.CardNum, (short)movingOption.AxisIndex, out thomeprm);
 
-                thomeprm.mode = movingOption.GoHomePara.HomeMode;//鍥為浂鏂瑰紡
-                thomeprm.moveDir = movingOption.GoHomePara.HomeDir;//鍥為浂鏂瑰悜
-                thomeprm.edge = movingOption.GoHomePara.Edge;
-                thomeprm.velHigh = movingOption.GoHomePara.HighVelocity;
-                thomeprm.velLow = movingOption.GoHomePara.LowVelocity;
-                thomeprm.acc = movingOption.VelocityPara.Acc;
-                thomeprm.dec = movingOption.VelocityPara.Dec;
-                thomeprm.searchHomeDistance = movingOption.GoHomePara.SearchHomeDistance;//鎼滅储璺濈
-                thomeprm.homeOffset = movingOption.GoHomePara.HomeOffset;  //鍋忕Щ璺濈
-                thomeprm.escapeStep = movingOption.GoHomePara.EscapeStep;
-                rtn = GTSCardAPI.GT_GoHome((short)IConfig.CardNum, (short)movingOption.AxisIndex, ref thomeprm);  //鍚姩鍥為浂
+        //        thomeprm.mode = movingOption.GoHomePara.HomeMode;//鍥為浂鏂瑰紡
+        //        thomeprm.moveDir = movingOption.GoHomePara.HomeDir;//鍥為浂鏂瑰悜
+        //        thomeprm.edge = movingOption.GoHomePara.Edge;
+        //        thomeprm.velHigh = movingOption.GoHomePara.HighVelocity;
+        //        thomeprm.velLow = movingOption.GoHomePara.LowVelocity;
+        //        thomeprm.acc = movingOption.VelocityPara.Acc;
+        //        thomeprm.dec = movingOption.VelocityPara.Dec;
+        //        thomeprm.searchHomeDistance = movingOption.GoHomePara.SearchHomeDistance;//鎼滅储璺濈
+        //        thomeprm.homeOffset = movingOption.GoHomePara.HomeOffset;  //鍋忕Щ璺濈
+        //        thomeprm.escapeStep = movingOption.GoHomePara.EscapeStep;
+        //        rtn = GTSCardAPI.GT_GoHome((short)IConfig.CardNum, (short)movingOption.AxisIndex, ref thomeprm);  //鍚姩鍥為浂
 
-                bool isStop = false;
-                int repeatTime = 1000;
-                do
-                {
-                    Thread.Sleep(10);
-                    GTSCardAPI.GT_GetHomeStatus((short)IConfig.CardNum, (short)movingOption.AxisIndex, out homests);
+        //        bool isStop = false;
+        //        int repeatTime = 1000;
+        //        do
+        //        {
+        //            Thread.Sleep(10);
+        //            GTSCardAPI.GT_GetHomeStatus((short)IConfig.CardNum, (short)movingOption.AxisIndex, out homests);
 
-                    isStop = homests.run == 0;
-                    if (isStop && homests.error == 0)
-                    {
-                        Thread.Sleep(200);
-                        PositionReset(movingOption.AxisIndex, 1);
-                    }
-                    repeatTime--;
-                } while (!isStop && repeatTime > 0);
+        //            isStop = homests.run == 0;
+        //            if (isStop && homests.error == 0)
+        //            {
+        //                Thread.Sleep(200);
+        //                PositionReset(movingOption.AxisIndex, 1);
+        //            }
+        //            repeatTime--;
+        //        } while (!isStop && repeatTime > 0);
 
-                return isStop;
-            }
-            catch (Exception ex)
-            {
-                AllMoveStop(true);
-                OnExceptionOccured?.Invoke(DateTime.Now, ex);
-                return false;
-            }
-        }
+        //        return isStop;
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        AllMoveStop(true);
+        //        OnExceptionOccured?.Invoke(DateTime.Now, ex);
+        //        return false;
+        //    }
+        //}
 
         /// <summary>
         /// P2P鏂瑰紡鍥炲師鐐�
@@ -840,8 +868,11 @@
         {
             try
             {
+                StartCapture:
+
                 PositionReset(movingOption.AxisIndex, 1);
                 ClearStatus(movingOption.AxisIndex, 1);
+
                 GTSCardAPI.TTrapPrm trapPrm;
                 bool isStop = false;
                 //鎼滅储璺濈 闃舵1
@@ -857,8 +888,9 @@
                 sRtn = GTSCardAPI.GT_SetTrapPrm((short)IConfig.CardNum, (short)movingOption.AxisIndex, ref trapPrm);
                 // 璁剧疆鐐逛綅妯″紡鐩爣閫熷害锛屽嵆鍥炲師鐐归�熷害
                 sRtn = GTSCardAPI.GT_SetVel((short)IConfig.CardNum, (short)movingOption.AxisIndex, movingOption.GoHomePara.HighVelocity);
+
                 // 璁剧疆鐐逛綅妯″紡鐩爣浣嶇疆锛屽嵆鍘熺偣鎼滅储璺濈
-                sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, movingOption.GoHomePara.SearchHomeDistance);
+                sRtn = GTSCardAPI.GT_SetPos((short)IConfig.CardNum, (short)movingOption.AxisIndex, movingOption.GoHomePara.HomeDir == 1 ? 99999999 : -99999999);
                 // 鍚姩杩愬姩
                 sRtn = GTSCardAPI.GT_Update((short)IConfig.CardNum, 1 << (movingOption.AxisIndex - 1));
 
@@ -880,10 +912,19 @@
                     MoveStop((short)movingOption.AxisIndex, 0);
                     throw new ProcessException($"杩愬姩杞磠movingOption.AxisIndex} 锛屽洖鍘熺偣瓒呮椂寮傚父");
                 }
+
                 if (isStop && capture != 1)
                 {
-
                     ClearStatus((short)movingOption.AxisIndex, 1);
+
+                    var axisStatus = AxisStatusList.FirstOrDefault(u => u.AxisIndex == movingOption.AxisIndex);
+
+                    if (((axisStatus.AxisStatus & 0x20) != 0) || ((axisStatus.AxisStatus & 0x40) != 0))
+                    {
+                        movingOption.GoHomePara.HomeDir = (short)(movingOption.GoHomePara.HomeDir == 1 ? -1 : 1);
+                        goto StartCapture;
+                    }
+
                     throw new ProcessException($"杩愬姩杞磠movingOption.AxisIndex} 锛屽洖鍘熺偣瓒呮椂寮傚父");
                 }
 
@@ -957,7 +998,7 @@
             short outNum = (short)(index % 100 + 1);
             if ((int)value <= 1)
             {
-                GTSCardAPI.GT_SetDoBit((short)IConfig.CardNum, GTSCardAPI.MC_GPO, outNum, (short)value);
+                GTSCardAPI.GT_SetDoBit((short)IConfig.CardNum, GTSCardAPI.MC_GPO, outNum, IConfig.IsOutputReversed ? (short)(value == IOValue.TRUE ? 0 : 1) : (short)value);
             }
             else
             {
@@ -1091,8 +1132,8 @@
                         if (newValues == null || newValues.Count == 0 || newAxisMovingStatus == null || newAxisMovingStatus.Count == 0)
                             continue;
 
-                        Stopwatch sw = new Stopwatch();
-                        sw.Start();
+                        //Stopwatch sw = new Stopwatch();
+                        //sw.Start();
                         if (MonitorValues.Count == newValues.Count)
                         {
                             //var tempNew = newValues.DeepSerializeClone();//clone
@@ -1111,12 +1152,12 @@
 
                         AxisStatusList = new List<AxisMovingStatus>(newAxisMovingStatus);
                         MonitorValues = new List<IOItem>(newValues);
-                        sw.Stop();
+                        //sw.Stop();
 
-                        if (sw.ElapsedMilliseconds > 20)
-                        {
-                            LogAsync(DateTime.Now, $"{this.Name}杞鏃堕棿锛歿sw.ElapsedMilliseconds}", "");
-                        }
+                        //if (sw.ElapsedMilliseconds > 20)
+                        //{
+                        //    LogAsync(DateTime.Now, $"{this.Name}杞鏃堕棿锛歿sw.ElapsedMilliseconds}", "");
+                        //}
 
                         if (IConfig.MonitorInterval > 0)
                         {
@@ -1223,10 +1264,11 @@
                             monitorSet.OpConfig = new OperationConfigBase();
                         }
 
-                        monitorSet.OpConfig.InputPara = monitorSet.InputDataIndex.ConvertAll(index =>
-                        {
-                            return tempNew[index].Value == IOValue.TRUE ? 1 : 0;
-                        }).ToList();
+                        //monitorSet.OpConfig.InputPara = monitorSet.InputDataIndex.ConvertAll(index =>
+                        //{
+                        //    return tempNew[index].Value == IOValue.TRUE ? 1 : 0;
+                        //}).ToList();
+                        monitorSet.OpConfig.InputPara = new List<int>() { (int)newIOItem.Value };
 
                         ExcuteMonitorInvoke(DateTime.Now, monitorSet.InvokeDevice, this, monitorSet);
                     }
@@ -1248,8 +1290,8 @@
                 {
                     var rst = GTSCardAPI.GT_AxisOn((short)IConfig.CardNum, (short)axisSetting.AxisIndex);
                 }
-                // 鎵�鏈変綅缃闆�
-                PositionReset(1, axisSettings.Count);
+                //// 鎵�鏈変綅缃闆�
+                //PositionReset(1, axisSettings.Count);
                 // 姝f瀬闄愭姤璀�
                 if ((axis_sts & 0x20) != 0)
                 {

--
Gitblit v1.8.0