...darf das jemand anderes machen.
Außerdem braucht's präzisere Vorgaben.
alt: 0 - -2000W ≙ 0 - 10V
neu: ?
Moderator: Co-Administratoren
...darf das jemand anderes machen.
neu: 0-2000Watt ≙ 2-10V
Keine gute Idee
Code: Alles auswählen
! f(x) [V] = -5x / 1000 , x e [0, -2000]
real rWertOut = ((-5.0 *rWertIn)/1000.0).Floor();
! x e [0, -2000]
if ( rWertOut < 2.0 ) { rWertOut = 0.0;}
if ( rWertOut > 10.0 ) { rWertOut = 10.0;}
WriteLine (rWertOut);
f(x) [V] = (-4x / 1000) + 2 , x e [0, -2000]
Danke!Henke hat geschrieben: ↑12.01.2024, 17:53Keine gute Idee
Übersetzt heißt das: Gehe niemals aus und heize immer mit 400 W
Ich würde es jetzt erst so lassen und protokollieren wie er regelt.
Unter 2 V, d.h. 20% von 2000 W = 400W geht er halt nicht an. Das ist auch gut so, da einfach nicht genug Überschuss vorhanden ist.
Damit nicht zu viel verbraucht wird, noch folgende Anpassung:Code: Alles auswählen
! f(x) [V] = -5x / 1000 , x e [0, -2000] real rWertOut = ((-5.0 *rWertIn)/1000.0).Floor(); ! x e [0, -2000] if ( rWertOut < 2.0 ) { rWertOut = 0.0;} if ( rWertOut > 10.0 ) { rWertOut = 10.0;} WriteLine (rWertOut);
OK.
Code: Alles auswählen
! Script für PV Überschuss
object oPvIn = dom.GetObject( "BidCos-RF.UEQ2074627:1.IEC_POWER" );
object oPvOut = dom.GetObject("HmIP-RF.002EDF29AD2082:2.LEVEL");
real rWertIn = oPvIn.Value();
! real rWertIn = -1000.0;
WriteLine (rWertIn );
! f(x) [V] = -5x / 1000 , x e [0, -2000]
real rWertOut = ((-5.0 *rWertIn)/1000.0).Floor();
! x e [0, -2000]
if ( rWertOut < 2.0 ) { rWertOut = 0.0;}
if ( rWertOut > 10.0 ) { rWertOut = 10.0;}
WriteLine (rWertOut);
rWertOut = rWertOut/10.0; ! siehe Baxxy Hinweis
if ( oPvOut.Value() != rWertOut )
{
WriteLine ("Setze neuen Wert" );
oPvOut.State(rWertOut);
}
Code: Alles auswählen
real rWertOut = ((-5.0 *rWertIn)/1000.0).Round(0);
Code: Alles auswählen
real rWertOut = ((-5.0 *rWertIn)/1000.0).Floor();
Code: Alles auswählen
if ( rWertOut < 0.0 ) { rWertOut = 0.0;}
Code: Alles auswählen
if ( rWertOut < 2.0 ) { rWertOut = 0.0;}
Danke Henke!