Studio5000 Compact Logix Structure

Bbarnett

Member
Join Date
Jul 2013
Location
United States
Posts
77
How would you all approach a system with:
1 robot
2 machines
in/out conveyor

The way I normally approach this is have all tags at the Controller scope:

Continuous task
-Main program
--Main routine (includes JSR instructions to subroutines)
--Input buffer routine
--Cell routine (such as doors, status light, etc.)
--Robot routine
--machine1 routine
--machine2 routine
--conveyor routine
--Output buffer routine
(where all routines contain all relevant logic such as alarms, logic, etc.)

Not sure if the 'standard' way would be something like below with as many tags in the Local scope and making use of parameters:

Continuous task
-Main program
--Main routine (any global things like 1s timer, etc.)
-Cell program
--Door routine
--Status light routine
-Robot program
--Input buffer routine
--Alarm routine
--Logic routines
--Output buffer routine
-Machine1 program
--Input buffer routine
--Alarm routine
--Logic routines
--Output buffer routine
-Machine2 program
--Input buffer routine
--Alarm routine
--Logic routines
--Output buffer routine
-Conveyor program
--Input buffer routine
--Alarm routine
--Logic routines
--Output buffer routine
 
I have two "template" structures. The first has five programs: IO Mapping, Housekeeping, Control, Alarming and Visualization. Within each program there is a main routine that calls all the other subroutines. I use this template for standalone, relatively simple machines.

Then I have a "process" template. It looks very much like your second example with programs for each area, and more or less the same routine structure.

For my money, I'll always have a standalone I/O mapping program. I will map each I/O type and chassis in it's own routine, but I want all of my I/O mapped in the same place, not spread out throughout the program. It's so much easier to see at a glance where you have spare I/O available if you know that every I/O point on each card is listed in the same routine, as opposed to having to cross reference to see if the input that's not shown here is shown in some other routine, and whether or not it's used or spare.
 
I used to buffer my IO sectionally like that, but now I just use one routine in the normal program, and one in the safety, to buffer all of the IO as it is laid out physically. Every point is accounted for, on every rack, whether used or not. Makes it a lot easier when adding/removing/changing things around later.


For current ControlLogix things (L8x) I don't even use a continuous task anymore, just make everything periodic.
 

Similar Topics

I have an array of 55 REAL values. Is there a way to multiply based on the array location ? I have 55 transfer belts that are equally spaced...
Replies
3
Views
154
Hi Hope you all are doing well. Iam working on a project with some AOI. I also hate no online edits... lol. My problem occurs when I use a UDT...
Replies
2
Views
167
I am not sure if this is possible but if there is a way, you guys would be the ones to know. I am currently working on a project where we are...
Replies
7
Views
226
Hi all. I'm having issues adding an ethernet module to my project in Studio500 v34. The device is a Fredericks Televac EthernetIP MX gateway which...
Replies
8
Views
372
The day of week program started changing day of week 2 hours early. It changes at 10 P.M. instead of 12A.M. Just started this year.
Replies
22
Views
2,688
Back
Top Bottom