My understanding is that the standard for PLC programming, IEC 61131-3, says that you technically aren't supposed to read a tag marked as an output. If you are using an FC, it won't remember the value of the output from last scan, so it might return as an error.
Because you are using FB's, it does recall the value of the output from last scan. This means that it will allow you to do it, but warns you to make sure it is actually what you want to do.
I think the settings have a checkbox for "IEC check" that you can turn off, but I don't recommend that. The method I typically use is the same thing Joltron said, to use STATs as all the internal tags, and then set the outputs at the end of the block. If I want to read the value of an output, I'll typically create the output as #tagname and then make the STAT value #tagname_internal or #tagname_stat. Then at the end of the block, I set #tagname to the value of #tagname_internal.
Because you are using FB's, it does recall the value of the output from last scan. This means that it will allow you to do it, but warns you to make sure it is actually what you want to do.
I think the settings have a checkbox for "IEC check" that you can turn off, but I don't recommend that. The method I typically use is the same thing Joltron said, to use STATs as all the internal tags, and then set the outputs at the end of the block. If I want to read the value of an output, I'll typically create the output as #tagname and then make the STAT value #tagname_internal or #tagname_stat. Then at the end of the block, I set #tagname to the value of #tagname_internal.