Changeset 914 for trunk/MagicSoft/Cosy


Ignore:
Timestamp:
08/23/01 14:41:03 (23 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/Changelog

    r913 r914  
    3939     - reorganized parts of the existing code
    4040
     41   * devdrv/macs.cc:
     42     - changed some output from cout to lout
     43
    4144
    4245
     
    100103
    101104    * slalib/Makefile:
    102     - added missing files
    103    
     105      - added missing files
    104106
    105107
  • trunk/MagicSoft/Cosy/MCosy.cc

    r912 r914  
    99#include <TSystem.h>
    1010#include <TApplication.h>
     11#include <TTimer.h>
    1112
    1213#include "MGCosy.h"
     
    151152}
    152153
     154ZdAz MCosy::GetRePosPdo()
     155{
     156    return ZdAz(fMac2->GetPdoPos(), fMac1->GetPdoPos());
     157}
     158
    153159int MCosy::SetPosition(const ZdAz &dst) // [rad]
    154160{
    155     // FIXME: CORRECT BY fOffset !!!!!!!!!!
     161    // FIXME: CORRECT BY fTrackingError !!!!!!!!!!
    156162
    157163    //
     
    336342        dest = CorrectTarget(GetSePos(), sla.CalcZdAz(dst));
    337343
     344        //
     345        // Request absolute position of rotary encoder from MACS
     346        //
    338347        fMac2->RequestSDO(0x6004);
    339348        fMac1->RequestSDO(0x6004);
     
    346355
    347356        //
    348         // Copy fOffset to a local variable
     357        // Copy fTrackingError to a local variable
    349358        //
    350359        ZdAz offset = fOffset;
     
    402411            dest0 *= kGearRatio;
    403412            dest0 -= GetRePos()+offset;
    404             dest0.Round();
     413            //dest0.Round();
    405414
    406415            fAccuracy = dest0/kGearRatio2; // [deg]
     416            fVelocity = vt/kGearRatio2;
    407417
    408418            //cout << "Control deviation: ";
    409419            fout << setprecision(15) << setw(15) << mjd*60.*60.*24. << " ";
    410             fout << setw(4) << (int)fOffset.Zd() << " ";
    411             fout << setw(4) << (int)fOffset.Az() << " ";
     420            fout << setw(4) << (int)fTrackingError.Zd() << " ";
     421            fout << setw(4) << (int)fTrackingError.Az() << " ";
    412422            fout << setw(4) << dest0.Zd() << " ";
    413423            fout << setw(4) << dest0.Az() << " ";
     
    515525    return (void*)0xffffffff;
    516526}
    517 
     527/*
    518528void *MTGui::Thread()
    519529{
     
    521531    return NULL;
    522532}
    523 
     533*/
    524534void *MTTalk::Thread()
    525535{
     
    609619            usleep(1);
    610620
    611         ZdAz sollalt; // [se]
    612         ZdAz sollaz;  // [se]
    613621        ZdAz old;
    614 
    615         ZdAz ist=fOffset/kGearRatio;     // [se]
    616         //
    617         // only update fOffset while tracking
    618         //
     622        ZdAz ist   = fTrackingError/kGearRatio;     // [se]
     623        ZdAz istre = fOffset;                       // [re]
     624        //
     625        // only update fTrackingError while tracking
     626        //
     627        ZdAz sollzd;
     628        ZdAz sollaz;
    619629        while (fTracking)
    620630        {
    621             usleep(100000/*00*/); // 0.1s
     631            //
     632            // This is the time constant which defines how fast
     633            // you correct for external influences (like wind)
     634            //
     635            usleep(100000); // 0.1s
    622636
    623637            //
    624638            // Make changes (eg wind) smoother - attenuation of control function
    625639            //
    626 
    627             ZdAz offset(fOffset.Zd()*9.0/10.0+((ist.Zd()-sollalt.Zd())*kGearRatio.X())/10.0,
    628                         fOffset.Az()*9.0/10.0+((ist.Az()-sollaz.Az()) *kGearRatio.Y())/10.0);
     640            fTrackingError.Set((ist.Zd()-sollzd.Zd())*kGearRatio.X(),
     641                               (ist.Az()-sollaz.Az())*kGearRatio.Y());
     642
     643
     644            const float weight = 0.3;
     645
     646            ZdAz offset(fOffset.Zd()*(1.-weight)+(ist.Zd()*kGearRatio.X()-istre.Zd())*weight,
     647                        fOffset.Az()*(1.-weight)+(ist.Az()*kGearRatio.Y()-istre.Az())*weight);
    629648
    630649            fOffset = offset;
    631             // fOffset.Zd(((offset.Zd()>1000)||(offset.Zd()<-1000))?0:offset.Zd());
    632             // fOffset.Az(((offset.Az()>1000)||(offset.Az()<-1000))?0:offset.Az());
     650            // fTrackingError.Zd(((offset.Zd()>1000)||(offset.Zd()<-1000))?0:offset.Zd());
     651            // fTrackingError.Az(((offset.Az()>1000)||(offset.Az()<-1000))?0:offset.Az());
    633652
    634653            //
     
    644663                continue;
    645664
    646             //
    647             // if Alt Shaftencoder changed position
     665            istre = GetRePosPdo();
     666
     667            //
     668            // Get time from last shaftencoder position change (position: ist)
     669            //
     670            const double tzd = (fAlt1->GetMjd()+fAlt2->GetMjd())/2.0;
     671            const double taz = fAz->GetMjd();
     672
     673            //
     674            // if Shaftencoder changed position
     675            // calculate were we should be
    648676            //
    649677            if ((int)ist.Zd() != (int)old.Zd())
    650678            {
    651                 //
    652                 // Get time from last shaftencoder position change
    653                 //
    654                 const double t = (fAlt1->GetMjd()+fAlt2->GetMjd())/2.0;
    655 
    656                 //
    657                 // calculate were we should be
    658                 //
    659                 sla.SetMjd(t);
    660                 sollalt = CorrectTarget(ist, sla.CalcZdAz(fRaDec));
    661 
    662                 old.Zd(ist.Zd());
     679                sla.SetMjd(tzd);
     680                sollzd = CorrectTarget(ist, sla.CalcZdAz(fRaDec)); // [se]
    663681            }
    664682
    665             //
    666             // if Alt Shaftencoder changed position
    667             //
    668683            if ((int)ist.Az() != (int)old.Az())
    669684            {
    670                 //
    671                 // Get time from last shaftencoder position change
    672                 //
    673                 const double t = fAz->GetMjd();
    674 
    675                 //
    676                 // calculate were we should be
    677                 //
    678                 sla.SetMjd(t);
    679                 sollaz = CorrectTarget(ist, sla.CalcZdAz(fRaDec));
    680 
    681                 old.Az(ist.Az());
     685                sla.SetMjd(taz);
     686                sollaz = CorrectTarget(ist, sla.CalcZdAz(fRaDec)); // [se]
    682687            }
     688
     689            old = ist;
    683690        }
    684691    }
    685692}
    686 
     693/*
    687694void MCosy::GuiThread(MTGui *t)
    688695{
     696    fWin=new MGCosy(this, gClient->GetRoot(), 1, 1);
     697
     698    fAz->SetDisplay(fWin->GetLabel1());
     699    fAlt1->SetDisplay(fWin->GetLabel2());
     700    fAlt2->SetDisplay(fWin->GetLabel3());
     701
    689702    while (!t->HasStopFlag())
    690703    {
     
    698711
    699712        ZdAz ist = GetSePos()*(360.0/16384.0); // [se]
    700         fWin->Update(ist, fAccuracy);
     713        fWin->Update(ist, fAccuracy, fVelocity, fTrackingError/kGearRatio2);
    701714
    702715    }
     716
     717    delete fWin;
    703718    cout << "Not running anymore." << endl;
    704719}
     720*/
     721Bool_t MCosy::HandleTimer(TTimer *t)
     722{
     723    //
     724    // Update Gui, foremer MTGui.
     725    //
     726    fAlt1->DisplayVal();
     727    fAlt2->DisplayVal();
     728    fAz->DisplayVal();
     729
     730    // gSystem->ProcessEvents();
     731
     732    //    ZdAz err1 = fTrackingError/kGearRatio2;
     733    //    ZdAz err2(30./3600., 20./3600.); // = fTrackingError/kGearRatio2;
     734
     735    ZdAz dummy = fOffset/kGearRatio2/4.; // /4. because using velocity canvas
     736
     737    ZdAz ist = GetSePos()*(360.0/16384.0); // [se]
     738
     739    fWin->Update(ist, fTrackingError/kGearRatio2, fVelocity, dummy);
     740
     741    //    cout << fTrackingError.Zd()/kGearRatio2.X()*3600. << " ";
     742    //    cout << fTrackingError.Az()/kGearRatio2.Y()*3600. << endl;
     743
     744    return kTRUE;
     745}
     746
    705747
    706748int MCosy::StopWaitingForSDO() const
     
    718760
    719761    lout << "- Starting GUI Thread." << endl;
    720     fTGui = new MTGui(this);
     762    fUpdateGui->TurnOn();
     763    //    fTGui = new MTGui(this);
    721764}
    722765
    723766void MCosy::Stop()
    724767{
    725     delete fTGui;
     768    cout << "Stopping Gui Timer Events." << endl;
     769    fUpdateGui->TurnOff();
     770    //    delete fTGui;
    726771    lout << "- GUI Thread stopped." << endl;
    727772
     
    755800    SetNode(fAz);
    756801
     802    //
     803    // Create Gui Event timer and Gui
     804    //
     805    fUpdateGui = new TTimer(this, 100); // 100ms
     806
    757807    fWin=new MGCosy(this, gClient->GetRoot(), 1, 1);
    758808
     
    760810    fAlt1->SetDisplay(fWin->GetLabel2());
    761811    fAlt2->SetDisplay(fWin->GetLabel3());
     812
    762813}
    763814
     
    780831MCosy::~MCosy()
    781832{
     833    delete fUpdateGui;
     834
    782835    cout << "Deleting Nodes." << endl;
    783836
  • trunk/MagicSoft/Cosy/MCosy.h

    r912 r914  
    2121class MCosy;
    2222
     23/*
    2324class MTGui : public MThread
    2425{
     
    3536    }
    3637};
     38*/
    3739
    3840class MTTalk : public MThread
     
    5153    }
    5254};
    53 
    54 class MCosy : public Network, public MsgQueue
     55class TTimer;
     56class MCosy : public Network, public MsgQueue, public TObject
    5557{
    5658    friend class MTGui;
     
    6870    MGCosy *fWin;
    6971
    70     MTGui  *fTGui;
     72    TTimer *fUpdateGui;
     73
     74    //MTGui  *fTGui;
    7175    MTTalk *fTTalk;
    7276
    73     ZdAz  fOffset;    // Tracking Offset between SE and calc-pos [re]
    74     RaDec fRaDec;     // Position to track
    75     int   fTracking;  // Flag for present tracking action
    76     ZdAz  fAccuracy;  // Actual accuracy of Tracking
     77    ZdAz  fTrackingError; // Tracking Offset between SE and calc-pos [re]
     78    ZdAz  fOffset;        // Offset between se and re coordinate system [re]
     79    RaDec fRaDec;         // Position to track
     80    int   fTracking;      // Flag for present tracking action
     81    ZdAz  fAccuracy;      // Actual accuracy of Tracking
     82    ZdAz  fVelocity;      // Actual velocity of Tracking
    7783
    7884    ZdAz GetRePos();
     85    ZdAz GetRePosPdo();
    7986    ZdAz GetSePos();     // [se]
    8087
     
    99106    void *Proc(int msg, void *mp);
    100107
     108    Bool_t HandleTimer(TTimer *t);
     109
    101110    static ZdAz CorrectTarget(const ZdAz &src, const ZdAz &dst);
    102111//    static ZdAz RaDec2ZdAz(const double mjd, const RaDec &pos, const RaDec &pm=RaDec(0,0));
  • trunk/MagicSoft/Cosy/Makefile

    r912 r914  
    2424CINT     = M
    2525INCLUDES = -I. -Iincl -Ibase -Igui -Idevdrv -Icandrv -Ivideodev -Icatalog
    26 LIBS     = -lpng -lz -L/usr/X11R6/lib
     26LIBS     = -lpng -lz -L/usr/X11R6/lib -lpthread
    2727
    2828#
     
    3838#
    3939SUBDIRS = \
    40         gui         \
    41         candrv      \
    42         devdrv      \
    43         catalog     \
    44         videodev    \
    45         base        \
     40        gui      \
     41        candrv   \
     42        catalog  \
     43        devdrv   \
     44        videodev \
     45        base     \
    4646        slalib
    4747
  • trunk/MagicSoft/Cosy/base/coord.h

    r732 r914  
    7878public:
    7979    ZdAz(double zd=0, double az=0) : XY(zd, az) {}
     80    ZdAz(const ZdAz &c) : XY(c) {}
    8081
    8182    double Zd() const { return fX; }
Note: See TracChangeset for help on using the changeset viewer.