So, erst mal wegen der VISA-Zeitüberschreitungen, stell mal das Lesen um:
Da deine Nachrichten IMMER mit einem \r\n enden, kannst du bei VISA-Read einfach eine "große" Zahl bei der Anzahl der Bytes einstellen, und stattdessen auf den Termination-Char warten.
Das hast du (zufälligerweise oder auch absichtlich) schon so konfiguriert.
VISA-Read wartet jetzt solange auf Zeichen, bis es den Termination-Char findet ODER bis die Anzahl der gewünschten Bytes dar ist.
Zusätzlich solltest du noch mögliche fehlerhafte Übertragungen abfangen. Es ist nicht ungewöhnlich, dass mal über RS-232 eine Nachricht ausbleibt. Das muss man halt entsprechend berücksichtigen.
Gruß, Jens
EDIT: Zum Problem aus Frage #21:
So weit ich bisher aus deinem Code schließe, überträgt dein Sensor einfach unaufgefordert immer wieder seinen Messwert. Da du an dieser Rate nichts einstellen kannst, macht es auch keinen Sinn, einen Wert "Pro Zeit [Min]" einzugeben.
Du musst dich also entscheiden: Soll eine Messung eine gewisse Zeit dauern oder x Werte erfassen? Alternativ könnte man noch beide Bedingungen per ODER verknüpfen.
EDIT 2: Das könnte z.B. so aussehen: