Ignore:
Timestamp:
02/16/03 17:02:06 (22 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy/main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/main/MCosy.cc

    r1758 r1760  
     1#include "MCosy.h"
    12#include "MCosy.h"
    23
     
    307308    if (HasZombie())
    308309        return;
    309 
    310310    SetStatus(MCosy::kMoving);
    311311
     
    408408
    409409    const ZdAz d = dst*kRad2Deg;
    410     if (d.Zd()<fMin.Zd() || d.Zd()>fMax.Zd() || d.Az()<fMin.Az() || d.Az()>fMax.Az())
    411     {
    412         lout << "ERROR: Requested Position not inside allowed range." << endl;
     410
     411    lout << "Target Position: " << d.Zd() << "deg, " << d.Az() << "deg (Zd/Az)" << endl;
     412
     413    if (d.Zd()<fMin.Zd() || d.Zd()>fMax.Zd())
     414    {
     415        lout << "ERROR: Requested Zenith Angle (" << d.Zd() << "deg) not ";
     416        lout << "inside allowed range." << endl;
     417        return kFALSE;
     418    }
     419
     420    if (d.Az()<fMin.Az() || d.Az()>fMax.Az())
     421    {
     422        lout << "ERROR: Requested Azimuth Angle (" << d.Az() << "deg) not ";
     423        lout << "inside allowed range." << endl;
    413424        return kFALSE;
    414425    }
     
    445456    fZdAzSoll = dst;
    446457
    447     lout << "Positioning to Target..." << endl;
    448458    cout << "Source        Zd: " << src.Zd()  << "se  Az:" << src.Az()  << "se" << endl;
    449459    cout << "Destination   Zd: " << Rad2SE(dst.Zd()) << "se  Az:" << Rad2SE(dst.Az())  << "se" << endl;
     
    451461    cout << "Shortest Dest Zd: " << dest.Zd() << "se  Az:" << dest.Az() << "se" << endl;
    452462
    453     for (int i=0; i<10 && !(Break() || HasError()) && !HasZombie(); i++)
    454     {
     463    int i;
     464    for (i=0; i<10 && !(Break() || HasError()) && !HasZombie(); i++)
     465    {
     466
     467        lout << "Step #" << i << endl;
    455468        //
    456469        // Get Shaft Encoder Positions
     
    491504        // at the same time
    492505        //
     506        lout << "SetVelocity" << endl;
    493507        if (i)
    494508            SetPosVelocity(1.0, 0.1, 0.1);
    495509        else
    496             SetPosVelocity(fabs(rd.Ratio()), 0.9, 0.5);
     510            SetPosVelocity(fabs(rd.Ratio()), 0.1, 0.3);
    497511
    498512        rd.Round();
     
    511525        // repositioning (relative)
    512526        //
     527        lout << "Do Relative Positioning Done" << endl;
    513528        DoRelPos(rd, cdzd, cdaz);
     529
     530        lout << "Relative Positioning Done" << endl;
    514531    }
    515532
    516533    StopMovement();
    517     lout << "Warning: Requested position not reached." << endl;
     534    lout << "Warning: Requested position not reached (i=" << i << ")" << endl;
    518535    return FALSE;
    519536}
     
    670687void MCosy::TrackPosition(const RaDec &dst) // ra, dec [rad]
    671688{
     689    lout << "Track Position: " << dst.Ra()*kRad2Deg/15 << "h, " << dst.Dec()*kRad2Deg << "deg (Ra/Dec)" << endl;
     690
    672691    SlaStars sla(fObservatory);
    673692
     
    733752    // We want to reach the theoretical position exactly in about 0.5s
    734753    //
    735     const float dt = 1;  // 1 second
     754    // *OLD*const float dt = 1;  // 1 second
     755    const float dt = 3;  // 1 second
    736756    while (!(Break() || HasError()) && !HasZombie())
    737757    {
     
    751771        dest *= kGearRatio;  // [re]
    752772
    753         if (d.Zd()<fMin.Zd() || d.Zd()>fMax.Zd() || d.Az()<fMin.Az() || d.Az()>fMax.Az())
     773        ZdAz min = fBending(fMin/kRad2Deg)*kRad2Deg;
     774        ZdAz max = fBending(fMax/kRad2Deg)*kRad2Deg;
     775
     776        if (d.Zd()<min.Zd() || d.Az()<min.Az())
    754777        {
    755778            lout << "ERROR: Calculated position for T+dt not inside allowed range." << endl;
     779            lout << "<  " << d.Zd() << " " << min.Zd() << "  " << d.Az() << " " << min.Az()  << endl;
     780            break;
     781        }
     782        if (d.Zd()>max.Zd() || d.Az()>max.Az())
     783        {
     784            lout << "ERROR: Calculated position for T+dt not inside allowed range." << endl;
     785            lout << ">  " <<  d.Zd() << " " << max.Zd() << "  " << d.Az() << " " << max.Az()  << endl;
    756786            break;
    757787        }
     
    777807        // correct for the duration of RaDec2AltAz
    778808        //
    779         const ZdAz v = dest*60.0/(dt-(fMac2->GetTime()-sla));
     809        const ZdAz v = dest*60.0/(dt/*-(fMac2->GetTime()-sla)*/);
    780810
    781811        //
     
    830860        //
    831861        usleep(50000); // 0.05s
     862        //usleep(500000); // 0.5s
    832863    }
    833864
     
    876907bool MCosy::CheckNetwork()
    877908{
     909    return kTRUE;
    878910    //CheckConnections();
     911
    879912    if (HasZombie())
    880913    {
     
    10341067        else
    10351068        {
     1069            cout << "HOME NOT ALLOWED... for Magic." << endl;
     1070            /*
    10361071            cout << "Going Home..." << endl;
    10371072            TEnv env(".cosyrc");
     
    10531088            fMac2->ReqPos();
    10541089            fMac3->StopMotor();
     1090            */
    10551091        }
    10561092        cout << "WM_Home: done. (return 0x403e)" << endl;
     
    10651101
    10661102            XY xy = *((XY*)mp);
    1067             RaDec rd(xy.X()*15., xy.Y());
     1103            RaDec rd(xy.X()*15., xy.Y()); // [deg]
    10681104
    10691105            ZdAz a0 = sla.CalcZdAz(rd*kDeg2Rad);
     
    11091145
    11101146    cout << "Reading telescope range..." << flush;
    1111     const Double_t amin = env.GetValue("Az_Min", -90.0);
    1112     const Double_t zmin = env.GetValue("Zd_Min", -90.0);
     1147    const Double_t amin = env.GetValue("Az_Min[deg]", -74.5);
     1148    const Double_t zmin = env.GetValue("Zd_Min[deg]", -90.0);
    11131149    fMin.Set(zmin, amin);
    11141150
    11151151    cout << " Min: " << zmin << "deg  " << amin << "deg" << endl;
    11161152
    1117     const Double_t amax = env.GetValue("Az_Max", 318.0);
    1118     const Double_t zmax = env.GetValue("Zd_Max", 100.0);
     1153    const Double_t amax = env.GetValue("Az_Max[deg]", 318.0);
     1154    const Double_t zmax = env.GetValue("Zd_Max[deg]", 100.5);
    11191155    fMax.Set(zmax, amax);
    11201156
     
    11551191        resseaz = env.GetValue("Az_ResSE[se/U_mot]", 16384);
    11561192
    1157     kGearRatio.Set (gzd*resrezd/ressezd, gaz*resreaz/resseaz);  //[re/se]
    1158     kGearRatio2.Set(gzd*resrezd/360.0,   gaz*resreaz/360.0);    //[re/deg]
     1193    kGearRatio.Set (gzd*resrezd*4/ressezd, gaz*resreaz*4/resseaz);  //[re/se]
     1194    kGearRatio2.Set(gzd*resrezd*4/360.0,   gaz*resreaz*4/360.0);    //[re/deg]
    11591195    cout << "done." << endl;
    11601196
     
    11831219void MCosy::TalkThreadTracking()
    11841220{
    1185     if (fZd1->IsZombieNode() || fZd2->IsZombieNode() || fAz->IsZombieNode())
     1221    if (fZd1->IsZombieNode() && fZd2->IsZombieNode())
    11861222        return;
     1223
     1224    if (fAz->IsZombieNode())
     1225        return;
     1226
    11871227    if (!fMac1 || !fMac2)
    11881228        return;
     1229
     1230    lout << "Tracking Thread started..." << endl;
    11891231
    11901232    SlaStars sla(fObservatory);
     
    12231265        {
    12241266            phca1 = fZd1->PosHasChanged();
    1225             phca2 = fZd2->PosHasChanged();
     1267//            phca2 = fZd2->PosHasChanged();
    12261268            phcaz = fAz->PosHasChanged();
    12271269            usleep(1);
     
    12501292        // FIXME: I cannot take the avarage
    12511293        //
     1294        // FIXME
     1295        time.Zd(fZd1->GetMjd());
     1296        /* OLD*
    12521297        if (fZd1->GetMjd()>fZd2->GetMjd())
    12531298            time.Zd(fZd1->GetMjd());
    12541299        else
    12551300            time.Zd(fZd2->GetMjd());
     1301        */
    12561302        //time.Zd((fZd1->GetMjd()+fZd2->GetMjd())/2.0);
    12571303        time.Az(fAz->GetMjd());
     
    12811327        }
    12821328
    1283         ZdAz soll(sollzd.Zd(), sollaz.Az());
     1329        ZdAz soll(sollzd.Zd(), sollaz.Az()); // [se]
    12841330        fZdAzSoll = fBending.CorrectBack(soll*2*TMath::Pi()/16384);
    12851331
     
    16031649    lout << "- Starting GUI." << endl;
    16041650    fWin=new MGCosy(fObservatory, this, gClient->GetRoot(), 1, 1);
     1651}
     1652
     1653bool MCosy::HasZombie() const
     1654{
     1655    bool ses = fZd1->IsZombieNode() & fZd2->IsZombieNode();
     1656
     1657    return fMac1->IsZombieNode() | fMac2->IsZombieNode() | fAz->IsZombieNode() | ses;
    16051658}
    16061659
  • trunk/MagicSoft/Cosy/main/MCosy.h

    r1758 r1760  
    161161    bool CheckNetwork();
    162162
     163    virtual bool HasZombie() const;
     164
    163165public:
    164166    MCosy(int mode, const char *dev, const int baud, MLog &out=gLog);
Note: See TracChangeset for help on using the changeset viewer.