• Not Answered

How to handle Control Tags from PLC to PK controller

I have these control tags in a control logix PLC that I have connected to a PK controller that is communicating over ethernet/ip.

I was able to bring in the Float (REAL) tag as a floating point

This is how I set up the LDT for the float.

UCMM with Logix Tags

Requested packet interval(ms):1000

Number of values:1

data direction:Input

Data Type: Floating point

Rack Number: 1

Slot Number: 0

Logix Tag Name: Plant_Master (for example)

This works fine for a REAL, and I am able to see the value and it matches the PLC.

The question that I have is how to set up the LDT for a Decimal (BOOL)

I have tried setup for a Boolean.

UCMM with Logix Tags

Requested packet interval(ms):1000

Number of values:8

data direction:Input

Data Type: Boolean

Rack Number: 1

Slot Number: 0

Logix Tag Name: BTLvlLoLoTrip

This doesn't work, in diagnostics it shows a Bad logic Device

I have tried it setup as a 8 Bit signed integer.

UCMM with Logix Tags

Requested packet interval(ms):1000

Number of values:1

data direction:Input

Data Type: 8 Bit signed integer

Rack Number: 1

Slot Number: 0

Logix Tag Name: BTLvlLoLoTrip

This doesn't work the value in diagnostics shows up as a negative 1 (-1)

Can someone please let me know how I can handle this type of data.

Thank you in advance.

6 Replies

  • I'm thinking that the data type of Decimal means Binary Coded Decimal BCD. Your image says the Decimal Type is described as a BOOLean. Is the BCD a 16 bit register, with four BCD values? Since you tried an 8 bit signed integer, and you received a value, it's a conversion issue.

    BCD would be four bit sets of 0000 to 1001 representing 0 to 9. A value of 25 would be 0010 0101, each digit represented by the four bit binary equivalent. you need to present the data in a matching data type. If you read four BCD values as an Integer, you can then extract the four values in DeltaV as four separate digits using bitwise operators and a mask.

    If each BCD value is to be treated as a boolean condition 0000 = false, xxxx = true, where xxxx <> 0000, you might want to do that conversion in the PLC and transfer the boolean result.

    The fact you read a -1 for the 8 bit signed integer means you are reading 1111 1111. HOwever, that is invalid for BCD as 1111 is hex for F or a value of 15.

    Andre Dicaire

  • In reply to Andre Dicaire:

    I did some searching and came up with this fix.

    UCMM with Logix Tags

    Requested packet interval(ms):1000

    Number of values:1

    data direction:Input

    Data Type: 32 Bit unsigned integer

    Rack Number: 1

    Slot Number: 0

    Logix Tag Name: BTLvlLoLoTrip

    Then went to the signal properties and changed the bits used to 1.

    This worked and seems to be the answer.
  • In reply to Adam Villhauer:

    I have all the tags setup now, in total this created 74 LDTs at first I have the Request packet Interval set to 1000ms. This would only show 26 LDTs good in diagnostics. I thought that was odd so I increased the RPI to 2000 on all of them and now they all show up in diagnostics just fine. Can someone explain this, I was unable to find an explanation in books online.
    Thank you

    P.S. I have never used a PK to read logix tags over ethernet/ip but man it seems messy 1 LDT for every logix tag and you can't rename LDTs. Is there a better way?
  • In reply to Adam Villhauer:

    NK-1900-1116 is a KBA that you probably should read that talks about UCMM tags. The most efficient way is reading array's so they are packed because only one LDT can be requested ever 20 msec which contributes to how many can be responded to within your RPI. There are ways around it using more than one PDT, but that KBA has lots of good information.

  • In reply to Matt Forbis:

    Matt,
    "The most efficient way is reading array's so they are packed "

    Can you expand on this more for me. I am not sure if you are talking about array's from the PLC or setting up some type of array in the PK.
    Thank you
  • In reply to Adam Villhauer:

    Arrays from the PLC. With a single tag in DeltaV, it can read up to 100 values at once. So for example, if you were doing motors, you might make an array of boolean inputs, an array of boolean outputs and an array of analog inputs. Inside the PLC you would pack and push individual motor bits into the arrays for efficient transfer to DeltaV. This would also speed things up.

    Logix allows mixed data types whereas it's not easy in DeltaV, so it's best to have a few tags that are single data type, such as DI_DATA, DO_DATA, AI_DATA or something similiar.

    Since DeltaV utilizes a single call stack per PDT and it takes about 20 ms per LDT read (no matter how many parameter values in it), if you can pack all your items into a smaller number of tags, it will be faster and easier to manage.