Exemplo n.º 1
0
        /// <summary>
        /// Slew to home based on TripPosition already being set
        /// </summary>
        /// <param name="axis"></param>
        private int SlewToHome(Axis axis)
        {
            if (SkyServer.AutoHomeStop)
            {
                return(-3);                        //stop requested
            }
            var a         = TripPosition / 36000;
            var positions = Axes.MountAxis2Mount();

            switch (axis)
            {
            case Axis.Axis1:
                SkyServer.SlewAxes(a, positions[1], SlewType.SlewMoveAxis);
                break;

            case Axis.Axis2:
                SkyServer.SlewAxes(positions[0], a, SlewType.SlewMoveAxis);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(axis), axis, null);
            }

            while (SkyServer.IsSlewing)
            {
                //Console.WriteLine(@"slewing");
                Thread.Sleep(300);
            }

            var _ = new CmdAxisStop(0, axis);

            //Thread.Sleep(1000);
            return(0);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Slew to home based on TripPosition already being set
        /// </summary>
        /// <param name="axis"></param>
        private int SlewToHome(AxisId axis)
        {
            if (SkyServer.AutoHomeStop)
            {
                return(-3);                        //stop requested
            }
            //convert position to mount degrees
            var a      = TripPosition -= 0x00800000;
            var skyCmd = new SkyGetStepToAngle(SkyQueue.NewId, axis, a);
            var b      = (double)SkyQueue.GetCommandResult(skyCmd).Result;
            var c      = Units.Rad2Deg1(b);

            var positions = Axes.MountAxis2Mount();

            switch (axis)
            {
            case AxisId.Axis1:
                var d = Axes.AxesMountToApp(new[] { c, 0 });     // Convert to local
                if (SkyServer.SouthernHemisphere)
                {
                    d[0] = d[0] + 180;
                }

                SkyServer.SlewAxes(d[0], positions[1], SlewType.SlewMoveAxis);
                break;

            case AxisId.Axis2:
                var e = Axes.AxesMountToApp(new[] { 0, c });     // Convert to local
                if (SkyServer.SouthernHemisphere)
                {
                    e[1] = 180 - e[1];
                }

                SkyServer.SlewAxes(positions[0], e[1], SlewType.SlewMoveAxis);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(axis), axis, null);
            }

            while (SkyServer.IsSlewing)
            {
                //Console.WriteLine(@"slewing");
                Thread.Sleep(300);
            }

            var _ = new SkyAxisStop(0, axis);

            //Thread.Sleep(1500);
            return(0);
        }
Exemplo n.º 3
0
        /// <summary>
        /// convert a RaDec position to an axes positions.
        /// </summary>
        /// <param name="raDec"></param>
        /// <param name="lst">Local Sidereal Time</param>
        /// <returns></returns>
        internal static double[] RaDecToAxesXY(double[] raDec, double lst)
        {
            var axes = new[] { raDec[0], raDec[1] };

            switch (SkySettings.AlignmentMode)
            {
            case AlignmentModes.algAltAz:
                axes = Range.RangeAzAlt(axes);
                axes = Coordinate.RaDec2AltAz(axes[0], axes[1], lst, SkySettings.Latitude);
                return(axes);

            case AlignmentModes.algGermanPolar:
                axes[0] = (lst - axes[0]) * 15.0;
                if (SkyServer.SouthernHemisphere)
                {
                    axes[1] = -axes[1];
                }
                axes[0] = Range.Range360(axes[0]);

                if (axes[0] > 180.0 || axes[0] < 0)
                {
                    // adjust the targets to be through the pole
                    axes[0] += 180;
                    axes[1]  = 180 - axes[1];
                }
                axes = Range.RangeAxesXY(axes);

                //check for alternative position within meridian limits
                var b = AxesAppToMount(axes);

                var alt = SkyServer.CheckAlternatePosition(b);
                if (alt != null)
                {
                    axes = alt;
                }

                return(axes);

            case AlignmentModes.algPolar:
                axes[0] = (lst - axes[0]) * 15.0;
                axes[1] = (SkyServer.SouthernHemisphere) ? -axes[1] : axes[1];
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            axes = Range.RangeAxesXY(axes);
            return(axes);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Slews degrees from current position using the goto from the server
        /// </summary>
        /// <param name="degrees"></param>
        /// <param name="direction"></param>
        /// <param name="axis"></param>
        private int SlewAxis(double degrees, Axis axis, bool direction = false)
        {
            if (SkyServer.AutoHomeStop)
            {
                return(-3);                        //stop requested
            }
            if (SkyServer.Tracking)
            {
                SkyServer.TrackingSpeak = false;
                SkyServer.Tracking      = false;
            }

            var positions = Axes.MountAxis2Mount();

            switch (axis)
            {
            case Axis.Axis1:
                degrees = direction ? -Math.Abs(degrees) : Math.Abs(degrees);
                if (SkyServer.SouthernHemisphere)
                {
                    degrees = direction ? Math.Abs(degrees) : -Math.Abs(degrees);
                }
                SkyServer.SlewAxes(positions[0] + degrees, positions[1], SlewType.SlewMoveAxis);
                break;

            case Axis.Axis2:
                degrees = direction ? -Math.Abs(degrees) : Math.Abs(degrees);
                SkyServer.SlewAxes(positions[0], positions[1] + degrees, SlewType.SlewMoveAxis);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(axis), axis, null);
            }

            while (SkyServer.IsSlewing)
            {
                Console.WriteLine(@"slewing");
                Thread.Sleep(300);
            }

            var _ = new CmdAxisStop(0, axis);

            //Thread.Sleep(1000);
            return(0);
        }
Exemplo n.º 5
0
        internal static bool IsFlipRequired(double[] raDec)
        {
            var axes = new[] { raDec[0], raDec[1] };

            switch (SkySettings.AlignmentMode)
            {
            case AlignmentModes.algAltAz:
                return(false);

            case AlignmentModes.algGermanPolar:
                axes[0] = (SkyServer.SiderealTime - axes[0]) * 15.0;
                if (SkyServer.SouthernHemisphere)
                {
                    axes[1] = -axes[1];
                }
                axes[0] = Range.Range360(axes[0]);

                if (axes[0] > 180.0 || axes[0] < 0)
                {
                    // adjust the targets to be through the pole
                    axes[0] += 180;
                    axes[1]  = 180 - axes[1];
                }
                axes = Range.RangeAxesXY(axes);

                //check within meridian limits
                var b = AxesAppToMount(axes);
                if (SkyServer.IsWithinMeridianLimits(b))
                {
                    return(false);
                }

                //check if farthest position is needed
                var alt = Axes.GetAltAxisPosition(b);
                var c   = SkyServer.ChooseClosestPosition(SkyServer.ActualAxisX, b, alt);
                return(c == "b");

            case AlignmentModes.algPolar:
                return(false);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Slews degrees from current position using the goto from the server
        /// </summary>
        /// <param name="degrees"></param>
        /// <param name="direction"></param>
        /// <param name="axis"></param>
        private int SlewAxis(double degrees, AxisId axis, bool direction = false)
        {
            if (SkyServer.AutoHomeStop)
            {
                return(-3);                        //stop requested
            }
            if (SkyServer.Tracking)
            {
                SkyServer.TrackingSpeak = false;
                SkyServer.Tracking      = false;
            }

            var positions = Axes.MountAxis2Mount();

            switch (axis)
            {
            case AxisId.Axis1:
                degrees = direction ? Math.Abs(degrees) : -Math.Abs(degrees);
                if (SkyServer.SouthernHemisphere)
                {
                    degrees = direction ? -Math.Abs(degrees) : Math.Abs(degrees);
                }
                SkyServer.SlewAxes(positions[0] + degrees, positions[1], SlewType.SlewMoveAxis);
                break;

            case AxisId.Axis2:
                degrees = direction ? -Math.Abs(degrees) : Math.Abs(degrees);
                if (SkyServer.SouthernHemisphere)
                {
                    degrees = direction ? Math.Abs(degrees) : -Math.Abs(degrees);
                }
                SkyServer.SlewAxes(positions[0], positions[1] + degrees, SlewType.SlewMoveAxis);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(axis), axis, null);
            }

            var monitorItem = new MonitorEntry
            {
                Datetime = HiResDateTime.UtcNow,
                Device   = MonitorDevice.Telescope,
                Category = MonitorCategory.Server,
                Type     = MonitorType.Information,
                Method   = MethodBase.GetCurrentMethod().Name,
                Thread   = Thread.CurrentThread.ManagedThreadId,
                Message  = $"{positions[0]},{positions[1]},{degrees},{axis},{direction}"
            };

            MonitorLog.LogToMonitor(monitorItem);

            while (SkyServer.IsSlewing)
            {
                //Console.WriteLine(@"slewing");
                Thread.Sleep(300);
            }

            var _ = new SkyAxisStop(0, axis);

            //Thread.Sleep(1500);
            return(0);
        }