Bei COM Kommunikation gibt es kein Ende des Bytestroms. Je nach Timing kann es sein, dass du in einem Zyklus nur ein Teil des Strings verarbeitest und der Rest ist noch im Puffer des Systems. Hierzu musst du immer auf dein "StringReceived" Signal warten dann diesen zwischenspeichen. Anschließend diesen nach deiner Terminierung durchsuchen wenn ja String ausgeben wenn nein wieder fbReceive aufrufen und auf StringReceived warten dann wieder anfügen usw.

Wenn deine PLC sehr flink ist kann es sein, dass du nur wenige Bytes des Strings empfängst und der Rest einige Zyklen später erst ankommt.

Das A und O bei sowas ist immer:
Daten sofort abholen wenn diese bereit sind und in Zwischenpuffer packen
Diesen durchsuchen nach Terminierung
Wenn gefunden ==> String komplett ausgeben aus Zwischenpuffer
Wenn nicht gefunden ==> weiter einlesen (hierbei prüfen ob deine Puffergrenzen nicht überschritten werden sonst gibts Accessviolations)