| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // Copyright (c) 2000-2019 Ericsson Telecom AB // |
| // // |
| // All rights reserved. This program and the accompanying materials // |
| // are made available under the terms of the Eclipse Public License v2.0 // |
| // which accompanies this distribution, and is available at // |
| // https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Module: EPTF_CLL_StatManager_Functions |
| // |
| // Purpose: |
| // This module contains function definitions for TTCN-3 EPTF StatManager |
| // implementation. |
| // |
| // Module Parameters: |
| // |
| // |
| // Module depends on: |
| // <EPTF_CLL_DataSource_Definitions> |
| // <EPTF_CLL_DataSource_Functions> |
| // <EPTF_CLL_DataSourceClient_Functions> |
| // <EPTF_CLL_StatManager_Definitions> |
| // <EPTF_CLL_StatMeasure_Definitions> |
| // <EPTF_CLL_StatMeasure_Functions> |
| // <EPTF_CLL_Logging_Definitions> |
| // <EPTF_CLL_Logging_Functions> |
| // <EPTF_CLL_Base_Functions> |
| // <EPTF_CLL_HashMapStr2Int_Functions> |
| // <EPTF_CLL_Variable_Definitions> |
| // <EPTF_CLL_Variable_Functions> |
| // |
| // Public functions: |
| // <f_EPTF_StatManager_init_CT> |
| // |
| // Current Owner: |
| // Balazs Lugossy (EBALLUG) |
| // |
| // Last Review Date: |
| // |
| // |
| // Detailed Comments: |
| // This module contains function definitions for TTCN-3 EPTF StatManager |
| // implementation. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| module EPTF_CLL_StatManager_Functions { |
| |
| import from EPTF_CLL_DataSource_Definitions all; |
| import from EPTF_CLL_DataSource_Functions all; |
| import from EPTF_CLL_DataSourceClient_Functions all; |
| import from EPTF_CLL_StatManager_Definitions all; |
| import from EPTF_CLL_StatMeasure_Definitions all; |
| import from EPTF_CLL_StatMeasure_Functions all; |
| import from EPTF_CLL_Logging_Definitions all; |
| import from EPTF_CLL_Logging_Functions all; |
| import from EPTF_CLL_Base_Functions all; |
| import from EPTF_CLL_HashMapStr2Int_Functions all; |
| import from EPTF_CLL_Variable_Definitions all; |
| import from EPTF_CLL_Variable_Functions all; |
| import from EPTF_CLL_Common_Definitions all; |
| |
| group ModulePars{ |
| modulepar boolean tsp_debug_EPTF_StatManager_Functions := false; |
| }//ModulePars |
| |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Function: f_EPTF_StatManager_init_CT |
| // |
| // Purpose: |
| // Initializes the EPTF_StatManager_CT component |
| // |
| // Parameters: |
| // - |
| // |
| // Return Value: |
| // - |
| // |
| // Errors: |
| // - |
| // |
| // Detailed Comments: |
| // This function should be called before using the <EPTF_StatManager_CT> |
| // component. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| public function f_EPTF_StatManager_init_CT( |
| in charstring pl_selfName, |
| in EPTF_DataSource_CT pl_dataSourceCompRef := null) |
| runs on EPTF_StatManager_CT |
| { |
| if (v_EPTF_StatManager_initialized) { |
| return; // already initialized |
| } |
| |
| f_EPTF_Logging_init_CT(pl_selfName); |
| v_StatManager_loggingMaskId := f_EPTF_Logging_registerComponentMasks(tsp_EPTF_StatManager_loggingComponentMask, c_EPTF_StatManager_loggingEventClasses, EPTF_Logging_CLL); |
| if(tsp_debug_EPTF_StatManager_Functions) { |
| f_EPTF_Logging_enableLocalMask(v_StatManager_loggingMaskId, c_EPTF_StatManager_loggingClassIdx_Debug); |
| } else { |
| f_EPTF_Logging_disableLocalMask(v_StatManager_loggingMaskId, c_EPTF_StatManager_loggingClassIdx_Debug); |
| } |
| //f_EPTF_Var_init_CT(pl_selfName); |
| |
| if (pl_dataSourceCompRef == null or pl_dataSourceCompRef == self) { |
| pl_dataSourceCompRef := self; |
| f_EPTF_DataSource_init_CT(pl_selfName); |
| } |
| f_EPTF_DataSourceClient_init_CT(pl_selfName, pl_dataSourceCompRef); |
| f_EPTF_StatMeasure_init_CT(pl_selfName); |
| f_EPTF_str2int_HashMap_Init(pl_selfName); |
| |
| v_EPTF_StatManager_limitStatVarsHashMap := f_EPTF_str2int_HashMap_New("StatManager_LimitStatVars"); |
| |
| f_EPTF_DataSourceClient_registerData(c_StatManager_DataSource_sourceId, pl_selfName, refers(f_EPTF_StatManager_DSProcessData)); |
| f_EPTF_DataSourceClient_registerDataValue(c_StatManager_DataSource_sourceId, pl_selfName, refers(f_EPTF_StatManager_DSProcessDataValue)); |
| f_EPTF_DataSourceClient_sendReady(c_StatManager_DataSource_sourceId, f_EPTF_Base_selfName()); |
| |
| v_EPTF_StatManager_initialized := true; |
| |
| f_EPTF_Base_registerCleanup(refers(f_EPTF_StatManager_cleanup_CT)); |
| |
| f_EPTF_StatManager_debug( |
| "---- EPTF_StatManager INIT "&pl_selfName&" DONE ----"); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Function: f_EPTF_StatManager_cleanup_CT |
| // |
| // Purpose: |
| // This function should be called before the <EPTF_StatManager_CT> component |
| // shuts down. |
| // |
| // Parameters: |
| // - |
| // |
| // Return Value: |
| // - |
| // |
| // Errors: |
| // - |
| // |
| // Detailed Comments: |
| // The function is registered by <f_EPTF_Base_RegisterCleanup> as a |
| // cleanup function in the init function for the <EPTF_StatManager_CT> |
| // component. |
| // This function makes it possible to be able to shut down the |
| // <EPTF_StatManager_CT> component gracefully. |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| private function f_EPTF_StatManager_cleanup_CT() |
| runs on EPTF_StatManager_CT |
| { |
| if (v_EPTF_StatManager_initialized == false) { |
| return; |
| } |
| f_EPTF_str2int_HashMap_DeleteById(v_EPTF_StatManager_limitStatVarsHashMap); |
| v_EPTF_StatManager_limitStatVarsHashMap := -1; |
| v_EPTF_StatManager_initialized := false; |
| f_EPTF_StatManager_debug("----- STATMANAGER CLEANUP DONE -------"); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Function: f_EPTF_StatManager_debug |
| // |
| // Purpose: |
| // Function to log a debug message from StatManager feature. |
| // |
| // Parameters: |
| // - pl_message - *in* *charstring* - the message to log |
| // |
| // Return Value: |
| // - |
| // |
| // Errors & assertions: |
| // - |
| // |
| // Detailed Comments: |
| // - |
| // |
| /////////////////////////////////////////////////////////// |
| private function f_EPTF_StatManager_debug(in @lazy charstring pl_message) |
| runs on EPTF_StatManager_CT |
| { |
| f_EPTF_Logging_debugV2(pl_message, v_StatManager_loggingMaskId, {c_EPTF_StatManager_loggingClassIdx_Debug}); |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Function: f_EPTF_StatManager_warning |
| // |
| // Purpose: |
| // Function to log a warning message from StatManager feature. |
| // |
| // Parameters: |
| // - pl_message - *in* *charstring* - the message to log |
| // |
| // Return Value: |
| // - |
| // |
| // Errors & assertions: |
| // - |
| // |
| // Detailed Comments: |
| // - |
| // |
| /////////////////////////////////////////////////////////// |
| private function f_EPTF_StatManager_warning(in @lazy charstring pl_message) |
| runs on EPTF_StatManager_CT |
| { |
| f_EPTF_Logging_warningV2(pl_message, v_StatManager_loggingMaskId, {c_EPTF_StatManager_loggingClassIdx_Warning}); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Function: f_EPTF_StatManager_getOrCreateLimitStat |
| // |
| // Purpose: |
| // Creates a limit statistic from the provided variable then a variable to this statistic thus it is possible |
| // from the custom GUI descriptor to query the color of a LED depending on the value of the original variable |
| // |
| // Parameters: |
| // pl_varIdx - *in* *integer* - the index of variable for which the limits statistic will be created |
| // pl_limitsPar - *in* *EPTF_StatMeasure_LimitsPar* - the parameters for the limits statistic |
| // |
| // Return Value: |
| // integer - The index of the variable that holds the actual state of the LED |
| // |
| // Errors: |
| // - |
| // |
| // Detailed Comments: |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| private function f_EPTF_StatManager_getOrCreateLimitStat( |
| in integer pl_varId, |
| in EPTF_StatMeasure_LimitsPar pl_limitsPar) |
| runs on EPTF_StatManager_CT return integer |
| { |
| var EPTF_StatMeasure_StatParams vl_limitPar; |
| vl_limitPar.limits := pl_limitsPar; |
| var integer vl_statId := -1; |
| var integer vl_limitStatVarId := -1; |
| var charstring vl_hashKey:= log2str(pl_varId) & log2str(pl_limitsPar); |
| |
| if (f_EPTF_str2int_HashMap_Find(v_EPTF_StatManager_limitStatVarsHashMap, vl_hashKey, vl_limitStatVarId)) |
| { |
| return vl_limitStatVarId; |
| } |
| |
| vl_statId := f_EPTF_StatMeasure_newStatWithParams(pl_varId, vl_limitPar); |
| vl_limitStatVarId := f_EPTF_StatMeasure_createVarFromStat(vl_statId); |
| |
| f_EPTF_str2int_HashMap_Insert(v_EPTF_StatManager_limitStatVarsHashMap, vl_hashKey, vl_limitStatVarId); |
| |
| f_EPTF_Var_refreshContent(pl_varId); // calculate initial value of the stat |
| return vl_limitStatVarId; |
| } |
| |
| private function f_EPTF_StatManager_gosCalcFn(in integer pl_idx, in EPTF_IntegerList pl_argList, in EPTF_IntegerList pl_nonVarArgList, inout EPTF_Var_DirectContent pl_retVal) runs on EPTF_StatManager_CT { |
| pl_retVal := {floatVal := 0.0} |
| var integer vl_nofSucc,vl_nofFail,vl_nofTimeout,vl_nofError; |
| vl_nofSucc := f_EPTF_Var_getIntValue(pl_argList[0]); |
| vl_nofFail := f_EPTF_Var_getIntValue(pl_argList[1]); |
| vl_nofTimeout := f_EPTF_Var_getIntValue(pl_argList[2]); |
| vl_nofError := f_EPTF_Var_getIntValue(pl_argList[3]); |
| if (vl_nofSucc>0) { |
| pl_retVal.floatVal := 100.0*int2float(vl_nofSucc)/int2float(vl_nofSucc+vl_nofFail+vl_nofTimeout+vl_nofError); |
| } |
| } |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // Function: f_EPTF_StatManager_getOrCreateGoSStat |
| // |
| // Purpose: |
| // Creates a GoS statistics from the provided variable names then a variable to this statistic thus it is possible |
| // from the custom GUI descriptor to query the value |
| // |
| // Parameters: |
| // pl_gosPar - *in* *EPTF_StatManager_GoSPar* - the parameters for the gos statistic |
| // |
| // Return Value: |
| // integer - The index of the variable that holds the actual value of the GoS statistics |
| // |
| // Errors: |
| // - |
| // |
| // Detailed Comments: |
| // |
| /////////////////////////////////////////////////////////////////////////////// |
| private function f_EPTF_StatManager_getOrCreateGoSStat( |
| in EPTF_StatManager_GoSPar pl_gosPar) |
| runs on EPTF_StatManager_CT return integer |
| { |
| var integer vl_gosStatVarId := -1; |
| var charstring vl_hashKey:= "GoS_"&log2str(pl_gosPar.nofSuccVarId); |
| |
| if (f_EPTF_str2int_HashMap_Find(v_EPTF_StatManager_limitStatVarsHashMap, vl_hashKey, vl_gosStatVarId)) |
| { |
| return vl_gosStatVarId; |
| } |
| |
| f_EPTF_Var_newFloat(vl_hashKey,0.123,vl_gosStatVarId) |
| |
| f_EPTF_Var_subscribeLocal(vl_gosStatVarId, |
| {{ |
| refers(f_EPTF_StatManager_gosCalcFn), |
| {pl_gosPar.nofSuccVarId,pl_gosPar.nofFailVarId,pl_gosPar.nofTimeoutVarId,pl_gosPar.nofErrorVarId}, |
| {} |
| }} |
| ); |
| |
| f_EPTF_str2int_HashMap_Insert(v_EPTF_StatManager_limitStatVarsHashMap, vl_hashKey, vl_gosStatVarId); |
| |
| return vl_gosStatVarId; |
| } |
| |
| private function f_EPTF_StatManager_DSProcessData( |
| out charstring pl_dataVarName, |
| in charstring pl_source, |
| in charstring pl_ptcName, |
| in charstring pl_element, |
| in EPTF_DataSource_Params pl_params) |
| runs on EPTF_StatManager_CT return integer |
| { |
| var EPTF_StatMeasure_LimitsPar vl_limitspar:={-1, led_black, false, {}}; |
| var integer vl_i:=0, vl_size:=0, vl_varId:=-1; |
| |
| select(pl_element){ |
| case(c_StatManager_dataElementGoS) { |
| var EPTF_StatManager_GoSPar vl_gosPar := {-1,-1,-1,-1} |
| |
| vl_size := sizeof(pl_params); |
| |
| for(vl_i:=0; vl_i<vl_size; vl_i:=vl_i+1){ |
| select(pl_params[vl_i].paramName){ |
| case(c_StatManager_paramName_SuccessVarId){ |
| if(not f_EPTF_StatManager_checkvarId(pl_params[vl_i].paramValue, vl_gosPar.nofSuccVarId)){ |
| pl_dataVarName := log2str(%definitionId& ": Wrong "&c_StatManager_paramName_SuccessVarId&" parameter was given! No GoS statistic will be returned!") |
| f_EPTF_StatManager_warning(pl_dataVarName); |
| return -1; |
| } |
| } |
| case(c_StatManager_paramName_FailVarId){ |
| if(not f_EPTF_StatManager_checkvarId(pl_params[vl_i].paramValue, vl_gosPar.nofFailVarId)){ |
| pl_dataVarName := log2str(%definitionId& ": Wrong "&c_StatManager_paramName_FailVarId&" parameter was given! No GoS statistic will be returned!") |
| f_EPTF_StatManager_warning(pl_dataVarName); |
| return -1; |
| } |
| } |
| case(c_StatManager_paramName_TimeoutVarId){ |
| if(not f_EPTF_StatManager_checkvarId(pl_params[vl_i].paramValue, vl_gosPar.nofTimeoutVarId)){ |
| pl_dataVarName := log2str(%definitionId& ": Wrong "&c_StatManager_paramName_TimeoutVarId&" parameter was given! No GoS statistic will be returned!") |
| f_EPTF_StatManager_warning(pl_dataVarName); |
| return -1; |
| } |
| } |
| case(c_StatManager_paramName_ErrorVarId){ |
| if(not f_EPTF_StatManager_checkvarId(pl_params[vl_i].paramValue, vl_gosPar.nofErrorVarId)){ |
| pl_dataVarName := log2str(%definitionId& ": Wrong "&c_StatManager_paramName_ErrorVarId&" parameter was given! No GoS statistic will be returned!") |
| f_EPTF_StatManager_warning(pl_dataVarName); |
| return -1; |
| } |
| } case else { |
| pl_dataVarName := log2str(%definitionId& ": The parameter name "& pl_params[vl_i].paramName & " is not valid!"); |
| f_EPTF_StatManager_warning(pl_dataVarName); |
| return -1; |
| } |
| } |
| } |
| |
| var integer vl_idx := f_EPTF_StatManager_getOrCreateGoSStat(vl_gosPar); |
| if (vl_idx == -1) { |
| return -1; |
| } |
| pl_dataVarName := f_EPTF_Var_getName(vl_idx); |
| return 0; |
| |
| } |
| case(c_StatManager_dataElementLEDlimit){ |
| vl_size := sizeof(pl_params); |
| |
| for(vl_i:=0; vl_i<vl_size; vl_i:=vl_i+1){ |
| select(pl_params[vl_i].paramName){ |
| case(c_StatManager_paramName_blackLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].blackLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_blueLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].blueLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_redLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].redLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_yellowLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].yellowLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_greenLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].greenLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_defaultColor){ |
| if(not f_EPTF_StatManager_checkColor(pl_params[vl_i].paramValue, vl_limitspar)){ |
| f_EPTF_StatManager_warning(%definitionId& ": Setting '"&c_StatManager_paramName_defaultColor&"' was unsuccessful! Using default color: black"); |
| vl_limitspar.defaultColor := led_black; |
| } |
| } |
| |
| case(c_StatManager_paramName_enableValueInLEDText){ |
| if(not f_EPTF_StatManager_checkEnabledLEDText(pl_params[vl_i].paramValue, vl_limitspar)){ |
| f_EPTF_StatManager_warning(%definitionId& ": Setting '"&c_StatManager_paramName_enableValueInLEDText&"' was unsuccessful! Setting it to false"); |
| vl_limitspar.enableValueInLEDText:=false; |
| } |
| } |
| |
| case(c_StatManager_paramName_VarId){ |
| if(not f_EPTF_StatManager_checkvarId(pl_params[vl_i].paramValue, vl_varId)){ |
| f_EPTF_StatManager_warning(%definitionId& ": Wrong "&c_StatManager_paramName_VarId&" parameter was given! No limit statistic will be returned!"); |
| return -1; |
| } |
| } |
| |
| case(c_StatManager_paramName_referenceVarId){ |
| if(not f_EPTF_StatManager_checkvarId(pl_params[vl_i].paramValue, vl_limitspar.referenceVarId)){ |
| f_EPTF_StatManager_warning(%definitionId& ": Wrong "&c_StatManager_paramName_referenceVarId&" parameter was given! Setting to -1!"); |
| vl_limitspar.referenceVarId:=-1; |
| } |
| } |
| case else{ |
| f_EPTF_StatManager_warning(%definitionId& pl_params[vl_i].paramName & " is not a valid parameter name!"); |
| } |
| } |
| } |
| |
| if(vl_varId == -1){ |
| f_EPTF_StatManager_warning(%definitionId& ": No "&c_StatManager_paramName_VarId&" parameter was given! No limit statistic will be returned!"); |
| return -1 |
| } |
| |
| var integer vl_idx := f_EPTF_StatManager_getOrCreateLimitStat(vl_varId, vl_limitspar); |
| if (vl_idx == -1) { |
| return -1; |
| } |
| pl_dataVarName := f_EPTF_Var_getName(vl_idx); |
| return 0; |
| |
| } |
| case else { //error, no rule for that |
| pl_dataVarName := ""; |
| f_EPTF_StatManager_warning(%definitionId& ": unhandled element: "& pl_element); |
| return -1; |
| } |
| } |
| return -1; //this should never be executed |
| } |
| |
| /////////////////////////////////////////////////////////// |
| // Function: f_EPTF_StatManager_DSProcessDataValue |
| // |
| // Purpose: |
| // Processes the incoming DataValue requests - iterators and external data elements - and gives back the value. |
| // It should be registered in the LoadRegulator_init_CT. Type function fcb_EPTF_DataSourceClient_dataValueHandler |
| // |
| // Parameters: |
| // *out *<EPTF_Var_DirectContent>* pl_dataValue* - the value of the data or the iterator result |
| // *in charstring pl_source* - the name of the data source 'feature' |
| // *in charstring pl_ptcName* - the name of the ptc (ID of the PTC) |
| // *in charstring pl_element* - the name of the data element |
| // *in* <EPTF_DataSource_Params> *pl_params* - the parameters |
| // of the data for the dataElement |
| // |
| // Return Value: |
| // integer - error code (0 of OK, non zero if unsuccessful: e.g. invalid parameters given in pl_params) |
| // |
| // Detailed Comments: |
| // - |
| // |
| /////////////////////////////////////////////////////////// |
| private function f_EPTF_StatManager_DSProcessDataValue(out EPTF_Var_DirectContent pl_dataValue, |
| in charstring pl_source, |
| in charstring pl_ptcName, |
| in charstring pl_element, |
| in EPTF_DataSource_Params pl_params) |
| runs on EPTF_StatManager_CT return integer{ |
| var integer vl_errorCode := -1; |
| pl_dataValue := {unknownVal := {omit}}; // set it to invalid |
| select( pl_element ) |
| { |
| case(c_EPTF_DataSource_dataElement_Help) { |
| vl_errorCode := f_EPTF_DataSource_handleHelp(pl_dataValue,pl_source,pl_params,c_EPTF_StatManager_help); |
| } |
| case(c_StatManager_dataElementLEDlimit) { |
| var integer vl_size := sizeof(pl_params); |
| var EPTF_StatMeasure_LimitsPar vl_limitspar:={-1, led_black, false, {}}; |
| var boolean vl_valueSet := false; |
| var float vl_value := 0.0; |
| var float vl_refValue := 0.0; |
| |
| for(var integer vl_i:=0; vl_i<vl_size; vl_i:=vl_i+1){ |
| select(pl_params[vl_i].paramName){ |
| case(c_StatManager_paramName_blackLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].blackLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_blueLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].blueLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_redLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].redLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_yellowLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].yellowLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_greenLimit){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_limitspar.limits[sizeof(vl_limitspar.limits)].greenLimit := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case(c_StatManager_paramName_defaultColor){ |
| if(not f_EPTF_StatManager_checkColor(pl_params[vl_i].paramValue, vl_limitspar)){ |
| f_EPTF_StatManager_warning(%definitionId& ": Setting '"&c_StatManager_paramName_defaultColor&"' was unsuccessful! Using default color: black"); |
| vl_limitspar.defaultColor := led_black; |
| } |
| } |
| |
| case(c_StatManager_paramName_enableValueInLEDText){ |
| if(not f_EPTF_StatManager_checkEnabledLEDText(pl_params[vl_i].paramValue, vl_limitspar)){ |
| f_EPTF_StatManager_warning(%definitionId& ": Setting '"&c_StatManager_paramName_enableValueInLEDText&"' was unsuccessful! Setting it to false"); |
| vl_limitspar.enableValueInLEDText:=false; |
| } |
| } |
| |
| case(c_StatManager_paramName_value){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_value := str2float(pl_params[vl_i].paramValue); |
| vl_valueSet := true; |
| } |
| } |
| |
| case(c_StatManager_paramName_referenceValue){ |
| if(f_EPTF_StatManager_checkLimit(pl_params[vl_i].paramValue)){ |
| vl_refValue := str2float(pl_params[vl_i].paramValue); |
| } |
| } |
| |
| case else{ |
| f_EPTF_StatManager_warning(%definitionId& pl_params[vl_i].paramName & " is not a valid parameter name!"); |
| } |
| } |
| } |
| |
| if (vl_valueSet) { |
| f_EPTF_StatMeasure_bubblesort_LimitList(vl_limitspar.limits); |
| pl_dataValue.statusLEDVal := f_EPTF_StatMeasure_calculateValue_limits( |
| pl_value := vl_value, |
| pl_limits := vl_limitspar.limits, |
| pl_referenceValue := vl_refValue, |
| pl_defaultLED := {vl_limitspar.defaultColor, ""}, |
| pl_enableValueInLEDText := vl_limitspar.enableValueInLEDText |
| ); |
| vl_errorCode := 0; |
| } else { |
| pl_dataValue.charstringVal := "No value was given in the parameters"; |
| vl_errorCode := 5; |
| } |
| } |
| case else |
| { |
| } |
| } |
| return vl_errorCode; |
| } |
| |
| private function f_EPTF_StatManager_checkLimit(in charstring pl_lim) runs on EPTF_StatManager_CT return boolean{ |
| if(match(pl_lim, pattern c_EPTF_StatManager_floatNumber)){ |
| return true; |
| |
| |
| }else{ |
| f_EPTF_StatManager_warning(%definitionId& ": " & pl_lim & " is not a legal float number!"); |
| return false; |
| } |
| } |
| |
| private function f_EPTF_StatManager_checkColor(in charstring pl_color, inout EPTF_StatMeasure_LimitsPar pl_limitsPar) runs on EPTF_StatManager_CT return boolean{ |
| select(pl_color){ |
| case("blue"){pl_limitsPar.defaultColor:=led_blue} |
| case("black"){pl_limitsPar.defaultColor:=led_black} |
| case("yellow"){pl_limitsPar.defaultColor:=led_yellow} |
| case("green"){pl_limitsPar.defaultColor:=led_green} |
| case("red"){pl_limitsPar.defaultColor:=led_red} |
| case else{ |
| f_EPTF_StatManager_warning(%definitionId& ": " & pl_color & " is not a legal LED color!"); |
| return false;} |
| } |
| return true; |
| } |
| |
| private function f_EPTF_StatManager_checkEnabledLEDText(in charstring pl_enabled, inout EPTF_StatMeasure_LimitsPar pl_limitsPar) runs on EPTF_StatManager_CT return boolean{ |
| select(pl_enabled){ |
| case("yes"){pl_limitsPar.enableValueInLEDText:=true} |
| case("no"){pl_limitsPar.enableValueInLEDText:=false} |
| case else{ |
| f_EPTF_StatManager_warning(%definitionId& ": " & pl_enabled & " is not a legal parameter value for: '"&c_StatManager_paramName_enableValueInLEDText&"'!"); |
| return false} |
| } |
| return true; |
| } |
| |
| private function f_EPTF_StatManager_checkvarId(in charstring pl_varId, out integer pl_IvarId) runs on EPTF_StatManager_CT return boolean{ |
| pl_IvarId := f_EPTF_Var_getId(pl_varId); |
| |
| if(pl_IvarId>-1) |
| { |
| return true |
| }else{ |
| return false |
| } |
| } |
| |
| } // module |