Hab ich jetzt gemacht, ändert an den Rules 3 und 5 nichts. Das sind die Rules mit Funktion, die die globalen Konstanten benutzen
Natürlich ist der Code fürchterlich, ich wollte damit auch keinen Schönheitspreis gewinnenDer Code ist (das wirst Du sicher selbst erkennen) fürchterlich.

Es sind mit in letzten 2 Jahren einige Dinge aufgefallen, die seltsam sind, aber nicht so was gravierndes.Funktionen sind in der DSL nicht gut unterstützt, und ja, man kann Lambdas dazu missbrauchen, muss dann aber damit leben, dass oftmals sehr seltsame Dinge passieren.
Da kriege ich z.B. die Meldung "Assignment to final variable" es tut aber trotzdem oder
ich kriege im MSCode den Fehler "Cannot refer to the non-final variable wAVGCount inside a lambda expression" und tut ebenfalls
Bist du dir sicher, daß "tMyTimer.cancel" auch geht, wenn der Timer null ist ?Die Timer Variable ist beispielsweise global definiert, und Timer funktionieren absolut zuverlässig (im möglichen Rahmen, d.h. die *.rules Datei darf nicht zwischendrin neu geladen werden und bevor die Timer Variable mit einem Timer gefüllt wird (bzw. mit dem Zeiger auf den Scheduler Eintrag) muss ein evtl. vorhandener Timer immer gecancelt werden, also so:Code: Alles auswählen
//vor der ersten Rule var Timer tMyTimer = null // Initialisierung wenn die Datei neu geladen wird rule " meine Timer Rule" when Item Blah received command then tMyTimer?.cancel // Falls ein Timer läuft bbrechen if(receivedCommand==ON) tMyTimer = createTimer(now.plusSeconde(1),[| // tu was tMyTimer = null ]) end
Der Timer wird nach dem Ablauf ( nach einer Sekunde ) sowieso auf null gesetzt.
jetzt nicht mehr. Logfile :In der Fehlermeldung siehst Du ja, dass er immer versucht, float mit double zu multiplizieren, da bin ich mir ziemlich sicher, dass das nicht automatisch geht.
Code: Alles auswählen
2022-06-01 20:52:00.065 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Demo Inc 5': Could not invoke method: org.eclipse.xtext.xbase.lib.FloatExtensions.operator_multiply(float,double) on instance: null
2022-06-01 20:53:00.005 [ERROR] [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Demo Inc 3': Could not invoke method: org.eclipse.xtext.xbase.lib.FloatExtensions.operator_plus(float,float) on instance: null
Es gibt den Fehler wenn
1. Die Konstanten nicht typisert sind bzw. die Typen nicht identisch sind ( was ja eher Java-untypisch ist ) und
2. eine Funktion auf die Konstanten zugreift