Changeset 1702


Ignore:
Timestamp:
01/13/03 18:18:15 (22 years ago)
Author:
tbretz
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Cosy
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Cosy/Changelog

    r1701 r1702  
    11                                                                  -*-*- END -*-*-
     2
     3 2003/01/13 - Thomas Bretz:
     4
     5   * bending.txt:
     6     - changed to fit the parameters of the model
     7     
     8   * cosy.cc:
     9     - made the 'standard mode' the default
     10
     11   * base/MTimeout.h:
     12     - fixed the change of the base member function name of Notify
     13
     14   * candrv/network.[h,cc]:
     15     - don't set fNodes[i] to NULL if Node is Zombie
     16     - implemented HasZombie and RebootZomies
     17     
     18   * candrv/nodedrv.[h,cc]:
     19     - implemented a base function Reboot
     20     - set node to Zombie status if waitforsdo timed out
     21
     22   * candrv/vmodican.cc:
     23     - added more precise output for CTXcon
     24   
     25   * devdrv/macs.[h,cc]:
     26     - if first waitforsdo fails set don't go on
     27     - implemented fStatus
     28     - implemented enum for fStatus
     29
     30   * gui/MGAccuracy.cc, gui/MGSkyPosition.cc, gui/MGVelocity.cc:
     31     - call SetNoContextMenu in constructor
     32     
     33   * gui/MGCosy.[h,cc]:
     34     - some new labels
     35     - implemented SetLabelColor
     36     
     37   * gui/MGEmbeddedCanvas.[h,cc]:
     38     - implemented SetNoContextMenu
     39
     40   * main/MCosy.cc:
     41     - exchanged all conditionals for the pointers to the nodes
     42       by IsZombieNode
     43     - implemented check for zombies in Proc
     44
     45
     46
    247 2003/01/10 - Thomas Bretz:
    348
  • trunk/MagicSoft/Cosy/base/MTimeout.h

    r925 r1702  
    66class MTimeout : public TTimer
    77{
    8     Bool_t Notify(TTimer *t)
     8    Bool_t Notify()
    99    {
    1010        TurnOff(); // remove from system list
  • trunk/MagicSoft/Cosy/bending.txt

    r1699 r1702  
    11MMT 1987 July 8
    22S   36   7.3622   41.448  -0.0481
    3 IA       136.6   -1
    4 IE        -45.5    -1
    5 END
     3IA       157   -1
     4IE        -35    -1 END
  • trunk/MagicSoft/Cosy/candrv/network.cc

    r1701 r1702  
    240240            if (!fNodes[i]->IsZombieNode())
    241241                fNodeInitialized[i] = TRUE;
    242             else
    243                 fNodes[i]=NULL;
     242            /*else
     243                fNodes[i]=NULL;*/
    244244        }
    245245    lout << "- All Nodes setup." << endl;
     
    288288    return rc;
    289289}
     290
     291// --------------------------------------------------------------------------
     292//
     293// returns true if one of the nodes is a zombie node
     294//
     295bool Network::HasZombie() const
     296{
     297    for (int i=0; i<32; i++)
     298        if (fNodes[i])
     299            if (fNodes[i]->IsZombieNode())
     300                return true;
     301
     302    return false;
     303}
     304
     305// --------------------------------------------------------------------------
     306//
     307// try to reboot all zombie nodes to get them working again. all other
     308// nodes are left untouched.
     309//
     310bool Network::RebootZombies()
     311{
     312    lout << "- Trying to reboot all Zombies..." << endl;
     313    for (int i=0; i<32; i++)
     314        if (fNodes[i])
     315            if (fNodes[i]->IsZombieNode())
     316                if (!fNodes[i]->Reboot())
     317                {
     318                    lout << "- Failed to reboot " << fNodes[i]->GetNodeName() << "." << endl;
     319                    return false;
     320                }
     321
     322    lout << "- All Zombies rebooted." << endl;
     323
     324    return true;
     325}
  • trunk/MagicSoft/Cosy/candrv/network.h

    r1140 r1702  
    3232
    3333    bool HasError() const;
     34    bool HasZombie() const;
     35
     36    bool RebootZombies();
    3437
    3538    ClassDef(Network, 0) // collection of nodes (nodedrv)
  • trunk/MagicSoft/Cosy/candrv/nodedrv.cc

    r1690 r1702  
    8787// --------------------------------------------------------------------------
    8888//
     89// This should be called from a master or main thread to get a node out
     90// of the Zombie-Status. Overload it by your needs.
     91//
     92bool NodeDrv::Reboot()
     93{
     94    fIsZombie = false;
     95    return true;
     96}
     97
     98// --------------------------------------------------------------------------
     99//
    89100// Init device, sets the pointer to the whole network and enables
    90101// the Can messages to be passed through the interface:
     
    315326bool NodeDrv::WaitForSdo(WORD_t idx, BYTE_t subidx, WORDS_t timeout)
    316327{
    317     return fNetwork->WaitForSdo(fId, idx, subidx, timeout);
     328    bool rc = fNetwork->WaitForSdo(fId, idx, subidx, timeout);
     329
     330    if (!rc)
     331        fIsZombie = kTRUE;
     332
     333    return rc;
    318334}
    319335
  • trunk/MagicSoft/Cosy/candrv/nodedrv.h

    r1690 r1702  
    3434    void DelError()        { fError = 0; }
    3535
    36     Bool_t fIsZombie;
     36    Bool_t fIsZombie; // A Zombie node is a node which doesn't answer...
    3737
    3838public:
     
    6060    virtual void HandlePDO3(BYTE_t *data, timeval_t *tv) {};
    6161    virtual void HandlePDO4(BYTE_t *data, timeval_t *tv) {};
     62
     63    virtual bool Reboot();
    6264
    6365    void SendPDO1(BYTE_t data[8]);
  • trunk/MagicSoft/Cosy/candrv/vmodican.cc

    r1699 r1702  
    202202    const WORD_t cobid = desc>>5;
    203203
    204     switch (msg->cmd)
     204    switch (msg->cmd) // FROM mican.h
    205205    {
    206206    case M_MSG_LOST:
     
    208208        return;
    209209
     210    case M_BCAN_TX_con:  /* confirm (+/-) transmission */
     211        cout << "VmodIcan reports: CTXcon=0x35" << endl;
     212        cout << "This normally means, that the transmission of the following CAN frame failed:" << hex << endl;
     213        cout << "Descr: 0x" << cobid << dec;
     214        cout << "  Rtr: "   << (rtr?"Yes":"No");
     215        cout << "  Len: "   << (int)len << endl;
     216        return;
     217
    210218    case M_BCAN_EVENT_ind:
    211         cout << "VmodIcan reports: CEVTind=0x37, " << hex;
     219        cout << "VmodIcan reports: CEVTind=0x37: " << hex;
    212220        switch (msg->data[0]) // error indicator
    213221        {
  • trunk/MagicSoft/Cosy/cosy.cc

    r1531 r1702  
    5050    // check for the right usage of the program
    5151    //
    52     int mode = 2;
     52    int mode = 0;
    5353    if (argc==2 && (argv[1][0]=='-' || argv[1][1]=='m'))
    5454        switch (argv[1][2])
     
    5959        case '1':      // SE mode
    6060            mode = 1;
     61            break;
     62        case '2':      // GUI demo mode
     63            mode = 2;
    6164            break;
    6265        }
  • trunk/MagicSoft/Cosy/devdrv/macs.cc

    r1701 r1702  
    243243    WaitForSdo(0x2004);
    244244    */
    245     EnableTimeout(kFALSE);
    246 
    247245    lout << "- " << GetNodeName() << ": Requesting Mac Software Version." << endl;
    248246    RequestSDO(0x100a);
    249247    WaitForSdo(0x100a);
    250248
     249    if (IsZombie())
     250        return;
     251
     252    EnableTimeout(kFALSE);
    251253    SetRpmMode(FALSE);
    252254
     
    437439    fPdoPos    = (data[4]<<24) | (data[5]<<16) | (data[6]<<8) | data[7];
    438440
    439     fPosActive = data[3]&0x02;
    440     fRpmActive = data[3]&0x04;
     441              // data[3]&0x01; // motor not moving
     442    fPosActive = data[3]&kPosActive; // positioning active
     443    fRpmActive = data[3]&kRpmActive; // RPM mode switched on
     444              // data[3]&0x08; //  - unused -
     445              // data[3]&0x10; //  - unused -
     446              // data[3]&0x20; //  - unused -
     447    fInControl = data[3]&0x40; // motor uncontrolled
     448              // data[3]&0x80; // axis resetted (after errclr, motor stop, motor on)
     449
     450    fStatus = data[3];
    441451
    442452    fPdoTime.SetTimer(tv);
     
    450460    //
    451461    // errnum==0 gives a sudden information that something happened. Now the
    452     // microcontroller is running inside its interrup procedure which
     462    // microcontroller is running inside its interrupt procedure which
    453463    // stopped the normal program. The interrupt procedure should try to clear
    454464    // the error state of the hardware. This should never create a new error!
  • trunk/MagicSoft/Cosy/devdrv/macs.h

    r1701 r1702  
    2525    BYTE_t   fPosActive;
    2626    BYTE_t   fRpmActive;
     27    BYTE_t   fInControl;
     28    BYTE_t   fStatus;
    2729
    2830    TTimer  *fTimeout;
     
    4042
    4143public:
     44    enum
     45    {
     46        kNotMoving = BIT(0),    // motor not moving
     47        kPosActive = BIT(1),    // positioning active
     48        kRpmActive = BIT(2),    // RPM mode switched on
     49        // BIT(3-5) unsused
     50        kOutOfControl = BIT(6), // motor uncontrolled
     51        kAxisReset = BIT(7)     // axis resetted (after errclr, motor stop, motor on)
     52    };
     53
    4254    Macs(const BYTE_t nodeid, const char *name=NULL, MLog &out=gLog);
    4355    virtual ~Macs();
     
    90102    void StopMotor();
    91103
    92     int IsPositioning() { return fPosActive; }
     104    int IsPositioning() const { return fPosActive; }
     105    BYTE_t GetStatus() const { return fStatus; }
    93106
    94107    double GetTime();
     
    98111    double GetPdoMjd();
    99112
    100     LWORDS_t GetPdoPos() { return fPdoPos; }
     113    LWORDS_t GetPdoPos() const { return fPdoPos; }
    101114
    102     LWORDS_t GetPos()    { return fPos; }
    103     LWORDS_t GetVel()    { return fVel; }
    104     LWORD_t  GetVelRes() { return fVelRes; } // Velocity units (would be 100 for %)
    105     LWORD_t  GetRes()    { return fRes; }    // Encoder resolution
     115    LWORDS_t GetPos()    const { return fPos; }
     116    LWORDS_t GetVel()    const { return fVel; }
     117    LWORD_t  GetVelRes() const { return fVelRes; } // Velocity units (would be 100 for %)
     118    LWORD_t  GetRes()    const { return fRes; }    // Encoder resolution
    106119
    107120    void HandleError();
  • trunk/MagicSoft/Cosy/gui/MGAccuracy.cc

    r1701 r1702  
    178178
    179179    InitCanvas();
     180
     181    SetNoContextMenu();
    180182}
    181183
  • trunk/MagicSoft/Cosy/gui/MGCosy.cc

    r1701 r1702  
    238238    fList->Add(fAzSoll);
    239239
    240 
    241     fError    = new TGLabel(f, "Error");
    242     fMoving   = new TGLabel(f, "Moving");
    243     fTracking = new TGLabel(f, "Tracking");
    244     fStopping = new TGLabel(f, "Stopping");
    245     fStopped  = new TGLabel(f, "Stopped");
    246 
     240    fError     = new TGLabel(f, "Error");
     241    fMoving    = new TGLabel(f, "Moving");
     242    fTracking  = new TGLabel(f, "Tracking");
     243    fStopping  = new TGLabel(f, "Stopping");
     244    fStopped   = new TGLabel(f, "Stopped");
     245    fAvailMac1 = new TGLabel(f, "- MAC1 -");
     246    fAvailMac2 = new TGLabel(f, "- MAC2 -");
     247    fAvailMac3 = new TGLabel(f, "- MAC3 -");
     248    fAvailSe1  = new TGLabel(f, "-SE/Zd1-");
     249    fAvailSe2  = new TGLabel(f, "-SE/Zd2-");
     250    fAvailSe3  = new TGLabel(f, "- SE/Az -");
    247251
    248252    ULong_t color;
     
    250254    gClient->GetColorByName("Red", color);
    251255    fError->SetBackgroundColor(color);
     256    fAvailMac1->SetBackgroundColor(color);
     257    fAvailMac2->SetBackgroundColor(color);
     258    fAvailMac3->SetBackgroundColor(color);
     259    fAvailSe1->SetBackgroundColor(color);
     260    fAvailSe2->SetBackgroundColor(color);
     261    fAvailSe3->SetBackgroundColor(color);
    252262    gClient->GetColorByName("LightBlue", color);
    253263    fMoving->SetBackgroundColor(color);
     
    264274    fStopping->Move(10, 25+60);
    265275    fStopped ->Move(10, 25+80);
     276    fAvailMac1->Move(10, 25+120);
     277    fAvailMac2->Move(10, 25+140);
     278    fAvailMac3->Move(10, 25+160);
     279    fAvailSe1->Move(10, 25+180);
     280    fAvailSe2->Move(10, 25+200);
     281    fAvailSe3->Move(10, 25+220);
    266282
    267283    fError   ->Resize(60, 20);
     
    270286    fStopping->Resize(60, 20);
    271287    fStopped ->Resize(60, 20);
     288    fAvailMac1->Resize(60, 20);
     289    fAvailMac2->Resize(60, 20);
     290    fAvailMac3->Resize(60, 20);
     291    fAvailSe1->Resize(60, 20);
     292    fAvailSe2->Resize(60, 20);
     293    fAvailSe3->Resize(60, 20);
    272294
    273295    fList->Add(fError);
     
    276298    fList->Add(fStopping);
    277299    fList->Add(fStopped);
     300    fList->Add(fAvailMac1);
     301    fList->Add(fAvailMac2);
     302    fList->Add(fAvailMac3);
     303    fList->Add(fAvailSe1);
     304    fList->Add(fAvailSe2);
     305    fList->Add(fAvailSe3);
    278306}
    279307
     
    679707    cout << "MGCosy::~MGCosy done." << endl;
    680708}
     709
     710void MGCosy::SetLabelColor(TGLabel *label, Bool_t col)
     711{
     712    ULong_t red, green;
     713
     714    gClient->GetColorByName("Red",   red);
     715    gClient->GetColorByName("Green", green);
     716
     717    if (col && label->TestBit(BIT(14)))
     718        return;
     719
     720    if (!col && !label->TestBit(BIT(14)))
     721        return;
     722
     723    col ? label->SetBit(BIT(14)) : label->ResetBit(BIT(14));
     724
     725    label->UnmapWindow();
     726    label->SetBackgroundColor(col ? green : red);
     727    label->MapWindow();
     728}
     729
    681730// ======================================================================
    682731void MGCosy::EnableLabel(TGLabel *label, Bool_t stat)
     
    823872
    824873void MGCosy::Update(ZdAz pos, ZdAz acc, ZdAz vel, ZdAz off, RaDec radec,
    825                     ZdAz soll, UInt_t stat)
     874                    ZdAz soll, UInt_t stat, UInt_t stat2)
    826875{
    827876    double mjd = UpdateTime();
     
    848897    EnableLabel(fZdSoll,   stat&kMoving);
    849898    EnableLabel(fAzSoll,   stat&kMoving);
     899
     900    SetLabelColor(fAvailMac1, stat2&0x01);
     901    SetLabelColor(fAvailMac2, stat2&0x02);
     902    SetLabelColor(fAvailMac3, stat2&0x04);
     903    SetLabelColor(fAvailSe1,  stat2&0x08);
     904    SetLabelColor(fAvailSe2,  stat2&0x10);
     905    SetLabelColor(fAvailSe3,  stat2&0x20);
    850906
    851907    stat&kTracking ? fAccuracy->MapWindow() : fAccuracy->UnmapWindow();
  • trunk/MagicSoft/Cosy/gui/MGCosy.h

    r1701 r1702  
    7777    TGLabel *fStopping;
    7878    TGLabel *fStopped;
     79    TGLabel *fAvailMac1;
     80    TGLabel *fAvailMac2;
     81    TGLabel *fAvailMac3;
     82    TGLabel *fAvailSe1;
     83    TGLabel *fAvailSe2;
     84    TGLabel *fAvailSe3;
    7985
    8086    TGListBox *fLog;
     
    9197
    9298    void EnableLabel(TGLabel *label, Bool_t stat);
     99    void SetLabelColor(TGLabel *label, Bool_t col);
    93100    void UpdateOffset(ZdAz &off);
    94101    void UpdateZdAz(ZdAz &off);
     
    108115    TGListBox *GetLog() const { return fLog; }
    109116
    110     void Update(ZdAz pos, ZdAz acc, ZdAz vel, ZdAz off, RaDec radec, ZdAz soll, UInt_t stat);
     117    void Update(ZdAz pos, ZdAz acc, ZdAz vel, ZdAz off, RaDec radec, ZdAz soll, UInt_t stat, UInt_t stat2);
    111118
    112119    Bool_t ProcessMessage(Long_t msg, Long_t mp1, Long_t mp2);
  • trunk/MagicSoft/Cosy/gui/MGEmbeddedCanvas.cc

    r1690 r1702  
    5252}
    5353
     54// ------------------------------------------------------------------------
     55//
     56// Map the subwindows, resize to its quadratic size, map the window itself
     57// and set it to Non-Editable.
     58//
    5459void MGEmbeddedCanvas::InitCanvas()
    5560{
     
    7176    // X11 Pixmap error) Update hangs the Gui system.
    7277    //
    73     // Fixed: Using root 3.01/06 and doing the update from within the
     78    // Fixed: By using root 3.01/06 and doing the update from within the
    7479    // mainthread.
    7580    //
     
    8085    fModified = kFALSE;
    8186}
     87
     88// ------------------------------------------------------------------------
     89//
     90//  Set's the kNoContextMenu bit for all primitives in the embedded canvas
     91//  and the canvas itself, so that no context menu is displayed.
     92//
     93void MGEmbeddedCanvas::SetNoContextMenu()
     94{
     95    TList &list = *fCanvas->GetListOfPrimitives();
     96    list.ForEach(TObject, SetBit)(kNoContextMenu);
     97
     98    fCanvas->SetBit(kNoContextMenu);
     99}
  • trunk/MagicSoft/Cosy/gui/MGEmbeddedCanvas.h

    r1111 r1702  
    4141    void SetModified() { fModified = kTRUE; }
    4242
     43    void SetNoContextMenu();
     44
    4345    ClassDef(MGEmbeddedCanvas, 0)
    4446};
  • trunk/MagicSoft/Cosy/gui/MGSkyPosition.cc

    r1690 r1702  
    177177    InitText();
    178178    InitCanvas();
     179    SetNoContextMenu();
    179180}
    180181
  • trunk/MagicSoft/Cosy/gui/MGVelocity.cc

    r1701 r1702  
    188188
    189189    InitCanvas();
     190
     191    SetNoContextMenu();
    190192}
    191193
  • trunk/MagicSoft/Cosy/main/MCosy.cc

    r1701 r1702  
    150150    // Get the values
    151151    //
    152     const int p0 = fZd1 ? fZd1->GetPos() : 0;
    153     const int p1 = fZd2 ? fZd2->GetPos() : 0;
    154     const int p2 = fAz  ? fAz->GetPos()  : 0;
     152    const int p0 = !fZd1->IsZombieNode() ? fZd1->GetPos() : 0;
     153    const int p1 = !fZd2->IsZombieNode() ? fZd2->GetPos() : 0;
     154    const int p2 = !fAz->IsZombieNode()  ? fAz->GetPos()  : 0;
    155155
    156156    const int a0 = p0; //p0>8192?p0-16384:p0;
     
    177177Bool_t MCosy::RequestRePos()
    178178{
    179     if (!(fMac1 && fMac2))
     179    if (fMac1->IsZombieNode() || fMac2->IsZombieNode())
    180180        return kTRUE;
    181181
     
    192192
    193193    //
    194     // If waitng was not interrupted everything is ok. return.
     194    // If waiting was not interrupted everything is ok. return.
    195195    //
    196196    if (!StopWaitingForSDO())
     
    216216ZdAz MCosy::GetRePos()
    217217{
    218     return fMac1 && fMac2 ? ZdAz(fMac2->GetPos(), fMac1->GetPos()) : ZdAz(0,0);
     218    return !fMac1->IsZombieNode() && !fMac2->IsZombieNode() ? ZdAz(fMac2->GetPos(), fMac1->GetPos()) : ZdAz(0,0);
    219219}
    220220
     
    304304int MCosy::StopWaitingForSDO() const
    305305{
    306     return Break() || HasError();
     306    return Break() || HasError() || HasZombie();
    307307}
    308308
     
    346346
    347347    //
    348     // No try to handle the error.
     348    // Now try to handle the error.
    349349    //
    350350    fMac1->HandleError();
     
    378378    // FIXME: Correct by fOffset ?
    379379
    380     if (!(fMac1 && fMac2))
     380    if (fMac1->IsZombieNode() || fMac2->IsZombieNode())
    381381    {
    382         cout << "SetPosition: No MACS!" << endl;
     382        cout << "SetPosition: No connection to at least one of the MACS!" << endl;
    383383        return TRUE;
    384384    }
     
    515515void MCosy::InitTracking()
    516516{
    517     if (!(fMac1 && fMac2))
     517    if (fMac1->IsZombieNode() || fMac2->IsZombieNode())
    518518        return;
    519519
     
    656656    fRaDec = dst;
    657657
    658     if (!(fMac1 && fMac2))
     658    if (fMac1->IsZombieNode() || fMac2->IsZombieNode())
    659659        return;
    660660
     
    774774void MCosy::StopMovement()
    775775{
    776     if (!fMac1 || !fMac2)
     776    if (fMac1->IsZombieNode() || fMac2->IsZombieNode())
    777777        return;
     778
    778779    //
    779780    // Set status to Stopping
     
    810811void *MCosy::Proc(int msg, void *mp)
    811812{
     813    lout << "Checking for Zombies" << endl;
     814    if (HasZombie())
     815    {
     816        lout << "Found Zombies" << endl;
     817        if (!RebootZombies())
     818            return (void*)0xebb0;
     819    }
     820
    812821    switch (msg)
    813822    {
     
    823832    case WM_PRESET:
    824833        cout << "WM_Preset: start." << endl;
    825         if (fZd1) fZd1->SetPreset();
    826         if (fZd2) fZd2->SetPreset();
    827         if (fAz)  fAz->SetPreset();
     834        if (!fZd1->IsZombieNode()) fZd1->SetPreset();
     835        if (!fZd2->IsZombieNode()) fZd2->SetPreset();
     836        if (!fAz->IsZombieNode())  fAz->SetPreset();
    828837        cout << "WM_Preset: done. (return 0xaffe)" << endl;
    829838        return (void*)0xaffe;
     
    849858            cout << "Got  Zd: " << sepos.Zd() << " Az: " << sepos.Az() << endl;
    850859
    851             if (fZd1)
     860            if (!fZd1->IsZombieNode())
    852861                fZd1->SetPreset(za.Zd());
    853             if(fZd2)
     862            if (!fZd2->IsZombieNode())
    854863                fZd2->SetPreset(-za.Zd());
    855             if(fAz)
     864            if (!fAz->IsZombieNode())
    856865                fAz->SetPreset(za.Az());
    857866
     
    924933    case WM_HOME:
    925934        cout << "WM_Home: START" << endl;
    926         if (fMac1 && fMac2)
     935        if (!fMac1->IsZombieNode() && !fMac2->IsZombieNode())
    927936        {
    928937            cout << "Going Home..." << endl;
    929             fMac1->SetHome(250000, 100);
    930             fMac2->SetHome(250000, 100);
     938            TEnv env(".cosyrc");
     939            fMac1->SetHome(250000, env.GetValue("Az_MaxTime2ReachHome[s]", 100));
     940            fMac2->SetHome(250000, env.GetValue("Zd_MaxTime2ReachHome[s]", 100));
    931941
    932942            fAz->SetPreset();
     
    9911001
    9921002    Double_t resreaz = 0;
    993     if (fMac1)
     1003    if (!fMac1->IsZombieNode())
    9941004        resreaz = fMac1->GetRes();
    9951005    else
    996         if (fMac3)
     1006        if (!fMac3->IsZombieNode())
    9971007            resreaz = fMac3->GetRes();
    9981008        else
     
    10001010
    10011011    Double_t resrezd = 0;
    1002     if (fMac2)
     1012    if (!fMac2->IsZombieNode())
    10031013        resrezd = fMac2->GetRes();
    10041014    else
     
    10061016 
    10071017    Double_t ressezd = 0;
    1008     if (fZd1)
     1018    if (!fZd1->IsZombieNode())
    10091019        ressezd = fZd1->GetPhysRes();
    10101020    else
    1011         if (fZd2)
     1021        if (!fZd2->IsZombieNode())
    10121022            ressezd = fZd2->GetPhysRes();
    10131023        else
     
    10151025
    10161026    Double_t resseaz = 0;
    1017     if (fAz)
     1027    if (!fAz->IsZombieNode())
    10181028        resseaz = fAz->GetPhysRes();
    10191029    else
     
    10241034    cout << "done." << endl;
    10251035
    1026     cout << "Setting Gear Ratios:" << endl;
    1027     cout << "--------------------" << endl;
    1028     cout << " X: " << gzd << "*" << resrezd << "/" << ressezd << "=" << kGearRatio.X() << endl;
    1029     cout << " Y: " << gaz << "*" << resreaz << "/" << resseaz << "=" << kGearRatio.Y() << endl;
     1036    cout << " * Setting Gear Ratios:" << endl;
     1037    cout << "   --------------------" << endl;
     1038    cout << " X: " << gzd << "*" << resrezd << "/" << ressezd << "=" << kGearRatio.X() << endl;
     1039    cout << " Y: " << gaz << "*" << resreaz << "/" << resseaz << "=" << kGearRatio.Y() << endl;
    10301040}
    10311041
    10321042void MCosy::TalkThread()
    10331043{
    1034     if (!(fMac1 && fMac2))
     1044    if (fMac1->IsZombieNode() || fMac2->IsZombieNode())
    10351045        return;
    10361046
     
    10481058    }
    10491059
    1050     //fMac1->EnableTimeout(kTRUE, 500);
    1051     //fMac2->EnableTimeout(kTRUE, 500);
    1052 
    1053     if (!(fZd1 && fZd2 && fAz))
     1060    if (fZd1->IsZombieNode() || fZd2->IsZombieNode() || fAz->IsZombieNode())
    10541061        return;
    10551062
     
    10581065    // Start the Network
    10591066    //
    1060     cout << "Reading configuration file..." << flush;
    1061     TEnv env(".cosyrc");
    1062     cout << "done." << endl;
     1067    //cout << "Reading configuration file..." << flush;
     1068    //TEnv env(".cosyrc");
     1069    //cout << "done." << endl;
    10631070/*
    10641071    const int res = fMac3->GetVelRes();
     
    10671074    fMac3->SetAcceleration(res);
    10681075    fMac3->SetDeceleration(res);
    1069 
    1070     cout << "Going Home..." << endl;
    1071     fMac1->SetHome(250000, env.GetValue("Az_MaxTime2ReachHome[s]", 100));
    1072     fMac2->SetHome(250000, env.GetValue("Zd_MaxTime2ReachHome[s]", 100));
    1073     PostMsg(WM_PRESET, 0, 0);
    1074     PostMsg(WM_WAIT,   0, 0);
    10751076
    10761077    fMac1->ReqPos();
     
    10981099    fMac2->EnableTimeout(kTRUE, 500);
    10991100
    1100     const Double_t gaz = env.GetValue("Az_GearRatio[U_mot/U_tel]");
    1101     const Double_t gzd = env.GetValue("Zd_GearRatio[U_mot/U_tel]");
    1102 
    1103     const Double_t resreaz = env.GetValue("Az_ResRE[re/U_mot]");
    1104     const Double_t resrezd = env.GetValue("Zd_ResRE[re/U_mot]");
    1105 
    1106     kGearRatio.Set (gzd*resrezd/RES_SE, gaz*resreaz/RES_SE);   //[re/se]
    1107     kGearRatio2.Set(gzd*resrezd/360.0,  gaz*resreaz/360.0);    //[re/deg]
    1108 
    11091101    //fMac2->SetNegEndswitch(Deg2ZdRE(env.GetValue("MinZd[Deg]", -1.0)));
    11101102    //fMac2->SetPosEndswitch(Deg2ZdRE(env.GetValue("MaxZd[Deg]", +1.0)));
    11111103    //    fMac3->StartVelSync();
    1112 
    1113     //cout << "PostMsg(WM_PRESET)" << endl;
    1114     //void *rc =
    1115     //cout << hex << "WM_PRESET: ret=" << rc << endl;
    1116 
    1117     //RaDec dest = RaDec(45.0, 30.0)*D2PI/360.0;
    1118 
    1119     //cout << "PostMsg(WM_TRACK)" << endl;
    1120     //cout << sizeof(RaDec) << "==" << sizeof(dest) << endl;
    1121     //rc=PostMsg(WM_TRACK, &dest, sizeof(dest));
    1122     //cout << "DEST killed." << endl;
    1123 
    1124     // AltAz dest = AltAz(45.0, 30.0);
    1125     // double ra, dec;
    1126     // slaDaf2r( 71, 0, 0, &ra,  &status); // 0 WARNING: RANGE
    1127     // slaDaf2r( 89, 0, 0, &dec, &status); // 49
    1128     // cout << "Start tracking: Ra: " << Rad2Deg(ra) << kDEG << "  Dec: " << Rad2Deg(dec) << kDEG << endl;
    1129 
    1130     // dest = AltAz(-46.0, 210);
    1131     // SetPosition(dest);
    11321104    */
    11331105    SlaStars sla;
     
    12551227    // Update Gui, foremer MTGui.
    12561228    //
    1257     if (fZd1) fZd1->DisplayVal();
    1258     if (fZd2) fZd2->DisplayVal();
    1259     if (fAz)  fAz->DisplayVal();
     1229    if (!fZd1->IsZombieNode()) fZd1->DisplayVal();
     1230    if (!fZd2->IsZombieNode()) fZd2->DisplayVal();
     1231    if (!fAz->IsZombieNode())  fAz->DisplayVal();
    12601232
    12611233    ZdAz seist = GetSePos()*2*TMath::Pi()/16384; // [se]
    12621234    ZdAz bendist = fBending.CorrectBack(seist);
    12631235
     1236    Byte_t avail = 0;
     1237
     1238    avail |= !fMac1->IsZombieNode() ? 0x01 : 0;
     1239    avail |= !fMac2->IsZombieNode() ? 0x02 : 0;
     1240    avail |= !fMac3->IsZombieNode() ? 0x04 : 0;
     1241    avail |= !fZd1->IsZombieNode()  ? 0x08 : 0;
     1242    avail |= !fZd2->IsZombieNode()  ? 0x10 : 0;
     1243    avail |= !fAz->IsZombieNode()   ? 0x20 : 0;
     1244
    12641245    fWin->Update(bendist*(360.0/2/TMath::Pi()), fTrackingError/kGearRatio2,
    1265                  fVelocity, fOffset/*/kGearRatio2*/, fRaDec, fZdAzSoll,
    1266                  fStatus);
     1246                 fVelocity, fOffset, fRaDec, fZdAzSoll, fStatus, avail);
     1247
     1248    /*
     1249     cout << (int)(fMac1->GetStatus()&Macs::kOutOfControl) << " ";
     1250     cout << (int)(fMac2->GetStatus()&Macs::kOutOfControl) << " ";
     1251     cout << (int)(fMac3->GetStatus()&Macs::kOutOfControl) << endl;
     1252     */
    12671253
    12681254    return kTRUE;
     
    12821268    // Don't call this function twice!
    12831269    Network::Start();
    1284 
     1270/*
    12851271    if (fMac1)
    12861272        if (fMac1->IsZombieNode()) { delete fMac1; fMac1=NULL; }
     
    12891275    if (fMac3)
    12901276        if (fMac3->IsZombieNode()) { delete fMac3; fMac3=NULL; }
    1291 
    1292     if (fZd1)
     1277*/
     1278/*    if (fZd1)
    12931279        if (fZd1->IsZombieNode())  { delete fZd1;  fZd1=NULL; }
    1294         else fZd1->SetDisplay(fWin->GetLabel2());
    1295 
    1296     if (fZd2)
     1280        else */fZd1->SetDisplay(fWin->GetLabel2());
     1281
     1282/*    if (fZd2)
    12971283        if (fZd2->IsZombieNode())  { delete fZd2;  fZd2=NULL; }
    1298         else fZd2->SetDisplay(fWin->GetLabel3());
    1299 
    1300     if (fAz)
     1284        else */fZd2->SetDisplay(fWin->GetLabel3());
     1285
     1286/*    if (fAz)
    13011287        if (fAz->IsZombieNode())   { delete fAz;   fAz=NULL; }
    1302         else fAz->SetDisplay(fWin->GetLabel1());
     1288        else */fAz->SetDisplay(fWin->GetLabel1());
    13031289
    13041290    ReadConfig();
     
    13451331    lout << "- Setting up network." << endl;
    13461332
    1347     fMac1=new Macs(id1, "Mac/Az",      lout);
    1348     fMac2=new Macs(id3, "Mac/Zd",      lout);
     1333    fMac1=new Macs(id1, "Mac/Az", lout);
     1334    fMac2=new Macs(id3, "Mac/Zd", lout);
    13491335    if (id2>=0)
    13501336        fMac3=new Macs(id2, "Mac/Az-Sync", lout);
Note: See TracChangeset for help on using the changeset viewer.