Since you are using STL, I assume you are talking about IW200 in the S7-300, and not the 1200.
What you listed might technically work (I'm not sure), but it isn't really how it is supposed to be used.
Commands like PIW/PQW do a periphery read/write to go directly to the IO, at that specific point in the scan cycle. You can write Words, Double words (and maybe single bytes, too), via this method, but not single bits.
You can also use two commands (I think SFC14/15?) to write larger blocks of data directly to the IO.
The PLC buffers some of this data in what is called the Process Image at the beginning/end of the scan cycle. This is how people generally access digital data, with the standard "read inputs, execute code, write outputs" PLC scan people are used to. However, the PLC only buffers the amount of data that you specify in the HW Config. Data in the Process Image can be accessed as bits, bytes, words, or double words. Anything above that must be accessed by periphery access.
A common situation I see is for the Process image to automatically cover the first 256 bytes of the input and output data, but you would need to check your HW Config to see what is being used for your PLC.
You say you have 16 bytes being transferred starting at 200. As long as the process image is set to at least 216, you can access each bit by the I200.7 style, without needing to do anything special.
If your PI is set to something lower, like 128, then you would need to either increase the PI setting or use a peripheral read to copy the data. YOu shouldn't copy to the PI, which is what you tried to do in your code. Generally speaking, it isn't a good practice to try to write to inputs or read from outputs. You should use a DB as a buffer instead, as boneless suggested. If you want, you could use the SFC's I mentioned to copy the whole 16 bytes at once.