To read value type in UFL Interface

Hi All,

 

I am trying to set up the UFL interface where it will read the data from CSV file which contain 'tagname', 'timestamp', 'value'. There will 42 different tag in that CSV. all tag value are float excel last one which have string value.

I am trying to write the IF else loop in INI file but it is not accepting the syntax. could you please help me to understand how can I ready value type in INI file.

 

FIELD(1).NAME="Tag"

 

FIELD(1).TYPE="String"

 

FIELD(2).NAME="TimeStamp"

 

FIELD(2).TYPE="DateTime"

 

FIELD(2).FORMAT="yyyy-MM-dd hh:mm:ss"

 

FIELD(3).NAME="Value_Number"

 

FIELD(3).TYPE="Number"

 

FIELD(4).NAME="Value_String"

 

FIELD(4).TYPE="String"

 

 

[MSG]

 

MSG(1).NAME="Data"

 

 

[Data]

 

Data.FILTER=C1=="*"

 

Tag=["(*),*,*"]

 

TimeStamp=["*,(*),*"]

 

Value_Number=["*,*,(*)"]

 

Value_String=["*,*,(*)"]

IF (Value_Number is Number) THEN

 

StoreInPI(Tag, ,TimeStamp,Value_Number, , )

 

ELSE StoreInPI(Tag, ,TimeStamp,Value_String, , )

 

ENDIF

 

in IF loop at Number position I am getting syntax error. 

 

Kind Regards,

Prasad

  • If I'm not mistaken, the extraction of a string to Value_Number should fail, and so Value_Number should be NULL. Try "Value_Number IS NOT NULL" to mean "Value_Number is number" and "Value_Number IS NULL" to mean "Value_Number is not a number".

     

    Let me know if that does or does not work.

  • Hi Kenneth,

     

    Thank you for your reply. it is logical but not working.

     

    I tried this in below two format:

    1st

    Tag=["(*),*,*"]

     

    TimeStamp=["*,(*),*"]

     

    Value_Number=["*,*,(*)"]

     

    Value_String=["*,*,(*)"]

     

    IF (Value_Number is not Null) THEN

     

    StoreInPI(Tag, ,TimeStamp,Value_Number, , )

     

    ELSE

     

    StoreInPI(Tag, ,TimeStamp,Value_String, , )

     

    ENDIF

    2nd

     

    Tag=["(*),*,*"]

     

    TimeStamp=["*,(*),*"]

     

    Value_Number=["*,*,(*)"]

     

    Value_String=["*,*,(*)"]

     

    IF (Value_Number is not Null) THEN

     

    StoreInPI(Tag, ,TimeStamp,Value_Number, , )

    END IF

     

    F (Value_String is not Null) THEN

     

    StoreInPI(Tag, ,TimeStamp,Value_String, , )

     

    ENDIF

     

    both are not working I am getting below error in error log:

    01-Dec-2020 02:03:00 [PI_UFL] [Info] [Line 42 ] 73-###-####_####-MI,2020-12-01 01:59:32,abc.

    01-Dec-2020 02:03:00 [PI_UFL] [Error] Cannot convert abc from String to Number.

     

     

    kind Regards,

  • I really should have tested my solution before suggesting it. It looks like I am mistaken.

     

    We both should have checked the user guide. There is a function called IsNumber that checks if a string variable is a number. So you would extract your value only into Value_String. If IsNumber(Value_String), then set Value_Number = Value_String and store Value_Number in PI, else just store Value_String in PI.

  • I am getting syntax error for this function, 

    IF ( IsNumber(Value_String)) THEN.. is it version specific functionality.

  • Ty something like this syntax:

     

            IF (IsNumber(Value_String) == 1) THEN

     

                StoreInPI(Tag, ,TimeStamp,Value_Number, , )

     

            ELSE

     

                StoreInPI(Tag, ,TimeStamp,Value_String, , )

     

            ENDIF
  • thank you folks for all your suggestion.

    I did little different approach now, I have filter data with tags names as tags have identical parameter in their name. Please see below.

     

    FIELD(1).NAME="tagName"

    FIELD(1).TYPE="String"

    FIELD(2).NAME="TimeStamp"

    FIELD(2).TYPE="DateTime"

    FIELD(2).FORMAT="dd-MMM-yyyy hh:mm:ss", "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec"

    FIELD(3).NAME="value"

    FIELD(3).TYPE="Number"

    FIELD(4).NAME="stringValue"

    FIELD(4).TYPE="String"

     

    [MSG]

    MSG(1).NAME="MSG_1"

    MSG(2).NAME="MSG_2"

     

    [MSG_1]

    MSG_1.FILTER=C1=="*####*"

    StoreInPI(tagName, ,TimeStamp,value, , )

    tagName=["(*),*,*"]

    TimeStamp=["*,(*),*"]

    value=["*,*,(*)"]

     

    [MSG_2]

    MSG_2.FILTER=C1=="*###*"

    StoreInPI(tagName, ,TimeStamp,stringValue, , )

    tagName=["(*),*,*"]

    TimeStamp=["*,(*),*"]

    stringValue=["*,*,(*)"]

  • FIELD(1).NAME="Tag"

    FIELD(1).TYPE="String"

     

    FIELD(2).NAME="TimeStamp"

    FIELD(2).TYPE="DateTime"

    FIELD(2).FORMAT="yyyy-MM-dd hh:mm:ss"

     

    FIELD(3).NAME="Value_Number"

    FIELD(3).TYPE="Number"

     

    FIELD(4).NAME="Value_String"

    FIELD(4).TYPE="String"

     

    [MSG]

    MSG(1).NAME="Data"

     

    [Data]

    Data.FILTER=C1=="*"

     

    Tag=["(*),*,*"]

    TimeStamp=["*,(*),*"]

    Value_Number=["*,*,(*)"]

    Value_String=["*,*,(*)"]

     

    IF (IsNumber(Value_Number)) THEN

    StoreInPI(Tag, ,TimeStamp,Value_Number, , )

    ELSE

    StoreInPI(Tag, ,TimeStamp,Value_String, , )

    ENDIF