• Recent
    • Tags
    • Popular
    • Register
    • Login

    Please Note This forum exists for community support for the Mango product family and the Radix IoT Platform. Although Radix IoT employees participate in this forum from time to time, there is no guarantee of a response to anything posted here, nor can Radix IoT, LLC guarantee the accuracy of any information expressed or conveyed. Specific project questions from customers with active support contracts are asked to send requests to support@radixiot.com.

    Radix IoT Website Mango 3 Documentation Website Mango 4 Documentation Website Mango 5 Documentation Website

    Scripting Data source not running or updating script points.

    Scripting general Discussion
    2
    11
    4.1k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • phildunlapP
      phildunlap
      last edited by phildunlap

      Hi Phillip,

      Scripts have context points assigned to variable names in the script's context. So, F1_Flow = acc1; is assigning over the variable! What it sounds to me like you're looking for is the set() function. Something like,

      F1_Flow.set(h11.value + h12.value + h13.value + h14.value + h15.value + h16.value + 
                  h17.value + h18.value + h19.value + h110.value + h111.value + h112.value +
                  h113.value + h114.value + h115.value + h116.value + h117.value + h118.value +
                  h119.value + h120.value + h121.value + h122.value + h123.value + h124.value);
      P 1 Reply Last reply Reply Quote 0
      • P
        Phillip Weeks @phildunlap
        last edited by

        @phildunlap When I use
        F1_Flow.set(acc1); or
        F1_Flow.set(h11.value + h12.value + h13.value + h14.value +h15.value + h16.value + h17.value + h18.value + h19.value +h110.value + h111.value + h112.value + h113.value + h114.value +h115.value + h116.value + h117.value + h118.value + h119.value +h120.value + h121.value + h122.value + h123.value + h124.value);

        When I do this it generates a script error?

        1 Reply Last reply Reply Quote 0
        • phildunlapP
          phildunlap
          last edited by

          Odd. You can always try something like print(F1_Flow);

          1 Reply Last reply Reply Quote 0
          • P
            Phillip Weeks
            last edited by

            yes this is what I was saying the script seems to be working as I
            the print(F1_Flow) produces a value
            1.7963696000000002
            but does not seem to store it when the cron runs it.
            This is weird.

            1 Reply Last reply Reply Quote 0
            • phildunlapP
              phildunlap
              last edited by

              It should look more like:

              {
              value: 86.7805828398729,
              time: 1491923992866,
              millis: 866,
              second: 52,
              minute: 19,
              hour: 9,
              day: 11,
              dayOfWeek: 3,
              dayOfYear: 101,
              month: 4,
              year: 2017,
              last(count): PointValueTime[count],
              lastValue: PointValueTime(86.7805828398729@2017/04/11 09:19:52.866),
              lastValue(count): PointValueTime,
              set(value): ,
              set(value, timestamp): ,
              pointValuesBetween(timestamp, timestamp): PointValueTime[],
              pointValuesSince(timestamp): PointValueTime[],
              pointValuesBefore(timestamp): PointValueTime[],
              pointValuesAfter(timestamp): PointValueTime[],
              pointValueAt(timestamp): PointValueTime,
              ago(periodType): double,
              ago(periodType, periods): double,
              past(periodType): AnalogStatisticsWrapper,
              past(periodType, periods): AnalogStatisticsWrapper,
              prev(periodType): AnalogStatisticsWrapper,
              prev(periodType, periods): AnalogStatisticsWrapper,
              previous(periodType): AnalogStatisticsWrapper,
              previous(periodType, periods): AnalogStatisticsWrapper,
              stats(from, to): AnalogStatisticsWrapper,
              }
              

              So something is amiss. You are not still assigning a value to F1_Flow are you? F1_Flow should be either the "variable name" of the context point, or if it's a point on the scripting data source it should have its variable name field set to F1_Flow

              1 Reply Last reply Reply Quote 0
              • P
                Phillip Weeks
                last edited by

                Yes I have 3 scripting data sources and each contain one scripting point and within each point the variables names are F1_Flow F2_Flow 3_Flow respectfully to the three sources.
                when I use set function, verification complains of an error at that line containing this set function. Both
                F1_Flow.set(1);
                and
                F1_Flow.set(acc);
                generate error across all three scripting data sources.

                1 Reply Last reply Reply Quote 0
                • P
                  Phillip Weeks
                  last edited by

                  The only thing unusual from how I've used scripting variables before is that the context variables are metapoints from persistent TCP from the es and not actual modbus points.
                  please explain how the script below works.. RESETSLAVES_ON is a binary in the script context and ITERATION_COUNTER is a numeric with a value 2. My understanding was it was decrementing 2 before doing the reset I assume using a default method?. otherwise how can this script work and it does work.

                  if (RESETSLAVES_ON.value){
                  Hard_Reset_Slaves(RESETSLAVES_ON);
                  if (ITERATION_COUNTER<=0){
                  RESETSLAVES_ON.set(false);
                  Hard_Reset_Slaves(!RESETSLAVES_ON.value);
                  }else{
                  ITERATION_COUNTER -= 1;
                  }
                  }

                  1 Reply Last reply Reply Quote 0
                  • phildunlapP
                    phildunlap
                    last edited by phildunlap

                    To the scripting data source, all points in Mango are just points, their origin doesn't change the handling.

                    0_1491929790806_scripting-help.png

                    0_1491929799727_scripting-help2.png

                    The script you have posted has some issues, but let's go through it:

                    if (RESETSLAVES_ON.value){ //if this point is true or nonzero,
                      Hard_Reset_Slaves(RESETSLAVES_ON); //call this function with that point object, 
                      //fortunately for the control logic if( {"object":true} ) == if( true )
                      //ITERATION_COUNTER may be pointed at an object since it looks like a variable name, but after the first -= 1 it will become NaN
                      if (ITERATION_COUNTER<=0){ //NaN is never <= 0 nor is {"object":true} <= 0
                        RESETSLAVES_ON.set(false); //Doesn't happen, but would call set function on context point
                        Hard_Reset_Slaves(!RESETSLAVES_ON.value); //call this function with a value this time! a trivial true?
                      } else {
                        ITERATION_COUNTER -= 1; //Turn that context point into a NaN as: a = {"object":true}; a -= 1; print(a); shows ITERATION_COUNTER becomes NaN if it was an object
                      }
                    }
                    

                    Hard_Reset_Slaves is probably declared in a global script if it's not in this script body. It is not an included function provided by us.

                    My guess is Hard_Reset_Slaves takes a point instead of a boolean, and it sets RESETSLAVES_ON to false, and that's how the script works. Otherwise I would expect it to keep calling Hard_Reset_Slaves every time it runs, any time RESETSLAVES_ON is true.

                    1 Reply Last reply Reply Quote 0
                    • P
                      Phillip Weeks
                      last edited by Phillip Weeks

                      OK I will digest all that shortly however I have good news in that I now have the points setting properly. I added a new numeric point to each script context and set them to 0 sucessfully. so for some reason yet unclear the script is now setting the point values as it should have F1.set(acc); works yeah
                      As you pointed out there were inconsistencies in that code only because mistakenly thought an object would default the get and set. functions my mistake.
                      Thanks for your analysis and overall help.. I did not realize that NaN was being created.
                      I will correct the script and from now on differentiate between passing the objects vs. its variable value.

                      1 Reply Last reply Reply Quote 0
                      • phildunlapP
                        phildunlap
                        last edited by

                        Certainly! Glad you got it working!

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post