Scriptaufruf beim Variablen-Rücksetzen verhindern

Hallo,
gibt es eine Möglichkeit, das OnChange oder OnUpdate zu verhindern, wenn ich in dem Script die Variable „leere“?


$inbuf=Trim(GetValueString("comport"));
if( $inbuf=="" ) {
  return;
}

...

SetValueString("comport", ""); //clear buffer

Das führt zu einem weiteren Scriptaufruf :-(.

Ich denke nicht, dass du das verhindern kannst. Aber du könntest in dem Getriggerten Script abfragen ob die Variable comport != „“ ist.

Toni

Das spart nur die Zuweisung an $inbuf, aber dann läuft das Script ja eh’ schon ;-).

Ich habe bei hohem Telegrammaufkommen (bis zu 100/Sekunde) etwas Befürchtungen, dass der Rechner nicht richtig mitmacht.

Du kannst etwas anderes machen :slight_smile:

Stell dein RegisterVariable auf Overwrite. Im Script holst du dir den Inhalt, der das Script getriggert hat, per $IPS_VALUE ab. Das ganze klappt natürlich nur, wenn der Variableninhalt auch ein ganzes Paket ist, du also nicht einzelne Pakete synchronizieren musst. (ggf kannst du dein ComPort dafür verwenden mit CutChars)

Wenn doch kannst du eine 2. PufferVariable anlegen, auf die das Script nicht triggert und mit der du arbeiten kannst. Allerdings musst du das ganze dann mit Semaphoren und Locks richtig sichern. Sonst kann es passieren, dass du die Sachen in einer falschen Reihenfolge abarbietest.

paresy

PS: Für alle die $IPS_VALUE noch nicht kennen. In dieser Variable ist der Inhalt der TriggerVariable zum Triggerzeitpunkt. Es könnte nämlich passieren, dass bis zum Zeitpunkt der Scriptausführung bereits neue Daten über dem ComPort gekommen sind, die bei einer Overwrite Einstellung dann weg wären und man somit ein Paket verloren hätte.

Das sieht gut aus mit $IPS_VALUE. Dann kann ich mir Arrays und Schleifen sparen.

CutChars zerlegt passend, aber es wird pro Übergabestring (":M000210Bx064") ein Script gestartet.
Ich habe irgendwo im Forum gelesen, dass pro Script 3-4 MB Speicher notwendig sind. Dann muss ich wohl zu Sicherheit etwas nachlegen ;-).

In den Settings ist die maximale Anzahl parallel laufender Scripte auf 10 festgelegt. Das macht ca 30-40MB Ram die sich IPS nur für die PHP Threads krallt.

Das hat nichts damit zu tun, wie oft du ein Script ausführst oder wieviele Scripte du hast.

paresy