Ignore:
Timestamp:
05/26/12 21:39:28 (12 years ago)
Author:
tbretz
Message:
Use new state namespaces; do not display current warning if current is not calibrated; display warning if voltage on, but bias crate not calibrated.
File:
1 edited

Legend:

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

    r13907 r13932  
    2222#include "HeadersBIAS.h"
    2323#include "HeadersFTM.h"
     24#include "HeadersFSC.h"
     25#include "HeadersMCP.h"
     26#include "HeadersDrive.h"
     27#include "HeadersRateScan.h"
     28#include "HeadersRateControl.h"
     29#include "HeadersMagicWeather.h"
    2430
    2531#include <boost/filesystem.hpp>
     
    364370    deque<float> fDriveControlTrackingDevHist;
    365371
    366     int64_t fFadControlNumEvents;
     372     int64_t fFadControlNumEvents;
     373     int32_t fFadControlDrsStep;
     374    uint32_t fFadControlDrsRuns[3];
    367375
    368376    float  fFtmControlTriggerRateCam;
     
    402410    bool CheckDataSize(const EventImp &d, const char *name, size_t size, bool min=false)
    403411    {
     412        if (d.GetSize()==0)
     413            return false;
     414
    404415        if ((!min && d.GetSize()==size) || (min && d.GetSize()>size))
    405416            return true;
     
    878889        }
    879890
    880         if (fDimBiasControl.state()==BIAS::kVoltageOn)
     891        if (fDimBiasControl.state()==BIAS::State::kVoltageOn)
    881892            WriteBinary(d, "biascontrol-voltage", val, 10, 65);
    882893        else
     
    10191030
    10201031        fFadControlNumEvents = d.Get<uint32_t>();
     1032
     1033        return GetCurrentState();
     1034    }
     1035
     1036    int HandleFadDrsRuns(const EventImp &d)
     1037    {
     1038        if (!CheckDataSize(d, "FadControl:DrsRuns", 4*4))
     1039        {
     1040            fFadControlDrsStep = -1;
     1041            return GetCurrentState();
     1042        }
     1043
     1044        const uint32_t *ptr = d.Ptr<uint32_t>();
     1045        fFadControlDrsStep    = ptr[0];
     1046        fFadControlDrsRuns[0] = ptr[1];
     1047        fFadControlDrsRuns[1] = ptr[2];
     1048        fFadControlDrsRuns[2] = ptr[3];
    10211049
    10221050        return GetCurrentState();
     
    14671495
    14681496        if (&state==&fDimControl)
    1469             return kHtmlGreen +'\t'+(state.state()==-3?"Idle":fDimControl.shortmsg)+'\n';
     1497            return kHtmlGreen +'\t'+(state.state()<-2?"Idle":fDimControl.shortmsg)+'\n';
    14701498
    14711499        const State rc = state.description();
     
    15151543        if (fDimDriveControl.state()>0xff)
    15161544            msg << "Drive in ERROR state<br/>";
    1517         if (fDimBiasControl.state()<BIAS::kRamping && (fDimMcp.state()==11 || fDimMcp.state()==12))
     1545        if (fDimBiasControl.state()<BIAS::State::kRamping && (fDimMcp.state()==MCP::State::kTriggerOn || fDimMcp.state()==MCP::State::kTakingData))
    15181546            msg << "BIAS not operating during data-taking<br/>";
    1519         if (fDimBiasControl.state()==BIAS::kOverCurrent)
     1547        if (fDimBiasControl.state()==BIAS::State::kOverCurrent)
    15201548            msg << "BIAS channels in OverCurrent<br/>";
    1521         if (fDimBiasControl.state()==BIAS::kNotReferenced)
     1549        if (fDimBiasControl.state()==BIAS::State::kNotReferenced)
    15221550            msg << "BIAS voltage not at reference<br/>";
    1523         if (fBiasControlCurrentMed>75)
    1524             msg << "Median current exceeds 75&micro;A/pix<br/>";
    1525         if (fBiasControlCurrentMax>90)
    1526             msg << "Maximum current exceeds 90&micro;A/pix<br/>";
    1527         if (fMagicWeatherHist[kHum].size()>0 && fMagicWeatherHist[kHum].back()>98 && (fDimMcp.state()==11 || fDimMcp.state()==12))
     1551        if (fFeedbackCalibration.size()>0)
     1552        {
     1553            if (fBiasControlCurrentMed>75)
     1554                msg << "Median current exceeds 75&micro;A/pix<br/>";
     1555            if (fBiasControlCurrentMax>90)
     1556                msg << "Maximum current exceeds 90&micro;A/pix<br/>";
     1557        }
     1558        if (fMagicWeatherHist[kHum].size()>0 && fMagicWeatherHist[kHum].back()>98 && (fDimMcp.state()==MCP::State::kTriggerOn || fDimMcp.state()==MCP::State::kTakingData))
    15281559            msg << "Outside humidity exceeds 98% during data-taking<br/>";
    1529         if (fMagicWeatherHist[kGusts].size()>0 && fMagicWeatherHist[kGusts].back()>98 && fDimDriveControl.state()==7)
     1560        if (fMagicWeatherHist[kGusts].size()>0 && fMagicWeatherHist[kGusts].back()>98 && fDimDriveControl.state()==Drive::State::kTracking)
    15301561            msg << "Wind gusts exceed 50km/h during tracking<br/>";
    15311562        if (fFscControlTemperatureHist.size()>0 && fFscControlTemperatureHist.back()>7)
    15321563            msg << "Sensor temperature exceeds outside temperature by more than 7&deg;C<br/>";
    1533         if (fFtmControlTriggerRateCam<0.01 && (fDimMcp.state()==11 || fDimMcp.state()==12))
     1564        if (fFtmControlTriggerRateCam<0.01 && (fDimMcp.state()==MCP::State::kTriggerOn || fDimMcp.state()==MCP::State::kTakingData))
    15341565            msg << "Trigger rate below 10mHz during data taking<br/>";
    15351566        if (fFscControlHumidityAvg>60)
     
    15371568        if (!fDimControl.online())
    15381569            msg << "dimctrl offline<br/>";
     1570
     1571        if (!fDimFeedback.state()==Feedback::State::kCalibrating &&
     1572            fDimBias.state()==BIAS::State::kVoltageOn &&
     1573            fBiasControlVoltageMed>3 &&
     1574            fFeedbackCalibration.size()==0)
     1575            msg << "bias voltage switched on, but bias crate not calibrated.";
    15391576
    15401577        // FTM in Connected instead of Idle --> power cyclen
     
    15831620
    15841621        // -------------- System status --------------
    1585         if (fDimMcp.state()>=5) // Idle
     1622        if (fDimMcp.state()>=MCP::State::kIdle) // Idle
    15861623        {
    15871624            string col = kHtmlBlue;
    1588             if (fMcpConfigurationState!= 5 &&  // Idle
    1589                 fMcpConfigurationState!=11 &&  // Trigger On
    1590                 fMcpConfigurationState!=12)    // Taking Data
     1625            if (fMcpConfigurationState!=MCP::State::kIdle &&       // Idle
     1626                fMcpConfigurationState!=MCP::State::kTriggerOn &&  // Trigger On
     1627                fMcpConfigurationState!=MCP::State::kTakingData)  // Taking Data
    15911628                col = kHtmlYellow;
    15921629            else
    1593                 if (fDimFadControl.state()==FAD::kWritingData)
     1630                if (fDimFadControl.state()==FAD::State::kWritingData)
    15941631                    col = kHtmlGreen;
    15951632
    15961633            out << col << '\t';
    15971634
    1598             if (fDimRateControl.state()!=5 && fDimRateScan.state()!=6)
     1635            if (fDimRateControl.state()!=RateControl::State::kSettingGlobalThreshold &&
     1636                fDimRateScan.state()!=RateScan::State::kInProgress)
    15991637            {
    16001638                switch (fMcpConfigurationState)
     
    16141652            }
    16151653            else
    1616                 if (fDimRateControl.state()==5/*kStateSettingGlobalThreshold*/)
     1654                if (fDimRateControl.state()==RateControl::State::kSettingGlobalThreshold)
    16171655                    out << "Calibrating threshold";
    16181656                else
    1619                     if (fDimRateScan.state()==6/*kStateSettingGlobalThreshold*/)
     1657                    if (fDimRateScan.state()==RateScan::State::kInProgress)
    16201658                        out << "Rate scan in progress";
    16211659
    1622             if (fMcpConfigurationState>10 && fDimRateControl.state()!=5)
     1660            if (fMcpConfigurationState>MCP::State::kConfigured &&
     1661                fDimRateControl.state()!=RateControl::State::kSettingGlobalThreshold)
    16231662            {
    1624                 if (fMcpConfigurationMaxEvents>0 || fMcpConfigurationMaxTime>0 || fMcpConfigurationState==12)
    1625                     out << " [";
     1663                ostringstream evt;
    16261664                if (fMcpConfigurationMaxEvents>0)
    16271665                {
    1628                     if (fFadControlNumEvents>0 && fMcpConfigurationState==12)
    1629                         out << fMcpConfigurationMaxEvents-fFadControlNumEvents;
     1666                    const int64_t de = int64_t(fMcpConfigurationMaxEvents) - int64_t(fFadControlNumEvents);
     1667                    if (de>=0 && fMcpConfigurationState==MCP::State::kTakingData)
     1668                        evt << de;
    16301669                    else
    1631                         out << fMcpConfigurationMaxEvents;
    1632                 }
    1633                 if (fMcpConfigurationMaxEvents>0 && (fMcpConfigurationMaxTime>0 || fMcpConfigurationState==12))
    1634                     out << '/';
    1635                 if (fMcpConfigurationMaxTime>0)
    1636                 {
    1637                     if (fMcpConfigurationState==12)
    1638                     {
    1639 
    1640                         const uint32_t dt = (Time()-fMcpConfigurationRunStart).total_seconds();
    1641                         if (dt>fMcpConfigurationMaxTime)
    1642                             out << "---";
    1643                         else
    1644                             out << fMcpConfigurationMaxTime-dt << 's';
    1645                     }
    1646                     else
    1647                         out << fMcpConfigurationMaxTime << 's';
     1670                        evt << fMcpConfigurationMaxEvents;
    16481671                }
    16491672                else
    16501673                {
    1651                     if (fMcpConfigurationState==12)
     1674                    if (fMcpConfigurationState==MCP::State::kTakingData)
     1675                        evt << fFadControlNumEvents;
     1676                }
     1677
     1678                ostringstream tim;
     1679                if (fMcpConfigurationMaxTime>0)
     1680                {
     1681                    const uint32_t dt = (Time()-fMcpConfigurationRunStart).total_seconds();
     1682                    if (dt<=fMcpConfigurationMaxTime && fMcpConfigurationState==MCP::State::kTakingData)
     1683                        tim << fMcpConfigurationMaxTime-dt << 's';
     1684                    else
     1685                        tim << fMcpConfigurationMaxTime << 's';
     1686                }
     1687                else
     1688                {
     1689                    if (fMcpConfigurationState==MCP::State::kTakingData)
    16521690                    {
    16531691                        ostringstream d;
    16541692                        d << Time()-fMcpConfigurationRunStart;
    1655                         out << d.str().substr(3, 5);
     1693                        tim << d.str().substr(3, 5);
    16561694                    }
    16571695                }
    16581696
    1659                 if (fMcpConfigurationMaxEvents>0 || fMcpConfigurationMaxTime>0 || fMcpConfigurationState==12)
     1697                const bool has_evt = !evt.str().empty();
     1698                const bool has_tim = !tim.str().empty();
     1699
     1700                if (has_evt || has_tim)
     1701                    out << " [";
     1702                out << evt.str();
     1703                if (has_evt && has_tim)
     1704                    out << '/';
     1705                out << tim.str();
     1706                if (has_evt || has_tim)
    16601707                    out << ']';
    16611708            }
     1709
     1710            if (fFadControlDrsRuns[2]>0)
     1711                out << " (" << fFadControlDrsRuns[2] << ")";
    16621712        }
    16631713        else
     
    16661716
    16671717        // ------------------ Drive -----------------
    1668         if (fDimDriveControl.state()>=5)   // Armed, Moving, Tracking
     1718        if (fDimDriveControl.state()>=Drive::State::kArmed)   // Armed, Moving, Tracking
    16691719        {
    16701720            const double dev = fDriveControlTrackingDevHist.size()>0 ? fDriveControlTrackingDevHist.back() : 0;
     
    17011751
    17021752        // ------------------- FSC ------------------
    1703         if (fDimFscControl.state()>1 && fFscControlTemperatureHist.size()>0)
     1753        if (fDimFscControl.state()>FSC::State::kDisconnected && fFscControlTemperatureHist.size()>0)
    17041754        {
    17051755            out << kHtmlGreen << '\t' << fFscControlTemperatureHist.back() << '\n';
     
    17091759
    17101760        // --------------- MagicWeather -------------
    1711         if (fDimMagicWeather.state()==3 && fMagicWeatherHist[kWeatherBegin].size()>0)
     1761        if (fDimMagicWeather.state()==MagicWeather::State::kReceiving && fMagicWeatherHist[kWeatherBegin].size()>0)
    17121762        {
    17131763            /*
     
    17381788
    17391789        // --------------- FtmControl -------------
    1740         if (fDimFtmControl.state()==FTM::kTriggerOn)
     1790        if (fDimFtmControl.state()==FTM::State::kTriggerOn)
    17411791        {
    17421792            string col = kHtmlGreen;
     
    17521802
    17531803        // --------------- BiasControl -------------
    1754         if (fDimBiasControl.state()==BIAS::kRamping     ||
    1755             fDimBiasControl.state()==BIAS::kOverCurrent ||
    1756             fDimBiasControl.state()==BIAS::kVoltageOn   ||
    1757             fDimBiasControl.state()==BIAS::kVoltageOff)
    1758         {
    1759             const bool off = fDimBiasControl.state()==BIAS::kVoltageOff;
    1760             const bool oc  = fDimBiasControl.state()==BIAS::kOverCurrent;
     1804        if (fDimBiasControl.state()==BIAS::State::kRamping     ||
     1805            fDimBiasControl.state()==BIAS::State::kOverCurrent ||
     1806            fDimBiasControl.state()==BIAS::State::kVoltageOn   ||
     1807            fDimBiasControl.state()==BIAS::State::kVoltageOff)
     1808        {
     1809            const bool off = fDimBiasControl.state()==BIAS::State::kVoltageOff;
     1810            const bool oc  = fDimBiasControl.state()==BIAS::State::kOverCurrent;
    17611811
    17621812            string col = fBiasControlVoltageMed>3?kHtmlGreen:kHtmlWhite;
     
    17671817
    17681818            // Bias in overcurrent => Red
    1769             if (fDimBiasControl.state()==BIAS::kOverCurrent)
     1819            if (fDimBiasControl.state()==BIAS::State::kOverCurrent)
    17701820                col = kHtmlRed;
    17711821
    17721822            // MCP in ReadyForDatataking/Configuring/Configured/TriggerOn/TakingData
    17731823            // and Bias not in "data-taking state' => Red
    1774             if (fMcpConfigurationState>5 &&
    1775                 fDimBiasControl.state()!=BIAS::kVoltageOn &&
    1776                 fDimBiasControl.state()!=BIAS::kVoltageOff)
     1824            if (fMcpConfigurationState>MCP::State::kIdle &&
     1825                fDimBiasControl.state()!=BIAS::State::kVoltageOn &&
     1826                fDimBiasControl.state()!=BIAS::State::kVoltageOff)
    17771827                col = kHtmlRed;
    17781828
     
    18281878            out << GetStateHtml(fDimDataLogger,   1);
    18291879            out << GetStateHtml(fDimDriveControl, 2);
    1830             out << GetStateHtml(fDimFadControl,   FAD::kConnected);
    1831             out << GetStateHtml(fDimFtmControl,   FTM::kConnected);
    1832             out << GetStateHtml(fDimBiasControl,  BIAS::kConnected);
     1880            out << GetStateHtml(fDimFadControl,   FAD::State::kConnected);
     1881            out << GetStateHtml(fDimFtmControl,   FTM::State::kConnected);
     1882            out << GetStateHtml(fDimBiasControl,  BIAS::State::kConnected);
    18331883            out << GetStateHtml(fDimFeedback,     4);
    18341884            out << GetStateHtml(fDimRateControl,  4);
     
    19341984        Subscribe("FAD_CONTROL/EVENTS")
    19351985            (bind(&StateMachineSmartFACT::HandleFadEvents,           this, placeholders::_1));
     1986        Subscribe("FAD_CONTROL/DRS_RUNS")
     1987            (bind(&StateMachineSmartFACT::HandleFadDrsRuns,          this, placeholders::_1));
    19361988
    19371989        Subscribe("FTM_CONTROL/TRIGGER_RATES")
Note: See TracChangeset for help on using the changeset viewer.