SLC upgraded to compactogix messaging to Controllogix

EffSee

Member
Join Date
Oct 2017
Location
USA
Posts
19
Hello, i am trying to upgrade from a SLC 500 to a Compaclogix L36-ERM. There is a L72 controllogix that uses MSG intructions to read and write to and from the SLC integer files. The upgrade converted all Integers to DINTS in the new 5000 program thats converted. what do i need to change to make this work as now the compactlogix will be used instead of the SLC?
 
Instead of a SLC type read/write on the control logix, you will use a CIP Data Table Read/Write. Should be fairly straight forward to reconfigure, just use the correct IP address and make sure you are pointing at the correct new locations on the CompactLogix, taking into consideration that the number of elements is for DINTs now instead of INTs. The ControlLogix would already have been reading INTs into DINTs, so you only need to arrange the data how you want it on the CompactLogix, either keeping the same address format and only using the first half of each DINT or compressing the data in DINTs instead, making your number of elements smaller but requiring some re addressing in the CompactLogix.
 
ok so im a little unsure with that part. the SLC never had MSG intructions when communicating. with the contollogix in its program. the contollogix was just just reading straight to and from the N folders. Would i have to add the controllogix in the compactlogix tree then create new MSG intsuctions to read and write back or will the Controllogix automatically do what it was doing with the SLC? i was planning on keeping the tags as they were hoping that would work and if it does not how would you compress the DINTs? im new to this.
 
Previously, the ControlLogix would have had an "SLC Typed Read" and "SLC Typed Write" MSG instruction, to read to and write from the N registers in the SLC.

Now, you will need a "CIP Data Table Read" and "CIP Data Table Write", and you will have to specify the tag names you wish to read/write from/to.

In SLC world, everything comes in pre-built, contiguous registers. So if you tell your CLX to read 20 registers starting from N7:0, it will read N7:0 through N7:19.

In CompactLogix world, you can define whatever data structure you like. Most likely, the data you need to read and write has been converted to an array, perhaps called "Register_N7". So N7:0 became Register_N7[0], and N7:19 became Register_N7[19]. To help get your head around the slight difference, look at the N7 data table in RSLogix 500, and then look at the Register_N7 tag in the Controller Tags window of RSLogix 5000. You can expand out the tag to see the individual elements, and if you want to, expand out each element to see the individual bits. Just the same as if you change the Radix from Decimal to Binary in RSLogix 500.

An array is a contiguous block of data, so you take the same approach as before: you tell the Control Logix to read 20 elements, starting at Register_N7[0]. It will return Register_N7[0] through Register N7[19].

The other piece of the puzzle is the data type. SLC's use 16 bit data (in general) while CompactLogix and ControlLogix use 32 bit data (in general). You will likely find in the Control Logix, that the data tags that are written to the SLC are actually INT type (16 bit) instead of DINT type (32 bit) - and probably likewise with the tags that the data read from the SLC is stored in. If your Control Logix is expecting to read 20x 16-bit words, you had better provide it with 20x 16-bit words. Likewise, if it's expecting to write to 20x 16 bit words, you had better provide it with 20x 16 bit words to write to, lest it write nonsensical data into places you weren't expecting.

Ultimately, you have to make sure the data type at both ends is the same. You can either convert everything to INT, or convert everything to DINT. Best practice is to use DINTs as the CLX is a 32-bit platform and there are performance costs involved with using 16-bit words. In practical terms, this just means that all you need to do is convert the tags in the Control Logix to DINTs.

One final tidbit to consider: where possible, it's often better to read, rather than write. If I have a PLC which is being written to by a remote PLC, I have no easy way of working out what is changing the data, unless the data exchange is very well commented. When dealing with an SLC and a Control Logix, it's quite common to do both the read and write in the CLX, simply because the SLC doesn't understand the CLX's tag-based addressing structure, and can't directly read from a tag. To set up an SLC to read a CLX, you have to do some mapping in the CLX to "simulate" SLC-type registers, like "N7:0". Due to this extra layer of complication, many people end up just doing both the read and the write from the CLX.

However, now you've got two Logix 5000 platforms, which will perform messaging to each other with no such qualms! If you feel so inclined, now might be a good time to investigate the possibility of converting the logic so that both PLC's read from the other, instead of one reading and writing.

And if you feel even more inclined, look into produced/consumed tags. It's another way of doing communications between two Logix-class PLC's, and in many cases is far superior to explicit messaging.

*disclaimer: horses for courses. There are perfectly valid reasons for writing rather than reading, and perfectly valid reasons for using explicit messaging over produced/consumed. It's possible that in your specific situation, the current arrangement is the best possible solution. But it's definitely worth thinking about.
 
I think this is getting a little more complicated than it needs to be.
First if you were reading and writing integer files to and from the SLC there isn’t any reason you can’t use INT tags in the new CompactLogix. However, if you do change over from integers to DINTs (double integer) then simply change the tags in the ControlLogix from INT to DINT. What’s important is the fill/tag size is the same (to keep it simple anyway). INTs are 16-bit words and DINTs are 32-bit words and keeping it simple means exchanging the same size words.
What hasn’t been said yet is you will need to change the path in the message instruction. When messaging to/from a SLC you don’t have to go past the IP address of the SLC. When going to/from a Logix you have to provide the IP address, the back plan and then the location of the processor (someone jump in if I have that incorrect. I don’t do that type of messaging very often).
Example: To SLC: LocalENB, 2, 192.168.1.1 To Logix: LocalENB, 2, 192.168.1.1, 1, 0
 

Similar Topics

Good Morning , I upgraded a Machine to a CompactLogix ( from a SLC 500), but I never knew that the SLC that I replaced communicated with a...
Replies
5
Views
2,470
I'm trying to read/write to an SLC5 with a ControlLogix L71 V35 plc that fails. The exact same code works on an L82S with V32. Is there a known...
Replies
9
Views
70
I'm ashamed to admit this but I've never had to replace a battery in a SLC. Some how been able to skip that task in all my years. So yesterday...
Replies
8
Views
209
I have a program that I've used 100 times. SQO settings: File N7:0, Mask 0FFFFh, Dest B3:1, Control R6:0, Length 8, Pos 2. Length & Position...
Replies
48
Views
792
Hello PLC friends. I've been going through a saga of diagnosing and fixing an old PLC setup that I inherited. I am learning as I go. Initial...
Replies
14
Views
298
Back
Top Bottom