Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: ICE-Application/src/CommandParser/cmd.cpp
- Revision:
- 2:02cb20446785
- Parent:
- 1:b2e90cda7a5a
--- a/ICE-Application/src/CommandParser/cmd.cpp Tue Jan 24 19:06:45 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2725 +0,0 @@
-/*
- * ===============================================================
- * Natural Tiny Shell (NT-Shell) Application example.
- * Version 0.0.6
- * ===============================================================
- * Copyright (c) 2010-2011 Shinichiro Nakamura
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- * ===============================================================
- */
-
-#include <mbed.h>
-#include <mbed_stats.h>
-#include <stdlib.h>
-#include <vector>
-#include <rtos.h>
-#include "cmd.h"
-#include "ntshell.h"
-#include "ntopt.h"
-#include "cJSON.h"
-#include "v7.h"
-#include "global.h"
-#include "OutputTask.h"
-#include "ModbusMasterApi.h"
-#include "ConfigurationHandler.h"
-#include "mfs.h"
-#include "rtc.h"
-#include "ConfigFs.h"
-#include "version.h"
-#include "ICELog.h"
-#include "utilities.h"
-
-ntshell_t ntshell;
-extern Serial console;
-
-// the readers and writers
-int func_read(char *buf, int cnt);
-int func_write(const char *buf, int cnt);
-int func_cb_ntshell(const char *text);
-void func_cb_ntopt(int argc, char **argv);
-
-// the command table element
-typedef struct {
- char *command; // command (from shell)
- char *description; // descrption
- void (*func)(int argc, char **argv); // callback function
-} command_table_t;
-
-const command_table_t cmdlist[] = {
- {"?", "help command", cmd_help },
- {"cif", "create an input file", cmd_cif },
- {"cof", "create an output file", cmd_cof },
- {"create-ca", "create a control algorithm file", cmd_createCAlg },
- {"create-fs", "create a failsafe control", cmd_createFailsafe },
- {"create-mn", "create a manual control", cmd_createManual },
- {"create-se", "create a sensor error control", cmd_createSError },
- {"create-seq", "create a sequence control", cmd_createSequence },
- {"create-sp", "create a setpoint control", cmd_createSetpoint },
- {"create-tm", "create a timer control", cmd_createTimer },
- {"create-vreg", "create a virtual register", cmd_createVreg },
- {"debug-fs", "debug failsafe controls", cmd_debug_fs },
- {"debug-mn", "debug manual controls", cmd_debug_mn },
- {"debug-se", "debug sensor error controls", cmd_debug_se },
- {"debug-seq", "debug sequence controls", cmd_debug_seq },
- {"debug-sp", "debug setpoint controls", cmd_debug_sp },
- {"debug-tm", "debug timer controls", cmd_debug_tm },
- {"delete-file", "delete a file from EEPROM", cmd_deleteFile },
- {"destroy-control", "destroy a control", cmd_destroy },
- {"format-fs", "format EEPROM file system", cmd_formatFS },
- {"heap-stats", "dump heap data", cmd_heap_stats },
- {"help", "help command", cmd_help },
- {"json-test", "JSON parser test", cmd_json },
- {"log-level", "set debug log-level", cmd_logLevel },
- {"ls", "list files in EEPROM", cmd_lsFile },
- {"modmap", "dump modbus register map", cmd_modmap },
- {"preload", "pre-load phase-1 demo files", cmd_preload },
- {"read-file", "read file from EEPROM", cmd_readFile },
- {"reset", "software reset", cmd_reset },
- {"simall", "simulate multiple inputs", cmd_simall },
- {"simerr", "simulate input error", cmd_simerr },
- {"simin", "simulate input", cmd_simin },
- {"show-ca", "show control algorithms", cmd_ShowAlgorithms },
- {"show-controls", "show active controls", cmd_ShowControls },
- {"show-tm-controls", "display active timer controls", cmd_ShowTimers },
- {"show-mn-controls", "display active manual controls", cmd_ShowManuals },
- {"show-co-controls", "display active composite controls", cmd_ShowComposites },
- {"show-fs-controls", "display active failsafe controls", cmd_ShowFailsafes },
- {"show-se-controls", "display active sensor error controls", cmd_ShowSensorErrors},
- {"show-seq-controls", "display active sequential controls", cmd_ShowSequences },
- {"show-sp-controls", "display active setpoint controls", cmd_ShowSetpoints },
- {"show-outputs", "display the output hierarchy", cmd_outputs },
- //{"spi-test", "test SPI FLASH interface", cmd_spiTest },
- {"stack-stats", "dump stack stats", cmd_stack },
- {"test-log-level", "tests the log functions", cmd_testLog },
- {"test-prebleed", "test the pre-bleed scripts", cmd_testPreBleed },
- {"v7-test", "V7 test", cmd_v7, },
- {"version", "display version info", cmd_version },
- {"vregmap", "display the virtual register map", cmd_vregmap },
- {"write-file", "write a file to EEPROM", cmd_writeFile },
- {"get-time", "get time from RTC", cmd_getTime },
- {"set-time", "set time from RTC", cmd_setTime },
- {NULL, NULL, NULL}
-};
-
-
-void cmd_testLog(int argc, char **argv)
-{
- logFatal ("Testing");
- logError ("Testing");
- logWarning ("Testing");
- logInfo ("Testing");
- logDebug ("Testing");
- logTrace ("Testing");
-
-}
-
-//
-// function: cmd_debug_fs
-// decription: debug failsafe controls (ON|OFF)
-//
-void cmd_debug_fs(int argc, char **argv)
-{
- extern bool debugFailsafeControl;
-
- if ( argc == 1 ) {
- printf("\rCurrent level is %d\r\n", debugFailsafeControl);
- return;
- }
-
- if ( argc != 2 ) {
-usage:
- printf("\rusage: debug-fs <1|0>\n");
- printf("\rexample: debug-fs 1\n");
- return;
- }
-
- if ( (atoi(argv[1])) == 1 ) {
- debugFailsafeControl = true;
- } else if ( (atoi(argv[1])) == 0 ) {
- debugFailsafeControl = false;
- } else {
- goto usage;
- }
-}
-
-//
-// function: cmd__debug_man
-// description: debug manual controls (ON|OFF)
-//
-void cmd_debug_mn(int argc, char **argv)
-{
- extern bool debugManualControl;
-
- if ( argc == 1 ) {
- printf("\rCurrent level is %d\r\n", debugManualControl);
- return;
- }
-
- if ( argc != 2 ) {
-usage:
- printf("\rusage: debug-man <1|0>\n");
- printf("\rexample: debug-man 1\n");
- return;
- }
-
- if ( (atoi(argv[1])) == 1 ) {
- debugManualControl = true;
- } else if ( (atoi(argv[1])) == 0 ) {
- debugManualControl = false;
- } else {
- goto usage;
- }
-}
-
-//
-// function: cmd_debug_se
-// description: debug sensor error controls (ON|OFF)
-//
-void cmd_debug_se(int argc, char **argv)
-{
- extern bool debugSensorError;
-
- if ( argc == 1 ) {
- printf("\rCurrent level is %d\r\n", debugSensorError);
- return;
- }
-
- if ( argc != 2 ) {
-usage:
- printf("\rusage: debug-se <1|0>\n");
- printf("\rexample: debug-se 1\n");
- return;
- }
-
- if ( (atoi(argv[1])) == 1 ) {
- debugSensorError = true;
- } else if ( (atoi(argv[1])) == 0 ) {
- debugSensorError = false;
- } else {
- goto usage;
- }
-}
-
-//
-// function: cmd_debug_seq
-// description: debug sequence controls (ON|OFF
-//
-void cmd_debug_seq(int argc, char **argv)
-{
- extern bool debugSequenceControl;
-
- if ( argc == 1 ) {
- printf("\rCurrent level is %d\r\n", debugSequenceControl);
- return;
- }
-
- if ( argc != 2 ) {
-usage:
- printf("\rusage: debug-seq <1|0>\n");
- printf("\rexample: debug-seq 1\n");
- return;
- }
-
- if ( (atoi(argv[1])) == 1 ) {
- debugSequenceControl = true;
- } else if ( (atoi(argv[1])) == 0 ) {
- debugSequenceControl = false;
- } else {
- goto usage;
- }
-}
-
-//
-// function: cmd_debug_sp
-// description: debug setpoint controls
-//
-void cmd_debug_sp(int argc, char **argv)
-{
- extern bool debugSetpointControl;
-
- if ( argc == 1 ) {
- printf("\rCurrent level is %d\r\n", debugSetpointControl);
- return;
- }
-
- if ( argc != 2 ) {
-usage:
- printf("\rusage: debug-sp <1|0>\n");
- printf("\rexample: debug-sp 1\n");
- return;
- }
-
- if ( (atoi(argv[1])) == 1 ) {
- debugSetpointControl = true;
- } else if ( (atoi(argv[1])) == 0 ) {
- debugSetpointControl = false;
- } else {
- goto usage;
- }
-}
-
-//
-// function: cmd_debug_tm
-// description: debug timer controls (ON|OFF)
-//
-void cmd_debug_tm(int argc, char **argv)
-{
- extern bool debugTimerControl;
-
- if ( argc == 1 ) {
- printf("\rCurrent level is %d\r\n", debugTimerControl);
- return;
- }
-
- if ( argc != 2 ) {
-usage:
- printf("\rusage: debug-tm <1|0>\n");
- printf("\rexample: debug-tm 1\n");
- return;
- }
-
- if ( (atoi(argv[1])) == 1 ) {
- debugTimerControl = true;
- } else if ( (atoi(argv[1])) == 0 ) {
- debugTimerControl = false;
- } else {
- goto usage;
- }
-}
-
-
-void cmd_heap_stats(int argc, char **argv)
-{
-#ifndef __ICCARM__
- UNUSED(argc), UNUSED(argv);
- printf("\r%s\r\n", Util_getHeapData().c_str());
-#if 0
- UNUSED(argc);
- UNUSED(argv);
-
- mbed_stats_heap_t s;
- mbed_stats_heap_get(&s);
-
- printf("\rHeap statistics:\n");
- printf("\r bytes allocated......%u\n", s.current_size/1024);
- printf("\r max bytes allocated..%u\n", s.max_size/1024);
- printf("\r cumulative sum.......%u\n", s.total_size);
- printf("\r reserved size........%u\n", s.reserved_size);
- printf("\r allocations..........%u\n", s.alloc_cnt);
- printf("\r failed allocations...%u\n", s.alloc_fail_cnt);
-
- return;
-#endif
-#endif
-}
-
-void cmd_ShowAlgorithms(int argc, char **argv)
-{
- UNUSED(argc);
- UNUSED(argv);
- ConfigurationHandler_showAlgorithms();
- printf("\r\n");
-}
-
-void cmd_ShowControls(int argc, char **argv)
-{
- UNUSED(argc);
- UNUSED(argv);
- ConfigurationHandler_showControls();
- printf("\r\n");
-
-}
-
-void cmd_reset(int argc, char **argv)
-{
- NVIC_SystemReset();
-}
-
-void cmd_ShowTimers(int argc, char **argv)
-{
- UNUSED(argc), UNUSED(argv);
- ConfigurationHandler_showTimerControls();
- printf("\r\n");
-}
-
-void cmd_ShowManuals(int argc, char **argv)
-{
- UNUSED(argc), UNUSED(argv);
- ConfigurationHandler_showManualControls();
- printf("\r\n");
-}
-
-void cmd_ShowFailsafes(int argc, char **argv)
-{
- UNUSED(argc), UNUSED(argv);
- ConfigurationHandler_showFailsafeControls();
- printf("\r\n");
-}
-
-void cmd_ShowSequences(int argc, char **argv)
-{
- UNUSED(argc), UNUSED(argv);
- ConfigurationHandler_showSequenceControls();
-}
-
-void cmd_ShowComposites(int argc, char **argv)
-{
- UNUSED(argc), UNUSED(argv);
- ConfigurationHandler_showCompositeControls();
- printf("\r\n");
-}
-
-void cmd_ShowSetpoints(int argc, char **argv)
-{
- UNUSED(argc), UNUSED(argv);
- ConfigurationHandler_showSetpointControls();
- printf("\r\n");
-}
-
-void cmd_ShowSensorErrors(int argc, char **argv)
-{
- UNUSED(argc), UNUSED(argv);
- ConfigurationHandler_showSensorErrorControls();
- printf("\r\n");
-}
-
-
-/*****************************************************************************
- * Function: cmd_simerr
- * Description: simulate an input error
- *
- * @return none
- *****************************************************************************/
-void cmd_simerr(int argc, char **argv)
-{
- if ( argc < 3 ) {
- printf("\rusage: simerr <input> <errflag_value>\n");
- printf("\rexample: simerr i_bdcond01 9\n");
- return;
- }
-
- ModbusRegisterMap[argv[1]].simulated = true;
- SimulateInputMap[argv[1]].errflag = (uint32_t)(atoi(argv[2]));
-}
-
-/*****************************************************************************
- * Function: cmd_simin
- * Description: simulat input
- *
- * @param argc-> number of args
- * @param argv-> input
- * @return none
- *****************************************************************************/
-void cmd_simin(int argc, char **argv)
-{
- if ( argc != 3 && argc != 7 ) {
- printf("\rusage: simin <input> <value> <<low> <hi> <up_step> <down_step>>\r\n");
- printf("\rexample: simin i_tra01 100 94 106 1 .25\r\n");
- printf("\rexample: simin i_bdcond01 2000 1990 2006 .25 1\r\n");
- printf("\rexample: simin i_bdcond01 1800\n");
- return;
- }
-
- //float value = atof( argv[2] );
- SimulateInputMap[argv[1]].start_value = atof(argv[2]);
-
- ModbusRegisterMap[argv[1]].simulated = true;
-
- if ( argc == 3 ) {
- SimulateInputMap[argv[1]].min = 0;
- SimulateInputMap[argv[1]].max = 0;
- SimulateInputMap[argv[1]].moving_up = false;
- return;
- }
- SimulateInputMap[argv[1]].min = atof(argv[3]);
- SimulateInputMap[argv[1]].max = atof(argv[4]);
- SimulateInputMap[argv[1]].up_step = atof(argv[5]);
- SimulateInputMap[argv[1]].down_step = atof(argv[6]);
- SimulateInputMap[argv[1]].moving_up = true;
-
-}
-
-/*****************************************************************************
- * Function: cmd_simall
- * Description: simulat multiple inputs
- *
- * @return none
- *****************************************************************************/
-void cmd_simall(int argc, char **argv)
-{
-
- if ( argc > 1 ) {
-
- printf("\r setting: simin i_tra01 100\n");
- ModbusRegisterMap["i_tra01"].simulated = true;
- SimulateInputMap["i_tra01"].start_value = 130;
- SimulateInputMap["i_tra01"].min = 0;
- SimulateInputMap["i_tra01"].max = 0;
- SimulateInputMap["i_tra01"].up_step = 0;
- SimulateInputMap["i_tra01"].down_step = 0;
- SimulateInputMap["i_tra01"].moving_up = true;
-
- printf("\r setting: i_tag01 100\n");
- ModbusRegisterMap["i_tag01"].simulated = true;
- SimulateInputMap["i_tag01"].start_value = 100;
- SimulateInputMap["i_tag01"].min = 0;
- SimulateInputMap["i_tag01"].max = 0;
- SimulateInputMap["i_tag01"].up_step = 0;
- SimulateInputMap["i_tag01"].down_step = 0;
- SimulateInputMap["i_tag01"].moving_up = true;
-
- printf("\r setting: i_bdcond01 1800\n");
- ModbusRegisterMap["i_bdcond01"].simulated = true;
- SimulateInputMap["i_bdcond01"].start_value = 1800;
- SimulateInputMap["i_bdcond01"].min = 0;
- SimulateInputMap["i_bdcond01"].max = 0;
- SimulateInputMap["i_bdcond01"].up_step = 0;
- SimulateInputMap["i_bdcond01"].down_step = 0;
- SimulateInputMap["i_bdcond01"].moving_up = true;
-
- printf("\r setting: i_cond_temp01 25\n");
- ModbusRegisterMap["i_cond_temp01"].simulated = true;
- SimulateInputMap["i_cond_temp01"].start_value = 25000.0;
- SimulateInputMap["i_cond_temp01"].min = 0;
- SimulateInputMap["i_cond_temp01"].max = 0;
- SimulateInputMap["i_cond_temp01"].up_step = 0;
- SimulateInputMap["i_cond_temp01"].down_step = 0;
- SimulateInputMap["i_cond_temp01"].moving_up = true;
-
- printf("\r setting: i_ph01 8\n");
- ModbusRegisterMap["i_ph01"].simulated = true;
- SimulateInputMap["i_ph01"].start_value = 8000;
- SimulateInputMap["i_ph01"].min = 0;
- SimulateInputMap["i_ph01"].max = 0;
- SimulateInputMap["i_ph01"].up_step = 0;
- SimulateInputMap["i_ph01"].down_step = 0;
- SimulateInputMap["i_ph01"].moving_up = true;
-
- printf("\r setting: i_ph_temp01 25\n");
- ModbusRegisterMap["i_ph_temp01"].simulated = true;
- SimulateInputMap["i_ph_temp01"].start_value = 25000.0;
- SimulateInputMap["i_ph_temp01"].min = 0;
- SimulateInputMap["i_ph_temp01"].max = 0;
- SimulateInputMap["i_ph_temp01"].up_step = 0;
- SimulateInputMap["i_ph_temp01"].down_step = 0;
- SimulateInputMap["i_ph_temp01"].moving_up = true;
-
- printf("\r setting: i_orp01 350\n");
- ModbusRegisterMap["i_orp01"].simulated = true;
- SimulateInputMap["i_orp01"].start_value = 350;
- SimulateInputMap["i_orp01"].min = 0;
- SimulateInputMap["i_orp01"].max = 0;
- SimulateInputMap["i_orp01"].up_step = 0;
- SimulateInputMap["i_orp01"].down_step = 0;
- SimulateInputMap["i_orp01"].moving_up = true;
-
-
- printf("\r setting: i_flowsw01 1\n");
- ModbusRegisterMap["i_flowsw01"].simulated = true;
- SimulateInputMap["i_flowsw01"].start_value = 1;
- SimulateInputMap["i_flowsw01"].min = 0;
- SimulateInputMap["i_flowsw01"].max = 0;
- SimulateInputMap["i_flowsw01"].up_step = 0;
- SimulateInputMap["i_flowsw01"].down_step = 0;
- SimulateInputMap["i_flowsw01"].moving_up = true;
-
- return;
- }
-
- printf("\rsetting: simin i_tra01 130 120 140 1 .25\r\n");
- printf("\rsetting: simin i_tag01 100 90 110 1 .25\r\n");
- printf("\rsetting: simin i_bdcond01 1800 1725 1875 1 5\r\n");
- printf("\rsetting: simin i_ph01 8.0 7.25 8.75 .0. .1\r\n");
- printf("\rsetting: simin i_orp01 350 300 400 5 1\r\n");
-
- ModbusRegisterMap["i_tra01"].simulated = true;
- SimulateInputMap["i_tra01"].start_value = 130;
- SimulateInputMap["i_tra01"].min = 120;
- SimulateInputMap["i_tra01"].max = 140;
- SimulateInputMap["i_tra01"].up_step = 1;
- SimulateInputMap["i_tra01"].down_step = .25;
-
- ModbusRegisterMap["i_tag01"].simulated = true;
- SimulateInputMap["i_tag01"].start_value = 100;
- SimulateInputMap["i_tag01"].min = 90;
- SimulateInputMap["i_tag01"].max = 110;
- SimulateInputMap["i_tag01"].up_step = 1;
- SimulateInputMap["i_tag01"].down_step = .25;
-
- ModbusRegisterMap["i_bdcond01"].simulated = true;
- SimulateInputMap["i_bdcond01"].start_value = 1800;
- SimulateInputMap["i_bdcond01"].min = 1725;
- SimulateInputMap["i_bdcond01"].max = 1875;
- SimulateInputMap["i_bdcond01"].up_step = 1;
- SimulateInputMap["i_bdcond01"].down_step = 5;
-
- ModbusRegisterMap["i_ph01"].simulated = true;
- SimulateInputMap["i_ph01"].start_value = 8000;
- SimulateInputMap["i_ph01"].min = 7250;
- SimulateInputMap["i_ph01"].max = 8750;
- SimulateInputMap["i_ph01"].up_step = 5;
- SimulateInputMap["i_ph01"].down_step = 10;
-
- ModbusRegisterMap["i_orp01"].simulated = true;
- SimulateInputMap["i_orp01"].start_value = 350;
- SimulateInputMap["i_orp01"].min = 300;
- SimulateInputMap["i_orp01"].max = 400;
- SimulateInputMap["i_orp01"].up_step = 5;
- SimulateInputMap["i_orp01"].down_step = 1;
-
-}
-
-void cmd_stack(int argc, char **argv)
-{
- vector<pair<string, Thread*> > taskList;
-
- const char *mapper[] = { "Inactive",
- "Ready",
- "Running",
- "WaitingDelay",
- "WaitingInterval",
- "WaitingOr",
- "WaitingAnd",
- "WaitingSempahore",
- "WaitingMailbox",
- "WaitingMutex"
- };
-
- //simply add your task to the list...
- taskList.push_back(make_pair((string)"AnalyticsLogger", GLOBAL_analyticsLogger_thread));
- taskList.push_back(make_pair((string)"ConfigHandler", GLOBAL_configHandler_thread));
- taskList.push_back(make_pair((string)"ControlTask", GLOBAL_controlTask_thread));
- taskList.push_back(make_pair((string)"ModbusMaster", GLOBAL_modbusMaster_thread));
- taskList.push_back(make_pair((string)"OutputTask", GLOBAL_outputTask_thread));
-
- for ( vector<pair<string, Thread*> >::iterator pos = taskList.begin();
- pos != taskList.end(); ++ pos) {
- printf("\r %-32s size/free/used/max = %5u/%5u/%5u/%5u\tpri=%u state=%-20s\n",
- pos->first.c_str(),
- pos->second->stack_size(),
- pos->second->free_stack(),
- pos->second->used_stack(),
- pos->second->max_stack(),
- pos->second->get_priority(),
- mapper[pos->second->get_state()]);
- }
-
- printf("\r\n");
-}
-
-void cmd_version(int argc, char **argv)
-{
- printf("\rversion: %u.%u.%u (%s)\n\r\n", MAJOR_VERSION_NUMBER,
- MINOR_VERSION_NUMBER,
- PATCH_VERSION_NUMBER,
- PROJECT_CODE_NAME);
-}
-
-void cmd_help(int argc, char **argv)
-{
- UNUSED(argc);
- UNUSED(argv);
-
- const command_table_t *tblPtr = cmdlist;
-
- while (tblPtr->command) {
- printf("\r%-32s:\t%s\n", tblPtr->command, tblPtr->description);
- tblPtr++;
- }
- printf("\r\n");
-}
-
-void cmd_v7(int argc, char **argv)
-{
- struct v7 *v7 = v7_create();
- v7_val_t exec_rc;
- const char *js_code = "print(\"Hello World!\")";
-
- v7_exec(v7, js_code, &exec_rc);
- printf("\r->exec_rc = %d\r\n", (int)exec_rc);
- v7_destroy(v7);
-}
-
-void cmd_json(int argc, char **argv)
-{
- const char buf[] = {
- "{"
- "\"tag1\":\"value1\" ,"
- "\"tag2\":\"value2\" "
- "}"
- };
-
- cJSON *root = cJSON_Parse(buf);
- printf("\rtag1 = %s\n", cJSON_GetObjectItem(root, "tag1")->valuestring);
- printf("\rtag2 = %s\n", cJSON_GetObjectItem(root, "tag2")->valuestring);
- cJSON_Delete(root);
-}
-
-/*****************************************************************************
- * Function: cmd_outputs
- * Description: display outputs
- ****************************************************************************/
-void cmd_outputs(int argc, char **argv)
-{
- UNUSED(argc);
- UNUSED(argv);
-
- DisplayOutputs();
-}
-
-void cmd_formatFS(int argc, char **argv)
-{
- mfs fs0(0xA0);
- console.printf("\n\r\n\r[mFS] Formatting EEPROM.....................");
- int bad_blocks = fs0.mkfs(true);
- console.printf(" found %d bad blocks\r\n", bad_blocks);
-}
-
-void cmd_writeFile(int argc, char **argv)
-{
- mfs fs0(0xA0);
-
- char filename[FILENAME_LENGTH];
- memset( filename, '\0', FILENAME_LENGTH );
- strncpy( filename, argv[1], FILENAME_LENGTH-1 );
-
- char *file_buf = (char*) malloc(MAX_FILE_SIZE);
- memset( file_buf, '\0', MAX_FILE_SIZE);
- snprintf(file_buf, MAX_FILE_SIZE, "1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890-1234567890");
- printf("%s\r\n", file_buf);
- if( GLOBAL_mdot->saveUserFile( filename, (void *)file_buf, MAX_FILE_SIZE ) != true ) {
- printf("Failed saveUserFile\r\n");
- }
- free(file_buf);
-
- return;
-}
-
-void cmd_readFile(int argc, char **argv)
-{
- char filename[FILENAME_LENGTH];
- memset( filename, '\0', FILENAME_LENGTH );
- strncpy( filename, argv[1], FILENAME_LENGTH-1 );
- int file_size = (atoi(argv[2]));
-
- char *file_buf = (char*) malloc(MAX_FILE_SIZE*2);
- memset( file_buf, '\0', MAX_FILE_SIZE*2);
- if( GLOBAL_mdot->readUserFile( filename, (void *)file_buf, file_size ) != true ) {
- printf("Failed readUserFile\r\n");
- }
- printf("%s\r\n", file_buf);
- free(file_buf);
-
- return;
-}
-
-void cmd_deleteFile(int argc, char **argv)
-{
- char filename[FILENAME_LENGTH];
- memset( filename, '\0', FILENAME_LENGTH );
- strncpy( filename, argv[1], FILENAME_LENGTH-1 );
-
- if( GLOBAL_mdot->deleteUserFile( filename ) != true ) {
- printf("Failed readUserFile\r\n");
- }
-
- return;
-}
-
-void cmd_lsFile( int argc, char ** argv )
-{
-
- std::vector<std::string>::iterator file;
- std::vector<std::string> file_list;
- file_list = GLOBAL_mdot->listUserFiles();
- for(file = file_list.begin(); file != file_list.end(); ++file) {
- printf("%s\r\n", file->c_str() );
- }
-
- mfs fs0(0xA0);
- // Get number of free blocks
- char iFreeBlocks = fs0.free();
- // Calculate amount of space used
- unsigned int iSpaceUsed = VOL_SIZE - (iFreeBlocks*BS);
- // Summary
- printf("\n\r%u/%u kB space used, %u blocks free\n\r\n\r", iSpaceUsed/1024, VOL_SIZE/1024, iFreeBlocks);
-}
-
-/**
- * Serial read function.
- */
-int func_read(char *buf, int cnt)
-{
- for (int i = 0; i < cnt; i++) {
- buf[i] = console.getc();
- }
-
- return 0;
-}
-
-/**
- * Serial write function.
- */
-int func_write(const char *buf, int cnt)
-{
- for (int i = 0; i < cnt; i++) {
- console.putc(buf[i]);
- }
- return 0;
-}
-
-/**
- * Callback function for ntshell module.
- */
-int func_cb_ntshell(const char *text)
-{
- return ntopt_parse(text, func_cb_ntopt);
-}
-
-/**
- * Callback function for ntopt module.
- */
-void func_cb_ntopt(int argc, char **argv)
-{
- if (argc == 0) {
- return;
- }
- int execnt = 0;
- const command_table_t *p = &cmdlist[0];
- while (p->command != NULL) {
- if (strcmp(argv[0], p->command) == 0) {
- p->func(argc, argv);
- execnt++;
- }
- p++;
- }
- if (execnt == 0) {
- printf("Command not found.\r\n");
- }
- wait_ms(250);
-}
-
-#if 0
-/*****************************************************************************
- * Function: cmd_createSequence
- * Description: create an administrative control
- *
- * @param argc-> number of args
- * @param argv-> control name, control type
- * @return none
- *****************************************************************************/
-void cmd_createSequence(int argc, char **argv)
-{
- char buf[MAX_FILE_SIZE*2];
-
- // let's crreate the sequence control file
- std::string filename = "control_seq_SLUG-DOSE.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"SLUG-DOSE\", "
- "\"startTrigger\": \"v_slugSchedule\", "
- "\"sequence\": "
- "["
- // START PRE-BLEED elements
- "{ \"startTrigger\":\"v_alwaysTrue\", "
- "\"actions\": "
- "["
- "{ \"action\": \"create\", \"id\": \"PRE-BLEED-SP\" }, "
- "{ \"action\": \"create\", \"id\": \"GUARD-TM\" }"
- "]," // end actions array
- "\"stopTrigger\": \"v_PreBleedDone\" },"
-
- // DELETE PRE-BLEED elements
- "{ \"startTrigger\":\"v_alwaysTrue\", "
- "\"actions\": "
- "["
- "{ \"action\": \"delete\", \"id\": \"PRE-BLEED-SP\" }, "
- "{ \"action\": \"delete\", \"id\": \"GUARD-TM\" }"
- "],"
- "\"stopTrigger\": \"v_alwaysTrue\" },"
-
- // SLUG-FEED elements
- "{ \"startTrigger\":\"v_alwaysTrue\", "
- "\"actions\": "
- "["
- "{ \"action\": \"create\", \"id\": \"SLUG-FEED-SP\" } "
- "],"
- "\"stopTrigger\": \"v_SlugFeedDone\" },"
-
- // DELETE SLUG-FEED elements
- "{ \"startTrigger\":\"v_alwaysTrue\", "
- "\"actions\": "
- "["
- "{ \"action\": \"delete\", \"id\": \"SLUG-FEED-SP\" } "
- "],"
- "\"stopTrigger\": \"v_alwaysTrue\" }"
- "] " // end sequence array
- "} ");
-
- printf("String Length=%d\r\n", 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());
- }
- // the pre-bleed setpoint control
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\": \"PRE-BLEED-SP\","
- "\"priority\": \"750\", "
- "\"input\": \"i_bdcond\" ,"
- "\"output\": \"o_rly01\" ,"
- "\"setpoint\": \"1750\", "
- "\"prodfact\": \"\", "
- "\"actingDir\": \"1\", "
- "\"tol\": \"5\" "
- "}");
- filename = "seq_SLUG-DOSE_PRE-BLEED-SP.json";
- 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());
- }
-
- // OUTPUT: Virtual Output - this is the START TRIGGER fro the control
- filename = "vregister_slugSchedule.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_slugSchedule\", "
- "\"value\": \"0\" "
- "}");
- 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());
- }
-
- // VIRTUAL REGISTER: always True
- filename = "vregister_alwaysTrue.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_alwaysTrue\", "
- "\"value\": \"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());
- }
-
- // VIRTUAL REGISTER: v_GuardTimer
- filename = "vregister_GuardTimer.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_GuardTimer\", "
- "\"value\": \"0\" "
- "}");
-
- 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());
- }
-
- // VIRTUAL REGISTER: v_PreBleedDone
- filename = "vreg_PreBleedDone.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_PreBleedDone\", "
- "\"value\": \"0\" "
- "}");
-
- 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());
- }
-
- // VIRTUAL REGISTER: v_SlugFeedDone
- filename = "vreg_SlugFeedDone.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_SlugFeedDone\", "
- "\"value\": \"0\" "
- "}");
-
- 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());
- }
-
-
- // CONTROL: GUARD-TIMER
- filename = "seq_SLUG-DOSE_GUARD-TM.json";
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\":\"GUARD-TM\","
- "\"output\":\"v_GuardTimer\","
- "\"priority\":\"750\","
- "\"day\":\"\","
- "\"startHour\":\"\","
- "\"startMin\":\"\","
- "\"startSec\":\"\","
- "\"week\":\"\","
- "\"duration\":\"60\" "
- "}");
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void*)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("failed to save %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
- // the pre-bleed setpoint control
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\": \"SLUG-FEED-SP\","
- "\"priority\": \"750\", "
- "\"input\": \"i_orp01\" ,"
- "\"output\": \"o_rly02\" ,"
- "\"setpoint\": \"400\", "
- "\"prodfact\": \"\", "
- "\"actingDir\": \"1\", "
- "\"tol\": \"5\" "
- "}");
- filename = "seq_SLUG-DOSE_SLUG-FEED-SP.json";
- 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());
- }
-}
-#endif
-
-// PRELOAD command, used to create all the pertinent inputs, outputs, and
-// controls needed to achieve a basic cooling water application
-void cmd_preload(int argc, char **argv)
-{
- UNUSED(argc);
- UNUSED(argv);
-
- char buf[MAX_FILE_SIZE];
- bool rc;
-
- // PRELOADER:
- // JavaScripts:
- // js_noFlowDelay.js // implement 10 minute on delay for flow switch
- // js_sum.js // sum two registers and store in register
- // js_diff.js // diff two registers and store in register
- // js_mul.js // mul two registers and store in register
- // js_div.js // div two registers and store in register
- // js_equ.js // equ set one register equal to another register
- //
- // Inputs:
- // input_i_bdcond.json // conductivity probe
- // input_i_bdcond_temp.json // conductivity probe : temperature
- // input_i_flowsw01.json // flow switch
- // input_i_orp01.json // ORP probe
- // input_i_ph01.json // pH probe
- // input_i_ph01_temp.json // pH probe : temperature
- // input_i_tag01.json // tag (flu)
- // input_i_tra01.json // Trasar
- //
- // Outputs:
- // output_o_rly01.json // relay-1
- // output_o_rly02.json // relay-2
- //
- // Standard Controls:
- // control_sp_i_bd01.json // blowdown
- // control_sp_i_tra01.json // Trasar
- //
- // Control Algorithms:
- // control_ca_eq1.json // == 1
- // control_ca_eq129.json // == 129
- //
- // Composite Controls:
- // control_comp_flow.json // flow override
- // control_comp_lockout.json // lockout blowdown
-
- std::string filename = "ble_device_name.json";
-
- snprintf(buf, sizeof(buf), "{\"id\":\"ICE-Ecolab\"}");
-
- 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());
- }
-
- filename = "vreg_const_1000.json";
-
- // Constant: 1000.0
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_Const_1000\", "
- "\"value\": \"1000.0\" }");
- 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());
- }
-
- Thread::wait(1000);
-
-#ifdef EXECUTE_SCRIPT
-
- filename = "vreg_noFlowDelaySig.json";
-
- // Virtual Register: v_noFlowDelaySig
- // Used to generate on delay timing for flow override.
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_noFlowDelaySig\", "
- "\"value\": \"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());
- }
-
- Thread::wait(1000);
-
- filename = "vreg_noFlowTimeStamp.json";
-
- // Virtual Register: v_noFlowTimeStamp
- // Used to generate on delay timing for flow override.
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_noFlowTimeStamp\", "
- "\"value\": \"0\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "js_noFlowDelay.js";
-
- // JavaScript: sum(a, b, c)
- // a = Flow Input Signal - this is the signal we are doing the on delay timing for
- // b = v_noFlowDelaySig - signal generated after No Flow condition exsits for 10 minutes
- // c = v_noFlowTimeStamp - mark of when the no flow signal first started
- //
- // "\"args\":[{\"arg\":\"i_flowsw01\"},{\"arg\":\"v_noFlowDelaySig\"},{\"arg\":\"v_noFlowTimeStamp\"}],"
- //
- snprintf(buf, sizeof(buf),
- "var noFlowDelay=function(a,b,c){"
- "f_state=getRegister(a);"
- "if(f_state==1){"
- // we have flow on the skid, reset timestamp to 0
- // and reset the "delayed" signal to indicate we have flow
- "setRegister(c,0);"
- "setRegister(b,f_state);"
- "}else{"
- // we don't have flow on the skid
- "curr_time=getTime();"
- "st_tstamp=getRegister(c);"
- "if(st_tstamp==0) {"
- // this is the 1st read of no-flow
- // mark the start of the delay timing
- "setRegister(c,curr_time);"
- "}else{"
- // determine how long we have been doing the delay timing.
- "diff_time=curr_time-st_tstamp;"
- //"print(' Delay='+diff_time+'\r');"
- "if(diff_time>=600){"
- // been doing the delay timing for at least 10 minutes
- // set the delayed signal to equal the actual flow switch
- "setRegister(b,f_state);"
- "}"
- "}"
- "}"
- "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());
- }
-
- Thread::wait(1000);
-
- filename = "js_sum.js";
-
- // JavaScript: sum(a, b, c)
- snprintf(buf, sizeof(buf),
- "var sum = function(a, b, c) {"
- "res = (getRegister(a) + getRegister(b));"
- "setRegister(c,res);"
- "return res;"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "js_diff.js";
-
- // JavaScript: diff(a, b, c)
- snprintf(buf, sizeof(buf),
- "var diff = function(a, b, c) {"
- "res = (getRegister(a) - getRegister(b));"
- "setRegister(c,res);"
- "return res;"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "js_div.js";
-
- // JavaScript: div(a, b, c)
- snprintf(buf, sizeof(buf),
- "var div = function(a, b, c) {"
- "res = (getRegister(a) / getRegister(b));"
- "setRegister(c,res);"
- "return res;"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "js_mul.js";
-
- // JavaScript: mul(a, b, c)
- snprintf(buf, sizeof(buf),
- "var mul = function(a, b, c) {"
- "res = (getRegister(a) * getRegister(b));"
- "setRegister(c,res);"
- "return res;"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "js_equ.js";
-
- // JavaScript: equ(a, b)
- snprintf(buf, sizeof(buf),
- "var equ = function(a, b) {"
- "res = getRegister(a);"
- "setRegister(b,res);"
- "return res;"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "exe_js_div_cond_temp01.js";
-
- // Execute JavaScript: DIV_COND_TEMP01
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"DIV_COND_TEMP01\","
- "\"script\":\"div\","
- "\"args\":[{\"arg\":\"i_cond_temp01\"},{\"arg\":\"v_Const_1000\"},{\"arg\":\"i_cond_temp01\"}]"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "exe_js_div_ph01.js";
-
- // Execute JavaScript: DIV_PH01
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"DIV_PH01\","
- "\"script\":\"div\","
- "\"args\":[{\"arg\":\"i_ph01\"},{\"arg\":\"v_Const_1000\"},{\"arg\":\"i_ph01\"}]"
- "};"
- );
- 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());
- }
-
- filename = "exe_js_prebleed.js";
- // Execute JavaScript: PREBLEED_DONE.json
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"PREBLEED_DONE\","
- "\"script\":\"prebleed_done\","
- // in: o_rly01
- // in: v_pbTimer
- // out" v_preBleedDone
- "\"args\":[{\"arg\":\"o_rly01\"},{\"arg\":\"v_pbTimer\"},{\"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());
- }
-
- Thread::wait(1000);
-
- /*
- filename = "exe_js_div_ph_temp01.js";
-
- // Execute JavaScript: DIV_PH_TEMP01
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"DIV_PH_TEMP01\","
- "\"script\":\"div\","
- "\"args\":[{\"arg\":\"i_ph_temp01\"},{\"arg\":\"v_Const_1000\"},{\"arg\":\"i_ph_temp01\"}]"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
-
- filename = "exe_js_no_flow_delay.js";
-
- // Execute JavaScript: NO_FLOW_DELAY
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"NO_FLOW_DELAY\","
- "\"script\":\"noFlowDelay\","
- "\"args\":[{\"arg\":\"i_flowsw01\"},{\"arg\":\"v_noFlowDelaySig\"},{\"arg\":\"v_noFlowTimeStamp\"}]"
- "};"
- );
- 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());
- }
-
- Thread::wait(1000);
- */
-#endif
-
- filename = "input_i_bdcond01.json";
-
- // INPUT: Conductivity
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"i_bdcond01\","
- "\"name\": \"Tower Conductivity\", "
- "\"units\": \"uS\","
- "\"min\": \"0\","
- "\"max\": \"6000\","
- "\"node\": \"21\","
- "\"reg\": \"18\","
- "\"rtype\": \"4\","
- "\"type\": \"1\","
- "\"size\": \"2\","
- "\"order\": \"2\","
- "\"fmt\": \"%%.2f\","
- "\"cmd\": \"\","
- "\"args\": [],"
- "\"rfreq\": \"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // INPUT: Conductivity Temperature
- filename = "input_i_cond_temp01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"i_cond_temp01\","
- "\"name\":\"Temp Conductivity\","
- "\"units\":\"C\","
- "\"min\":\"0\","
- "\"max\":\"80\","
- "\"node\":\"21\","
- "\"reg\":\"10\","
- "\"rtype\":\"4\","
- "\"type\":\"1\","
- "\"size\":\"2\","
- "\"order\":\"2\","
- "\"fmt\":\"%%.2f\","
- "\"cmd\":\"div\","
- "\"args\":[{\"arg\":\"i_cond_temp01\"},{\"arg\":\"v_Const_1000\"},{\"arg\":\"i_cond_temp01\"}],"
- "\"rfreq\":\"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // INPUT: Flow Switch
- filename = "input_i_flowsw01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"i_flowsw01\","
- "\"name\": \"Flow\","
- "\"units\": \"\","
- "\"min\": \"0\","
- "\"max\": \"1\","
- "\"node\": \"0\","
- "\"reg\": \"1\","
- "\"rtype\": \"0\","
- "\"type\": \"3\","
- "\"size\": \"2\","
- "\"order\": \"0\","
- "\"fmt\": \"%%d\","
- "\"cmd\": \"\","
- "\"args\": [],"
- "\"rfreq\": \"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // INPUT: ORP
- filename = "input_i_orp01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"i_orp01\","
- "\"name\": \"ORP\","
- "\"units\": \"mV\","
- "\"min\": \"0\","
- "\"max\": \"10\","
- "\"node\": \"23\","
- "\"reg\": \"14\","
- "\"rtype\": \"4\","
- "\"type\": \"1\","
- "\"size\": \"2\","
- "\"order\": \"2\","
- "\"fmt\": \"%%.2f\","
- "\"cmd\": \"\","
- "\"args\": [],"
- "\"rfreq\": \"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // INPUT: pH
- filename = "input_i_ph01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"i_ph01\","
- "\"name\":\"pH\","
- "\"units\":\"pH\","
- "\"min\":\"0\","
- "\"max\":\"10\","
- "\"node\":\"22\","
- "\"reg\":\"18\","
- "\"rtype\":\"4\","
- "\"type\":\"1\","
- "\"size\":\"2\","
- "\"order\":\"2\","
- "\"fmt\":\"%%.2f\","
- "\"cmd\":\"div\","
- "\"args\":[{\"arg\":\"i_ph01\"},{\"arg\":\"v_Const_1000\"},{\"arg\":\"i_ph01\"}],"
- "\"rfreq\":\"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // INPUT: pH Temperature
- filename = "input_i_ph01_temp.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"i_ph_temp01\","
- "\"name\":\"Temp pH\","
- "\"units\":\"C\","
- "\"min\":\"0\","
- "\"max\":\"10\","
- "\"node\":\"22\","
- "\"reg\":\"10\","
- "\"rtype\":\"4\","
- "\"type\":\"1\","
- "\"size\":\"2\","
- "\"order\":\"2\","
- "\"fmt\":\"%%.2f\","
- "\"cmd\":\"div\","
- "\"args\":[{\"arg\":\"i_ph_temp01\"},{\"arg\":\"v_Const_1000\"},{\"arg\":\"i_ph_temp01\"}],"
- "\"rfreq\":\"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // INPUT: Tag
- filename = "input_i_tag01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"i_tag01\","
- "\"name\": \"Tag\", "
- "\"units\": \"PPM\", "
- "\"min\": \"0\", "
- "\"max\": \"300\", "
- "\"node\": \"1\", "
- "\"reg\": \"11\", "
- "\"rtype\": \"4\", "
- "\"type\": \"0\", "
- "\"size\": \"2\", "
- "\"order\": \"2\", "
- "\"fmt\": \"%%.2f\", "
- "\"cmd\": \"\", "
- "\"args\": [],"
- "\"rfreq\": \"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // INPUT: Trasar
- filename = "input_i_tra01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"i_tra01\","
- "\"name\": \"Trasar\", "
- "\"units\": \"PPM\", "
- "\"min\": \"0\", "
- "\"max\": \"300\", "
- "\"node\": \"1\", "
- "\"reg\": \"9\", "
- "\"rtype\": \"4\", "
- "\"type\": \"0\", "
- "\"size\": \"2\", "
- "\"order\": \"2\", "
- "\"fmt\": \"%%.2f\", "
- "\"cmd\": \"\", "
- "\"args\": [],"
- "\"rfreq\": \"5\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // COMMAND: Divide by 1000
- filename = "cmd_div.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"%s\", "
- "\"Operand\":\"%s\", "
- "\"Operator\":\"%s\", "
- "\"Constant\":\"%s\" } ", "div", "", "/", "1000.0");
-
- 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());
- }
-
- Thread::wait(1000);
-
- // OUTPUT: Relay 01
- filename = "output_o_rly01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"o_rly01\", "
- "\"name\": \"Blowdown\", "
- "\"units\": \"\", "
- "\"min\": \"0\", "
- "\"max\": \"300\", "
- "\"node\": \"0\", "
- "\"reg\": \"1\", "
- "\"rtype\": \"1\", "
- "\"type\": \"0\", "
- "\"size\": \"2\", "
- "\"order\": \"2\", "
- "\"fmt\": \"%%.2f\", "
- "\"cmd\": \"\", "
- "\"args\": [], "
- "\"rfreq\": \"5\", "
- "\"toperiod\": \"0\", "
- "\"scalelo\": \"0\", "
- "\"scalehi\": \"100\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // OUTPUT: Relay 02
- filename = "output_o_rly02.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"o_rly02\", "
- "\"name\": \"3DTS86\", "
- "\"units\": \"\", "
- "\"min\": \"0\", "
- "\"max\": \"300\", "
- "\"node\": \"0\", "
- "\"reg\": \"2\", "
- "\"rtype\": \"1\", "
- "\"type\": \"0\", "
- "\"size\": \"2\", "
- "\"order\": \"2\", "
- "\"fmt\": \"%%.2f\", "
- "\"cmd\": \"\", "
- "\"args\": [], "
- "\"rfreq\": \"5\", "
- "\"toperiod\": \"0\", "
- "\"scalelo\": \"0\", "
- "\"scalehi\": \"100\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // SETPOINT: Blowdown
- filename = "control_sp_BLOWDOWN_01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"BLOWDOWN_01\", "
- "\"priority\": \"800\", "
- "\"input\": \"i_bdcond01\", "
- "\"output\": \"o_rly01\", "
- "\"setpoint\": \"1800\", "
- "\"prodfact\": \"\", "
- "\"actingDir\": \"1\", "
- "\"tol\": \"30\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // SETPOINT: Trasar
- filename = "control_sp_INH_TRA_01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"INH_TRA_01\", "
- "\"priority\": \"800\", "
- "\"input\": \"i_tra01\", "
- "\"output\": \"o_rly02\", "
- "\"setpoint\": \"130\", "
- "\"prodfact\": \"100\", "
- "\"actingDir\": \"0\", "
- "\"tol\": \"4\" }");
- 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());
- }
-
- Thread::wait(1000);
-
- // ALGORITHM == 0
- filename = "control_ca_EQUAL_TO_0.json";
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\": \"EQUAL_TO_0\", "
- "\"opr\": \"0\", "
- "\"op\": \"==\", "
- "\"true\": \"responseA\", "
- "\"false\": \"nothing\" "
- "}");
-
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to save user file %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
- Thread::wait(1000);
-
- // ALGORITHM == 129
- filename = "control_ca_RELAY_ON.json";
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\": \"RELAY_ON\", "
- "\"opr\": \"1\", "
- "\"op\": \"&\", "
- "\"true\": \"responseA\", "
- "\"false\": \"nothing\" "
- "}");
-
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to save user file %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
- Thread::wait(1000);
-
- // FLOW
- filename = "control_comp_FLOW.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"FLOW\", "
- "\"tag\": \"i_flowsw01\", "
- "\"ca\": \"EQUAL_TO_0\", "
- "\"priority\": \"300\", "
- "\"entries\": \"2\", "
- "\"outputs\": [ "
- "{"
- "\"tag\": \"o_rly01\", "
- "\"responseA\": \"fixed off\" "
- "},"
- "{"
- "\"tag\": \"o_rly02\", "
- "\"responseA\": \"fixed off\" "
- "}"
- "]"
- "}"
- );
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to save user file %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
- Thread::wait(1000);
-
- // LOCKOUT
- filename = "control_comp_LOCKOUT_BD.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"LOCKOUT_BD\", "
- "\"tag\": \"o_rly01\", "
- "\"ca\": \"RELAY_ON\", "
- "\"priority\": \"400\", "
- "\"entries\": \"1\", "
- "\"outputs\": [ "
- "{"
- "\"tag\": \"o_rly02\", "
- "\"responseA\": \"fixed off\" "
- "}"
- "]"
- "}"
- );
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to save user file %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
- filename = "control_fs_BLOWDOWN_FS.json";
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\": \"BLOWDOWN_FS\", "
- "\"input\": \"i_bdcond01\", "
- "\"output\": \"o_rly01\", "
- "\"priority\":\"600\", "
- "\"lfsValue\":\"700\", "
- "\"lfsDutyCycle\":\"0\", "
- "\"lfsInterval\":\"1\", "
- "\"hfsValue\":\"2700\", "
- "\"hfsDutyCycle\":\"50\", "
- "\"hfsInterval\":\"1\" "
- "}");
-
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to create %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
-
- Thread::wait(1000);
-
- filename = "control_fs_TRASAR_FS.json";
- snprintf(buf, sizeof(buf),
- " {"
- "\"id\": \"TRASAR_FS\", "
- "\"input\": \"i_tra01\", "
- "\"output\": \"o_rly02\", "
- "\"priority\":\"600\", "
- "\"lfsValue\":\"70\", "
- "\"lfsDutyCycle\":\"50\", " // ON a minute, OFF a minute...
- "\"lfsInterval\":\"2\", "
- "\"hfsValue\":\"200\", "
- "\"hfsDutyCycle\":\"0\", "
- "\"hfsInterval\":\"2\" "
- "}");
-
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to create %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
- // HOLDING REGISTER: Conductivity Calibration
- filename = "hold_h_CondCmd_21.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"%s\", "
- "\"node\":\"%s\", "
- "\"sreg\":\"%s\", "
- "\"nreg\":\"%s\", "
- "\"order\":\"%s\" } ", "h_CondCmd_21", "21", "0", "3", "2");
-
- 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());
- }
-
- Thread::wait(1000);
-
- // HOLDING REGISTER: pH Calibration
- filename = "hold_h_phCmd_22.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\":\"%s\", "
- "\"node\":\"%s\", "
- "\"sreg\":\"%s\", "
- "\"nreg\":\"%s\", "
- "\"order\":\"%s\" } ", "h_phCmd_22", "22", "0", "3", "2");
-
- 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());
- }
-
- Thread::wait(1000);
-
-
- printf("\r\nIssue \"reset\" command to invoke changes\r\n\r\n\r\n");
-
-}
-
-/*****************************************************************************
- * Function: cmd_cif
- * Description: create input file
- *
- * @param argc-> number of args
- * @param argv-> filename
- * @return none
- *****************************************************************************/
-void cmd_cif(int argc, char **argv)
-{
- if ( argc != 6 ) {
- printf("\rusage: cif <fname> <input> <name> <node> <reg>\n");
- printf("\rexample: cif input_i_tra01.json i_tra01 Trasar 5 2\n");
- return;
- }
-
- char data_buf[MAX_FILE_SIZE];
- snprintf(data_buf, sizeof(data_buf),
- "{ "
- "\"id\": \"%s\", "
- "\"name\": \"%s\", "
- "\"units\": \"PPM\", "
- "\"min\": \"0\", "
- "\"max\": \"300\", "
- "\"node\": \"%s\", "
- "\"reg\": \"%s\", "
- "\"rtype\": \"1\", "
- "\"type\": \"0\", "
- "\"size\": \"2\", "
- "\"order\": \"2\", "
- "\"rfreq\": \"5\", "
- "\"cmd\": \"\","
- "\"args\": [],"
- "\"fmt\": \"%%.2f\" } ", argv[2], argv[3], argv[4], argv[5]);
-
- bool status = GLOBAL_mdot->saveUserFile(argv[1], (void *)data_buf, MAX_FILE_SIZE);
- if( status != true ) {
- printf("(%d)save file failed, status=%d", __LINE__, status);
- }
-
- printf("Sending Mail To ModbusMasterMailBox, filename=%s", argv[1]);
- ModbusMasterReq_t *mail = ModbusMasterMailBox.alloc();
- mail->action = ACTION_READ_FILE;
- strncpy( mail->msg, argv[1], (sizeof(mail->msg)-1));
- ModbusMasterMailBox.put(mail);
-}
-
-/*****************************************************************************
- * Function: cmd_destroy
- * Description: destroy a control
- *
- * @param argc-> number of arguments
- * @param argv-> control name, control type
- * @return none
- *****************************************************************************/
-void cmd_destroy(int argc, char **argv)
-{
- if ( argc != 3 ) {
- printf("\r\nusage: destroy-control [controlName] [controlType]\n");
- printf("\rcontrolType-> 0=timer, 1=PID, 2=setpoint, 3=composite, 4=manual, 5=sequence, 6=failsafe, 7=sensor error\r\n");
- return;
- }
-
- // send a message to the configuration handler to destroy the control
- ConfigMessage_t *msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_DESTROY;
- msg->control = (Control_t) atoi(argv[2]);
- strncpy(msg->controlFile, argv[1], sizeof(msg->controlFile)-1);
-
- printf("%s: Sending a destroy request for control %s\r\n",
- __func__, msg->controlFile);
-
- ConfigHandlerMailBox.put(msg);
- printf("\r\n");
- return;
-}
-
-/*****************************************************************************
- * Function: cmd_cof
- * Description: create output file
- *
- * @param argc-> number of args
- * @param argv-> filename
- * @return none
- *****************************************************************************/
-void cmd_cof(int argc, char **argv)
-{
- // OUTPUT: Relay 01
- char buf[MAX_FILE_SIZE];
- std::string filename = "output_o_rly01.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"o_rly01\", "
- "\"name\": \"Blowdown\", "
- "\"units\": \"\", "
- "\"min\": \"0\", "
- "\"max\": \"300\", "
- "\"node\": \"0\", "
- "\"reg\": \"1\", "
- "\"rtype\": \"1\", "
- "\"type\": \"0\", "
- "\"size\": \"2\", "
- "\"order\": \"2\", "
- "\"fmt\": \"%%.2f\", "
- "\"cmd\": \"\", "
- "\"rfreq\": \"5\", "
- "\"toperiod\": \"0\", "
- "\"scalelo\": \"0\", "
- "\"scalehi\": \"100\" }");
- bool 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());
- }
-
- Thread::wait(1000);
-
- // OUTPUT: Relay 02
- filename = "output_o_rly02.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"o_rly02\", "
- "\"name\": \"3DTS86\", "
- "\"units\": \"\", "
- "\"min\": \"0\", "
- "\"max\": \"300\", "
- "\"node\": \"0\", "
- "\"reg\": \"2\", "
- "\"rtype\": \"1\", "
- "\"type\": \"0\", "
- "\"size\": \"2\", "
- "\"order\": \"2\", "
- "\"fmt\": \"%%.2f\", "
- "\"cmd\": \"\", "
- "\"rfreq\": \"5\", "
- "\"toperiod\": \"0\", "
- "\"scalelo\": \"0\", "
- "\"scalehi\": \"100\" }");
- 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());
- }
-}
-
-/*****************************************************************************
- * Function: cmd_modmap
- * Description: dump modbus register map
- *****************************************************************************/
-void cmd_modmap(int argc, char **argv)
-{
-
- UNUSED(argc);
- UNUSED(argv);
- ModbusValue value;
-
- std::map<std::string, ModbusRegister>::iterator iter;
- for (iter = ModbusRegisterMap.begin(); iter != ModbusRegisterMap.end(); ++iter) {
- ModbusMasterReadRegister( iter->first, &value );
- printf("tag=%-24s node=%-4d reg=%-4d rtype=%-2d size=%-2d order=%-2d value=%-12.2f errflag=%-2d argc=%-2d arg[0]=%-24s\r\n",
- iter->first.c_str(), iter->second.node, iter->second.reg,
- iter->second.rtype, iter->second.size, iter->second.order,
- value.value, value.errflag, iter->second.argc, iter->second.argv[0].c_str() );
- }
-}
-
-void cmd_createVreg(int argc, char **argv)
-{
- if ( argc != 4 ) {
- printf("\rusage: create-vreg <filename> <vregId> <value>\n");
- printf("\rusage: create-vreg vreg_alwaysTrue.json v_alwaysTrue 1\n");
- return;
- }
-
- char buf[MAX_FILE_SIZE];
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"%s\", "
- "\"value\": \"%s\" }", argv[2], argv[3]);
- bool rc = GLOBAL_mdot->saveUserFile(argv[1], (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to save %s\n", argv[1]);
- return;
- } else {
- printf("\r...generated %s\n", argv[1]);
- }
-}
-
-//
-void cmd_createCAlg(int argc, char **argv)
-{
- if ( argc != 1 ) {
- printf("\rusage: create-ca control_ca_equal.json");
- return;
- }
-
- char buf[MAX_FILE_SIZE];
- std::string filename = "control_ca_eq1.json";
- snprintf(buf, sizeof(buf),
- " {"
- "\"id\": \"EQUAL_TO_1\", "
- "\"opr\": \"1\", "
- "\"op\": \"==\", "
- "\"true\": \"responseA\", "
- "\"false\": \"nothing\" "
- "}");
-
- bool rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to save user file %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
-// send a message to the configuration handler to create the control
- ConfigMessage_t *msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_ALGORITHM;
- strncpy(msg->controlFile, filename.c_str(), sizeof(msg->controlFile)-1);
-
- ConfigHandlerMailBox.put(msg);
-
- Thread::wait(2000);
-
-// == 129
- filename = "control_ca_eq129.json";
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\": \"EQUAL_TO_1\", "
- "\"opr\": \"1\", "
- "\"op\": \"==\", "
- "\"true\": \"responseA\", "
- "\"false\": \"nothing\" "
- "}");
-
- rc = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( rc != true ) {
- printf("\rFailed to save user file %s\n", filename.c_str());
- return;
- } else {
- printf("\r...generated %s\n", filename.c_str());
- }
-
- // send a message to the configuration handler to create the control
- msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_ALGORITHM;
- strncpy(msg->controlFile, "control_ca_greq1.json", sizeof(msg->controlFile)-1);
-
- ConfigHandlerMailBox.put(msg);
-}
-
-/*****************************************************************************
- * Function: cmd_createManual
- * Description: create a manual control
- *
- * @param argc-> number of args
- * @param argv-> filename
- * @return none
- *****************************************************************************/
-void cmd_createManual(int argc, char **argv)
-{
- std::string relayState;
- if ( argc != 6 ) {
- printf("\rusage: create-mn <filename> <id> <output> <state> <duration>\n");
- printf("\rexample: create-mn control_mn_rly01.json man-1 o_rly1 on 30\r\n");
- printf("\r<duration> specified in seconds, 0 for contiuous\n");
- return;
- }
-
- string state(argv[4]);
-
- if ( state == "on" ) {
- relayState = "1";
- } else if ( state == "off" ) {
- relayState = "0";
- } else {
- printf("\r<state> must be on or off\r\n");
- return;
- }
-
- unsigned int duration = atoi(argv[5]);
- unsigned int type;
- if ( duration == 0 ) {
- type = MANUAL_CONTROL_TYPE_CONTINUOUS;
- } else {
- type = MANUAL_CONTROL_TYPE_TIMED;
- }
-
- char data_buf[MAX_FILE_SIZE];
- snprintf(data_buf, sizeof(data_buf),
- "{ "
- "\"id\": \"%s\", "
- "\"output\": \"%s\", "
- "\"type\": \"%d\", "
- "\"priority\": \"100\", "
- "\"duration\": \"%d\", "
- "\"setpoint\": \"0\", "
- "\"state\": \"%s\", "
- "\"percent\": \"100\" }", argv[2], argv[3], type, duration, relayState.c_str()
- );
-
- bool status = GLOBAL_mdot->saveUserFile(argv[1], (void *)data_buf, MAX_FILE_SIZE);
- if( status != true ) {
- printf("(%d)save file failed, status=%d", __LINE__, status);
- return;
- }
-
- // send a message to the configuration handler to create the control
- ConfigMessage_t *msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_MANUAL;
- strncpy(msg->controlFile, argv[1], sizeof(msg->controlFile)-1);
-
- printf("%s: Sending a create request for control %s type = %u\r\n",
- __func__, msg->controlFile, msg->control);
-
- ConfigHandlerMailBox.put(msg);
- printf("\r\n");
- return;
-}
-
-/*****************************************************************************
- * Function: cmd_createSError
- * Description: create a sensoe error control
- *
- * @param argc-> number of args
- * @param argv-> filename
- * @return none
- *****************************************************************************/
-void cmd_createSError(int argc, char **argv)
-{
- if ( argc != 7 ) {
- printf("\rusage: create-se <filename> <id> <input> <output> <duty> <interval>\n");
- printf("\rexample: create-se control_se_bdcond.json se-1 i_bdcond o_rly01 50 10\n");
- return;
- }
-
- char data_buf[MAX_FILE_SIZE];
- snprintf(data_buf, sizeof(data_buf),
- "{ "
- "\"id\": \"%s\", "
- "\"input\": \"%s\", "
- "\"output\": \"%s\", "
- "\"priority\": \"459\", "
- "\"dutyCycle\": \"%d\", "
- "\"interval\": \"%d\" }",
- argv[2], argv[3], argv[4], atoi(argv[5]), atoi(argv[6])
- );
-
- bool status = GLOBAL_mdot->saveUserFile(argv[1], (void *)data_buf, MAX_FILE_SIZE);
- if( status != true ) {
- printf("(%d)save file failed, status=%d", __LINE__, status);
- return;
- }
-
- // send a message to the configuration handler to create the control
- ConfigMessage_t *msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_SENSOR_ERROR;
- strncpy(msg->controlFile, argv[1], sizeof(msg->controlFile)-1);
-
- printf("%s: Sending a create request for sensor error control %s type = %u\r\n",
- __func__, msg->controlFile, msg->control);
-
- ConfigHandlerMailBox.put(msg);
- printf("\r\n");
- return;
-}
-
-/*****************************************************************************
- * Function: cmd_createSetpoint
- * Description: create control file
- *
- * @param argc-> number of args
- * @param argv-> filename
- * @return none
- *****************************************************************************/
-void cmd_createSetpoint(int argc, char **argv)
-{
- if ( argc != 8 ) {
- printf("\rusage: create-sp <filename> <id> <input> <output> <sp> <dir> <tol>\n");
- printf("\rexample: create-sp control_sp_1.json bd i_cond o_rly1 2000 1 15\n");
- return;
- }
-
- if ( strncmp(argv[1], CONTROL_SP_STR, strlen(CONTROL_SP_STR)) != 0 ) {
- printf("\rFilename must be prefixed with control_sp_*\n");
- return;
- }
-
- char data_buf[MAX_FILE_SIZE];
- snprintf(data_buf, sizeof(data_buf),
- "{ "
- "\"id\": \"%s\", "
- "\"priority\": \"800\","
- "\"input\": \"%s\", "
- "\"output\": \"%s\", "
- "\"setpoint\": \"%s\","
- "\"prodfact\": \"100\","
- "\"actingDir\": \"%s\", "
- "\"halert\": \"115\","
- "\"lalert\": \"85\", "
- "\"hfs\": \"130\","
- "\"lfs\": \"70\", "
- "\"tol\": \"%s\" }", argv[2], argv[3], argv[4], argv[5], argv[6], argv[7]);
-
- bool status = GLOBAL_mdot->saveUserFile(argv[1], (void *)data_buf, MAX_FILE_SIZE);
- if( status != true ) {
- printf("(%d)save file failed, status=%d", __LINE__, status);
- return;
- }
-
- // send a message to the configuration handler to create the control
- ConfigMessage_t *msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_SETPOINT;
- strncpy(msg->controlFile, argv[1], sizeof(msg->controlFile)-1);
-
- printf("%s: Sending a create request for control %s type = %u\r\n",
- __func__, msg->controlFile, msg->control);
-
- ConfigHandlerMailBox.put(msg);
- printf("\r\n");
- return;
-}
-
-/*****************************************************************************
- * Function: cmd_createTimer
- * Description: create control file
- *
- * @param argc-> number of args
- * @param argv-> filename
- * @return none
- *****************************************************************************/
-void cmd_createTimer(int argc, char **argv)
-{
- if ( argc != 10 ) {
- printf("\rusage: create-tm <filename> <id> <output> <day> <hh> <mm> <ss> <duration> <week>\n");
- printf("\rexample: create-tm control_tm_rly01.json o_rly01 wed 12 00 00 60\n");
- printf("\r <day> is sun, mon, tue, wed, thu, fri, sat\n");
- printf("\r <duration> is in seconds\n");
- printf("\r <week> is every, first, second, third, fourth, last, everyother\n\r\n");
- return;
- }
-
- if ( strncmp(argv[1], CONTROL_TM_STR, strlen(CONTROL_TM_STR)) != 0 ) {
- printf("\rFilename must be prefixed with control_tm_*\n");
- return;
- }
-
- char data_buf[MAX_FILE_SIZE];
- snprintf(data_buf, sizeof(data_buf),
- "{ "
- "\"id\": \"%s\", "
- "\"output\": \"%s\", "
- "\"priority\": \"750\", "
- "\"day\": \"%s\", "
- "\"startHour\": \"%s\", "
- "\"startMin\": \"%s\", "
- "\"startSec\": \"%s\", "
- "\"duration\": \"%s\", "
- "\"week\": \"%s\" } ",
- argv[2], argv[3], argv[4], argv[5], argv[6],
- argv[7], argv[8], argv[9]);
-
-
- bool status = GLOBAL_mdot->saveUserFile(argv[1], (void *)data_buf, MAX_FILE_SIZE);
- if( status != true ) {
- printf("(%d)save file failed, status=%d", __LINE__, status);
- return;
- }
-
- // send a message to the configuration handler to create the control
- ConfigMessage_t *msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_TIMER;
- strncpy(msg->controlFile, argv[1], sizeof(msg->controlFile)-1);
-
- printf("%s: Sending a create request for control %s type = %u\r\n",
- __func__, msg->controlFile, msg->control);
-
- ConfigHandlerMailBox.put(msg);
- printf("\r\n");
- return;
-}
-
-void cmd_createFailsafe(int argc, char **argv)
-{
- char buf[MAX_FILE_SIZE];
- bool status;
-
- std::string filename = "control_fs_rly01.json";
- snprintf(buf, sizeof(buf),
- "{"
- "\"id\": \"BLOWDOWN-FS\", "
- "\"input\": \"i_bdcond01\", "
- "\"output\": \"o_rly01\", "
- "\"priority\":\"700\", "
- "\"lfsValue\":\"700\", "
- "\"lfsDutyCycle\":\"0\", "
- "\"lfsInterval\":\"1\", "
- "\"hfsValue\":\"2700\", "
- "\"hfsDutyCycle\":\"50\", "
- "\"hfsInterval\":\"1\" "
- "}");
-
- status = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( status != true ) {
- printf("\rFailed to create %s\n", filename.c_str());
- return;
- } else {
- printf("\r created %s\n", filename.c_str());
- }
-
- ConfigMessage_t *msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_FAILSAFE;
- strncpy(msg->controlFile, filename.c_str(), sizeof(msg->controlFile)-1);
-
- printf("%s: Sending a create request for control %s type = %u\r\n",
- __func__, msg->controlFile, msg->control);
-
- ConfigHandlerMailBox.put(msg);
- Thread::wait(1000);
-
- filename = "control_fs_rly02.json";
- snprintf(buf, sizeof(buf),
- " {"
- "\"id\": \"TRASAR-FS\", "
- "\"input\": \"i_tra01\", "
- "\"output\": \"o_rly02\", "
- "\"priority\":\"700\", "
- "\"lfsValue\":\"70\", "
- "\"lfsDutyCycle\":\"20\", "
- "\"lfsInterval\":\"15\", "
- "\"hfsValue\":\"200\", "
- "\"hfsDutyCycle\":\"0\", "
- "\"hfsInterval\":\"15\" "
- "}");
-
- status = GLOBAL_mdot->saveUserFile(filename.c_str(), (void *)buf, MAX_FILE_SIZE);
- if ( status != true ) {
- printf("\rFailed to create %s\n", filename.c_str());
- return;
- } else {
- printf("\r created %s\n", filename.c_str());
- }
-
- msg = ConfigHandlerMailBox.alloc();
- memset(msg, 0, sizeof(ConfigMessage_t));
- msg->action = ACTION_CREATE;
- msg->control = CONTROL_FAILSAFE;
- strncpy(msg->controlFile, filename.c_str(), sizeof(msg->controlFile)-1);
-
- printf("%s: Sending a create request for control %s type = %u\r\n",
- __func__, msg->controlFile, msg->control);
-
- ConfigHandlerMailBox.put(msg);
-}
-
-/*****************************************************************************
- * Function: cmd_logLevel
- * Description: get or set the current log-level
- *
- * @param argc (not used)
- * @param argv (not used)
- * @return none
- *****************************************************************************/
-void cmd_logLevel(int argc, char **argv)
-{
- uint8_t logLevel = 0;
-
- const char *mapper[] = { "NONE",
- "FATAL",
- "ERROR",
- "WARNING",
- "INFO",
- "DEBUG",
- "TRACE"
- };
-
- if ( argc == 1 ) {
- printf("\r current log-level set to %s\r\n",
- mapper[ICELog::getLogLevel()]);
- goto usage;
- }
-
- if ( argc != 2 ) {
-usage:
- printf("\rusage: log-level [0-6]\n");
- printf("\r 0 = NONE\n");
- printf("\r 1 = FATAL\n");
- printf("\r 2 = ERROR\n");
- printf("\r 3 = WARNING\n");
- printf("\r 4 = INFO\n");
- printf("\r 5 = DEBUG\n");
- printf("\r 6 = TRACE\r\n");
- return;
- }
-
- logLevel = atoi(argv[1]);
- if ( logLevel > 6 )
- goto usage;
-
- // reassign the log level
- printf("...setting log-level to %s\r\n", mapper[logLevel]);
- ICELog::setLogLevel(logLevel);
- printf("\r\n");
-}
-
-
-/*****************************************************************************
- * Function: cmd_vregmap
- * Description: show virtual register map
- *
- * @param argc-> number of args
- * @param argv-> filename
- * @return none
- *****************************************************************************/
-extern std::map<std::string,RegisterValue> RegisterValueMap;
-
-void cmd_vregmap(int argc, char **argv)
-{
- UNUSED(argc);
- UNUSED(argv);
-
- std::map<std::string, RegisterValue>::iterator iter;
- for (iter = RegisterValueMap.begin(); iter != RegisterValueMap.end(); ++iter) {
- printf("id=%s, value=%.4f\r\n", iter->first.c_str(), iter->second.float_value );
- }
-}
-
-void cmd_testPreBleed(int argc, char **argv)
-{
- char buf[MAX_FILE_SIZE];
-
- // OUTPUT (virtual): variable set to TRUE when pre-bleed is done
- std::string filename = "vreg_preBleedDone.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_preBleedDone\", "
- "\"value\": \"0\" "
- "}");
- bool 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());
- }
-
- // OUTPUT (virtual): variable is set to TRUE while pre-bleed time is running via timer control
- filename = "vreg_pbTimer.json";
- snprintf(buf, sizeof(buf),
- "{ "
- "\"id\": \"v_pbTimer\", "
- "\"value\": \"0\" "
- "}");
- 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 Executor:
- // IN: o_rly01
- // IN: v_pbTimer
- // 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_pbTimer\"},{\"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());
- }
-}
-
-/*****************************************************************************
- * Function: cmd_setTime
- * Description: set real-time clock
- *
- * @param argc-> number of args
- * @param argv-> input
- * @return none
- *****************************************************************************/
-
-
-void cmd_setTime(int argc, char **argv)
-{
- if ( argc != 7 ) {
- printf("\rusage: set-time <yyyy> <mm> <dd> <hh> <mm> <ss>\n");
- printf("\rexample: set-time 2017 1 24 9 0 0\r\n");
- return;
- }
-
- int isc = atoi( argv[6] ); // sec
- int imn = atoi( argv[5] ); // min
- int ihr = atoi( argv[4] ); // hour
- int idy = atoi( argv[3] ); // idy
- int imo = atoi( argv[2] ); // imo
- int iyr = atoi( argv[1] ); // year
-
-// printf( "\r\n%s:%d: sec(0x%x) min(0x%x) hour(0x%x) day(0x%x) mon(0x%x) year(0x%x)\r\n", __func__, __LINE__, isc, imn, ihr, idy, imo, iyr );
-
- rtc_set_time(iyr, imo, idy, ihr, imn, isc);
-}
-void getTime()
-{
- char time_string[80];
- struct tm rtc_time;
- struct tm * ts;
- time_t curr_sec;
- int year = 0;
-
- rtc_get_time(&year, &rtc_time.tm_mon, &rtc_time.tm_mday, &rtc_time.tm_hour, &rtc_time.tm_min, &rtc_time.tm_sec);
-// printf( "\r\n%s:%d:sec(0x%x) min(0x%x) hour(0x%x) day(0x%x) mon(0x%x) year(0x%x)\r\n", __func__, __LINE__, rtc_time.tm_sec, rtc_time.tm_min, rtc_time.tm_hour, rtc_time.tm_mday, rtc_time.tm_mon, year );
-
- rtc_time.tm_mon = rtc_time.tm_mon - 1;
- rtc_time.tm_year = year - 1900;
- curr_sec = mktime( &rtc_time );
-
- ts = localtime(&curr_sec);
- strftime(time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ts);
-
- printf("%s\r\n", time_string);
-}
-
-void cmd_getTime(int argc, char **argv)
-{
- getTime();
-}
-