Imagine that you have developed a section of code for a given purpose, let's say starting, stopping and monitoring a motor for example, that you would like to use for all your motors. You select, copy and paste it into each new place that you want it, changing tag references as needed. An AOI automates that process.
An Add-On Instruction (AOI) would be that section of code but with no specific tags defined. You let it know what type each tag is and write the logic. But, in the end, it is a template.
When you actually want to use it with real information you put it in place just like any other instruction. You fill in the actual tags it will use as inputs and which tags it will affect as outputs.
Sometimes a tag provides information and is affected as well. In that case it is defined as an In/Out tag. This is also used if the tag type is not one of the standard low level (atomic) types (BOOL, SINT, INT, DINT).
That's it, remember, the AOI is a template for an instruction (just like the definition of a BOOL, SINT etc is a tag template). Once it is imported or created the AOI will appear in the list of instruction types which you can select.
Just as when you want a new DINT tag you create a unique name and declare it to be of that type, the AOI, once you choose it, requires that you give that particular 'instance' its own unique name.
[I'm obviously a little slow. Definitely get and read the manual.]