Пример #1
0
        internal static void CalcEncoderGotoTargets(double tRa, double tDec, ref double RaEnc, ref double DecEnc)
        {
            eqmodvector.Coordt tmpcoord = new eqmodvector.Coordt();
            double             tPier    = 0;

            double tha = EQMath.RangeHA(tRa - EQMath.EQnow_lst(EQMath.gLongitude * EQMath.DEG_RAD));

            if (tha < 0)
            {
                if (EQMath.gHemisphere == 0)
                {
                    tPier = 1;
                }
                else
                {
                    tPier = 0;
                }
                tRa = EQMath.Range24(tRa - 12);
            }
            else
            {
                if (EQMath.gHemisphere == 0)
                {
                    tPier = 0;
                }
                else
                {
                    tPier = 1;
                }
            }

            //Compute for Target RA/DEC Encoder
            RaEnc  = EQMath.Get_RAEncoderfromRA(tRa, 0, EQMath.gLongitude, EQMath.gRAEncoder_Zero_pos, EQMath.gTot_RA, EQMath.gHemisphere);
            DecEnc = EQMath.Get_DECEncoderfromDEC(tDec, tPier, EQMath.gDECEncoder_Zero_pos, EQMath.gTot_DEC, EQMath.gHemisphere);

            if (Alignment.gThreeStarEnable)
            {
                // Transform target using model
                switch (Common.gAlignmentMode)
                {
                case 2:
                    // n-star+nearest
                    tmpcoord = EQMath.DeltaSyncReverse_Matrix_Map(RaEnc - EQMath.gRASync01, DecEnc - EQMath.gDECSync01);
                    break;

                case 1:
                    // n-star
                    tmpcoord = EQMath.Delta_Matrix_Map(RaEnc - EQMath.gRASync01, DecEnc - EQMath.gDECSync01);
                    break;

                default:
                    // nearest
                    tmpcoord = EQMath.Delta_Matrix_Map(RaEnc - EQMath.gRASync01, DecEnc - EQMath.gDECSync01);

                    if (tmpcoord.f == 0)
                    {
                        tmpcoord = EQMath.DeltaSyncReverse_Matrix_Map(RaEnc - EQMath.gRASync01, DecEnc - EQMath.gDECSync01);
                    }
                    break;
                }
                RaEnc  = tmpcoord.x;
                DecEnc = tmpcoord.Y;
            }
        }
Пример #2
0
        internal static bool EQ_NPointAppend(double RightAscension, double Declination, double pLongitude, int pHemisphere)
        {
            bool   result       = false;
            object oLangDll     = null;
            object HC           = null;
            object StarEditform = null;

            double tRa   = 0;
            double tPier = 0;

            double DeltaRa  = 0;
            double DeltaDec = 0;

            int  i       = 0;
            int  Count   = 0;
            bool flipped = false;

            result = true;

            int curalign = gAlignmentStars_count + 1;

            // build alignment record
            int    ERa  = Common.EQGetMotorValues(0);
            int    EDec = Common.EQGetMotorValues(1);
            double vRA  = RightAscension;
            double vDEC = Declination;

            // look at current position and detemrine if flipped
            double RA_Hours = EQMath.Get_EncoderHours(EQMath.gRAEncoder_Zero_pos, Convert.ToDouble(ERa), EQMath.gTot_RA, EQMath.gHemisphere);

            if (RA_Hours > 12)
            {
                // Yes we're currently flipped!
                flipped = true;
            }
            else
            {
                flipped = false;
            }

            double tha = EQMath.RangeHA(vRA - EQMath.EQnow_lst(pLongitude * EQMath.DEG_RAD));

            if (tha < 0)
            {
                if (flipped)
                {
                    if (EQMath.gHemisphere == 0)
                    {
                        tPier = 0;
                    }
                    else
                    {
                        tPier = 1;
                    }
                    tRa = vRA;
                }
                else
                {
                    if (EQMath.gHemisphere == 0)
                    {
                        tPier = 1;
                    }
                    else
                    {
                        tPier = 0;
                    }
                    tRa = EQMath.Range24(vRA - 12);
                }
            }
            else
            {
                if (flipped)
                {
                    if (EQMath.gHemisphere == 0)
                    {
                        tPier = 1;
                    }
                    else
                    {
                        tPier = 0;
                    }
                    tRa = EQMath.Range24(vRA - 12);
                }
                else
                {
                    if (EQMath.gHemisphere == 0)
                    {
                        tPier = 0;
                    }
                    else
                    {
                        tPier = 1;
                    }
                    tRa = vRA;
                }
            }

            //Compute for Sync RA/DEC Encoder Values
            AlignmentStars[curalign].OrigTargetDEC = Declination;
            AlignmentStars[curalign].OrigTargetRA  = RightAscension;
            AlignmentStars[curalign].TargetRA      = EQMath.Get_RAEncoderfromRA(tRa, 0, pLongitude, EQMath.gRAEncoder_Zero_pos, EQMath.gTot_RA, pHemisphere);
            AlignmentStars[curalign].TargetDEC     = EQMath.Get_DECEncoderfromDEC(vDEC, tPier, EQMath.gDECEncoder_Zero_pos, EQMath.gTot_DEC, pHemisphere);
            AlignmentStars[curalign].EncoderRA     = ERa;
            AlignmentStars[curalign].EncoderDEC    = EDec;
            AlignmentStars[curalign].AlignTime     = DateTime.Now;

            DeltaRa  = AlignmentStars[curalign].TargetRA - AlignmentStars[curalign].EncoderRA;            //'  Difference between theoretical position and encode position.
            DeltaDec = AlignmentStars[curalign].TargetDEC - AlignmentStars[curalign].EncoderDEC;          //'  Difference between theoretical position and encode position.


            //UPGRADE_TODO: (1067) Member EncoderTimer is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
            HC.EncoderTimer.Enabled = true;

            if ((Math.Abs(DeltaRa) < EQMath.gEQ_MAXSYNC) && (Math.Abs(DeltaDec) < EQMath.gEQ_MAXSYNC) || Common.gDisableSyncLimit)
            {
                // Use this data also for next sync until a three star is achieved
                EQMath.gRA1Star  = DeltaRa;
                EQMath.gDEC1Star = DeltaDec;

                if (curalign < 3)
                {
                    //UPGRADE_TODO: (1067) Member GetLangString is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                    //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                    HC.Add_Message(Conversion.Str(curalign) + " " + Convert.ToString(oLangDll.GetLangString(6009)));
                    gAlignmentStars_count++;
                }
                else
                {
                    if (curalign == 3)
                    {
                        gAlignmentStars_count = 3;
                        SendtoMatrix();
                    }
                    else
                    {
                        // add new point
                        Count = 1;
                        // copy points to temp array
                        int tempForEndVar = curalign - 1;
                        for (i = 1; i <= tempForEndVar; i++)
                        {
                            DeltaRa  = Math.Abs(AlignmentStars[i].EncoderRA - ERa);
                            DeltaDec = Math.Abs(AlignmentStars[i].EncoderDEC - EDec);
                            if (DeltaRa > ProximityRa || DeltaDec > ProximityDec)
                            {
                                // point is far enough away from the new point - so keep it
                                AlignmentStars[Count] = AlignmentStars[i];
                                Count++;
                            }
                            else
                            {
                                //                        HC.Add_Message ("Old Point too close " & CStr(deltaRA) & " " & CStr(deltadec) & " " & CStr(ProximityDec))
                            }
                        }

                        AlignmentStars[Count] = AlignmentStars[curalign];
                        curalign = Count;
                        gAlignmentStars_count = curalign;

                        SendtoMatrix();

                        //UPGRADE_TODO: (1067) Member RefreshDisplay is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                        StarEditform.RefreshDisplay = true;
                    }
                }
            }
            else
            {
                // sync is too large!
                result = false;
                //UPGRADE_TODO: (1067) Member GetLangString is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                HC.Add_Message(oLangDll.GetLangString(6004));
                //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                HC.Add_Message("Target  RA=" + EQMath.FmtSexa(EQMath.gRA, false));
                //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                HC.Add_Message("Sync    RA=" + EQMath.FmtSexa(RightAscension, false));
                //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                HC.Add_Message("Target DEC=" + EQMath.FmtSexa(EQMath.gDec, true));
                //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                HC.Add_Message("Sync   DEC=" + EQMath.FmtSexa(Declination, true));
            }

            if (gSaveAPresetOnAppend == 1)
            {
                // don't write emtpy list!
                if (gAlignmentStars_count > 0)
                {
                    //idx = GetPresetIdx
                    string tempRefParam = "";
                    SaveAlignmentStars(GetPresetIdx(), ref tempRefParam);
                }
            }

            return(result);
        }
Пример #3
0
        internal static void CalcEncoderTargets()
        {
            object HC = null;
            double targetRAEncoder   = 0;
            double targetDECEncoder  = 0;
            double currentRAEncoder  = 0;
            double currentDECEncoder = 0;

            eqmodvector.Coordt tmpcoord = new eqmodvector.Coordt();
            double             tRa      = 0;
            double             tha      = 0;
            double             tPier    = 0;

            try
            {
                EQMath.gSlewStatus = false;

                //stop the motors
                PEC.PEC_StopTracking();
                EQMath.eqres = UpgradeSolution1Support.PInvoke.SafeNative.eqcontrl.EQ_MotorStop(2);
                //    eqres = EQ_MotorStop(0)
                //    eqres = EQ_MotorStop(1)

                //    'Wait for motor stop , Need to add timeout routines here
                //    Do
                //        eqres = EQ_GetMotorStatus(0)
                //        If (eqres = EQ_NOTINITIALIZED) Or (eqres = EQ_COMNOTOPEN) Or (eqres = EQ_COMTIMEOUT) Then GoTo SL01
                //    Loop While (eqres And EQ_MOTORBUSY) <> 0
                //
                //SL01:
                //    Do
                //        eqres = EQ_GetMotorStatus(1)
                //        If (eqres = EQ_NOTINITIALIZED) Or (eqres = EQ_COMNOTOPEN) Or (eqres = EQ_COMTIMEOUT) Then GoTo SL02
                //    Loop While (eqres And EQ_MOTORBUSY) <> 0
                //
                //SL02:

                // read current
                currentRAEncoder  = Common.EQGetMotorValues(0);
                currentDECEncoder = Common.EQGetMotorValues(1);

                tha = EQMath.RangeHA(gTargetRA - EQMath.EQnow_lst(EQMath.gLongitude * EQMath.DEG_RAD));
                if (tha < 0)
                {
                    if (gCWUP)
                    {
                        if (EQMath.gHemisphere == 0)
                        {
                            tPier = 0;
                        }
                        else
                        {
                            tPier = 1;
                        }
                        tRa = gTargetRA;
                    }
                    else
                    {
                        if (EQMath.gHemisphere == 0)
                        {
                            tPier = 1;
                        }
                        else
                        {
                            tPier = 0;
                        }
                        tRa = EQMath.Range24(gTargetRA - 12);
                    }
                }
                else
                {
                    if (gCWUP)
                    {
                        if (EQMath.gHemisphere == 0)
                        {
                            tPier = 1;
                        }
                        else
                        {
                            tPier = 0;
                        }
                        tRa = EQMath.Range24(gTargetRA - 12);
                    }
                    else
                    {
                        if (EQMath.gHemisphere == 0)
                        {
                            tPier = 0;
                        }
                        else
                        {
                            tPier = 1;
                        }
                        tRa = gTargetRA;
                    }
                }

                //Compute for Target RA/DEC Encoder
                targetRAEncoder  = EQMath.Get_RAEncoderfromRA(tRa, 0, EQMath.gLongitude, EQMath.gRAEncoder_Zero_pos, EQMath.gTot_RA, EQMath.gHemisphere);
                targetDECEncoder = EQMath.Get_DECEncoderfromDEC(gTargetDec, tPier, EQMath.gDECEncoder_Zero_pos, EQMath.gTot_DEC, EQMath.gHemisphere);

                if (gCWUP)
                {
                    //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                    HC.Add_Message("Goto: CW-UP slew requested");
                    // if RA limits are active
                    //UPGRADE_TODO: (1067) Member ChkEnableLimits is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                    if (Convert.ToDouble(HC.ChkEnableLimits.value) == 1 && EQMath.gRA_Limit_East != 0 && EQMath.gRA_Limit_West != 0)
                    {
                        // check that the target position is within limits
                        if (EQMath.gHemisphere == 0)
                        {
                            if (targetRAEncoder < EQMath.gRA_Limit_East || targetRAEncoder > EQMath.gRA_Limit_West)
                            {
                                // target position is outside limits
                                gCWUP = false;
                            }
                        }
                        else
                        {
                            if (targetRAEncoder > EQMath.gRA_Limit_East || targetRAEncoder < EQMath.gRA_Limit_West)
                            {
                                // target position is outside limits
                                gCWUP = false;
                            }
                        }

                        // if target position is outside limits
                        if (!gCWUP)
                        {
                            //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                            HC.Add_Message("Goto: RA Limits prevent CW-UP slew");
                            //then abandon Counter Weights up Slew and recalculate for a standard slew.
                            if (tha < 0)
                            {
                                if (EQMath.gHemisphere == 0)
                                {
                                    tPier = 1;
                                }
                                else
                                {
                                    tPier = 0;
                                }
                                tRa = EQMath.Range24(gTargetRA - 12);
                            }
                            else
                            {
                                if (EQMath.gHemisphere == 0)
                                {
                                    tPier = 0;
                                }
                                else
                                {
                                    tPier = 1;
                                }
                                tRa = gTargetRA;
                            }
                            targetRAEncoder  = EQMath.Get_RAEncoderfromRA(tRa, 0, EQMath.gLongitude, EQMath.gRAEncoder_Zero_pos, EQMath.gTot_RA, EQMath.gHemisphere);
                            targetDECEncoder = EQMath.Get_DECEncoderfromDEC(gTargetDec, tPier, EQMath.gDECEncoder_Zero_pos, EQMath.gTot_DEC, EQMath.gHemisphere);
                        }
                    }
                }

                if (!Alignment.gThreeStarEnable)
                {
                    Alignment.gSelectStar = 0;
                    currentRAEncoder      = EQMath.Delta_RA_Map(currentRAEncoder);
                    currentDECEncoder     = EQMath.Delta_DEC_Map(currentDECEncoder);
                }
                else
                {
                    // Transform target using model
                    switch (Common.gAlignmentMode)
                    {
                    case 2:
                        // n-star+nearest
                        tmpcoord = EQMath.DeltaSyncReverse_Matrix_Map(targetRAEncoder - EQMath.gRASync01, targetDECEncoder - EQMath.gDECSync01);
                        break;

                    case 1:
                        // n-star
                        tmpcoord = EQMath.Delta_Matrix_Map(targetRAEncoder - EQMath.gRASync01, targetDECEncoder - EQMath.gDECSync01);
                        break;

                    default:
                        // nearest
                        tmpcoord = EQMath.Delta_Matrix_Map(targetRAEncoder - EQMath.gRASync01, targetDECEncoder - EQMath.gDECSync01);

                        if (tmpcoord.f == 0)
                        {
                            tmpcoord = EQMath.DeltaSyncReverse_Matrix_Map(targetRAEncoder - EQMath.gRASync01, targetDECEncoder - EQMath.gDECSync01);
                        }
                        break;
                    }
                    targetRAEncoder  = tmpcoord.x;
                    targetDECEncoder = tmpcoord.Y;
                }

                //Execute the actual slew
                gGotoParams.RA_targetencoder   = targetRAEncoder;
                gGotoParams.RA_currentencoder  = currentRAEncoder;
                gGotoParams.DEC_targetencoder  = targetDECEncoder;
                gGotoParams.DEC_currentencoder = currentDECEncoder;
                //UPGRADE_TODO: (1067) Member Add_Message is not defined in type Variant. More Information: https://www.mobilize.net/vbtonet/ewis/ewi1067
                HC.Add_Message("Goto: " + EQMath.FmtSexa(gTargetRA, false) + " " + EQMath.FmtSexa(gTargetDec, true));
                //    HC.Add_Message "Goto: RaEnc=" & CStr(currentRAEncoder) & " Target=" & CStr(targetRAEncoder)
                //    HC.Add_Message "Goto: DecEnc=" & CStr(currentDECEncoder) & " Target=" & CStr(targetDECEncoder)
            }
            catch
            {
            }
        }