Switch to desktop version  
[Update] SetTagValue() and ONCHANGE? - Printable Version

+- Ewon Technical Forum (https://techforum.ewon.biz)
+-- Forum: Development (https://techforum.ewon.biz/forum-50.html)
+--- Forum: BASIC Script (https://techforum.ewon.biz/forum-52.html)
+--- Thread: [Update] SetTagValue() and ONCHANGE? (/thread-2756.html)



[Update] SetTagValue() and ONCHANGE? - mickaa - 18-06-2025

Hi,

- When I call my function @SetTagValue("Sensor1Temperature",@EpochTimeString$()) everything works fine.
But when I call ONCHANGE "Sensor1Temperature", '@SetTagValue("Sensor1Time",@EpochTimeString$())' the script stops at the "@SetTagValue()" function when it is called by ONCHANGE.

Can someone clarify this problem for me?




Code:
REM In init section
ONCHANGE "Sensor1Temperature", '@SetTagValue("Sensor1Time",@EpochTimeString$())'
TSET 2, 5
ONTIMER 2, "@GenerateData2()"


Code:
FUNCTION GenerateData2()
  MY_FONCTION$="GenerateData2"
  TSET 2,0
  @MyLogEvent(MY_FONCTION$,"==== GenerateData ====",120)
  @SetTagValue("Sensor1Temperature", "40.00")
  TSET 2,20
ENDFN


Code:
FUNCTION SetTagValue($MyTag$, $ValueString$)
  MY_FONCTION$="SetTagValue"
 
  // @CheckTagExist($MyTag$)
 
  SETSYS TAG, "LOAD", $MyTag$
  $MyTagType$=GETSYS TAG, "Type"
 
  IF VAL($MyTagType$)=TYPE_BOOL% THEN
    $MyTagValueBool%=VAL($ValueString$)
    SETIO $MyTag$, $MyTagValueBool%
  ELSE
    IF VAL($MyTagType$)=TYPE_FLOAT% THEN
      $MyTagValueFloat=VAL($ValueString$)
      SETIO $MyTag$, $MyTagValueFloat
    ELSE
      IF VAL($MyTagType$)=TYPE_INT% THEN
        $MyTagValueInt%=VAL($ValueString$)
        SETIO $MyTag$, $MyTagValueInt% 
      ELSE 
        IF VAL($MyTagType$)=TYPE_STRING% THEN
          SETIO $MyTag$, $ValueString$
        ELSE
          @MyLogEvent(MY_FONCTION$,"{ERROR} Tag Type not recognized. [$MyTag$:"+$MyTag$+"] | [$ValueString$:"+$ValueString$+"]",90)
        ENDIF
      ENDIF
    ENDIF
  ENDIF
ENDFN



RE: [Update] SetTagValue() and ONCHANGE? - mickaa - 23-06-2025

(18-06-2025, 05:22 PM)mickaa Wrote: Hi,

- When I call my function @SetTagValue("Sensor1Temperature",@EpochTimeString$()) everything works fine.
But when I call ONCHANGE "Sensor1Temperature", '@SetTagValue("Sensor1Time",@EpochTimeString$())' the script stops at the "@SetTagValue()" function when it is called by ONCHANGE.

Can someone clarify this problem for me?




Code:
REM In init section
ONCHANGE "Sensor1Temperature", '@SetTagValue("Sensor1Time",@EpochTimeString$())'
TSET 2, 5
ONTIMER 2, "@GenerateData2()"


Code:
FUNCTION GenerateData2()
  MY_FONCTION$="GenerateData2"
  TSET 2,0
  @MyLogEvent(MY_FONCTION$,"==== GenerateData ====",120)
  @SetTagValue("Sensor1Temperature", "40.00")
  TSET 2,20
ENDFN


Code:
FUNCTION SetTagValue($MyTag$, $ValueString$)
  MY_FONCTION$="SetTagValue"
 
  // @CheckTagExist($MyTag$)
 
  SETSYS TAG, "LOAD", $MyTag$
  $MyTagType$=GETSYS TAG, "Type"
 
  IF VAL($MyTagType$)=TYPE_BOOL% THEN
    $MyTagValueBool%=VAL($ValueString$)
    SETIO $MyTag$, $MyTagValueBool%
  ELSE
    IF VAL($MyTagType$)=TYPE_FLOAT% THEN
      $MyTagValueFloat=VAL($ValueString$)
      SETIO $MyTag$, $MyTagValueFloat
    ELSE
      IF VAL($MyTagType$)=TYPE_INT% THEN
        $MyTagValueInt%=VAL($ValueString$)
        SETIO $MyTag$, $MyTagValueInt% 
      ELSE 
        IF VAL($MyTagType$)=TYPE_STRING% THEN
          SETIO $MyTag$, $ValueString$
        ELSE
          @MyLogEvent(MY_FONCTION$,"{ERROR} Tag Type not recognized. [$MyTag$:"+$MyTag$+"] | [$ValueString$:"+$ValueString$+"]",90)
        ENDIF
      ENDIF
    ENDIF
  ENDIF
ENDFN

Okay, I figured it out.
It's not possible to put a "getData()" function as a parameter to a function called by ONALARM, ONCHANGE, etc.
So I incorporated the two functions into the same...

it's now functional.