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(); }
public void ActiveStepChanged(object sender, ActiveStepChangedEventArgs e) { Stepper stepper = (Stepper)sender; _stepperController = stepper.Controller; int activeStepIndex = stepper.Steps.IndexOf(e.Step); ActiveItem = Items[activeStepIndex]; }
public StepperStepViewModel() { m_controller = null; m_step = null; m_number = 0; m_needsSpacer = false; m_isActive = false; }
/// <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(); }
/// <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(); } }
/// <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; }
/// <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(); }
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(); } }
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(); } }