Beispiel #1
0
        private void ReferenceDrive(Duration waitTimeBetweenSteps, bool direction)
        {
            StepperDriveControl.DriveToReferenceSwitch(waitTimeBetweenSteps, direction, _stopDrivingTokenSource.Token);

            if (!_stopDrivingTokenSource.IsCancellationRequested)
            {
                StepperDriveControl.SetPosition(DriveSetting.ReferencePosition);
                _currentStatus.OnNext(Status.Ready);
            }
        }
Beispiel #2
0
        private bool DriveSteps(Length distanceToGo)
        {
            var isDistanceOk = CheckLimitSwitches(distanceToGo);

            if (!isDistanceOk)
            {
                return(false);
            }

            var steps                    = distanceToGo.ToSteps(DriveSetting);
            var numberOfSteps            = Math.Abs(steps);
            var maxSpeedinStepsPerSecond = DriveSetting.MaxSpeed.ToStepsPerSecond(DriveSetting);
            var maxAccelerationInStepsPerSecondSquare = DriveSetting.Acceleration.ToAccelerationPerSecondSquare(DriveSetting);
            var numberOfStepsForAcceleration          = Convert.ToInt32(Math.Pow(maxSpeedinStepsPerSecond, 2) / maxAccelerationInStepsPerSecondSquare / 2);
            var numberOfStepsForDecceleration         = numberOfStepsForAcceleration;
            var numberOfStepsWithMaxSpeed             = 0;

            if (2 * numberOfStepsForAcceleration < numberOfSteps)
            {
                numberOfStepsForDecceleration = numberOfStepsForAcceleration;
                numberOfStepsWithMaxSpeed     = numberOfSteps - numberOfStepsForAcceleration - numberOfStepsForDecceleration;
            }
            else
            {
                numberOfStepsForAcceleration  = numberOfSteps / 2;
                numberOfStepsForDecceleration = numberOfSteps / 2;
            }

            var waitTimeBetweenSteps = CalculateWaitTimeBetweenSteps(
                numberOfStepsForAcceleration,
                numberOfStepsWithMaxSpeed,
                numberOfStepsForDecceleration,
                maxSpeedinStepsPerSecond,
                maxAccelerationInStepsPerSecondSquare);

            var drive = GetDriveDirection(steps);

            StepperDriveControl.SetOutput(waitTimeBetweenSteps, drive.direction, drive.distanceOfOneStep, _stopDrivingTokenSource.Token);
            return(true);
        }
Beispiel #3
0
 public void SetPosition(Length position) => StepperDriveControl.SetPosition(position);