Forum

Forum index -> Komponenten / Anwendungen -> Formelberechnung
User logged off <p>Formelberechnung</p>
User
Registered at:
Messages:

Hallo,

wie bekomme ich folgende Formel aus Excel in Eisbär umgerechnet.

=C2+(D2-C2)*((C2-B2)/(C2-E2))^(1/F2)

Gruß
ckimmig

[ Geändert von ckimmig am 28.10.2013 15:32 ]

28.10.2013 15:31
Grimwulf <p>Formelberechnung</p>
User
Registered at: 19.01.2016
Messages: 6

Hallo,

ich bin nicht sicher, ob ich Sie recht verstanden habe.

Tendenziell geht das aber mit dem Multikonverter, Sie benötigen fünf Eingänge (ich habe hier sechs verwendet) und einen Ausgang. Im Code berechnen Sie Ihre Formel und haben das Ergebnis.

Ich habe hier einen Code, der etwas unfein ist. Muss so in den Converter:

try
{
if (Convert.ToBoolean(htInputValues["Calc"]) == true)
{
double b2 = Convert.ToDouble(htInputValues["b2"]);
double c2 = Convert.ToDouble(htInputValues["c2"]);
double d2 = Convert.ToDouble(htInputValues["d2"]);
double e2 = Convert.ToDouble(htInputValues["e2"]);
double f2 = Convert.ToDouble(htInputValues["f2"]);

double returnVal = Math.Pow((d2 - c2)*((c2 - b2)/(c2 - e2)), (1/f2)) + c2;
htOutputValues["Ergebnis"] = returnVal.ToString();
}
}
catch (Exception ex)
{
htOutputValues[0] = string.Format("Fehler in er Bearbeitung. {0}", ex.ToString());
}

Hier setze ich voraus, dass alle Werte gesetzt sind und erst ein True auf den Calc-Eingang die Berechnung triggert.
Die Eingänge heißen b2, c2...bis f2. Zudem eben der Calc-Eingang. Der Ausgang heißt "Ergebnis"

Ich denke aber, dass das hier Kern Ihrer Frage war:

double returnVal = Math.Pow((d2 - c2)*((c2 - b2)/(c2 - e2)), (1/f2)) + c2;

In c# ist "Math.Pow" das Equivalent zum Excel "^", in c# selber hat "^" eine ganz andere Bedeutung - aber hat eine :-)

[ Geändert von Grimwulf am 28.10.2013 19:59 ]

28.10.2013 18:33
User logged off <p>Formelberechnung</p>
User
Registered at:
Messages:

Hallo,

vielen Danke für die Antwort, ich habe schon länger nichts mehr mit der Software gemacht, und möchte jetzt anhand dieser Formel die Vorlauftemperatur für eine Mischersteuerung anhand der Aussentemperatur berechnen. Ich habe die Formel mal getestet und bekomme irgendwie ein anderes Ergebniss wie in Excel. Anbei mal die Exceltabelle. Vielleicht können Sie mir nochmals helfen.

Anbei die Exceltabelle und ads Testprojekt.

MfG
Christian Kimmig

31.10.2013 08:36
Grimwulf <p>Re: Formelberechnung</p>
User
Registered at: 19.01.2016
Messages: 6

Sie haben völlig recht, da war ich voreilig, entschuldigen Sie bitte. Ich hatte Testzahlen genommen, bei denen mein Ergebnis passte...waren wohl unkluge Zahlen. :-)

So sollte es gehen:

double returnVal = c2 + (d2 - c2)* Math.Pow((c2 - b2)/(c2 - e2), (1/f2));

31.10.2013 17:09
User logged off <p>Re: Formelberechnung</p>
User
Registered at:
Messages:

Sorry, Passt immer noch nicht, aber trotzdem vielen Dank.

Gruß

01.11.2013 08:58
Grimwulf <p>Re: Formelberechnung</p>
User
Registered at: 19.01.2016
Messages: 6

Hallo,

dieser Code in C# liefert genau das Ergebnis wie Excel, nämlich 31.25 mit Ihren Zahlen. Eine andere Zahlenreihe passte auch (bis auf Rundungsissues im hinteren NAchkommanbereich):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication4 { using System.Collections;

class Program { static void Main(string[] args) { Hashtable htInput = new Hashtable(); Hashtable htOutput = new Hashtable();

htInput["b2"] = -10; htInput["c2"] = 20; htInput["d2"] = 40; htInput["e2"] = -20; htInput["f2"] = 0.5; htOutput["Ergebnis"] = 0;

Parse("", htInput,htOutput);

Console.WriteLine( htOutput["Ergebnis"].ToString()); Console.ReadLine();

}

static void Parse(string sInputName, Hashtable htInputValues, Hashtable htOutputValues) { try {

double b2 = Convert.ToDouble(htInputValues["b2"];); double c2 = Convert.ToDouble(htInputValues["c2"];); double d2 = Convert.ToDouble(htInputValues["d2"];); double e2 = Convert.ToDouble(htInputValues["e2"];); double f2 = Convert.ToDouble(htInputValues["f2"];);

double returnVal = c2 + (d2 - c2)* Math.Pow((c2 - b2)/(c2 - e2), (1/f2)); htOutputValues["Ergebnis"] = returnVal.ToString(); } catch (Exception ex) { htOutputValues[0] = string.Format("Fehler in er Bearbeitung. {0}", ex.ToString()); } } } }

Daher habe ich jetzt keinen Ansatz, einen Fehler zu suchen. Welche Zahlen nutzen Sie in Ihrem Test? Sind die Eingänge alle richtig zugewiesen?

01.11.2013 09:44
User logged off <p>Re: Formelberechnung</p>
User
Registered at:
Messages:

Hallo,

Funktioniert, Danke, hab wohl beim Eingeben etwas falsch gemacht.

Gruß
Christian

06.11.2013 07:37
User logged off <p>Re: Formelberechnung</p>
User
Registered at:
Messages:

Hallo Zusammen,

Die Berechnung funktioniert, hab nun das Problem, das ich das Ergebniss nicht auf den Bus bekomm, bzw. Ich habe das Ergebniss einer 2Byte Gruppenadresse zugeordnet, die ändert sich aber nicht.

30.11.2013 07:55
Log in