コード例 #1
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Homes the given device. </summary>
        /// <param name="device"> The device. </param>
        public static bool Home_1(IGenericAdvancedMotor device)
        {
            Console.WriteLine("Homing device");
            // create wait handler
            ManualResetEvent waitEvent = new ManualResetEvent(false);

            waitEvent.Reset();
            // clear errors
            device.ClearDeviceExceptions();
            // call home function, passing in event handler
            // could alternatively use method with in-built wait handler by passing a timeout instead of callback
            device.Home(p => waitEvent.Set());
            if (!waitEvent.WaitOne(60000))
            {
                // timed out
                return(false);
            }
            // check for exceptions thrown by background thread during process
            device.ThrowLastDeviceException();
            // check status
            bool homed = device.Status.IsHomed;

            Console.WriteLine("Device Homed");
            return(true);
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Move to. </summary>
        /// <param name="device">			   The device. </param>
        /// <param name="position">			   The position. </param>
        /// <param name="deviceUnitConverter"> The device unit converter. </param>
        public static bool MoveTo_1(IGenericAdvancedMotor device, decimal position, DeviceUnitConverter deviceUnitConverter)
        {
            // create wait handler
            ManualResetEvent waitEvent = new ManualResetEvent(false);
            int iPos = deviceUnitConverter.RealToDeviceUnit(position, DeviceUnitConverter.UnitType.Length);

            Console.WriteLine("Moving Device to {0} ({1})", position, iPos);
            // call moveto function, passing in event handler
            // could alternatively use method with in-built wait handler by passing a timeout instead of callback
            waitEvent.Reset();
            // clear errors
            device.ClearDeviceExceptions();
            device.MoveTo_DeviceUnit(iPos, p =>
            {
                Console.WriteLine("Message Id {0}", p);
                waitEvent.Set();
            });
            if (!waitEvent.WaitOne(60000))
            {
                return(false);
            }
            // check for exceptions thrown by background thread during process
            device.ThrowLastDeviceException();

            StatusBase status = device.Status;
            Decimal    newPos = status.Position;

            Console.WriteLine("Device Moved to {0}({1})", newPos, position);
            return(true);
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Homes the given device. </summary>
        /// <param name="device"> The device. </param>
        public static bool Home_3(IGenericAdvancedMotor device)
        {
            Console.WriteLine("Homing device");

            // call home function, passing in event handler
            device.Home(60000);

            // check status
            bool homed = device.Status.IsHomed;

            Console.WriteLine("Device Homed");
            return(true);
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Move to. </summary>
        /// <param name="device">			   The device. </param>
        /// <param name="position">			   The position. </param>
        /// <param name="deviceUnitConverter"> The device unit converter. </param>
        public static bool MoveTo_3(IGenericAdvancedMotor device, decimal position, DeviceUnitConverter deviceUnitConverter)
        {
            int iPos = deviceUnitConverter.RealToDeviceUnit(position, DeviceUnitConverter.UnitType.Length);

            Console.WriteLine("Moving Device to {0} ({1})", position, iPos);

            device.MoveTo_DeviceUnit(iPos, 60000);

            StatusBase status = device.Status;
            Decimal    newPos = status.Position;

            Console.WriteLine("Device Moved to {0}({1})", newPos, position);
            return(true);
        }
コード例 #5
0
        public static void Move_Method2(IGenericAdvancedMotor device, decimal position)
        {
            Console.WriteLine("Moving Device to {0}", position);
            _taskComplete = false;
            _taskID       = device.MoveTo(position, CommandCompleteFunction);
            while (!_taskComplete)
            {
                Thread.Sleep(500);
                StatusBase status = device.Status;
                Console.WriteLine("Device Moving {0}", status.Position);

                // will need some timeout functionality;
            }
            Console.WriteLine("Device Moved");
        }
コード例 #6
0
        public static void Home_Method2(IGenericAdvancedMotor device)
        {
            Console.WriteLine("Homing device");
            _taskComplete = false;
            _taskID       = device.Home(CommandCompleteFunction);
            while (!_taskComplete)
            {
                Thread.Sleep(500);
                StatusBase status = device.Status;
                Console.WriteLine("Device Homing {0}", status.Position);

                // will need some timeout functionality;
            }
            Console.WriteLine("Device Homed");
        }
コード例 #7
0
 public static void Move_Method1(IGenericAdvancedMotor device, decimal position)
 {
     try
     {
         Console.WriteLine("Moving Device to {0}", position);
         device.MoveTo(position, 60000);
     }
     catch (Exception)
     {
         Console.WriteLine("Failed to move to position");
         Console.ReadKey();
         return;
     }
     Console.WriteLine("Device Moved");
 }
コード例 #8
0
 public static void Home_Method1(IGenericAdvancedMotor device)
 {
     try
     {
         Console.WriteLine("Homing device");
         device.Home(60000);
     }
     catch (Exception)
     {
         Console.WriteLine("Failed to home device");
         Console.ReadKey();
         return;
     }
     Console.WriteLine("Device Homed");
 }
コード例 #9
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Homes the given device. </summary>
        /// <param name="device"> The device. </param>
        public static bool Home_2(IGenericAdvancedMotor device)
        {
            Console.WriteLine("Homing device");

            // call home function, passing in message complete handler provided by device
            Action <UInt64> workDone = device.InitializeWaitHandler();

            // call home function, passing in event handler
            device.Home(workDone);
            device.Wait(60000);

            // check status
            bool homed = device.Status.IsHomed;

            Console.WriteLine("Device Homed");
            return(true);
        }
コード例 #10
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Move to. </summary>
        /// <param name="device">			   The device. </param>
        /// <param name="position">			   The position. </param>
        /// <param name="deviceUnitConverter"> The device unit converter. </param>
        public static bool MoveTo_2(IGenericAdvancedMotor device, decimal position, DeviceUnitConverter deviceUnitConverter)
        {
            int iPos = deviceUnitConverter.RealToDeviceUnit(position, DeviceUnitConverter.UnitType.Length);

            Console.WriteLine("Moving Device to {0} ({1})", position, iPos);

            // call moveto function, passing in message complete handler provided by device
            Action <UInt64> workDone = device.InitializeWaitHandler();

            device.MoveTo_DeviceUnit(iPos, workDone);
            device.Wait(60000);

            StatusBase status = device.Status;
            Decimal    newPos = status.Position;

            Console.WriteLine("Device Moved to {0}({1})", newPos, position);
            return(true);
        }
コード例 #11
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Tests limit parameters. </summary>
        /// <param name="device"> The device. </param>
        public static void TestLimitParameters(IGenericAdvancedMotor device)
        {
            try
            {
                LimitSwitchParameters_DeviceUnit originalLimitParameters = device.GetLimitSwitchParams_DeviceUnit();
                LimitSwitchParameters            realLP = device.GetLimitSwitchParams();
                realLP.AnticlockwisePosition += 2.0m;
                realLP.ClockwisePosition     += 2.0m;
                device.SetLimitSwitchParams(realLP);
                Thread.Sleep(250);
                realLP = device.GetLimitSwitchParams();

                device.SetLimitSwitchParams_DeviceUnit(originalLimitParameters);
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed to update settings {0} - {1}", ex.DeviceID, ex.Message);
            }
        }
コード例 #12
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Tests homing parameters. </summary>
        /// <param name="device"> The device. </param>
        public static void TestHomingParameters(IGenericAdvancedMotor device)
        {
            try
            {
                HomeParameters_DeviceUnit originalHomeParameters = device.GetHomingParams_DeviceUnit();
                HomeParameters            realHP = device.GetHomingParams();
                realHP.Velocity       += 0.5m;
                realHP.OffsetDistance += 1.0m;
                device.SetHomingParams(realHP);
                Thread.Sleep(250);
                realHP = device.GetHomingParams();

                device.SetHomingParams_DeviceUnit(originalHomeParameters);
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed to update settings {0} - {1}", ex.DeviceID, ex.Message);
            }
        }
コード例 #13
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        /// <summary> Tests jog parameters. </summary>
        /// <param name="device"> The device. </param>
        public static void TestJogParameters(IGenericAdvancedMotor device)
        {
            try
            {
                JogParameters_DeviceUnit originalJogParameters = device.GetJogParams_DeviceUnit();
                JogParameters            realJP = device.GetJogParams();
                realJP.StepSize += 1.0m;
                realJP.VelocityParams.MaxVelocity  += 0.5m;
                realJP.VelocityParams.Acceleration += 0.5m;
                device.SetJogParams(realJP);
                Thread.Sleep(250);
                realJP = device.GetJogParams();

                device.SetJogParams_DeviceUnit(originalJogParameters);
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed to update settings {0} - {1}", ex.DeviceID, ex.Message);
            }
        }
コード例 #14
0
ファイル: Program.cs プロジェクト: diracdeltafunct/astrophoto
        static void Main(string[] args)
        {
            TCubeDCServo.RegisterDevice();
            KCubeDCServo.RegisterDevice();

            // get parameters from command line
            int argc = args.Count();

            if (argc < 1)
            {
                Console.WriteLine("Usage = DC_Console_net_managed [serial_no] [position: optional (0 - 50)] [velocity: optional (0 - 5)]");
                Console.ReadKey();
                return;
            }

            decimal position = 0m;

            if (argc > 1)
            {
                position = decimal.Parse(args[1]);
            }

            decimal velocity = 0m;

            if (argc > 2)
            {
                velocity = decimal.Parse(args[2]);
            }

            string serialNo = args[0];

            try
            {
                // build device list
                DeviceManagerCLI.BuildDeviceList();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception raised by BuildDeviceList {0}", ex);
                Console.ReadKey();
                return;
            }

            // get available KCube DC Servos and check our serial number is correct
            List <string> serialNumbers = DeviceManagerCLI.GetDeviceList(new List <int> {
                KCubeDCServo.DevicePrefix, TCubeDCServo.DevicePrefix
            });

            if (!serialNumbers.Contains(serialNo))
            {
                if (serialNumbers.Count > 0)
                {
                    serialNo = serialNumbers[0];
                    Console.WriteLine("using serial number {0}", serialNo);
                }
                else
                {
                    Console.WriteLine("{0} is not a valid serial number", serialNo);
                    Console.ReadKey();
                    return;
                }
            }

            // create the device
            IGenericCoreDeviceCLI device = DeviceFactory.CreateDevice(serialNo);
            IGenericAdvancedMotor motor  = device as IGenericAdvancedMotor;

            if (motor == null)
            {
                Console.WriteLine("{0} is not a DCServo", serialNo);
                Console.ReadKey();
                return;
            }

            // connect device
            try
            {
                Console.WriteLine("Opening device {0}", serialNo);
                device.Connect(serialNo);

                if (!motor.IsSettingsInitialized())
                {
                    motor.WaitForSettingsInitialized(5000);
                }

                // display info about device
                DeviceInfo di = device.GetDeviceInfo();
                Console.WriteLine("Device {0} = {1}", di.SerialNumber, di.Name);

                // start the device polling
                motor.StartPolling(250);
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed to open device {0} - {1}", ex.DeviceID, ex.Message);
                Console.ReadKey();
                return;
            }

            DeviceUnitConverter deviceUnitConverter;

            try
            {
                // call GetMotorConfiguration on the device to initialize the DeviceUnitConverter object required for real unit parameters
                MotorConfiguration motorSettings = motor.GetMotorConfiguration(serialNo);
                motorSettings.DeviceSettingsName = "PRM1-Z8";
                motorSettings.UpdateCurrentConfiguration();

                MotorDeviceSettings motorDeviceSettings = motor.MotorDeviceSettings;
                motor.SetSettings(motorDeviceSettings, true, false);

                // test code to test get / sert of parameters using real world units
                TestVelocityParameters(motor);
                TestJogParameters(motor);
                TestHomingParameters(motor);
                TestLimitParameters(motor);
                if (device is TCubeDCServo)
                {
                    TestPotentiometerParameters(device as TCubeDCServo);                     // TDC Only
                }

                motorSettings.UpdateCurrentConfiguration();
                deviceUnitConverter = motor.UnitConverter;
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed prepare settings {0} - {1}", ex.DeviceID, ex.Message);
                Console.ReadKey();
                return;
            }

            try
            {
                if (!Home_1(motor))
                {
                    Console.WriteLine("Failed to home device");
                    Console.ReadKey();
                    return;
                }
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed to Home device settings {0} - {1}", ex.DeviceID, ex.Message);
                Console.ReadKey();
                return;
            }

            try
            {
                // if position is set
                if (position != 0)
                {
                    // update velocity if required using real world methods
                    if (velocity != 0)
                    {
                        VelocityParameters velPars = motor.GetVelocityParams();
                        velPars.MaxVelocity = velocity;
                        motor.SetVelocityParams(velPars);
                    }

                    if (!MoveTo_1(motor, position, deviceUnitConverter))
                    {
                        Console.WriteLine("Failed to set position");
                        Console.ReadKey();
                    }
                }
                else
                {
                    char c = '\0';
                    do
                    {
                        do
                        {
                            Console.WriteLine("Press a key");
                            Console.WriteLine("0 to exit");
                            Console.WriteLine("1 to test StopImmediate()");
                            Console.WriteLine("2 to test Stop(5000)");
                            Console.WriteLine("3 to test Stop(WaitEvent)");
                            c = Console.ReadKey().KeyChar;
                        } while (c < '0' || c > '3');

                        if (c != '0')
                        {
                            motor.MoveContinuous(MotorDirection.Forward);
                            Console.WriteLine("Press any key to stop");
                            Console.ReadKey();
                            StatusBase status;
                            if (c == '1')
                            {
                                motor.Stop(5000);
                            }
                            if (c == '2')
                            {
                                motor.StopImmediate();
                            }
                            if (c == '3')
                            {
                                ManualResetEvent waitEvent = new ManualResetEvent(false);
                                waitEvent.Reset();
                                motor.Stop(p =>
                                {
                                    Console.WriteLine("Message Id {0}", p);
                                    waitEvent.Set();
                                });
                                if (!waitEvent.WaitOne(5000))
                                {
                                    Console.WriteLine("Failed to Stop");
                                }
                            }
                            do
                            {
                                status = motor.Status;
                                Console.WriteLine("Status says {0} ({1:X})", status.IsInMotion ? "Moving" : "Stopped", status.Status);
                                Thread.Sleep(50);
                            } while (status.IsInMotion);
                        }
                    } while (c != '0');
                }
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed to Move device settings {0} - {1}", ex.DeviceID, ex.Message);
                Console.ReadKey();
                return;
            }

            try
            {
                device.Disconnect(true);
            }
            catch (DeviceException ex)
            {
                Console.WriteLine("Failed to Disconnect {0} - {1}", ex.DeviceID, ex.Message);
            }

            Console.ReadKey();
        }