this is just a GUESS – but here's what might be going on ...
One of them said "If you want a subroutine to run every scan, copy the first instruction and paste it right next to the original, tag them both the same then put an AFI in front of the copy.
let's change the wording a little – to this:
One of them said "If you want an FAL instruction to run every scan, copy the first instruction and paste it right next to the original, tag them both the same then put an AFI in front of the copy.
here's the trick (IF my guess is correct) ...
certain instructions (such as an FAL) are "transitional" ... in simplest terms, that means that they only execute whenever they see a transition (a change) from FALSE to TRUE ... in other words, if you put the FAL on an unconditional rung, then it will execute ONCE – but ONLY once ... in order to execute/function again, it would have to be scanned as FALSE – and then scanned again as TRUE ...
in normal situations, that would require TWO scans of the instruction – in order to obtain just ONE actual execution ...
I actually had a programmer send me a copy of the FIRST rung (Rung 0) shown below – with the following question:
I found this rung construction in a working program at my plant – and I don't understand it ... apparently the bottom FAL is USELESS – since it will never execute due to the AFI in front of it ... so to "clean things up" I deleted the branch with the bottom FAL and the AFI – leaving only the top FAL ... but then the remaining FAL wouldn't work ... so then I put the branch, the AFI, and the "extra" FAL back in – and everything started working again ... what's going on? ...
here's the answer:
the top FAL instruction sees TRUE logic coming in – and so it executes normally ... next the bottom FAL sees FALSE logic coming in – due to the AFI instruction ... this FALSE logic acts as a RESET for the CONTROL tag (MUTT) and gets things ready for the processor's next pass through the rung ...
so ...
when you took out the bottom FAL instruction, all that MUTT ever saw was TRUE – TRUE – TRUE on each pass through the rung ... specifically, there was NO "transition" from FALSE to TRUE ... more specifically, there was nothing to "trigger" the remaining FAL into operation again ...
now look at the second rung (Rung 1) shown in the figure below ... this is more along the lines of what I THINK that you read about in your "tips and tricks" ...
this would give the same "execute the FAL instruction on each scan" operation as the top rung that I've shown ...
frankly I do NOT like this type of construction – but it DOES work – and it's hard to argue with success ... personally I'd use an RES (Reset) instruction for MUTT to get the same "every scan" operation – rather than entering the FAL instruction twice ...
so ...
is there a chance that when you read the "tips and tricks" article, you simply misinterpreted what was written? ... as you pointed out, the statement doesn't really make any sense the way you quoted it – but maybe the terminology/definitions being used weren't precisely correct ...
like I said – this is all just a GUESS ...
can you give us a link (etc.) to where you read your "tips and tricks" article? ... or maybe a screen shot? ...
NOTE: in this discussion I've used the FAL instruction just as one example of a "transitional" type instruction ... there are other instructions which also work this same way ...
and just for completeness – since we started out talking about subroutines ...
in RSLogix5000 systems, a subroutine may be called into operation by using a FOR instruction ... this is in addition to the much more commonly used JSR instruction ...
.