NEWS
Blockly: sporadisch werden falsche Werte geschrieben
-
Hallo,
ich berechne mit Blockly einen Sollwert und begrenze ihn zwischen 0 und 5500:
Sporadisch hält sich Blockly nicht an die Begrenzung und gibt dann für eine < 1 Sek. irre hohe oder niedrige Werte raus:
Ich habe schon alles durchsucht, finde aber die Ursache nicht. Die Einzelwerte der Rechnung haben keine Ausreisser und wenn sollten diese ja durch "begrenze" bei 0 bzw. 5500 begrenzt sein.
Hat jemand eine Idee, dass Verhalten zu debuggen?
-
@fu_zhou sagte:
gibt dann für eine < 1 Sek. irre hohe oder niedrige Werte raus:
Ich sehe keinen. Die Quelle für negative Werte ist nicht Javascript, sondern s7.0.
-
Ja, ich habe auch schon in diese Richtung gesucht und daher (eigentlich) ausgeschlossen, dass die S7 die Variable beschreibt, = nur liest. Bei den korrekten Werten ist die Quelle zwischen Javascript auch immer wieder S7.
-
Ich schreibe jetzt mal das Objekt mit Datenquelle s7.0 in die Datenbank, ohne, dass es von einem Blockly-Script "manipuliert" wird. Den begrenzten Rechenwert aus Blockly schreibe ich in eine temporäres Objekt, das ich auch aufzeichne. Mal sehen, was passiert..,
-
Über Nacht ist das s7.0 Objekt "0" geblieben, keine Ausreisser. Ebenso ist der Rechenwert innerhalb der Grenzen 0 bis 5500 geblieben. Heute Morgen habe ich wieder das s7.0 Objekt angebunden, so dass Blockly den Sollwert wieder an die S7 übergibt. Und siehe da: kurze Zeit nach dem Neustart des Skripts wieder der erste Ausreisser auf 5.10*10 ^29. Irgendwie scheint die Anbindung des s7.0 Objektes an Blockly den Ausreisser zu provozieren.
-
-
@paul53
s7.0 ist die Quelle.
Das Ganze läuft so ab: Blockly bekommt den Trigger (geänderter Messwert) und schreibt daraufhin das s7.0 Objekt. Die s7.0 Objekte werden in der Steuerung (S7) zyklisch (Einstellung 500ms im Adapter) aktualisiert. D.h Blockly (javascript.0) ist die Quelle, das landet in der S7 und wird dann bei der Aktualisierung alle 500 ms gelesen. Dann kommt der neue Wert von javascript.0 etc. In dem Screenshot oben hat javascript.0 um 08:44:14.787 (dritte Zeile von unten) den Wert neu berechnet (3163), die S7 hat in der 4. Zeile von unten aber den Ausreisser bekommen bzw. gemeldet. 2 Sekunden später (3.Zeile von oben) hat javascript.0 3144 berechnet und die S7 hat den Wert auch bekommen (2. Zeile von oben). Die Frage ist wohl, warum sporadisch zwischen drin von javascript.0 berechnete Werte nicht oder als Ausreisser ankommen? Ich habe jetzt mal auf Zeit-Trigger (alle 10 Sekunden) umgestellt. -
@fu_zhou sagte:
die S7 hat in der 4. Zeile von unten aber den Ausreisser bekommen bzw. gemeldet.
Die Instanz s7.0 hat nicht den Ausreißer erhalten, sondern zweimal hintereinander als Bestätigung (ack = true) zurück gemeldet. Ob Ursache der S7-Adapter oder die S7 ist, kann daraus nicht beurteilt werden. Blockly ist es jedenfalls nicht.
-
@paul53
Irgenwie hat der S7 Adapter (?) dann wohl ein Problem mit der Aktualisierungsgeschwindigkeit von Blockly. Wenn ich den Trigger auf Zeit und alle 5 Sekunden nehme, läuft das Ganze ohne Ausreisser. Ich werde mich jetzt mal nach unten tasten und schauen, ab welcher Trigger-Zeit das Problem auftritt. -
4 Sekunden ist schon zu schnell, da kommt alle paar Stunden ein Ausreisser, 5 Sek scheint okay.