Changeset 15354 for trunk/FACT++


Ignore:
Timestamp:
04/16/13 10:24:12 (11 years ago)
Author:
tbretz
Message:
improved the handling of fad losses; removed AGILENT_CONTROL temporarily from the list of required servers; added checks for datalogger subscriptions; tried to add a setup which allows taking simple calibration data at day time.
Location:
trunk/FACT++/scripts
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/FACT++/scripts/Main.js

    r15293 r15354  
    119119{
    120120    if (!evt.data)
    121     {
    122         this.last_inc = 0;
    123121        return;
    124     }
    125122
    126123    var inc = evt.obj['incomplete'];
    127     if (!inc)
    128     {
    129         this.last_inc = 0;
     124    if (!inc || inc>0xffffffffff)
    130125        return;
    131     }
    132 
    133     if (this.last_inc==inc)
     126
     127    if (incomplete>0)
    134128        return;
    135129
     130    if (dim.state("MCP").name!="TakingData")
     131        return;
     132
    136133    incomplete = inc;
    137134
    138     var reset = [ ];
    139 
    140     for (var i=0; i<40; i++)
    141         if (inc&(1<<i))
    142         {
    143             console.out("  FAD %2d".$(i)+" lost during data taking.");
    144             reset.push(parseInt(i/10));
    145         }
    146 
    147     if (reset.length>10)
    148         return;
    149 
    150     dim.send("MCP/RESET");
    151 
    152     reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
    153 
    154     if (reset.length>0)
    155     {
    156         console.out("");
    157         console.out("  FADs belong to crate(s): "+reset);
    158         console.out("");
    159     }
    160 
    161     this.last_inc  = inc;
     135    console.out("Sending MCP/STOP");
     136    dim.send("MCP/STOP");
    162137}
    163138
     
    241216startrun.get(5000);
    242217
     218function reconnect(list, txt)
     219{ /*
     220    var reset = [ ];
     221
     222    for (var i=0; i<list.length; i++)
     223        {
     224            console.out("  FAD %2d".$(list[i])+" lost during "+txt);
     225            reset.push(parseInt(list[i]/10));
     226        }
     227
     228    reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
     229
     230    console.out("");
     231    console.out("  FADs belong to crate(s): "+reset);
     232    console.out("");
     233*/
     234    console.out("");
     235    console.out("Trying automatic reconnect ["+txt+"]...");
     236
     237    for (var i=0; i<list.length; i++)
     238    {
     239        console.out("   ...disconnect "+list[i]);
     240        dim.send("FAD_CONTROL/DISCONNECT", list[i]);
     241    }
     242
     243    console.out("   ...waiting for 5s");
     244    v8.sleep(5000);
     245
     246    for (var i=0; i<list.length; i++)
     247    {
     248        console.out("   ...reconnect "+list[i]);
     249        dim.send("FAD_CONTROL/CONNECT", list[i]);
     250    }
     251
     252    console.out("   ...waiting for 1s");
     253    v8.sleep(1000);
     254    console.out("");
     255}
     256
    243257function takeRun(type, count, time)
    244258{
     
    251265    console.out("  Take run %3d".$(nextrun)+": N="+count+" T="+time+"s ["+type+"]");
    252266
     267    incomplete = 0;
    253268    dim.send("MCP/START", time?time:-1, count?count:-1, type);
    254269
     
    291306
    292307    // Here we could check and handle fad losses
     308
    293309    try
    294310    {
     
    320336        dim.wait("MCP",         "Idle",      3000);
    321337
     338        /*** FOR REMOVE ***/
    322339        var reset = [ ];
    323340
     
    337354            console.out("");
    338355        }
    339 
    340         console.out("");
    341         console.out("Trying automatic reconnect...");
    342 
     356        /**** FOR REMOVE ****/
     357
     358        var list = [];
    343359        for (var i=0; i<40; i++)
    344360            if (stat[i]!=0x43)
    345             {
    346                 console.out("   ...disconnect "+i);
    347                 dim.send("FAD_CONTROL/DISCONNECT", i);
    348             }
    349 
    350         console.out("   ...waiting for 5s");
    351         v8.sleep(5000);
    352 
    353         for (var i=0; i<40; i++)
    354             if (stat[i]!=0x43)
    355             {
    356                 console.out("   ...reconnect "+i);
    357                 dim.send("FAD_CONTROL/CONNECT", i);
    358             }
    359 
    360         console.out("   ...waiting for 1s");
    361         v8.sleep(1000);
     361                list.push(i);
     362
     363        reconnect(list, "configuration");
     364
     365        throw e;
     366    }
     367
     368    dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
     369
     370    if (incomplete)
     371    {
     372        console.out("Incomplete: "+incomplete);
     373
    362374        console.out("");
    363 
    364         throw e;
    365     }
    366 
    367     dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
    368 
    369     console.out("debug: "+incomplete);
    370 
    371     if (incomplete)
    372     {
     375        console.out("MCP:         "+dim.state("MCP").name);
     376        console.out("FAD_CONTROL: "+dim.state("FAD_CONTROL").name);
     377        console.out("FTM_CONTROL: "+dim.state("FTM_CONTROL").name);
    373378        console.out("");
    374         console.out("Trying automatic reconnect...");
    375 
     379
     380        dim.wait("MCP",         "Idle", 3000);
     381        dim.wait("FTM_CONTROL", "Idle", 3000);
     382
     383        // Necessary to allow the disconnect, reconnect
     384        dim.send("FAD_CONTROL/CLOSE_OPEN_FILES");
     385        dim.wait("FAD_CONTROL", "Connected", 3000);
     386
     387        var list = [];
    376388        for (var i=0; i<40; i++)
    377389            if (incomplete&(1<<i))
    378             {
    379                 console.out("   ...disconnect "+i);
    380                 dim.send("FAD_CONTROL/DISCONNECT", i);
    381             }
    382 
    383         console.out("   ...waiting for 5s");
    384         v8.sleep(5000);
    385 
    386         for (var i=0; i<40; i++)
    387             if (incomplete&(1<<i))
    388             {
    389                 console.out("   ...reconnect "+i);
    390                 dim.send("FAD_CONTROL/CONNECT", i);
    391             }
    392 
    393         console.out("   ...waiting for 1s");
    394         v8.sleep(1000);
    395         console.out("");
    396 
    397         incomplete = 0;
     390                list.push(i);
     391
     392        reconnect(list, "data taking");
    398393
    399394        throw new Error("In-run FAD loss detected.");
     
    425420        if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
    426421            continue;
     422
     423        // Does that fix the runopen before runclose problem?
     424        //dim.wait("FAD_CONTROL", "Connected", 3000);
     425        //v8.sleep(1000);
     426
    427427        if (!takeRun("drs-gain",     1000))     // 40 / 20s     (50Hz)
    428428            continue;
     429
     430        // Does that fix the runopen before runclose problem?
     431        //dim.wait("FAD_CONTROL", "Connected", 3000);
     432        //v8.sleep(1000);
     433
    429434        if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
    430435            continue;
     
    513518
    514519    this.voltageStep = null;
    515     if (!evt.obj)
     520    if (!evt.data)
    516521        return;
    517522
     
    726731
    727732// ================================================================
     733// Check datalogger subscriptions
     734// ================================================================
     735
     736var datalogger_subscriptions = new Subscription("DATA_LOGGER/SUBSCRIPTIONS");
     737datalogger_subscriptions.get(3000, false);
     738
     739datalogger_subscriptions.check = function()
     740{
     741    var obj = this.get();
     742    if (!obj.data)
     743        throw new Error("DATA_LOGGER/SUBSCRIPTIONS not available.");
     744
     745    var expected =
     746        [
     747         "BIAS_CONTROL/CURRENT",
     748         "BIAS_CONTROL/DAC",
     749         "BIAS_CONTROL/NOMINAL",
     750         "BIAS_CONTROL/VOLTAGE",
     751         "DRIVE_CONTROL/POINTING_POSITION",
     752         "DRIVE_CONTROL/SOURCE_POSITION",
     753         "DRIVE_CONTROL/STATUS",
     754         "DRIVE_CONTROL/TRACKING_POSITION",
     755         "FAD_CONTROL/CONNECTIONS",
     756         "FAD_CONTROL/DAC",
     757         "FAD_CONTROL/DNA",
     758         "FAD_CONTROL/DRS_RUNS",
     759         "FAD_CONTROL/EVENTS",
     760         "FAD_CONTROL/FEEDBACK_DATA",
     761         "FAD_CONTROL/FILE_FORMAT",
     762         "FAD_CONTROL/FIRMWARE_VERSION",
     763         "FAD_CONTROL/INCOMPLETE",
     764         "FAD_CONTROL/PRESCALER",
     765         "FAD_CONTROL/REFERENCE_CLOCK",
     766         "FAD_CONTROL/REGION_OF_INTEREST",
     767         "FAD_CONTROL/RUNS",
     768         "FAD_CONTROL/RUN_NUMBER",
     769         "FAD_CONTROL/START_RUN",
     770         "FAD_CONTROL/STATISTICS1",
     771         "FAD_CONTROL/STATISTICS2",
     772         "FAD_CONTROL/STATS",
     773         "FAD_CONTROL/STATUS",
     774         "FAD_CONTROL/TEMPERATURE",
     775         "FEEDBACK/CALIBRATED_CURRENTS",
     776         "FEEDBACK/CALIBRATION",
     777         "FEEDBACK/DEVIATION",
     778         "FEEDBACK/REFERENCE",
     779         "FSC_CONTROL/CURRENT",
     780         "FSC_CONTROL/HUMIDITY",
     781         "FSC_CONTROL/TEMPERATURE",
     782         "FSC_CONTROL/VOLTAGE",
     783         "FTM_CONTROL/COUNTER",
     784         "FTM_CONTROL/DYNAMIC_DATA",
     785         "FTM_CONTROL/ERROR",
     786         "FTM_CONTROL/FTU_LIST",
     787         "FTM_CONTROL/PASSPORT",
     788         "FTM_CONTROL/STATIC_DATA",
     789         "FTM_CONTROL/TRIGGER_RATES",
     790         "LID_CONTROL/DATA",
     791         "MAGIC_LIDAR/DATA",
     792         "MAGIC_WEATHER/DATA",
     793         "MCP/CONFIGURATION",
     794         "PWR_CONTROL/DATA",
     795         "RATE_CONTROL/THRESHOLD",
     796         "RATE_SCAN/DATA",
     797         "RATE_SCAN/PROCESS_DATA",
     798         "TEMPERATURE/DATA",
     799         "TIME_CHECK/OFFSET",
     800         "TNG_WEATHER/DATA",
     801         "TNG_WEATHER/DUST",
     802        ];
     803
     804    function map(entry)
     805    {
     806        if (entry.length==0)
     807            return undefined;
     808
     809        var rc = entry.split(',');
     810        if (rc.length!=2)
     811            throw new Error("Subscription list entry '"+entry+"' has wrong number of elements.");
     812        return rc;
     813    }
     814
     815    var list = obj.data.split('\n').map(map);
     816
     817    function check(name)
     818    {
     819        if (list.every(function(el){return el[0]!=name;}))
     820            throw new Error("Subscription to '"+name+"' not available.");
     821    }
     822
     823    expected.forEach(check);
     824}
     825
     826
     827
     828// ================================================================
    728829// Crosscheck all states
    729830// ================================================================
     
    835936    if (!was_up && sun.isUp)
    836937    {
    837         console.out("Sun rise detected.... automatic shutdown initiated!");
     938        console.out("", "Sun rise detected.... automatic shutdown initiated!");
    838939        // FIXME: State check?
    839940        Shutdown();
     
    887988    }
    888989
     990    if (system_on===false && task!="STARTUP")
     991    {
     992        v8.sleep(1000);
     993        continue;
     994    }
     995
    889996    // Check if sun is still up... only DATA and RATESCAN must be suppressed
    890997    if ((obs[sub].task=="DATA" || obs[sub].task=="RATESCAN") && sun.isUp)
     
    8971004    }
    8981005
    899     if (system_on===false && task!="STARTUP")
    900     {
    901         v8.sleep(1000);
    902         continue;
    903     }
     1006    console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
    9041007
    9051008    var power_states = sun.isUp || system_on===false ? [ "DriveOff" ] : [ "SystemOn" ];
    906 
    907     var drive_states = sun.isUp || system_on===false ? [ ] : [ "Armed", "Tracking", "OnTrack" ];
     1009    var drive_states = sun.isUp || system_on===false ?   undefined    : [ "Armed", "Tracking", "OnTrack" ];
    9081010
    9091011    // A scheduled task was found, lets check if all servers are
     
    9171019         [ "CHAT"          ],
    9181020         [ "SMART_FACT"    ],
     1021         [ "TEMPERATURE"   ],
    9191022         [ "DATA_LOGGER",     [ "NightlyFileOpen", "WaitForRun", "Logging" ] ],
    9201023         [ "FSC_CONTROL",     [ "Connected"                ] ],
     
    9221025         [ "TIME_CHECK",      [ "Valid"                    ] ],
    9231026         [ "PWR_CONTROL",     power_states/*[ "SystemOn"                 ]*/ ],
    924          [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
     1027//         [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
    9251028         [ "BIAS_CONTROL",    [ "VoltageOff", "VoltageOn", "Ramping" ] ],
    9261029         [ "FEEDBACK",        [ "CurrentControl", "CurrentCtrlIdle" ] ],
     
    9411044    }
    9421045
    943     console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
     1046    datalogger_subscriptions.check();
    9441047
    9451048    // Check if obs.task is one of the one-time-tasks
  • trunk/FACT++/scripts/MainClassic.js

    r15290 r15354  
    102102{
    103103    if (!evt.data)
    104     {
    105         this.last_inc = 0;
    106104        return;
    107     }
    108105
    109106    var inc = evt.obj['incomplete'];
    110     if (!inc)
    111     {
    112         this.last_inc = 0;
     107    if (!inc || inc>0xffffffffff)
    113108        return;
    114     }
    115 
    116     if (this.last_inc==inc)
     109
     110    if (incomplete>0)
    117111        return;
    118112
     113    if (dim.state("MCP").name!="TakingData")
     114        return;
     115
    119116    incomplete = inc;
    120117
    121     var reset = [ ];
    122 
    123     for (var i=0; i<40; i++)
    124         if (inc&(1<<i))
    125         {
    126             console.out("  FAD %2d".$(i)+" lost during data taking.");
    127             reset.push(parseInt(i/10));
    128         }
    129 
    130     if (reset.length>10)
    131         return;
    132 
    133     dim.send("MCP/RESET");
    134 
    135     reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
    136 
    137     if (reset.length>0)
    138     {
    139         console.out("");
    140         console.out("  FADs belong to crate(s): "+reset);
    141         console.out("");
    142     }
    143 
    144     this.last_inc  = inc;
     118    console.out("Sending MCP/STOP");
     119    dim.send("MCP/STOP");
    145120}
    146121
     
    224199startrun.get(5000);
    225200
     201function reconnect(list, txt)
     202{ /*
     203    var reset = [ ];
     204
     205    for (var i=0; i<list.length; i++)
     206        {
     207            console.out("  FAD %2d".$(list[i])+" lost during "+txt);
     208            reset.push(parseInt(list[i]/10));
     209        }
     210
     211    reset = reset.filter(function(elem,pos){return reset.indexOf(elem)==pos;});
     212
     213    console.out("");
     214    console.out("  FADs belong to crate(s): "+reset);
     215    console.out("");
     216*/
     217    console.out("");
     218    console.out("Trying automatic reconnect ["+txt+"]...");
     219
     220    for (var i=0; i<list.length; i++)
     221    {
     222        console.out("   ...disconnect "+list[i]);
     223        dim.send("FAD_CONTROL/DISCONNECT", list[i]);
     224    }
     225
     226    console.out("   ...waiting for 5s");
     227    v8.sleep(5000);
     228
     229    for (var i=0; i<list.length; i++)
     230    {
     231        console.out("   ...reconnect "+list[i]);
     232        dim.send("FAD_CONTROL/CONNECT", list[i]);
     233    }
     234
     235    console.out("   ...waiting for 1s");
     236    v8.sleep(1000);
     237    console.out("");
     238}
     239
    226240function takeRun(type, count, time)
    227241{
     
    234248    console.out("  Take run %3d".$(nextrun)+": N="+count+" T="+time+"s ["+type+"]");
    235249
     250    incomplete = 0;
    236251    dim.send("MCP/START", time?time:-1, count?count:-1, type);
    237252
     
    274289
    275290    // Here we could check and handle fad losses
     291
    276292    try
    277293    {
     
    303319        dim.wait("MCP",         "Idle",      3000);
    304320
     321        /*** FOR REMOVE ***/
    305322        var reset = [ ];
    306323
     
    320337            console.out("");
    321338        }
    322 
    323         console.out("");
    324         console.out("Trying automatic reconnect...");
    325 
     339        /**** FOR REMOVE ****/
     340
     341        var list = [];
    326342        for (var i=0; i<40; i++)
    327343            if (stat[i]!=0x43)
    328             {
    329                 console.out("   ...disconnect "+i);
    330                 dim.send("FAD_CONTROL/DISCONNECT", i);
    331             }
    332 
    333         console.out("   ...waiting for 5s");
    334         v8.sleep(5000);
    335 
    336         for (var i=0; i<40; i++)
    337             if (stat[i]!=0x43)
    338             {
    339                 console.out("   ...reconnect "+i);
    340                 dim.send("FAD_CONTROL/CONNECT", i);
    341             }
    342 
    343         console.out("   ...waiting for 1s");
    344         v8.sleep(1000);
     344                list.push(i);
     345
     346        reconnect(list, "configuration");
     347
     348        throw e;
     349    }
     350
     351    dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
     352
     353    if (incomplete)
     354    {
     355        console.out("Incomplete: "+incomplete);
     356
    345357        console.out("");
    346 
    347         throw e;
    348     }
    349 
    350     dim.wait("MCP", "Idle", time>0 ? time*1250 : undefined); // run time plus 25%
    351 
    352     if (incomplete)
    353     {
     358        console.out("MCP:         "+dim.state("MCP").name);
     359        console.out("FAD_CONTROL: "+dim.state("FAD_CONTROL").name);
     360        console.out("FTM_CONTROL: "+dim.state("FTM_CONTROL").name);
    354361        console.out("");
    355         console.out("Trying automatic reconnect...");
    356 
     362
     363        dim.wait("MCP",         "Idle", 3000);
     364        dim.wait("FTM_CONTROL", "Idle", 3000);
     365
     366        // Necessary to allow the disconnect, reconnect
     367        dim.send("FAD_CONTROL/CLOSE_OPEN_FILES");
     368        dim.wait("FAD_CONTROL", "Connected", 3000);
     369
     370        var list = [];
    357371        for (var i=0; i<40; i++)
    358372            if (incomplete&(1<<i))
    359             {
    360                 console.out("   ...disconnect "+i);
    361                 dim.send("FAD_CONTROL/DISCONNECT", i);
    362             }
    363 
    364         console.out("   ...waiting for 5s");
    365         v8.sleep(5000);
    366 
    367         for (var i=0; i<40; i++)
    368             if (incomplete&(1<<i))
    369             {
    370                 console.out("   ...reconnect "+i);
    371                 dim.send("FAD_CONTROL/CONNECT", i);
    372             }
    373 
    374         console.out("   ...waiting for 1s");
    375         v8.sleep(1000);
    376         console.out("");
    377 
    378         incomplete = 0;
     373                list.push(i);
     374
     375        reconnect(list, "data taking");
    379376
    380377        throw new Error("In-run FAD loss detected.");
     
    406403        if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
    407404            continue;
     405
     406        // Does that fix the runopen before runclose problem?
     407        //dim.wait("FAD_CONTROL", "Connected", 3000);
     408        //v8.sleep(1000);
     409
    408410        if (!takeRun("drs-gain",     1000))     // 40 / 20s     (50Hz)
    409411            continue;
     412
     413        // Does that fix the runopen before runclose problem?
     414        //dim.wait("FAD_CONTROL", "Connected", 3000);
     415        //v8.sleep(1000);
     416
    410417        if (!takeRun("drs-pedestal", 1000))     // 40 / 20s     (50Hz)
    411418            continue;
     
    494501
    495502    this.voltageStep = null;
    496     if (!evt.obj)
     503    if (!evt.data)
    497504        return;
    498505
     
    707714
    708715// ================================================================
     716// Check datalogger subscriptions
     717// ================================================================
     718
     719var datalogger_subscriptions = new Subscription("DATA_LOGGER/SUBSCRIPTIONS");
     720datalogger_subscriptions.get(3000, false);
     721
     722datalogger_subscriptions.check = function()
     723{
     724    var obj = this.get();
     725    if (!obj.data)
     726        throw new Error("DATA_LOGGER/SUBSCRIPTIONS not available.");
     727
     728    var expected =
     729        [
     730         "BIAS_CONTROL/CURRENT",
     731         "BIAS_CONTROL/DAC",
     732         "BIAS_CONTROL/NOMINAL",
     733         "BIAS_CONTROL/VOLTAGE",
     734         "DRIVE_CONTROL/POINTING_POSITION",
     735         "DRIVE_CONTROL/SOURCE_POSITION",
     736         "DRIVE_CONTROL/STATUS",
     737         "DRIVE_CONTROL/TRACKING_POSITION",
     738         "FAD_CONTROL/CONNECTIONS",
     739         "FAD_CONTROL/DAC",
     740         "FAD_CONTROL/DNA",
     741         "FAD_CONTROL/DRS_RUNS",
     742         "FAD_CONTROL/EVENTS",
     743         "FAD_CONTROL/FEEDBACK_DATA",
     744         "FAD_CONTROL/FILE_FORMAT",
     745         "FAD_CONTROL/FIRMWARE_VERSION",
     746         "FAD_CONTROL/INCOMPLETE",
     747         "FAD_CONTROL/PRESCALER",
     748         "FAD_CONTROL/REFERENCE_CLOCK",
     749         "FAD_CONTROL/REGION_OF_INTEREST",
     750         "FAD_CONTROL/RUNS",
     751         "FAD_CONTROL/RUN_NUMBER",
     752         "FAD_CONTROL/START_RUN",
     753         "FAD_CONTROL/STATISTICS1",
     754         "FAD_CONTROL/STATISTICS2",
     755         "FAD_CONTROL/STATS",
     756         "FAD_CONTROL/STATUS",
     757         "FAD_CONTROL/TEMPERATURE",
     758         "FEEDBACK/CALIBRATED_CURRENTS",
     759         "FEEDBACK/CALIBRATION",
     760         "FEEDBACK/DEVIATION",
     761         "FEEDBACK/REFERENCE",
     762         "FSC_CONTROL/CURRENT",
     763         "FSC_CONTROL/HUMIDITY",
     764         "FSC_CONTROL/TEMPERATURE",
     765         "FSC_CONTROL/VOLTAGE",
     766         "FTM_CONTROL/COUNTER",
     767         "FTM_CONTROL/DYNAMIC_DATA",
     768         "FTM_CONTROL/ERROR",
     769         "FTM_CONTROL/FTU_LIST",
     770         "FTM_CONTROL/PASSPORT",
     771         "FTM_CONTROL/STATIC_DATA",
     772         "FTM_CONTROL/TRIGGER_RATES",
     773         "LID_CONTROL/DATA",
     774         "MAGIC_LIDAR/DATA",
     775         "MAGIC_WEATHER/DATA",
     776         "MCP/CONFIGURATION",
     777         "PWR_CONTROL/DATA",
     778         "RATE_CONTROL/THRESHOLD",
     779         "RATE_SCAN/DATA",
     780         "RATE_SCAN/PROCESS_DATA",
     781         "TEMPERATURE/DATA",
     782         "TIME_CHECK/OFFSET",
     783         "TNG_WEATHER/DATA",
     784         "TNG_WEATHER/DUST",
     785        ];
     786
     787    function map(entry)
     788    {
     789        if (entry.length==0)
     790            return undefined;
     791
     792        var rc = entry.split(',');
     793        if (rc.length!=2)
     794            throw new Error("Subscription list entry '"+entry+"' has wrong number of elements.");
     795        return rc;
     796    }
     797
     798    var list = obj.data.split('\n').map(map);
     799
     800    function check(name)
     801    {
     802        if (list.every(function(el){return el[0]!=name;}))
     803            throw new Error("Subscription to '"+name+"' not available.");
     804    }
     805
     806    expected.forEach(check);
     807}
     808
     809
     810
     811// ================================================================
    709812// Crosscheck all states
    710813// ================================================================
     
    816919    if (!was_up && sun.isUp)
    817920    {
    818         console.out("Sun rise detected.... automatic shutdown initiated!");
     921        console.out("", "Sun rise detected.... automatic shutdown initiated!");
    819922        // FIXME: State check?
    820923        Shutdown();
     
    870973    var task = obs[sub].task;
    871974
     975    if (system_on===false && task!="STARTUP")
     976    {
     977        v8.sleep(1000);
     978        continue;
     979    }
     980
    872981    // Check if sun is still up... only DATA and RATESCAN must be suppressed
    873982    if ((task=="DATA" || task=="RATESCAN") && sun.isUp)
     
    880989    }
    881990
    882     if (system_on===false && task!="STARTUP")
    883     {
    884         v8.sleep(1000);
    885         continue;
    886     }
     991    console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
    887992
    888993    var power_states = sun.isUp || system_on===false ? [ "DriveOff" ] : [ "SystemOn" ];
    889 
    890     var drive_states = sun.isUp || system_on===false ? [ ] : [ "Armed", "Tracking", "OnTrack" ];
     994    var drive_states = sun.isUp || system_on===false ?   undefined    : [ "Armed", "Tracking", "OnTrack" ];
    891995
    892996    // A scheduled task was found, lets check if all servers are
     
    9001004         [ "CHAT"          ],
    9011005         [ "SMART_FACT"    ],
     1006         [ "TEMPERATURE"   ],
    9021007         [ "DATA_LOGGER",     [ "NightlyFileOpen", "WaitForRun", "Logging" ] ],
    9031008         [ "FSC_CONTROL",     [ "Connected"                ] ],
     
    9051010         [ "TIME_CHECK",      [ "Valid"                    ] ],
    9061011         [ "PWR_CONTROL",     power_states/*[ "SystemOn"                 ]*/ ],
    907          [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
     1012//         [ "AGILENT_CONTROL", [ "VoltageOn"                ] ],
    9081013         [ "BIAS_CONTROL",    [ "VoltageOff", "VoltageOn", "Ramping" ] ],
    9091014         [ "FEEDBACK",        [ "CurrentControl", "CurrentCtrlIdle" ] ],
     
    9231028    }
    9241029
    925     console.out("\n"+(new Date()).toUTCString()+": Current measurement: "+obs[sub]);
     1030    datalogger_subscriptions.check();
    9261031
    9271032    // Check if obs.task is one of the one-time-tasks
Note: See TracChangeset for help on using the changeset viewer.