Das Problem war, dass für den erneuten Aufruf der Funktion es nicht reicht xExecute auf FALSE zu setzen und dann wieder die Funktion aufzurufen, sondern die Funktion muss einmal mit xExecute:=FALSE durchlaufen werden, dann geht es.
Sieht bei mir so aus:
read_done:=FALSE;
com_read(hCom:=...