To add to Ron's wonderful explaination. The last time I used indirect addressing was to track pallets.
And I never had any problems using it. So look as you make a could map of what you are doing. I always use a spreadsheet when doing any large programming so I know what everything is and where it's going. You'll see in the example program below.
I defined a B9 file in my plc. Then I created a list of bits and what they mean. The word files in my program are the pallet ID numbers. So each word has up to 16 bits of status per pallet.
You download the source PLC code here and everything else that came with this program. PDF's are included.
http://www.mrplc.com/cgi-bin/code/filedisplay.cgi?category=machab
Indirect Addressing - Pallet Tracking "Brick Yard 500" 1.1
So basically everytime a pallet came into a reading station, I read the pallet id, and transferred that information like so:
Say pallet number 5 entered the station. I read the pallet ID, then using indirect addressing, I did a "lookup" of the status of the pallet.
B9:[pallet_id]/0
So in this case, my address would be: B9:5/0.
And bit 0 in my program means, "Base Present".
So using the same ladder code, the next pallet into the station could be 32. So I can lookup the status of pallet 32 like:
B9:[pallet_id]/15
So in this case, ny new address would be: B9:32/15
And bit 15 in my program means, "Good Part".
Hopefully I explained that ok.