Ignition 8.1.47
Logix Driver
1756-L74 V 30.014
I have roughly 1300+ tags I look at within a single PLC, and have one specific UDT within the PLC that I cannot connect to over position 6.
Example of good path: ns=1;s=[HF_Process_Control]CIPB_Edit_RecipeSelect[6]
Fails for all of the following; ns=1;s=[HF_Process_Control]CIPB_Edit_RecipeSelect[7]
ns=1;s=[HF_Process_Control]CIPB_Edit_RecipeSelect[8]
ns=1;s=[HF_Process_Control]CIPB_Edit_RecipeSelect[9]
ns=1;s=[HF_Process_Control]CIPB_Edit_RecipeSelect[10]
...
ns=1;s=[HF_Process_Control]CIPB_Edit_RecipeSelect[48]
This occurs whether I am directly connecting to the tag, or out of the original UDT.
Within the PLC it is a BOOL[224] data type.
Has anyone experienced this or have a solution?
I have recently upgrade to 8.1.47 from 8.1.45 where the issue was present as well. I have created a new driver to verify it wasn't a bad communication driver setup, but had the same results. This is the only tag that I have issues within the PLC. The majority of tags connected within the PLC are leased, these are currently on Direct.
BOOL arrays are represented as DWORD arrays internally in the PLC, and exposed to any ENIP client as DWORD arrays as well. For better or worse, our driver doesn't simply turn all DWORD arrays into BOOL arrays.
So you have an array of DWORD you have to address the bits of to get at them. I think they're available if you browse underneath each of those elements, otherwise you can address them in the OPC Item Path like ns=1;s=[HF_Process_Control]CIPB_Edit_RecipeSelect[0].0
etc...
1 Like
Ugh....Boolean arrays in CLX are highly inefficient and memory hogs. Each Bool occupies a 32 bit dword. You're better off restructuring that into arrays of DINTs, and using 32 booleans available for each DINT.
No, read efficiently, just a PITA to deal with on the Ignition side.
As with any bit or array tags you make in Ignition, the driver is optimizing and reading efficiently on the backend, even if in Ignition it's many individual tags.
No, they do not. A bool array's bits are packed into the DWORDs. That's why the OP experienced the error at subscript 7
--the DWORDs from 0
to 6
contain all of the original 224 bits.
(Now, individual boolean tags in Logix are memory hogs. Including as aliases.)
3 Likes
What is the work around to extract subscript 7+ then if it is erroring because of the bits? Re-work the PLC tags?
You have to break the PLC subscript into two subscripts: word #, and bit # in that word. You simply cannot use the PLC subscripts in Ignition.
PLC BoolArray[101]
=> Ignition BoolArray[3].5
and so on.
1 Like
I appreciate the breakdown. This was the first time I had ever run into this scenario.
I stand corrected! Dont know what i was thinking. I never use boolean arrays, so my ignorance was founded
I always pack booleans in UDTs when possible, or use DINTs when not.
1 Like