AC_GetLoggedValues() in Variablenereignis-Skript

Ich habe ein Skript, welches bei Änderung von Variablen aufgerufen wird und dann ein leserliches Log der letzten Werte dieser Variablen erzeugt. Dabei fällt mir auf dass hin und wieder der jeweils neuste Wert fehlt. Ich hole mir in dem Skript die geloggten Werte mittels AC_GetLoggedValues().

Kann es passieren, dass ich im Ereignisskript mittels o.g. Funktion die aktuelle Änderung die das Ereignis ausgelöst hat noch nicht „sehe“? Ist die Reihenfolge „Eintragen ins Archiv“ und „Ereignis das auf Änderung reagiert“ deterministisch?

Das dürfte ebenfalls mit dem Commit-Intervall zusammenhängen, wie hier beschrieben:

2 „Gefällt mir“

Danke für den Hinweis. Das bedeutet ja, dass es zwei Wege gäbe, das Problem zu lösen bzw. umgehen - entweder ich rufe das Skript in regelmäßigen Intervallen auf (träge aber wenigstens erscheinen die Einträge „irgendwann“ im Log) oder ich führe nebenher mein eigenes Protokoll über die „kürzlichen“ Änderungen.

Muss mir mal überlegen wie ich damit umgehe.

Nachtrag: Interessant ist angesichts des großzügigen Intervalls allerdings, dass dieser Effekt nur sporadisch aufzutreten scheint.

Wobei ich gerade noch über eine Sache gestolpert bin, bei AC_GetLoggedValues() sollte ich doch Rohdaten bekommen. Sind diese denn überhaupt vom CommitInterval betroffen?

Kann ich dir nicht mit Sicherheit sagen, ich denke aber schon. Es geht ja um das Schreiben der Daten generell. Ich glaube nicht, dass sich die Funktion einen Teil der Daten aus dem RAM holt und den Rest von der Platte.

Aber sicher wird es wohl @paresy sagen können.

1 „Gefällt mir“

Auch ich verwende AC_AddLoggedValues und AC_GetLoggedValues um das Archiv zu bearbeiten.
Hier kommt es des öfteren zu Inkonsistenzen im Archiv.
Ich habe das CommitIntervall schon auf 10 Sekunden gesetzt und warte entsprechend lange. Das ganze ist nicht zeitkritisch, aber zeitgleich kann ja die Variable/Archiv auch durch andere Aktionen verändert werden.
Eventuell könnten die Funktionen erst zurückkommen, wenn der Wert geschrieben ist oder die Queue (die es ja dann irgendwo geben muß) mit berücksichtigen. Ich glaube auch das manchmal Werte in das Archiv einer anderen Variablen geschrieben werden, wenn die Funktionen zu häufig verwendet werden.
Das gilt auch für AC_ReAggregateVariable, die ich ungern in Skripten verwende, da man sich nie sicher sein kann, wenn das Archiv wirklich bearbeitet ist.