Ignore:
Timestamp:
11/23/13 14:36:10 (11 years ago)
Author:
tbretz
Message:
Added TEMPERATURE/DATA, AGILENT_CONTROL/DATA and GPS_CONTROL/NEMA
File:
1 edited

Legend:

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

    r17347 r17359  
    2727#include "HeadersFTM.h"
    2828#include "HeadersFSC.h"
     29#include "HeadersGPS.h"
    2930#include "HeadersMCP.h"
    3031#include "HeadersLid.h"
     
    436437    Time      fMcpConfigurationRunStart;
    437438    EventHist fMcpConfigurationHist;
    438 
    439439    bool fLastRunFinishedWithZeroEvents;
    440440
     
    456456
    457457    float fFscControlHumidityAvg;
     458
     459    deque<float> fTemperatureControlHist;
    458460
    459461    float  fDriveControlPointingZd;
     
    533535    DimDescribedState fDimFadControl;
    534536    DimDescribedState fDimFscControl;
     537    DimDescribedState fDimGpsControl;
    535538    DimDescribedState fDimAgilentControl;
    536539    DimDescribedState fDimPwrControl;
     
    11461149
    11471150        // write the history to a file
    1148         WriteHist(d, "hist-biascontrol-current", fBiasControlCurrentHist, 100);
     1151        WriteHist(d, "hist-biascontrol-current", fBiasControlCurrentHist, 125);
    11491152
    11501153        // --------------------------------------------------------
     
    17871790
    17881791        fFscControlHumidityAvg = num>0 ? avg/num : 0;
     1792
     1793        return GetCurrentState();
     1794    }
     1795
     1796    int HandleGpsNema(const EventImp &d)
     1797    {
     1798        if (!CheckDataSize(d, "GpsControl:Nema", sizeof(GPS::NEMA)))
     1799            return GetCurrentState();
     1800
     1801        const GPS::NEMA &nema = d.Ref<GPS::NEMA>();
     1802
     1803        ostringstream out;
     1804
     1805        out << fixed;
     1806        out << d.GetJavaDate() << '\n';
     1807
     1808        switch (nema.qos)
     1809        {
     1810        case 1:  out << HTML::kGreen << "\tGPS fix [1]\n"; break;
     1811        case 2:  out << HTML::kGreen << "\tDifferential fix [2]\n"; break;
     1812        default: out << HTML::kRed << "\tinvalid [" << nema.qos << "]\n"; break;
     1813        }
     1814
     1815        out << HTML::kWhite << '\t' << nema.count << '\n';
     1816        out << HTML::kWhite << '\t' << Time(nema.time).GetAsStr("%H:%M:%S") << '\n';
     1817        out << HTML::kWhite << '\t' << setprecision(4) << nema.lat    << '\n';
     1818        out << HTML::kWhite << '\t' << setprecision(4) << nema.lng    << '\n';
     1819        out << HTML::kWhite << '\t' << setprecision(1) << nema.height << "\n";
     1820        out << HTML::kWhite << '\t' << setprecision(1) << nema.hdop   << "\n";
     1821        out << HTML::kWhite << '\t' << setprecision(1) << nema.geosep << "\n";
     1822
     1823        ofstream(fPath+"/gps.data") << out.str();
     1824
     1825        return GetCurrentState();
     1826    }
     1827
     1828    string GetTempColor(float t)
     1829    {
     1830        if (t>25 && t<30)
     1831            return HTML::kGreen;
     1832
     1833        if (t<20 || t>35)
     1834            return HTML::kRed;
     1835
     1836        return HTML::kYellow;
     1837    }
     1838
     1839    int HandleTemperatureData(const EventImp &d)
     1840    {
     1841        if (!CheckDataSize(d, "Temperature:Data", 3*sizeof(float)))
     1842            return GetCurrentState();
     1843
     1844        const float *temp = d.Ptr<float>();
     1845
     1846        ostringstream out;
     1847
     1848        out << fixed << setprecision(1);
     1849        out << d.GetJavaDate() << '\n';
     1850
     1851        out << GetTempColor(temp[1]) << '\t' << temp[1] << '\n';
     1852        out << GetTempColor(temp[0]) << '\t' << temp[0] << '\n';
     1853        out << GetTempColor(temp[2]) << '\t' << temp[2] << '\n';
     1854
     1855        ofstream(fPath+"/temperature.data") << out.str();
     1856
     1857        if (!fTemperatureControlHist.empty())
     1858        {
     1859            fTemperatureControlHist.push_back(temp[0]);
     1860            if (fTemperatureControlHist.size()>60) // 1h
     1861                fTemperatureControlHist.pop_front();
     1862        }
     1863
     1864        WriteHist(d, "hist-temperaturecontrol",
     1865                  fTemperatureControlHist, 45, 0);
     1866
     1867        return GetCurrentState();
     1868    }
     1869
     1870    int HandleAgilentData(const EventImp &d)
     1871    {
     1872        if (!CheckDataSize(d, "Agilent:Data", 4*sizeof(float)))
     1873            return GetCurrentState();
     1874
     1875        const float *data = d.Ptr<float>();
     1876
     1877        ostringstream out;
     1878
     1879        out << fixed << setprecision(1);
     1880        out << d.GetJavaDate() << '\n';
     1881
     1882        out << HTML::kWhite << '\t' << data[0] << '\n';
     1883        out << HTML::kWhite << '\t' << data[1] << '\n';
     1884        out << HTML::kWhite << '\t' << data[2] << '\n';
     1885        out << HTML::kWhite << '\t' << data[3] << '\n';
     1886
     1887        ofstream(fPath+"/agilent.data") << out.str();
    17891888
    17901889        return GetCurrentState();
     
    22202319        {
    22212320            const mysqlpp::StoreQueryResult res =
    2222                 Database(fDatabase).query("SELECT fSourceName, fRightAscension, fDeclination FROM source WHERE fSourceTypeKEY=1").store();
     2321                Database(fDatabase).query("SELECT fSourceName, fRightAscension, fDeclination FROM Source WHERE fSourceTypeKEY=1").store();
    22232322
    22242323            out  << HTML::kWhite << '\t';
     
    28372936            out << GetStateHtml(fDimRateControl,    RateControl::State::kConnected);
    28382937            out << GetStateHtml(fDimFscControl,     FSC::State::kConnected);
     2938            out << GetStateHtml(fDimGpsControl,     GPS::State::kConnected);
    28392939            out << GetStateHtml(fDimAgilentControl, Agilent::State::kVoltageOff);
    28402940            out << GetStateHtml(fDimPwrControl,     Power::State::kSystemOff);
     
    29083008        fDimFadControl    ("FAD_CONTROL"),
    29093009        fDimFscControl    ("FSC_CONTROL"),
     3010        fDimGpsControl    ("GPS_CONTROL"),
    29103011        fDimAgilentControl("AGILENT_CONTROL"),
    29113012        fDimPwrControl    ("PWR_CONTROL"),
     
    29313032        fDimFadControl.Subscribe(*this);
    29323033        fDimFscControl.Subscribe(*this);
     3034        fDimGpsControl.Subscribe(*this);
    29333035        fDimAgilentControl.Subscribe(*this);
    29343036        fDimPwrControl.Subscribe(*this);
     
    29643066        Subscribe("FSC_CONTROL/BIAS_TEMP")
    29653067            (bind(&StateMachineSmartFACT::HandleFscBiasTemp,         this, placeholders::_1));
     3068
     3069        Subscribe("GPS_CONTROL/NEMA")
     3070            (bind(&StateMachineSmartFACT::HandleGpsNema,             this, placeholders::_1));
     3071
     3072        Subscribe("TEMPERATURE/DATA")
     3073            (bind(&StateMachineSmartFACT::HandleTemperatureData,    this, placeholders::_1));
     3074
     3075        Subscribe("AGILENT_CONTROL/DATA")
     3076            (bind(&StateMachineSmartFACT::HandleAgilentData,        this, placeholders::_1));
    29663077
    29673078        Subscribe("MAGIC_WEATHER/DATA")
Note: See TracChangeset for help on using the changeset viewer.