Ich versuche ein Möller Easy Steuerrelais via serieller Schnittstelle abzufragen.
Ablauf:
Via serieller Schnittstelle Abfragebefehl an die Easy senden
Die Antwort der Easy wird in eine Register Varable gelesen
Die Register Variable startet ein Script
Das Script wertet die seriellen Daten via $IPS_VALUE aus
Leider ist die Länge des empfangenen Datenstroms befehlsabhängig (keine konstante Länge) und hat am Schluss des Datenstromes noch eine 2-Byte Checksumme angehängt. Da heisst, ich kann mit dem Cutter nichts machen.
Die Länge des empfangenen Strings wird in Byte 2 mitgeteilt.
Problem:
Solange der Datenstrom nicht länger wie 8 Byte ist, funktioniert alles bestens.
Ist der empfangene Datenstrom länger (zum Beispiel 14 Byte) wird das Script zweimal ausgeführt/getriggert, einmal für die ersten 8 Byte und ein zweites Mal für die restlichen 6 Byte.
Kann man den seriellen Empfangsbuffer vergrössern damit IPS später triggert?
oder
Wie kann ich den zweigeteilten String wieder zusammensetzen?
Die Lösung mit dem RegVar_SetBuffer/GetBuffer ist gut. Die Tatsache, dass das Skript doppelt ausgeführt wird, sollte ja kein Problem darstellen. (Bitte niemals eine String Variable für Binärdaten nehmen. Das ist langsam und kann außerdem die Settings kaputt machen)
Da das Script über RegVar auch seriell ausführt wird, musst du keine Angst haben, dass „Daten“ gleichzeitig oder verschoben ausgewertet werden. Es wird alles nacheinander abgearbeitet.