General
Well done. It's working so "if it ain't broke ..." may apply, but you asked ...
Cascading timers will work, but in three months it will be difficult to parse at best, if not outright confusing at worst, when you are trying to diagnose some random sensor failure. The paucity of informative rung comments only exacerbates this problem. Cf. the post by @AutomationTechBrian.
If we stick with the cascaded timers, at a minimum the timer structures should be re-distributed, so T4:3/DN starts T4:4, T4:4/DN starts T4:5, etc.; that way it's easier to follow the sequence when are looking at it in the future.
It looks like there is now an additional 30s delay between the closing of one blowdown value and the opening of the next one. That means there will be times during a blowdown event (B3:0/0 is 1) when all three valves will be closed, so the [TON T4:2] on rung 0003 will start timing, but not reset before it expires. That should not cause any problems.
The ordering of the rungs may not matter, so although I understand the current ordering is based on the sequence in which events occur, it may be easier to parse (understand) if rungs are grouped by function. This is a style/personal preference issue, but something to think about. E.g.
- The lower output branches on Rungs 0007/0009/0011 of [XIC T4:n/DN OTE O:0/[n-2] are the main outputs, and could be grouped by themselves at the end.
- Similarly, Rung 0013 is functionally part of the starting and stopping of the cascading timers, so 0013 could be grouped with Rungs 0003-0006.
Specific
Rung 0001: [XIC I:0/3] is redundant; the [XIC T4:0/DN] in series with that cannot evaluate True unless I:0/3 is already 1 (cf. Rung 0000).
Rung 0002: [XIC I:0/3] is redundant here too; same logic as the previous case, but going through B3:0/2 as well.
Rung 0001: the lower output branch [XIC T4:1/DN RES T4:0] can be removed: T4:0 will already be reset on Rung 0000 when T4:1/DN becomes 1 because of the [XIO T4:1/DN] feeding the [TON T4:0]
Rungs 0000/0001/0002: B3:0/2 is redundant with O:0/0; an unconditional [OTE O:0/0] could be added as an output branch to Rung 0001, around/in-parallel-with [TON T4:1], because the input rung already has [XIC T4:0/0]; that would eliminate current rung 0002 entirely.
Rung 0003: the [XIO O:0/4] will evaluate to True in the delay times between valve 1 closing and valve 2 opening, and between valve 2 closing and valve 3 opening. [XIO B3:0] might be a better choice here.
Rungs 0005/0006: there are two counter resets, [RES C5:0], happening in two different places; I think it would be better to drop it from lower output branch of Rung 0006 and make Rung 0005 be [BST XIO I:0/1 NXB XIC B3:0 RES C5:0].
Rung 0012: [XIC B3:0/0] is redundant; none of the ORed [XIC O:0/n] branches that follow in series with can evaluate True if B3:0/0 is not already 1.
Run 0012: as noted above, with the delay times between one valve closing and the next opening, the "In Progress" output 0:0/4 will be off even though a blowdown event has started. I assume that is what is desired.
Rung 0013: [XIC T4:5/DN] is all that is needed on the input (left) side. The double [XIC T4:3/DN] instruction, one of which is probably meant to be [XIC T4:4/DN], must both evaluate to True before T4:5/DN becomes 1, so they can both be removed.
Rungs 0006/0007: B3:0/0 is redundant with T4:3/DN. So the logic driving the upper output branch [OTL B3:0/0] on Rung 0006 could be moved to be the Start portion of a Start/Stop pattern on the input feeding the [TON T4:3] on Rung 0007. An extra branch, [XIC T4:3/EN] could handle the seal-in to keep the TON alive, and then an [XIO T4:5/DN] in the middle would handle the Stop portion of the Start/Stop pattern to run the T4:3 timer, which would also allow you to eliminate current rung 0013, because the expiry of T4:5 would cascade to reset all of the timers. B3:0/0 would no longer be used anywhere. The only change in behavior would be that the program loses the Latch of B3:0 if the PLC loses power or otherwise leaves and then re-enters RUN mode; we don't know if the Latch/Unlatch of B3:0/0 is there to continue a blowdown event across a PLC mode change or not, or is just how OP chose to handle the logic.
Summary
With the exception of that last item to eliminate B3/0, I think removing redundancies, and improving the comments, will make the program easier for the next person to understand, especially if that next person is OP three months hence.