Ignore:
Timestamp:
01/13/03 18:18:15 (22 years ago)
Author:
tbretz
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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.