Working with different number of chassis slots

rodpin

Member
Join Date
Jul 2017
Location
Rio de Janeiro
Posts
6
Hello everyone!!!

I've been following the forum for a while and first would like to thanks for all the support I had so far, but I couldn't find an answer for a question I have now...

Well, here at my laboratory I have a Allen Bradley 10-slot Chassis, but I've received a project that uses a 13-slot chassis.

For my laboratory purposes, I don't need the last 3 slots, so I could remove them, but there are other parts of the code (that I won't be messing with) that needs those cards (most comms with client's OPC server that is not part of my scope now).

Is there any way to "deceive" the PLC to think it is a 13-slot so I can use the 10-slot and make the cards that I really need to communicate?

Thanks a lot in advance!
 
Last edited:
Hello everyone!!!

I've been following the forum for a while and first would like to thanks for all the support I had so far, but I couldn't find an answer for a question I have now...

Well, here at my laboratory I have a Allen Bradley 10-slot Chassis, but I've received a project that uses a 13-slot chassis.

For my laboratory purposes, I don't need the last 3 slots, so I could remove them, but there are other parts of the code (that I won't be messing with) that needs those cards (most comms with client's OPC server that is not part of my scope now).

Is there any way to "deceive" the PLC to think it is a 13-slot so I can use the 10-slot and make the cards that I really need to communicate?

Thanks a lot in advance!

Assuming a couple of things ... ControlLogix chassis, RS Studio

Download the program into the ControlLogix, telling it that it's in a 13 slot chassis. The code that references the other 3 slots will show rung faults ... but I think that it runs fine. But I think you'd have tried this already ... so ...

I'm not aware of a way to deceive the ControlLogix L71, L83, etc that the rack is different. If you need to change to a 10 slot rack - not your first choice - delete their code that references the other slots, put all of your code into one or more subroutines, then test it. When it runs, export the subroutine(s). Import them into the original code (it will create new tags as required) and send it back to them. Since you can't test all at once, warn them to test the program for function with the stuff that you could not test it with.
 
Thanks for the idea, @thingstodo!

It is a L71 chassis. And when I try to download to the controller (that is on a different chassis) it can't communicate with the cards that I need on the "10-slot" chassis. Actually, it says that it cannot communicate with the rack because it's not on the network config, but, I can see the chassis on RSNetworx. Maybe deleting the parts that I don't use can be a solution, but I just wanted to avoid messing too much on it, since my idea is just to deliver the code so our field technician can simply download it.
 
Welcome to the PLCTalk forum community !

Please clarify a little more: I think you're talking about a "Remote I/O Chassis" that is defined as a 13-slot rack in the ControlLogix program, but is physically a 10-slot rack.

In the local chassis with the CPU, the size of the physical rack is not relevant as long as the CPU is actually placed in the slot for which it is configured.

But "Remote Racks" with "Rack Optimized" connections across ControlNet or EtherNet/IP are set up to move all the discrete data from a specific number of slots in one big packet. If you have a Rack Optimized connection for 13 slots, then it can't work with a 10-slot chassis.

But you mentioned that the absent slots contain network interface modules, so those won't use "Rack Optimized" connections, but rather "Module Direct Connections". Those can be allowed to fail by themselves.

Try reconfiguring the Rack Optimized connection for a 10-slot chassis.
 
Welcome to the PLCTalk forum community !

But "Remote Racks" with "Rack Optimized" connections across ControlNet or EtherNet/IP are set up to move all the discrete data from a specific number of slots in one big packet. If you have a Rack Optimized connection for 13 slots, then it can't work with a 10-slot chassis.

But you mentioned that the absent slots contain network interface modules, so those won't use "Rack Optimized" connections, but rather "Module Direct Connections". Those can be allowed to fail by themselves.

Try reconfiguring the Rack Optimized connection for a 10-slot chassis.

Thanks for the idea! I try that! And you're right, it's a remote I/O Rack, not the same where the controller is. When I delete the cards that I´m not using and change to a 10-slot chassis, I receive several errors because there are some tags that depend on those cards, making it impossible to download it to the controller.

Either mess around with rack sizes, or shell out for a second hand rack.

I was thinking about asking some budget for that, my time is short...
 
I poked around RSLogix 5000 to remind myself of the limitation.

You can configure a Rack Optimized connection of any number of slots; it's not limited to 4, 7, 10, 13. But once you create an I/O module of any type (R.O. or Module direct or Listen Only), you can't re-define the Rack Optimized connection to be any smaller than the size indicated by the rightmost module.

So your only options are to delete those modules, and the logic associated with them, from your project in order to test it. Hopefully that logic is fairly self-contained in routines that operate those communications modules.
 
Ken Roach said:
...your only options are to delete those modules, and the logic associated with them, from your project in order to test it. Hopefully that logic is fairly self-contained in routines that operate those communications modules.

This is a classic example of where Buffering the I/O for the modules could be used...

(This is not for your benefit Ken!)

Buffering Input data is a technique in which the logic references a copy of the input data from the module-defined data type.

Buffering Output data is a technique in which logic modifies a copy of the output data from the module-defined data type.

We can copy parts of a module-defined data type to and from single atomic tags, such as a DINT for a 32 bit SLOT, or we can copy an entire module-defined data type structure to and from a user-defined similar structure.

That's just a synopisis. I'm not going to go all into the topic of Buffering I/O.

For the example in this thread...

In the project, let's say we have Buffered an Input module in Slot 12 (last) of the distributed I/O 13 slot chassis as follows...

Using a CPS instruction (Copy Synchronous)
Source: Dist_IO_01:I.Slot[12].Data (DINT within module-defined data type)
Dest: Buffer_In_Slot_12 (DINT user-defined within Controller Tags)

Anywhere in the project's logic that we need to reference theses Input tags, we do so by referencing the Buffer Input tags and not the module-defined tags. Likewise we can do the same for Output data, but I want to keep this example simple and as short as possible. So I'm just focusing on one Input module in one slot that will "dissapear".

For the original configuration of a distributed I/O 13 slot chassis under the communications module, the module-defined tags will include up to the I.Slot[12].Data DINT member (0-12 slots). However, when we change the distributed I/O chassis size to a 10 slot chassis, it will now only include up to the I.Slot[9].Data DINT member (0-9 slots). This will make the reference to Dist_IO_01:I.Slot[12].Data in the CPS instruction invalid.

In this case, we can simply create a placeholder or substitute user-defined tag of a similar description so as to retain a reference to what the original module-defined tag was...

Actual module-defined memeber: Dist_IO_01:I.Slot[12].Data DINT
User-defined reference placeholder: ph_Dist_IO_01_ISlot12Data DINT

Now when the project is verified the CPS will have valid operands and will execute when running by copying blank data from the reference placeholder tag into the Buffer tag. Likewise for Output data, a CPS would copy the Buffer tag data to the user-defined reference placeholder tag.

Depending on how many members within a module-defined data type that you have chosen to interact with seperately, you would still only have to create a few tags and modify a few copy instructions. If an entire module-defined data type structure is being copied to or form, then this is further simplified down to a couple of tags and edits.

This may help to simplify the process of adding and removing actual modules and will, more importantly, allow you to keep the existing logic which is referencing, and/or looking to modify, the I/O data for the modules you wish to remove.

Regards,
George
 
Oh sorry, I forgot to add at the end...

rodpin said:
...my idea is just to deliver the code so our field technician can simply download it.

When you send the project to the Technicians to download, either you can copy edits you might make in your "10 slot" copy to the original "13 slot" copy, or you can change the edited "10 slot" copy back to a "13 slot", or they can do it by changing it to "13 slot" and replacing the descriptive reference tags you provide with the user-defined placeholders to the now available equivalent module-defined tags.

I suppose, having just thought about it, if they can download, and they have the software, and unless they are only to perform very basic controller interactions, you could also send them the edits from the "10 slot" copy for them to import into their "13 slot" copy, and then download?

G.
 
Last edited:
This is a classic example of where Buffering the I/O for the modules could be used...

I agree that this would be a great solution, for the OP. Perhaps not for the tech who is installing, depending on experience.

In the past, my use of buffering on I/O has been challenged by maintenance people. The general gist of it was "you're making it complicated so that only you can do the maintenance".

Buffering offers benefits, but the cross reference takes a few more steps when you are trouble-shooting. Those unfamiliar with the method can get confused.
 
thingstodo said:
I agree that this would be a great solution, for the OP. Perhaps not for the tech who is installing, depending on experience.

In the past, my use of buffering on I/O has been challenged by maintenance people. The general gist of it was "you're making it complicated so that only you can do the maintenance".

Buffering offers benefits, but the cross reference takes a few more steps when you are trouble-shooting. Those unfamiliar with the method can get confused.

I'm still not going to get into the whole Bufering I/O topic, and the "pros and cons" here, as I didn't want to turn the thread topic into "that". It's just a "solution" I'm suggesting for situations "like" this. If the OP chooses to "retro-implement" it then that's fine, but purchasing a correct size chassis might also be the better way to proceed here. However, unless you want to stock all chassis sizes in your "laboratory", then in the course of your work you may end up meeting varying chassis sized projects and be faced with this type situation regularly.

If you are developing original projects then Buffering and applying placeholder tags, or indeed "to be" Alias tags, is a common practice where you don't yet have the hardware, or will know the slot assignment for the hardware, especially on the versatile ControlLogix chassis based systems. Once the hardware and its layout is later known, you can replace the temporary placeholder tags or edit the "to be" Alias tags with the actual module-defined tags.

You could choose to only implement the Buffering in the development project, for the very reason brought up in this thread, and when deploying to the field issue a non Buffered copy to the technicians, or whomever.

I'm suggesting Buffering, in this thread, solely as a solution for a developer to overcome the need to delete possibly large amounts of logic while removing or reducing the hardware. I'm not discussing using Buffering in general here. That is for another thread, I feel.

Having said that, I will add that to help overcome the apparent "overcomplication" that some may feel Buffering I/O might introduce, and also the newer Program Parameters feature which also provides Program-Scope Buffering; good tag descriptions and rung comments are very important in explaining these slightly more advanced methods of handling I/O data. In a routine, I might often use an opening No Operation (NOP) rung with a lenghty comment explaining what is about to be presented to you in the following rungs or entire routine.

If anyone is interested in reading up a bit on all this, then here is a reference manual which includes some relevant information...

1756-PM004H-EN-P - Logix 5000 Controllers I/O and Tag Data Programming Manual

But I don't want to discuss it here, unless the OP is interested!

Regards,
George
 
Last edited:

Similar Topics

Hello All, I have two CompactLogix that I would like to network together however, they have different IP subnets. Is there a way to connect them...
Replies
15
Views
4,425
Hello All. I need to network two CompactLogix on different subnets. One is 192.168.1.22 and the other is 10.10.30.15. Since I have to bring a...
Replies
4
Views
1,765
I have got a strange issue during developing the project where the FT View application is interacting with PLC via the OPC UA server. So, there is...
Replies
3
Views
2,012
Hello, Need some help. Lets say we have LAN1: PLC1, PLC2 LAN2: PLC3 PLC1 accessing data on PLC2, now PLC3 needs to access PLC2 data too, but...
Replies
10
Views
3,657
I'm fairly new to Rockwell software, I've had some basic training in the past but nothing too advanced. My company and I use Reliable products for...
Replies
0
Views
28
Back
Top Bottom