Erick / Mbed 2 deprecated ICE-F412

Dependencies:   mbed-rtos mbed

Revision:
0:61364762ee0e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ICE-Application/src/CommandParser/sequence.cpp	Tue Jan 24 19:05:33 2017 +0000
@@ -0,0 +1,216 @@
+#include "cmd_utils.h"
+#include "cmd.h"
+
+void cmd_createSequence(int argc, char **argv)
+{
+    // 
+    // This command will test the basic functionality of a sequence control
+    // 
+    // virtual registers:
+    //      v_slugSchedule      -> start trigger for the slug dose
+    //      v_alwaysTrue        -> always set to 1
+    //      v_preBleedDone      -> set to 1 when prebleed is done
+    //      v_slugFeedDone      -> set to 1 when the slug-feed is done
+    //      v_pbTimer           -> prebleed timer control output, set to 0 when finished
+    //      
+    // physical outputs:
+    //      o_rly01             -> blowdown controlled (higher pri setpoint)
+    //      o_rly02             -> slug dose relay
+    //
+    // scripts:
+    //      js_nor_regs.js      -> performs nor operation of args a, b
+    //      
+    // timer controls:
+    //      pb-guard-timer      -> prebleed guard timer
+    //      
+    // setpoint controls:
+    //      pre-bleed-sp        -> pre-bleed setpoint control
+    //      slug-dose-sp        -> slug dose setpoint control
+  
+    // vreg: slug-schedule
+    VregFile_t vreg;
+    vreg.fname  = "vreg_slugScheduleOn.json";
+    vreg.id     = "v_slugScheduleOn";
+    vreg.value  = 0;                            
+    createVregFile(vreg);
+   
+    // vreg: always true
+    vreg.fname  = "vreg_alwaysTrue.json";
+    vreg.id     = "v_alwaysTrue";
+    vreg.value  = 1;
+    createVregFile(vreg);
+    
+    // vreg: pre-bleed done
+    vreg.fname  = "vreg_preBleedDone.json";
+    vreg.id     = "v_preBleedDone";
+    vreg.value  = 0;
+    createVregFile(vreg);
+    
+    // vreg: slug-feed done
+    vreg.fname = "vreg_slugFeedDone.json";
+    vreg.id    = "v_slugFeedDone";
+    vreg.value = 0;
+    createVregFile(vreg);
+    
+    // vreg: prebleed timer
+    vreg.fname = "vreg_pbTimer.json";
+    vreg.id    = "v_preBleedTimer";
+    vreg.value = 0;
+    createVregFile(vreg);
+    
+    // Blowdown Control ---------------------------------------------------
+    // input
+    IOFile_t io_file;
+    memset(&io_file, 0, sizeof(IOFile_t));
+    io_file.fname     = "input_i_bdcond01.json";
+    io_file.id        = "i_bdcond01";
+    io_file.name      = "Tower Conductivity";
+    io_file.min       = 0;
+    io_file.max       = 6000;
+    io_file.node      = 21;
+    io_file.reg       = 5;
+    io_file.type      = 0;
+    io_file.regType   = REG_TYPE_INPUT;
+    io_file.size      = 2;
+    io_file.order     = 2;
+    io_file.rfreq     = 5;
+    createIOFile(io_file);
+    
+    // output
+    memset(&io_file, 0, sizeof(io_file));
+    io_file.fname       = "output_o_rly01.json";
+    io_file.id          = "o_rly01";
+    io_file.name        = "Blowdown-Relay";
+    io_file.min         = 0;
+    io_file.max         = 100;
+    io_file.node        = 0;
+    io_file.reg         = 1;
+    io_file.type        = 0;
+    io_file.regType     = REG_TYPE_OUTPUT;
+    io_file.size        = 2;
+    io_file.order       = 2;
+    io_file.rfreq       = 5;
+    createIOFile(io_file);
+    
+    // blowdown control
+    SetpointControlFile_t sp;
+    memset(&sp, 0, sizeof(sp));
+    sp.controlFile  = "seq_slug_dose_control_sp_prebleed.json";
+    sp.actingDir    = 1;
+    sp.id           = "blowdown";
+    sp.setpoint     = 1750;
+    sp.input        = "i_bdcond01";
+    sp.output       = "o_rly01";
+    sp.priority     = 750;              // this is higher pri than a regular sp control
+    sp.tolerance    = 30;
+    createSetpointControlFile(sp);
+    
+    // timer 
+    TimerControlFile_t timer;
+    memset(&timer, 0, sizeof(timer));
+    timer.controlFile   = "seq_slug_dose_control_tm_prebleed.json";
+    timer.priority      = 750;
+    timer.output        = "v_preBleedTimer";
+    timer.id            = "prebleed";
+    timer.duration      = 30;
+    timer.day           = 0;
+    createTimerControlFile(timer);
+    
+    // sequence control
+    std::string filename = "control_seq_slug_dose.json";
+    char buf[MAX_FILE_SIZE * 3];
+    snprintf(buf, sizeof(buf),
+             "{ "
+             "\"id\": \"slug_dose\", "
+             "\"startTrigger\": \"v_slugScheduleOn\", "
+             "\"sequence\": "
+             "["
+             // START PRE-BLEED elements
+             "{ \"startTrigger\":\"v_alwaysTrue\", "
+             "\"actions\": "
+             "["
+                "{ \"action\": \"assign\",   \"id\": \"v_preBleedTimer\", \"val\":\"1.0\" },"
+                "{ \"action\": \"assign\",   \"id\": \"v_preBleedDone\",  \"val\":\"0.0\" },"
+                "{ \"action\": \"createsp\", \"id\": \"prebleed\" },"
+                "{ \"action\": \"createtm\", \"id\": \"prebleed\" }"
+             "]," // end actions array
+             "\"stopTrigger\": \"v_preBleedDone\" },"
+
+             // DELETE PRE-BLEED elements
+             "{ \"startTrigger\":\"v_alwaysTrue\", "
+             "\"actions\": "
+             "["
+                "{ \"action\": \"deletesp\", \"id\": \"prebleed\" }, "
+                "{ \"action\": \"deletetm\", \"id\": \"prebleed\" }"
+             "],"
+             "\"stopTrigger\": \"v_alwaysTrue\" }"
+#if 0 
+             // SLUG-FEED elements
+             "{ \"startTrigger\":\"v_alwaysTrue\", "
+             "\"actions\": "
+             "["
+                "{ \"action\": \"createsp\", \"id\": \"SLUG-FEED-SP\" } "
+             "],"
+             "\"stopTrigger\": \"v_slugFeedDone\" },"
+
+             // DELETE SLUG-FEED elements
+             "{ \"startTrigger\":\"v_alwaysTrue\", "
+             "\"actions\": "
+             "["
+                "{ \"action\": \"deletesp\", \"id\": \"SLUG-FEED-SP\" } "
+             "],"
+             "\"stopTrigger\": \"v_alwaysTrue\" }"
+#endif
+             "] " // end sequence array
+             "} ");
+    printf("\r[DEBUG: bytes = %u\n", (size_t)strlen(buf));
+    bool rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, sizeof(buf));
+    if ( rc != true ) {
+        printf("\rFailed to save %s\n", filename.c_str());
+        return;
+    } else {
+        printf("\r...generated %s\n", filename.c_str());
+    }
+    
+    // JavaScript Executor: 
+    //   IN: o_rly01
+    //   IN: v_preBleedTimer
+    //   OUT: v_preBleedDone
+    // 
+    // Description: execute the js_nor_regs() script with arguments o_rly01 
+    //              and v_pbTimer; stores the result in v_preBleedDone
+    //
+    filename = "exe_js_prebleed_done.js";
+    snprintf(buf, sizeof(buf),
+             "{ "
+             "\"id\":\"PREBLEED_DONE\","
+             "\"script\":\"nor_regs\","
+             "\"args\":[{\"arg\":\"o_rly01\"},{\"arg\":\"v_preBleedTimer\"},{\"arg\":\"v_preBleedDone\"}]"
+             "};"
+            );
+    rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
+    if ( rc != true ) {
+        printf("\rFailed to save %s\n", filename.c_str());
+        return;
+    } else {
+        printf("\r...generated %s\n", filename.c_str());
+    }
+    
+    // JavaScript: nor_regs(a, b) => c
+    filename = "js_nor_regs.js";
+    snprintf(buf, sizeof(buf),
+             "var nor_regs = function(a, b, c) {"
+             "res1 = getRegister(a);"
+             "res2 = getRegister(b);"
+             "if ( res1 == 0 || res2 == 0 ) { setRegister(c, 1); }"
+             "return 1;"
+             "};"
+            );
+    rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
+    if ( rc != true ) {
+        printf("\rFailed to save %s\n", filename.c_str());
+        return;
+    } else {
+        printf("\r...generated %s\n", filename.c_str());
+    }
+}