Browse Source

reivse bi-direction rotation routine

chenzk 1 week ago
parent
commit
48e4e08845
1 changed files with 45 additions and 19 deletions
  1. 45 19
      PunkHPX8_RT/Modules/PlatingCell/RotationBiDirectionRoutine.cs

+ 45 - 19
PunkHPX8_RT/Modules/PlatingCell/RotationBiDirectionRoutine.cs

@@ -22,19 +22,21 @@ namespace PunkHPX8_RT.Modules.PlatingCell
             StartBiDirection,
             LoopStart,
             LoopStartRotation,
-            LoopRotationWait,
-            LoopStopRotation,
-            LoopCheckStopRotation,
+            LoopStartRotationEnd,
+            //LoopRotationWait,
+            //LoopStopRotation,
+            //LoopCheckStopRotation,
             LoopUpdateRemain1,
             LoopReverseRotationStart,
-            LoopReverseRotationWait,
-            LooPStopRevserseRotation,
-            LoopCheckStopReverseRotation,
+            LoopReverseRotationEnd,
+            //LoopReverseRotationWait,
+            //LooPStopRevserseRotation,
+            //LoopCheckStopReverseRotation,
             LoopUpdateRemain2,
             LoopEnd,
             StartRemainRotation,
-            RemainRotationDelay,
-            StopRemainRotation,
+            //RemainRotationDelay,
+            //StopRemainRotation,
             CheckStopRemainRotation,
             End
         }
@@ -103,20 +105,22 @@ namespace PunkHPX8_RT.Modules.PlatingCell
             Runner.Run(BiDirectionStep.StartBiDirection, NullFun, _delay_1ms)
                  .LoopStart(BiDirectionStep.LoopStart, "Rotation Bi-Direction Step Start", _cycleCount, NullFun, _delay_1ms)
                  .LoopRunIf(BiDirectionStep.LoopStartRotation, _cycleCount > 0,() => { return StratRotation(true); }, _delay_1ms)
-                 .LoopDelayIf(BiDirectionStep.LoopRotationWait, _cycleCount > 0, _frequency * 1000)
-                 .LoopRunIf(BiDirectionStep.LoopStopRotation, _cycleCount > 0, _rotationAxis.StopPositionOperation,_delay_1ms)
-                 .LoopRunIfWithStopStatus(BiDirectionStep.LoopCheckStopRotation, _cycleCount > 0, CheckRotationPositionStatus, CheckRotationPositionRunStop)
+                 .LoopRunIfWithStopStatus(BiDirectionStep.LoopStartRotationEnd, _cycleCount > 0, CheckRotationPositionStatus, CheckRotationPositionRunStop)
+                 //.LoopDelayIf(BiDirectionStep.LoopRotationWait, _cycleCount > 0, _frequency * 1000)
+                 //.LoopRunIf(BiDirectionStep.LoopStopRotation, _cycleCount > 0, _rotationAxis.StopPositionOperation,_delay_1ms)
+                 //.LoopRunIfWithStopStatus(BiDirectionStep.LoopCheckStopRotation, _cycleCount > 0, CheckRotationPositionStatus, CheckRotationPositionRunStop)
                  .LoopRunIf(BiDirectionStep.LoopUpdateRemain1, _cycleCount > 0, UpdateRemain,  _delay_1ms)
                  .LoopRunIf(BiDirectionStep.LoopReverseRotationStart, _remainTimes != 0, () => { return StratRotation(false); }, _delay_1ms)
-                 .LoopDelayIf(BiDirectionStep.LoopReverseRotationWait, _remainTimes != 0, _frequency * 1000)
-                 .LoopRunIf(BiDirectionStep.LooPStopRevserseRotation, _remainTimes != 0, _rotationAxis.StopPositionOperation, _delay_1ms)
-                 .LoopRunIfWithStopStatus(BiDirectionStep.LoopCheckStopReverseRotation, _remainTimes != 0, CheckRotationPositionStatusWithStateupdate, CheckRotationPositionRunStop)
+                   .LoopRunIfWithStopStatus(BiDirectionStep.LoopReverseRotationEnd, _cycleCount > 0, CheckRotationPositionStatus, CheckRotationPositionRunStop)
+                 //.LoopDelayIf(BiDirectionStep.LoopReverseRotationWait, _remainTimes != 0, _frequency * 1000)
+                 //.LoopRunIf(BiDirectionStep.LooPStopRevserseRotation, _remainTimes != 0, _rotationAxis.StopPositionOperation, _delay_1ms)
+                 //.LoopRunIfWithStopStatus(BiDirectionStep.LoopCheckStopReverseRotation, _remainTimes != 0, CheckRotationPositionStatusWithStateupdate, CheckRotationPositionRunStop)
                  //.LoopRunIf(BiDirectionStep.LoopUpdateRemain2, _remainTimes != 0,UpdateRemain, _delay_1ms)
                  .LoopEnd(BiDirectionStep.LoopEnd, NullFun, _delay_1ms)
                  //剩余旋转时间(如果翻转次数是偶数,则正转,否则反转)
-                 .RunIf(BiDirectionStep.StartRemainRotation, _extralTime !=0, () => { return _reverseTimes % 2 == 0 ? StratRotation(true): StratRotation(false); }, _delay_1ms) 
-                 .DelayIf(BiDirectionStep.RemainRotationDelay, _extralTime != 0,  _extralTime * 1000)
-                 .RunIf(BiDirectionStep.StopRemainRotation, _extralTime != 0, _rotationAxis.StopPositionOperation, _delay_1ms)
+                 .RunIf(BiDirectionStep.StartRemainRotation, _extralTime !=0, () => { return _reverseTimes % 2 == 0 ? StratRemainRotation(true, _extralTime) : StratRemainRotation(false, _extralTime); }, _delay_1ms) 
+                 //.DelayIf(BiDirectionStep.RemainRotationDelay, _extralTime != 0,  _extralTime * 1000)
+                 //.RunIf(BiDirectionStep.StopRemainRotation, _extralTime != 0, _rotationAxis.StopPositionOperation, _delay_1ms)
                  .WaitWithStopConditionIf(BiDirectionStep.CheckStopRemainRotation, _extralTime != 0, CheckRotationPositionStatus, CheckRotationPositionRunStop)
                  .End(BiDirectionStep.End, NullFun, _delay_1ms);
             return Runner.Status;
@@ -135,11 +139,33 @@ namespace PunkHPX8_RT.Modules.PlatingCell
             bool result = false;
             if (isforwardRotate) 
             {
-                result = _rotationAxis.ProfilePosition(TARGETPOSITION, _speed * SPEED_RATIO * 6, 0, 0);
+                result = _rotationAxis.ProfilePosition((int)(_rotationAxis.MotionData.MotorPosition + _speed * SPEED_RATIO * 6 * _frequency), _speed * SPEED_RATIO * 6, 0, 0);
             }
             else
             {
-                result = _rotationAxis.ProfilePosition(-TARGETPOSITION, _speed * SPEED_RATIO * 6, 0, 0);
+                result = _rotationAxis.ProfilePosition((int)(_rotationAxis.MotionData.MotorPosition - _speed * SPEED_RATIO * 6 * _frequency), _speed * SPEED_RATIO * 6, 0, 0);
+            }
+            if (!result)
+            {
+                NotifyError(eEvent.ERR_PLATINGCELL, "Start Rotation is failed", 0);
+                return false;
+            }
+            return true;
+        }
+        /// <summary>
+        /// rotation开始旋转
+        /// </summary>
+        /// <returns></returns>
+        private bool StratRemainRotation(bool isforwardRotate,int time)
+        {
+            bool result = false;
+            if (isforwardRotate)
+            {
+                result = _rotationAxis.ProfilePosition(_speed * SPEED_RATIO * 6 * time, _speed * SPEED_RATIO * 6, 0, 0);
+            }
+            else
+            {
+                result = _rotationAxis.ProfilePosition(-(_speed * SPEED_RATIO * 6 * time), _speed * SPEED_RATIO * 6, 0, 0);
             }
             if (!result)
             {