public void GetEncoderCounts()
        {
            StepperController sc = new StepperController(IP);

            sc.EnableMotor();

            //sc.ResetEncoderPosition(0);

            sc.SetFormatDecimal();
            sc.StartListening();
            sc.GetEncoderCounts();
            sc.GetEncoderPosition();
            Thread.Sleep(100);
            Debug.Print($"Encoder position= {sc.Sm.EncoderPosition}");
            Debug.Print($"Encoder counts= {sc.Sm.EncoderCounts}");

            sc.StartJog(5, 5, 5);
            Thread.Sleep(1000);
            sc.StopJog();
            sc.GetEncoderPosition();
            sc.GetEncoderCounts();
            Thread.Sleep(2000);
            double newCounts   = sc.Sm.EncoderCounts;
            double newPosition = sc.Sm.EncoderPosition;

            Debug.Print($"Encoder position= {sc.Sm.EncoderPosition}");
            Debug.Print($"Encoder counts= {sc.Sm.EncoderCounts}");
            Thread.Sleep(1000);
            Assert.AreEqual(sc.Sm.EncoderPosition, newPosition);
            Assert.AreEqual(sc.Sm.EncoderCounts, newCounts);
            Thread.Sleep(1000);
            sc.StopListening();

            sc.Dispose();
        }
        public void SetStepsToAcceptableValue()
        {
            StepperController sc = new StepperController(IP);

            sc.StartListening();
            int expectedStepsPerRev = 20000;

            sc.SetNumberStepsPerRevolution(expectedStepsPerRev);
            Assert.AreEqual(expectedStepsPerRev, sc.Sm.StepsPerRev);

            expectedStepsPerRev = 10000;
            sc.SetNumberStepsPerRevolution(expectedStepsPerRev);
            Assert.AreEqual(expectedStepsPerRev, sc.Sm.StepsPerRev);

            expectedStepsPerRev = 200;
            sc.SetNumberStepsPerRevolution(expectedStepsPerRev);
            Assert.AreEqual(expectedStepsPerRev, sc.Sm.StepsPerRev);

            expectedStepsPerRev = 51101;
            sc.SetNumberStepsPerRevolution(expectedStepsPerRev);
            Assert.AreEqual(expectedStepsPerRev, sc.Sm.StepsPerRev);

            expectedStepsPerRev = 51099;
            sc.SetNumberStepsPerRevolution(expectedStepsPerRev);
            Assert.AreEqual(expectedStepsPerRev, sc.Sm.StepsPerRev);

            expectedStepsPerRev = 205;
            sc.SetNumberStepsPerRevolution(expectedStepsPerRev);
            Assert.AreEqual(expectedStepsPerRev, sc.Sm.StepsPerRev);
            sc.Dispose();
        }
        public void MinStepsPerRevCoerced()
        {
            StepperController sc = new StepperController(IP);

            sc.StartListening();
            sc.SetNumberStepsPerRevolution(1);
            Assert.AreEqual(sc.MinStepsPerRev, sc.Sm.StepsPerRev);
            sc.Dispose();
        }
Exemple #4
0
        public void ActiveStepChanged(object sender, ActiveStepChangedEventArgs e)
        {
            Stepper stepper = (Stepper)sender;

            _stepperController = stepper.Controller;

            int activeStepIndex = stepper.Steps.IndexOf(e.Step);

            ActiveItem = Items[activeStepIndex];
        }
Exemple #5
0
        public StepperStepViewModel()
        {
            m_controller = null;

            m_step = null;

            m_number      = 0;
            m_needsSpacer = false;
            m_isActive    = false;
        }
Exemple #6
0
        /// <summary>
        /// Creates a new <see cref="TabControlStepper" />.
        /// </summary>
        public TabControlStepper()
            : base()
        {
            Controller = new StepperController();

            Loaded   += LoadedHandler;
            Unloaded += UnloadedHandler;

            CommandBindings.Add(new CommandBinding(StepperCommands.BackCommand, BackHandler));
            CommandBindings.Add(new CommandBinding(StepperCommands.CancelCommand, CancelHandler));
            CommandBindings.Add(new CommandBinding(StepperCommands.ContinueCommand, ContinueHandler));
            CommandBindings.Add(new CommandBinding(StepperCommands.StepSelectedCommand, StepSelectedHandler, CanExecuteStepSelectedHandler));
        }
        public void TestCwLimit()
        {
            Random            random        = new Random();
            double            revsPerSecond = 2;
            StepperController sc            = new StepperController(IP);

            sc.StartListening();
            sc.SetFormatDecimal();
            sc.SetVelocity(5);
            sc.ResetEncoderPosition(0);

            double numberTurns   = random.NextDouble() * 2.5;
            double cwLimitCounts = Math.Floor(sc.MaxStepsPerRev * numberTurns);

            sc.SetCwLimit(cwLimitCounts);

            sc.SetVelocity(revsPerSecond);

            sc.ResetEncoderPosition(0);
            sc.EnableMotor();
            sc.SetNumberStepsPerRevolution(sc.MaxStepsPerRev);

            // move to number of turns + ten percent
            double calculatedPosition = Math.Floor((cwLimitCounts * 1.1));

            sc.MoveToAbsolutePosition((long)calculatedPosition);

            Thread.Sleep(2500);

            sc.GetEncoderPosition();

            Thread.Sleep(500);
            Debug.Print($"Limit ={cwLimitCounts}");
            Debug.Print($"Calculated ={calculatedPosition}");
            Debug.Print($"Encoder Position = {sc.Sm.EncoderPosition}");

            // over position is limited by software limit
            Assert.AreNotEqual(calculatedPosition, sc.Sm.EncoderPosition);

            // software limit and encoder position match
            Assert.AreEqual(cwLimitCounts, sc.Sm.EncoderPosition);

            // remove software limit
            sc.ClearCwLimit();
            sc.MoveToAbsolutePosition((long)calculatedPosition);

            // over position is not limited by software limit and matches the encoder position
            Assert.AreEqual(calculatedPosition, sc.Sm.EncoderPosition);
            sc.Dispose();
        }
Exemple #8
0
        /// <summary>
        /// Creates a new <see cref="Stepper" />.
        /// </summary>
        public Stepper()
            : base()
        {
            m_controller = new StepperController();

            Steps = new ObservableCollection <IStep>();

            Loaded   += LoadedHandler;
            Unloaded += UnloadedHandler;

            CommandBindings.Add(new CommandBinding(BackCommand, BackHandler));
            CommandBindings.Add(new CommandBinding(CancelCommand, CancelHandler));
            CommandBindings.Add(new CommandBinding(ContinueCommand, ContinueHandler));
            CommandBindings.Add(new CommandBinding(StepSelectedCommand, StepSelectedHandler, CanExecuteStepSelectedHandler));
        }
        public void ActiveStepChanged(object sender, ActiveStepChangedEventArgs e)
        {
            Stepper stepper = (Stepper)sender;

            _stepperController = stepper.Controller;

            int activeStepIndex = stepper.Steps.IndexOf(e.Step);

            if (Items.Count > activeStepIndex)
            {
                ActiveItem = Items[activeStepIndex];
            }
            else
            {
                _stepperController.Back();
            }
        }
Exemple #10
0
        /// <summary>
        /// Disconnect the current stepper. If stepper has been stopped
        /// or no serial port exists, nothing will happen.
        /// </summary>
        private void _DisconnectStepper()
        {
            // Check if stpper exists
            if (_Stepper == null)
            {
                return;
            }

            // Close the stepper
            if (_Stepper.IsOpen)
            {
                _Stepper.Close();
                _ConsolePrintMessage("Stepper on " + _Stepper.PortName + " is closed.", MessageLevel.Info);
            }
            else
            {
                _ConsolePrintMessage("Stepper serial port is closed.", MessageLevel.Info);
            }

            // Reset the reference to the stepper
            _Stepper = null;
        }
Exemple #11
0
        /// <summary>
        /// Connect to the specific serial port of the stepper. If no
        /// availale serial port exists, nothing will happen.
        /// </summary>
        /// <param name="index">Index of the serial port to connect to.</param>
        private void _ConnectStepper(int index)
        {
            // Check if there is available serial port
            if (_SerialPortList == null || _SerialPortList.Length == 0)
            {
                return;
            }

            // Ensure the previous stepper stopped
            _DisconnectStepper();

            // Select the specific serial port
            try
            {
                _Stepper = new StepperController(_SerialPortList[index]);
            }
            catch (Exception e)
            {
                _ConsolePrintMessage("private void _ConnectStepper(int): " + e.Message, MessageLevel.Error);
                return;
            }

            // Set the baud rate
            _Stepper.BaudRate = _StepperBaudRate;

            // Append handlers to the events
            _Stepper.RotationStarted  -= _StepperRotationStartedEventHandler;
            _Stepper.RotationStarted  += _StepperRotationStartedEventHandler;
            _Stepper.RotationFinished -= _StepperRotationFinishedEventHandler;
            _Stepper.RotationFinished += _StepperRotationFinishedEventHandler;
            _Stepper.OperationFailed  -= _StepperOperationFailedEventHandler;
            _Stepper.OperationFailed  += _StepperOperationFailedEventHandler;

            // Connect to the stepper port
            _Stepper.Open();

            // CONSOLE: Connect stepper message
            _ConsolePrintMessage("Successfully connect to the stepper on " + _Stepper.PortName + ".", MessageLevel.Info);
        }
        public void RotateTenRevolutions()
        {
            double            revsPerSecond = 5;
            StepperController sc            = new StepperController(IP);

            sc.StartListening();
            sc.SetFormatDecimal();
            sc.SetVelocity(revsPerSecond);
            sc.ResetEncoderPosition(0);
            sc.EnableMotor();
            sc.SetNumberStepsPerRevolution(sc.MaxStepsPerRev);
            double calculatedPosition = sc.MaxStepsPerRev * 10;

            sc.MoveToAbsolutePosition((long)calculatedPosition);
            Thread.Sleep(2500);
            sc.GetEncoderPosition();
            Thread.Sleep(500);
            Debug.Print($"Calculated ={calculatedPosition}");
            Debug.Print($"Encoder Position = {sc.Sm.EncoderPosition}");
            Assert.AreEqual(calculatedPosition, sc.Sm.EncoderPosition);
            sc.StopListening();
            sc.Dispose();
        }
        public void GetAlarmCodes()
        {
            StepperController sc = new StepperController(IP);

            sc.StartListening();
            BitArray  bA             = new BitArray(BitConverter.GetBytes(0));
            AlarmCode blankAlarmCode = new AlarmCode(bA);

            sc.GetAlarmCode();
            Thread.Sleep(500);

            Assert.IsNotNull(sc.Sm.AlarmCode);

            sc.Sm.AlarmCode.CwLimit = true;
            Assert.AreNotEqual(blankAlarmCode.CwLimit, sc.Sm.AlarmCode.CwLimit);
            sc.ClearAlarms();
            sc.GetAlarmCode();

            Thread.Sleep(500);

            Assert.AreEqual(blankAlarmCode.CwLimit, sc.Sm.AlarmCode.CwLimit);

            sc.Dispose();
        }
Exemple #14
0
        private static void Main()
        {
            // Configure Log4Net
            XmlConfigurator.Configure(new FileInfo("log4net.config"));

            // Configure PostSharp Logging to use Log4Net

            StepperController sc = new StepperController("10.10.10.10");

            try
            {
                // stop the drive from moving

                sc.Stop();
                sc.EnableMotor();
                sc.ClearAlarms();
                sc.GetModel();
                sc.GetStatus();
                sc.StartListening();
                sc.SetFormatDecimal();

                Thread.Sleep(500);

                Thread.Sleep(2000);

                Console.WriteLine("Resetting position to 0");
                sc.ResetEncoderPosition(0);

                //Console.WriteLine("Moving...");

                //System.Threading.Thread.Sleep(2000);
                //sc.StartJog(-0.5, 25, 25);
                //System.Threading.Thread.Sleep(2500);
                //sc.ChangeJogSpeed(2.5);
                //System.Threading.Thread.Sleep(2500);
                //sc.ChangeJogSpeed(.5);
                //System.Threading.Thread.Sleep(2500);
                //sc.StopJog();
                //Console.WriteLine("Move complete.");

                //Console.WriteLine("Status: " + sc.GetStatus());
                Thread.Sleep(1000);

                //Console.WriteLine("Current Position: " + sc.GetEncoderPosition());

                // stop the drive from moving
                sc.Stop();
                sc.ClearAlarms();

                // set the number of steps per rev
                sc.SetNumberStepsPerRevolution(51200);

                // set revolutions per second
                sc.SetVelocity(25);

                sc.GetModel();
                Console.WriteLine($"Model: {sc.Sm.Model}");

                sc.GetStatus();
                sc.GetEncoderPosition();

                Console.WriteLine("Resetting position to 0");
                sc.ResetEncoderPosition(0);
                sc.EnableMotor();

                // read 15 positions
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("read 15 positions. 1 revolution = 51200 steps " +
                                  "\nmin number: -2147483648" +
                                  "\nmax number: 2147483647");
                int maxPositions = 15;
                for (int i = 0; i < maxPositions; i++)
                {
                    try
                    {
                        Console.WriteLine($"Enter a position #{i} of {maxPositions}");

                        long position = (long)Convert.ToDouble(Console.ReadLine());
                        sc.MoveToAbsolutePosition(position);
                        sc.GetEncoderPosition();
                        Console.WriteLine($"Current Position: {sc.Sm.EncoderPosition}");
                    }
                    catch (Exception e)
                    {
                        StepperController.Log.Error(e.Message);
                        Console.WriteLine(e);
                    }
                }
            }
            catch (Exception e)
            {
                StepperController.Log.Error(e.Message);
                Console.WriteLine(e);
            }
            finally
            {
                sc.Stop();
                sc.DisableMotor();
                sc.StopListening();
            }
        }
Exemple #15
0
        private static void Main(string[] args)
        {
            StepperController sc = new StepperController("10.10.10.10");

            try
            {
                // stop the drive from moving
                sc.Stop();
                //for (int i = 0; i < 10; i++)
                //{
                //    SendScript(sc);
                //    System.Threading.Thread.Sleep(2000);
                //}

                //System.Threading.ThreadPool.QueueUserWorkItem((obj) =>
                //{
                //    while (true)
                //    {
                //        Console.WriteLine("Status: " + sc.GetStatus());
                //        Console.WriteLine("Alarm: " + sc.GetAlarmCode());
                //        System.Threading.Thread.Sleep(1000);
                //    }
                //});

                Console.WriteLine("Model: " + sc.GetModel());
                Console.WriteLine("Status: " + sc.GetStatus());
                sc.DisableMotor();
                //System.Threading.Thread.Sleep(2000);
                //Console.WriteLine("Current Position: " + sc.GetEncoderPosition());
                //Console.WriteLine("Resetting position to 0");
                //sc.ResetEncoderPosition(0);
                //Console.WriteLine("Current Position: " + sc.GetEncoderPosition());
                //sc.EnableMotor();
                //Console.WriteLine("Moving...");
                //sc.MoveToAbsolutePosition(20000);
                //Console.WriteLine("Move complete.");
                //System.Threading.Thread.Sleep(2000);
                //sc.StartJog(10, 25, 25);
                //System.Threading.Thread.Sleep(2500);
                //sc.ChangeJogSpeed(25);
                //System.Threading.Thread.Sleep(2500);
                //sc.ChangeJogSpeed(3);
                //System.Threading.Thread.Sleep(2500);
                //sc.StopJog();

                //Console.WriteLine("Status: " + sc.GetStatus());
                //System.Threading.Thread.Sleep(1000);
                //Console.WriteLine("Current Position: " + sc.GetEncoderPosition());

                // stop the drive from moving
                sc.Stop();

                // set the number of steps per rev
                sc.SetNumberStepsPerRevolution(51200);

                // set revolutions per second
                sc.SetVelocity(25);

                Console.WriteLine($"Model: {sc.GetModel()}");
                Console.WriteLine($"Status: {sc.GetStatus()} Position: {sc.GetEncoderPosition()} ");

                Console.WriteLine("Resetting position to 0");
                sc.ResetEncoderPosition(0);
                sc.EnableMotor();

                string stopText = string.Empty;
                // read 15 positions
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("read 15 positions. 1 revolution = 51200 steps " +
                                  "\nmin number: -2147483648" +
                                  "\nmax number: 2147483647");
                int maxPositions = 15;
                for (int i = 0; i < maxPositions; i++)
                {
                    try
                    {
                        Console.WriteLine($"Enter a position #{i} of {maxPositions}");
                        sc.EnableMotor();
                        var position = (long)Convert.ToDouble(Console.ReadLine());
                        sc.MoveToAbsolutePosition(position);
                        Console.WriteLine($"Current Position: {sc.GetEncoderPosition()}");
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
            finally
            {
                sc.Stop();
                sc.DisableMotor();
            }
        }