/// <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); }
/// <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); }
/// <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); }
/// <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); }
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(); } }
/// <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); }