If you KNOW that the robot will ALWAYS stick ENTIRE RESPONSE in ONE TCP PACKET, then you only need to see when $MyTCPStream.InQueue > 0.
This is technically NOT "acceptable" TCP protocol (TCP is a network/framing layer, not app layer), but many "protocols" do it this way. "Technically", your robot COULD send 1 byte at a time over multiple TCP packets, and Do-more would just accept the "packets", one character at a time. HOWEVER, this means that the APP layer MUST have a "termination delimiter" such as <CR><LF> (see the typical TCP app layer messages). However, since whoever developed your robot comm protocol does not understand "framing", they most likely implemented "a TCP packet" EQUALS "a command response frame". (If you asked THEM if that's what they mean, I can tell you they would say "of course", BUT TECHNICALLY THAT IS BAD FORM, but Do-more can handle it!). Hence, just seeing the .InQueue go from 0 to > 0 means you "got the whole response packet".
Note: This would NOT work with a serial comm link since there is no "TCP packet" layer in RS-232/422/485 - it's just raw characters.