On ladder 16 you are moving the value in N16:[N7:7] to N7:8, if the value of N7:7 was 99, then the effect would be to MOV N16:99 to N7:8. Then MOV N17:[N7:7] to N7:9, again if N7:7 was 99, then the effect would be to MOV N17:99 to N7:9.
I often use indirect addressing for analog alarms, write one alarm subroutine move the values to the correct registers, run the routine, index the register, and then check the next analog value.
Indirect addressing can save a lot of programming steps, when the exact same logic needs to be used on multiple registers. It also comes in handy for adding and averaging.
Here's one example:
http://forums.mrplc.com/index.php?autocom=downloads&showfile=339There should be an instruction somewhere in you program that indexes the value of N7:7, many times it will be an ADD instruction. When all the current logic is done, index the value of N7:7(ADD 1 to N7:7 and store in N7:7) and do again on the next indirect address. There should also be logic to "reset" the value in N7:7 to the starting value, which is usually 0 or 1, but can be any number.
People often explain indirect addressing like addresses, N16 is the street, and N7:7 contains the house number. So if you wanted to delivery papers to all the houses on N16 street, you would start with the first house, the house number contained in N7:7, then you call the home office and tell them N7:7 on N16 street is done, they increase the value in N7:7 by 1 and send you to the new address on N16 street.
Hope this helps, it may only confuse.
ken