Ankündigung

Einklappen
Keine Ankündigung bisher.

Erweiterung 15000064 "Differenz zum Vorgängerwert"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [Featurewunsch] Erweiterung 15000064 "Differenz zum Vorgängerwert"

    Hallo gaert Christian,

    für ein kommendes Release habe ich einen Vorschlag zur Erweiterung eines Standard-LBS. Der ist wunderbar für Zähler und mich freut's immer, wenn Logiken mit Standard-LBS funktionieren. Allerdings gibt es ja mehrere Fälle bei Zählern, die einen Reset bedingen. Dies außerhalb des LBS zu machen ist unnötig aufwändig (weil der Vorgängerwert fehlt) und daher der Vorschlag einer kleinen Ergänzung - weil damit würde der Differenzzähler wirklich sehr smart sich selber "heilen" könnte.

    Hintergrund: Zähler zählen nur theoretisch ewig hoch. Zudem hat man gelegentlich auch nur einen Tageszähler oder gelegentlich reseteten Betriebsstundenzähler zur Hand. Oder es kommt gezwungenermaßen zu einem Zählerwechsel (z.B. vom Versorger weil Eichzeitraum überschritten).

    Lösung: An E3 neben 0-4 auch 11-14 erlauben:
    Code:
    <li>11: das Ergebnis muss &gt;0 sein, sonst erfolgt ein Reset</li>
    <li>12: das Ergebnis muss &gt;=0 sein, sonst erfolgt ein Reset (z.B. wenn Quelle genullt wird: Tageszähler, Zählertausch,...)</li>
    <li>13: das Ergebnis muss &lt;0 sein, sonst erfolgt ein Reset</li>
    <li>14: das Ergebnis muss &lt;=0 sein, sonst erfolgt ein Reset</li>
    [...]
    E3: 1..4,11..14=Vergleicher aktivieren (s.o.), 0=kein Vergleicher
    Damit würden obige Fälle automatisch zu einem Reset führen und unmittelbar wieder sauberer Differenzwerte liefern.

    Hauptlogik (Auszug)
    Code:
    ###[LBS]###
    <?
    function LB_LBSID($id) {
    if (($E=logic_getInputs($id)) && ($V=logic_getVars($id))) {
    
    if ($E[2]['refresh']==1 && $E[2]['value']!=0) {
    $V[1]=null;
    logic_setVar($id,1,$V[1]);
    }
    
    // MODIFIZIERT...
    if ($E[1]['refresh']==1 && !isEmpty($E[1]['value']) && is_numeric($E[1]['value']) && !isEmpty($V[1])) {
    $tmp=$E[1]['value']-$V[1];
    if (($E[3]['value']==14 && $tmp>0) || ($E[3]['value']==13 && $tmp>=0) || ($E[3]['value']==12 && $tmp<0) || ($E[3]['value']==11 && $tmp<=0)) {
    $V[1]=null;
    logic_setVar($id,1,$V[1]);
    }
    }
    // ...MODIFIZIERT
    
    if ($E[1]['refresh']==1 && !isEmpty($E[1]['value']) && is_numeric($E[1]['value'])) {
    if (!isEmpty($V[1])) {
    $tmp=$E[1]['value']-$V[1];
    if ($E[3]['value']==0 || ($E[3]['value']==1 && $tmp>0) || ($E[3]['value']==2 && $tmp>=0) || ($E[3]['value']==3 && $tmp<0) || ($E[3]['value']==4 && $tmp<=0) || ($E[3]['value']>=11 && $E[3]['value']<=14)) { // MODIFIZIERT
    logic_setOutput($id,1,$tmp);
    }
    }
    logic_setVar($id,1,$E[1]['value']);
    }
    
    }
    }
    ?>
    ###[/LBS]###
    Lieben Dank für Deine wohlwollende Prüfung.

    VG,
    Carsten
Lädt...
X