Changeset 12532


Ignore:
Timestamp:
11/16/11 00:27:47 (13 years ago)
Author:
tbretz
Message:
Added a drive status dim service.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/src/drivectrl.cc

    r12309 r12532  
    124124    }
    125125
     126    virtual void UpdateStatus(const Time &, const array<uint8_t, 3> &)
     127    {
     128    }
     129
    126130    virtual void UpdateStarguider(const Time &, const Drive::DimStarguider &)
    127131    {
     
    131135    {
    132136    }
     137
    133138
    134139protected:
     
    189194        StartReadReport();
    190195
     196        if (line.substr(0, 13)=="DRIVE-STATUS ")
     197        {
     198            Message(line.substr(70));
     199            return;
     200        }
     201
    191202        if (line.substr(0, 13)=="STARG-REPORT ")
    192203        {
     
    366377            stream >> stgmd;
    367378
     379            uint32_t pdo3;
     380            stream >> hex >> pdo3;
     381
    368382            if (stream.fail())
    369383                return;
     
    375389            if (status1==0)
    376390                status1 = 99;
    377             fState = status1==1 ? armed+1 : status1;
     391
     392            const bool ready = (pdo3&0xef00ef)==0xef00ef;
     393            if (!ready)
     394                fState = 0;
     395            else   
     396                fState = status1==1 ? armed+1 : status1;
     397
     398            //  1: Not ready
     399            //  2: Not armed
     400            //  3: Armed
     401            //  4: Moving
     402            //  5: Tracking
     403            // 99: Error
     404
     405
     406
     407            // pdo3:
     408            //   1 Ab
     409            //   2 1
     410            //   4 Emergency
     411            //   8 OverVolt
     412            //  10 Move (Drehen-soll)
     413            //  20 Af
     414            //  40 1
     415            //  80 Power on Az
     416            // ------------------
     417            // 100 NOT UPS Alarm
     418            // 200 UPS on Battery
     419            // 400 UPS charging
     420
     421            // Power cut: 2ef02ef
     422            // charging:  4ef04ef
     423
     424            const array<uint8_t, 3> state = {{ uint8_t(pdo3>>16), uint8_t(pdo3), uint8_t(pdo3>>24) }};
     425            UpdateStatus(t1, state);
    378426
    379427            const array<double, 2> point = {{ zd2, az2 }};
     
    509557public:
    510558    ConnectionDrive(ba::io_service& ioservice, MessageImp &imp) : Connection(ioservice, imp()),
    511         fState(0), fIsVerbose(true), fKeepAlive(ioservice)
     559        fState(-1), fIsVerbose(true), fKeepAlive(ioservice)
    512560    {
    513561        SetLogStream(&imp);
     
    519567    }
    520568
    521     int GetState() const { return IsConnected() ? fState+1 : 1; }
     569    int GetState() const
     570    {
     571        if (!IsConnected())
     572            return 1;
     573        if (IsConnected() && fState<0)
     574            return 2;
     575        return fState+3;
     576    }
    522577};
    523578
     
    535590    DimDescribedService fDimTracking;
    536591    DimDescribedService fDimTPoint;
     592    DimDescribedService fDimStatus;
    537593
    538594    virtual void UpdatePointing(const Time &t,
     
    548604        fDimTracking.setData(arr);
    549605        fDimTracking.Update(t);
     606    }
     607    virtual void UpdateStatus(const Time &t,
     608                              const array<uint8_t, 3> &arr)
     609    {
     610        fDimStatus.setData(arr);
     611        fDimStatus.Update(t);
    550612    }
    551613    virtual void UpdateTPoint(const Time &t,
     
    592654                   "|Ys[pix]:Y position of star in CCD camera frame"
    593655                   "|Ms[mag]:Artifical magnitude of star (calculated form image))"
    594                    "|Mc[mag]:Catalog magnitude of star")
     656                   "|Mc[mag]:Catalog magnitude of star"),
     657        fDimStatus("DRIVE_CONTROL/STATUS", "C:2;C:1", "")
    595658
    596659    {
     
    623686        kStateDisconnected = 1,
    624687        kStateConnected,
     688        kStateNotReady,
     689        kStateReady,
    625690        kStateArmed,
    626691        kStateMoving,
     
    676741    {
    677742        fDrive.PostMessage(str);
     743        T::Message("Sending: "+str);
    678744        return T::GetCurrentState();
    679745    }
     
    786852        AddStateName(kStateConnected, "Connected",
    787853                     "Cosy connected, drive stopped");
     854
     855        AddStateName(kStateNotReady, "NotReady",
     856                     "Drive system not ready for movement");
     857
     858        AddStateName(kStateReady, "Ready",
     859                     "Drive system ready for movement");
    788860
    789861        AddStateName(kStateArmed, "Armed",
Note: See TracChangeset for help on using the changeset viewer.