A/B Control Logix / indirect file addressing

Pat Leach

Member
Join Date
Nov 2004
Location
Everett, WA
Posts
2
I am currently converting a Softlogix program to run in a Control Logix platform. The problem I am having involves "double Indirect" addressing. i.e. N[N7:0]:[N7:1]
The "pointers" (in the original program) are derived using "CPT" instructions.
I have done some research on multi-dimensional arrays, but so far I have been unable to find any real good examples. (or even very many bad examples :) )
1 issue is the size that would be required of the array(s), i.e N7:0 could contain a value as high as 1264 (causing the pointer to look at N1264) and the word pointer (N7:1)can have a value of up to 1800.
The soft logix does not have the same file size restrictions as the SLC / PLC5 families
If anybody knows where I could find some good A/B 5555 examples that use this type of addressing, I would appreciate it.
P.S. Before anyone suggests it, I will mention that I have talked with A/B~Rockwell tech support about this issue at great length.
Thanks in advance :)
Pat
 
I found this table in the RSLogix5000 help file.
It would seem to indicate that indirect addressing to a file number is not possible in CLX.

Actually, the indirect addressing in CLX seems to only exist in order to provide backwards-compatability with the SLC/PLC. I'm hoping they add pointers in some later version. That would be a huge step toward being able to define your own function blocks.

For your situation, you should revisit the multidimensional arrays. You can define a Tag of type INT, with whatever dimensions you need. Say: NFILE[10,255]. I'll post a screen shot.

AK
 
Pat-

You probably get a message about the 2MByte array size limit. I don't know of any way around that.

My question is do you really need that big of an array? Do you actually have 1264 instances with 1800 elements each? Or are the indeces based on convenience due to the result of the CPT and the available data? Can you subtract an offset or divide by an index factor to pack the data tighter or are all 2,275,200 locations used?

Keith
 
This sounds like an application that would translate fairly easily to a two-dimensional tag array in ControlLogix.

It's the size that concerns me.

1264 x 1800 = 2,275,200 elements x 4 bytes = 9,100,800 bytes.

Even INT elements in the Logix take up 32 bits of memory, and DINTs sort faster, so we base the memory usage of 4 bytes per element.

9 Megabytes is an awful big array ! That's bigger than the biggest Logix controllers memory.

Logix only supports arrays up to 2 MB in size, anyhow. I think that restriction applies to SoftLogix 5800 as well.

Am I wrong on the math, here ? I'm trying to cut down on the coffee and its still foggy here.
 
Last edited:
I agree that the Arrays can be made smaller, simply by identifying the min/max possible value for the pointer. Some pointers will only need to look at files N100-N200 [words 0-1799], others will look at N1100-N1500[words 0-255], etc.so that will help to reduce the size of each array.
The thing that I wold really like to see is a program example (5500) where both "Dimensions" of an array are calculated, and are used as variables to index or set the Pointer.
I have been told by A/B that you cannot "Nest".
i.e. SINT_Array.[N7:0][N7:1].

Thanks
Pat

P.S. Ken, Your name is very familiar and now I see you are also in the Pacific Northwest. I am fairly sure our paths have crossed before, but I cannot remember when/where.
I worked for Weyerhaeuser from the Mid 80s to '97 then went to work for an integration/engineering firm called Dynamic Systems Tech. until mid 2001
Ring any bells?? Anyway thanks for your reply
 
Last edited:
Pat-

I've attached a small example. It is currently configured for a ControlLogix 5555 version 10 processor. If you have something else and you want to load this go to the controller properties and change to the desired type/version.

The attached file is really a .ACD file with the extension changed. When you download it just change the extension back to .ACD and you are good to go.

The general format for indexing array elements is:

Array_Tagname[X, Y)

With X and Y being either integer (SINT, INT, DINT) constants or tags of the preceeding data types. I prefer to use DINT indeces as they provide slightly faster access.

I hope this helps.
Keith
 
I've tried several times to open this attached file and it doesn't seem to want to open. I tried downloading it and it says the folder is empty. I don't know what the deal is.
 

Similar Topics

Hello All: I have a situation where I have 110 PID loops. For the most part they are all tuned the same but there are always a couple that need...
Replies
12
Views
5,705
I am trying to do some indirect addressing in control logix 5000 and having no luck. In PLC 5 I used to write it like this B3/[N10:0], if N10:0...
Replies
1
Views
2,030
I am having trouble with getting no control of my analog output signal. I am using the SCL function block to control my analog output. The logic...
Replies
11
Views
232
hi all, i have a plc i need to get info from for a site im working on: I have a 1764 Micro Logix 1500 LSP Series C (See Attached Image) im...
Replies
2
Views
369
I currently have a weird issue involving Ethernet IP communication between a ABB CI873 (EthernetIP Module) and a 1756-L83ES. The Layout is as...
Replies
8
Views
731
Back
Top Bottom