Well....
...I've looked at your code......
...........I see why you've been having such trouble....
Since it's not a very big program, I'm going to post it here as a picture so that anyone without RSLogix can follow it.
[attachment]
Soooooo...... where to begin? The first rung, I guess:
1. Generally, when internal bits are used, most programmers use bits in B3, not R6.EN. That's not to say that you can't, it just that it usually isn't done. R6 is called a "Control" file because there are certain instructions that need some memory for internal bookkeeping, and use R6 elements for it. Each R6 'element' is 3 words (=48 bits) long. You are using one bit out of the 48. This may be considered wasteful (not that you don't have lots of memory to play with).
2. A cross-reference reveals that R6:3.EN is latched on the very first rung, but never unlatched. I'm surprised that it is currently reset. Either you are doing that by hand, or this is a stripped-down version of the code.
3. You need to give some annotation to R6:6.EN. Since it's directly driven by I:0/0, you could call it "ON_SWITCH IS ACTIVE". Or you could replace it with I:0/0 everywhere you use it in the code.
Subroutine 6
4. You have latched R6:5.EN when the ON_SWITCH is set, and don't reset it until either a) the switch is reset, or b) the startup sequence timer is done. All well and good. But you have serveral problems with how you've coded it.
-- A. The Startup timer, once done, has no way to reset. It should reset if R6:5.EN is not enabled, but that is the very bit that calls the subroutine in the first place. Since the timer is not being scanned after you leave startup mode, the next time that you go into startup, the timer will ALREADY BE DONE, and so you'll leave startup mode as soon as you start.
-- B. You run the startup timer while switch_1 is not true. What happens if it becomes true (and stays true?) before the timer times out? You'll stay in startup mode, waiting for switch_1 to drop out.
Since you don't leave startup mode until that switch is true, I assume that being true is a desirable state. Without a P&ID or equivalent, I can't tell if this is a problem or not. But it bothers me.
Subroutine 7.
I can't tell just what you are trying to accomplish here, but I have my doubts that this routine works at all.
You start this routine with Switch_1 made (Rung 6:3 sets the bit that enables the JSR). Therefore R6:1.EN gets set (but won't seal, because the outputs are still on from the Startup Subroutine). i will seal on the second scan of this routine, though (see below), so that's probably good enough. Maybe. This could be another bit that remains true regardless of conditions. It get's set when first scanned, and will never be scanned when the conditions are false.
Rung 1 doesn't do anything, since the bit isn't used anywhere else in the program.
Rung 2 waits for Switch_1 to drop out. The problem is that on rung 3, all the conditions that drive the two outputs will be false (the timer will not be true, and switch_1 won't be true). So the outputs turn off, which may mean that switch_1 will never be untrue, unless the outputs were fighting nature in order to make it true.
Subroutine 8.
An unconditioned OSR will fire the first time it is scanned, and then never again until the PLC is put in program mode. Fortunately, you could delete that rung and all places where you use R6:7.EN and it wouldn't affect your code one bit.
I hope you take all of the above in the spirit of constructive criticism, and not an attack on your programming technique. You are new at programming these things, and it takes time to master them.