ich habe, in den letzten 1-2 Jahren immer wieder das Problem das der Stromzähler "HM-ES-TX-WM" "Energie-Zähler CCU2" irgendwann einfach aufhört weiter zu zählen.
Ich habe die aktuellste Firmware etc.
Im Fehlerfall habe ich bisher das Gerät immer komplett abgelernt und neu aufgenommen, danach lief das Gerät dann wieder einige Wochen / Monate.
Da dies aber für mich sehr unbefriedigend ist, habe ich mir jetzt einmal das Systeminterne Script angeschaut, was diesen Zähler entsprechend setzt.
Das Problem ist folgende if Abfrage:
Code: Alles auswählen
if ( oBoot.Value() == true ) {
oSysVarEnergyCounterDeviceReset.State(true);
if (ioldDevVal <= 0) {
oSysVarEnergyCounter.State(0);
}
} else {
Code: Alles auswählen
object oBoot = chn.DPByControl('POWERMETER_IGL.BOOT');
Kann mir jemand sagen, was dieses Objekt eigentlich genau ist? Und was es mir jetzt genau sagen soll, dass der Wert "BOOT" bei mir (scheinbar einfach irgendwann) auf "true" anstatt des erwarteten "false" steht?
Temporär habe ich die if Abfrage angepasst und der Zähler zählt wieder normal - das ist aber vermutlich nicht im Sinne des Erfinders.
Auch ein Versuch den Objectwert manuell auf "false" zu setzen, hat leider nicht gefruchtet, kein Fehler - Wert aber auch nicht gesetzt...
Wäre Super wenn mir hier jemand weiterhelfen könnte. Bisher habe ich lediglich Probleme in diesem Zusammenhang gefunden, welche mit alten Firmware Versionen zusammenhängen, ich bin aber auf dem neusten Stand.
Gruß
Benni
PS: Der Vollständigkeit halber noch mal das gesamte Interne Script:
Code: Alles auswählen
object chn = dom.GetObject('27242');
object oBoot = chn.DPByControl('POWERMETER_IGL.BOOT');
object oEnergyCounter = chn.DPByControl('POWERMETER_IGL.ENERGY_COUNTER');
object oSysVarEnergyCounter = dom.GetObject('svEnergyCounter_27242_MEQ0380950:1');
object oSysVarEnergyCounterOldVal = dom.GetObject('svEnergyCounterOldVal_27242');
object oSysVarEnergyCounterResetPressed = dom.GetObject('svEnergyCounter_27242_MEQ0380950:1_RESET');
object oSysVarEnergyCounterTmpOldVal = dom.GetObject('svEnergyCounter_27242_MEQ0380950:1_TMP_OLDVAL');
object oSysVarEnergyCounterDeviceReset = dom.GetObject('svEnergyCounter_27242_MEQ0380950:1_DEVICE_RESET');
boolean bootFlag = oBoot.Value();
real devVal = oEnergyCounter.Value();
real devValMax = oEnergyCounter.ValueMax();
real oldDevVal = oSysVarEnergyCounterOldVal.Value();
real tmpOldDevVal = oSysVarEnergyCounterTmpOldVal.Value();
integer ioldDevVal = (tmpOldDevVal.ToString().ToFloat() * 100000).ToInteger();
real diffVal = 0.0;
real sysVarVal = oSysVarEnergyCounter.Value();
integer tmp_devVal = (devVal.ToString().ToFloat() * 100000).ToInteger();
integer tmp_oldDevVal = (oldDevVal.ToString().ToFloat() * 100000).ToInteger();
if ( oBoot.Value() == true ) {
oSysVarEnergyCounterDeviceReset.State(true);
if (ioldDevVal <= 0) {
oSysVarEnergyCounter.State(0);
}
} else {
boolean resetPressed = oSysVarEnergyCounterResetPressed.Value();
! boolean devReset = oSysVarEnergyCounterDeviceReset.Value();
if ( (resetPressed == true) && (oSysVarEnergyCounterDeviceReset.Value() == true) ) {
oSysVarEnergyCounterTmpOldVal.State(0);
tmpOldDevVal = 0;
}
!Normales Hochzaehlen. Geraetwert > vorheriger Wert
if ((tmp_devVal >= tmp_oldDevVal) && (oSysVarEnergyCounterDeviceReset.Value() == false)) {
if (resetPressed == false) {
diffVal = oEnergyCounter.Value() - oldDevVal;
} else {
!Reset pressed
diffVal = oEnergyCounter.Value() - tmpOldDevVal;
if ((diffVal.ToString().ToFloat() * 100000).ToInteger() < 0 ) {
diffVal = oEnergyCounter.Value();
}
oSysVarEnergyCounterResetPressed.State(0);
}
} else {
!Geraetewert ist kleiner vorheriger Wert
!Entweder Ueberlauf, oder Batterietausch
if (oSysVarEnergyCounterDeviceReset.Value() == false) {
!Normaler Geraeteueberlauf
if(tmp_devVal > 0) {
diffVal = (oEnergyCounter.Value() + devValMax) - oldDevVal;
}
} else {
!Zaehle Geraetewert zum CCU-Zaehler
diffVal = oEnergyCounter.Value();
if ((diffVal.ToString().ToFloat() * 100000).ToInteger() == 0) {
oSysVarEnergyCounterDeviceReset.State(true);
} else {
oSysVarEnergyCounterDeviceReset.State(false);
}
}
}
!Erhoehe den CCU-Zaehler
oSysVarEnergyCounter.State(sysVarVal + diffVal);
oSysVarEnergyCounterOldVal.State(oEnergyCounter.Value());
oSysVarEnergyCounterTmpOldVal.State(oEnergyCounter.Value());
}