Aktivität bei Änderung Systemvariable Typ Zeichenkette
Moderator: Co-Administratoren
-
- Beiträge: 255
- Registriert: 10.12.2016, 21:20
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 1 Mal
Aktivität bei Änderung Systemvariable Typ Zeichenkette
Hallo liebe Forumsmitglieder,
ich scheitere gerade an der Aufgabe, bei Änderung (nicht Aktualisierung!) einer Systemvariablen vom Typ Zeichenkette eine Aktivität auszuführen.
Zu Testzwecken habe ich folgendes Programm definiert: Die Variable SV.DateTime ist vom Typ Zeichenkette und wird durch ein anderes Programm jede Minute auf den aktuellen Wert von Datum/Uhrzeit gesetzt. Die Variable SV.DateTime.LOG wird protokolliert, um die Ausführung des Programms zu prüfen.
Unter Status und Bedienung -> Programme kann ich sehen, dass das Programm jede Minute ausgeführt wird, wenn sich der Wert von SV.DateTime geändert hat. Es wird aber weder der Dann noch der Sonst Zweig ausgeführt, was am fehlenden Protokolleintrag für die Variable SV.DateTime.LOG zu erkennen ist.
Führe ich per Start das Programm manuell aus, wird natürlich der Dann Zweig ausgeführt und das ist auch im Protokoll zu sehen.
Ändere ich das Programm für die Variable SV.DateTime auf "bei Aktualisierung auslösen", wird immer der Sonst Zweig ausgeführt.
Wie ist dieses Verhalten zu erklären? Ist es nach der "Logik von WebUI Programmen" plausibel oder handelt es sich um einen Bug oder ist es (ohne Script) schlichtweg nicht möglich, eine Aktivität bei Änderung einer Systemvariablen von Typ Zeichenkette auszuführen?
Bisher war ich davon ausgegangen, dass sich "bei Änderung auslösen" auf die Änderung des Inhalts der SV bezieht, aber das scheint nicht der Fall zu sein. Ich habe in das Feld "bei" nichts eingetragen, weil ich nicht auf einen bestimmten Wert prüfen möchte (es hilft auch nicht, dort irgend etwas einzutragen). Ich verstehe aber, dass es keine Änderung der Bedingung gibt, denn der Inhalt der SV ist immer unterschiedlich zum Inhalt von "bei".
Müsste dann aber nicht der Sonst Zweig ausgeführt werden, wie es auch "bei Aktualisierung auslösen" der Fall ist?
In diesem Testszenario könnte ich auch "bei Aktualisierung auslösen" nehmen, weil sich der Wert jedes Mal ändert. In einem anderen Fall wird aber eine Variable unregelmäßig geändert und dann möchte ich nur bei tatsächlicher Änderung eine Aktivität ausführen und nicht schon bei der regelmäßigen Aktualisierung.
Mir ist bewusst, dass es schon ein paar ältere Threads gibt, die in eine ähnliche Richtung gehen, aber entweder wurde die Problematik nicht klar herausgearbeitet oder es gab keine Lösung.
Kann mir jemand helfen oder mein ggf. fehlendes Verständnis erweitern?
Einen schönen Sonntag noch!
ich scheitere gerade an der Aufgabe, bei Änderung (nicht Aktualisierung!) einer Systemvariablen vom Typ Zeichenkette eine Aktivität auszuführen.
Zu Testzwecken habe ich folgendes Programm definiert: Die Variable SV.DateTime ist vom Typ Zeichenkette und wird durch ein anderes Programm jede Minute auf den aktuellen Wert von Datum/Uhrzeit gesetzt. Die Variable SV.DateTime.LOG wird protokolliert, um die Ausführung des Programms zu prüfen.
Unter Status und Bedienung -> Programme kann ich sehen, dass das Programm jede Minute ausgeführt wird, wenn sich der Wert von SV.DateTime geändert hat. Es wird aber weder der Dann noch der Sonst Zweig ausgeführt, was am fehlenden Protokolleintrag für die Variable SV.DateTime.LOG zu erkennen ist.
Führe ich per Start das Programm manuell aus, wird natürlich der Dann Zweig ausgeführt und das ist auch im Protokoll zu sehen.
Ändere ich das Programm für die Variable SV.DateTime auf "bei Aktualisierung auslösen", wird immer der Sonst Zweig ausgeführt.
Wie ist dieses Verhalten zu erklären? Ist es nach der "Logik von WebUI Programmen" plausibel oder handelt es sich um einen Bug oder ist es (ohne Script) schlichtweg nicht möglich, eine Aktivität bei Änderung einer Systemvariablen von Typ Zeichenkette auszuführen?
Bisher war ich davon ausgegangen, dass sich "bei Änderung auslösen" auf die Änderung des Inhalts der SV bezieht, aber das scheint nicht der Fall zu sein. Ich habe in das Feld "bei" nichts eingetragen, weil ich nicht auf einen bestimmten Wert prüfen möchte (es hilft auch nicht, dort irgend etwas einzutragen). Ich verstehe aber, dass es keine Änderung der Bedingung gibt, denn der Inhalt der SV ist immer unterschiedlich zum Inhalt von "bei".
Müsste dann aber nicht der Sonst Zweig ausgeführt werden, wie es auch "bei Aktualisierung auslösen" der Fall ist?
In diesem Testszenario könnte ich auch "bei Aktualisierung auslösen" nehmen, weil sich der Wert jedes Mal ändert. In einem anderen Fall wird aber eine Variable unregelmäßig geändert und dann möchte ich nur bei tatsächlicher Änderung eine Aktivität ausführen und nicht schon bei der regelmäßigen Aktualisierung.
Mir ist bewusst, dass es schon ein paar ältere Threads gibt, die in eine ähnliche Richtung gehen, aber entweder wurde die Problematik nicht klar herausgearbeitet oder es gab keine Lösung.
Kann mir jemand helfen oder mein ggf. fehlendes Verständnis erweitern?
Einen schönen Sonntag noch!
Gruß Ralf
- blackhole
- Beiträge: 3730
- Registriert: 21.07.2015, 14:03
- System: CCU
- Hat sich bedankt: 184 Mal
- Danksagung erhalten: 587 Mal
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Der Trick ist, hier mit "ODER" und irgendeinem String ("EGAL") zu arbeiten:
SV.DateTime muss so nur irgendeine Änderung erfahren, damit das Programm getriggert wird. Da SV.CCU.Status bei NORMAL ist, ist durch die Oder-Verknüpfung die Bedingung völlig unabhängig vom Inhalt der Variable SV.CCU.Status erfüllt und der DANN-Abschnitt wird ausgeführt.
Code: Alles auswählen
Bedingung: Wenn...
----------------------------------------------------------------------------
Systemzustand SV.CCU.Status bei NORMAL nur prüfen
ODER
Systemzustand SV.DateTime bei EGAL bei Änderung auslösen
----------------------------------------------------------------------------
-
- Beiträge: 255
- Registriert: 10.12.2016, 21:20
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 1 Mal
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Habe ich gemacht und dann wird das Programm gar nicht erst ausgeführt, was für mich auch logisch ist, weil beide Bedingungen auf "nur prüfen" stehen.
Ich möchte, dass eine Aktivität (Dann oder Sonst ist mir egal) NUR DANN ausgeführt wird, wenn sich der Inhalt der SV ändert.
Edit:
Wenn die die SV auf "bei Änderung" stelle, wird der DANN Zweig einmalig ausgeführt. Ist für mich erklärbar, wenn die interne Logik den Inhalt der SV mit "EGAL" vergleicht, was ja beim ersten Mal eine Änderung des Vergleichs ergibt, aber bei weiteren Ausführungen nicht mehr. Es wird dann aber auch nicht etwa der SONST Zweig ausgeführt.
Wie kann es sein, dass ein Programm zur Ausführung kommt, aber weder DANN noch SONST ausgeführt werden? Das sollte doch nicht sein?
Ich möchte, dass eine Aktivität (Dann oder Sonst ist mir egal) NUR DANN ausgeführt wird, wenn sich der Inhalt der SV ändert.
Edit:
Wenn die die SV auf "bei Änderung" stelle, wird der DANN Zweig einmalig ausgeführt. Ist für mich erklärbar, wenn die interne Logik den Inhalt der SV mit "EGAL" vergleicht, was ja beim ersten Mal eine Änderung des Vergleichs ergibt, aber bei weiteren Ausführungen nicht mehr. Es wird dann aber auch nicht etwa der SONST Zweig ausgeführt.
Wie kann es sein, dass ein Programm zur Ausführung kommt, aber weder DANN noch SONST ausgeführt werden? Das sollte doch nicht sein?
Zuletzt geändert von almrausch am 17.09.2017, 11:50, insgesamt 1-mal geändert.
Gruß Ralf
- blackhole
- Beiträge: 3730
- Registriert: 21.07.2015, 14:03
- System: CCU
- Hat sich bedankt: 184 Mal
- Danksagung erhalten: 587 Mal
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Ist das so?almrausch hat geschrieben:... weil beide Bedingungen auf "nur prüfen" stehen.
Genau das passiert, wenn Du es so wie von mir beschrieben machst.almrausch hat geschrieben:Ich möchte, dass eine Aktivität (Dann oder Sonst ist mir egal) NUR DANN ausgeführt wird, wenn sich der Inhalt der SV ändert.
-
- Beiträge: 255
- Registriert: 10.12.2016, 21:20
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 1 Mal
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Jetzt nicht mehr. Zum einen hattest du deinen Beitrag geändert und zum anderen habe ich selbst auf "bei Änderung" umgestellt und dann meinen Beitrag erweitert.blackhole hat geschrieben:Ist das so?
Meinem Ziel komme ich bisher nicht näher ...
Eben nicht.blackhole hat geschrieben:Genau das passiert, wenn Du es so wie von mir beschrieben machst.
Zur Klarstellung: "bei Aktualisierung" führt zur Ausführung des DANN Zweigs, aber eben auch dann, wenn sich der Inhalt der SV nicht geändert hat, sondern mit gleichem Wert nur aktualisiert wurde.
Die Prüfung "bei Änderung" führt zur Ausführung des Programms, aber weder zur Ausführung von DANN noch von SONST. Und das darf doch eigentlich nicht sein.
Gruß Ralf
- blackhole
- Beiträge: 3730
- Registriert: 21.07.2015, 14:03
- System: CCU
- Hat sich bedankt: 184 Mal
- Danksagung erhalten: 587 Mal
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Das ist korrekt.almrausch hat geschrieben:Zur Klarstellung: "bei Aktualisierung" führt zur Ausführung des DANN Zweigs, aber eben auch dann, wenn sich der Inhalt der SV nicht geändert hat, sondern mit gleichem Wert nur aktualisiert wurde.
Bei dem von mir geposteten Programm wird das funktionieren. Das habe ich mehrfach so im Einsatz.almrausch hat geschrieben:Die Prüfung "bei Änderung" führt zur Ausführung des Programms, aber weder zur Ausführung von DANN noch von SONST. Und das darf doch eigentlich nicht sein.
Warum das so ist, habe ich im gleichen Beitrag beschrieben.
-
- Beiträge: 255
- Registriert: 10.12.2016, 21:20
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 1 Mal
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Das Programm sieht jetzt so aus: Sowohl SV.DateTime als auch SV.DateTime.LOG werden protokolliert. Im Systemprotokoll sehe ich die Änderungen von SV.DateTime und zeitgleich wird auch lt. Status "letzte Ausführung" das Programm ausgeführt. Aber es gibt keinen Eintrag für SV.DateTime.LOGblackhole hat geschrieben:Bei dem von mir geposteten Programm wird das funktionieren. Das habe ich mehrfach so im Einsatz.
Warum das so ist, habe ich im gleichen Beitrag beschrieben.
Was kan ich noch ändern, prüfen, loggen oder was auch immer? Liegt es evtl. an der 2.27.8?
Gruß Ralf
- blackhole
- Beiträge: 3730
- Registriert: 21.07.2015, 14:03
- System: CCU
- Hat sich bedankt: 184 Mal
- Danksagung erhalten: 587 Mal
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Ich habe keine Idee warum das bei dir nicht funktioniert. Programm komplett neu anlegen wirst Du ja sicherlich schon versucht haben.almrausch hat geschrieben:Liegt es evtl. an der 2.27.8?
Ansonsten kann ich dir nur sagen, dass es nicht an Firmware 2.27.8 liegt, zu der Zeit hatte ich das schon im Einsatz.
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Kann ich so bestätigen wie Blackhole. Funktioniert bei mir so auch einwandfrei.
Das einzige, was ich anders habe, ist keine Punkte in dem Namen der Systemvariablen.
Es sollten nicht zu viele Programme gleichzeitig auf die selbe Änderung triggern oder parallel ein Programm im Sekundentakt loslaufen. Wenn die CCU am Limit ist, hatte ich es auch schon mal, dass einzelne Programme nicht ordnungsgemäß starteten.
Ein Klassiker ist auch auf Aktualisierung einer Variablen zu triggern, die man im Programm selbst ändert.
Das einzige, was ich anders habe, ist keine Punkte in dem Namen der Systemvariablen.
Es sollten nicht zu viele Programme gleichzeitig auf die selbe Änderung triggern oder parallel ein Programm im Sekundentakt loslaufen. Wenn die CCU am Limit ist, hatte ich es auch schon mal, dass einzelne Programme nicht ordnungsgemäß starteten.
Ein Klassiker ist auch auf Aktualisierung einer Variablen zu triggern, die man im Programm selbst ändert.
sehr selten im Forum
Re: Aktivität bei Änderung Systemvariable Typ Zeichenkette
Nein, nein und immer wieder nein.almrausch hat geschrieben:Bisher war ich davon ausgegangen, dass sich "bei Änderung auslösen" auf die Änderung des Inhalts der SV bezieht,
Bei "Änderung auslösen" heißt, dass das Programm gestartet wird, wenn sich der Wahrheitsgehalt der Bedingung ändert, also wenn sich in Deinem Beispiel der Wert der Systemvariable:
1. von "" (leere Zeichenkette) auf irgendetwas ändert
2. von irgendetwas auf "" (leere Zeichenkette) ändert.
Der Wahrheitgehalt der Bedingung ändert sich nicht, wenn sich der Inhalt von z.B. "01.01.2018" auf "02.01.2018" ändert.
Somit wird das Programm selbstverständlich nicht gestartet.
.