Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Rechenfehler?? oder was ganz anderes... Kategorie: Programmierung (von Markus - 23.08.2005 21:13)
Ich nutze:
C-Control II Unit, CC2-Application-Board, OSOPT V3.0
Hallo!
Ich habe da ein kleines Programm wo anhand eines Strom´s und einer Spannung 12 verschiedene Bit´s
gesetzt werden! Leider rechnet mein Controller nicht so wie ich es haben möchte! Dass ausgegebene
Bitmuster passt anfangs, weicht aber später von meinen selbst errechneten Werten ab! Könnte es sein
dass ich etwas mit den Zahlentypen falsch mache?? Oder muss ich dort Kommastellen die zustande
kommen anders berĂĽcksichtigen?? Hoffe einer von euch findet dort den Fehler!

Kurz zum Programm! Ich habe eine Spannung die ich in 12 andere Spannungen aufteile, immer durch
dass doppelte teile dass ich später auf jeden Wert kommen kann! (Nicht stören dass ich vorher
nochmal teile, hängt mit der Formel zusammen!
Und ich habe einen Strom (ebenfalls nicht stören, ich teile ihn vorher auch durch 10)

Nun vergleicht der Controller den Stromwert mit dem höchsten Spannungswert, wenn der Spannungs-
wert kleiner als der Stromwert ist wird der erste Ausgang gesetzt und gleichzeitig ein neuer Stromwert
berechnet (alter - der Spannungswert der dort hineinpasste...

Dann geht es zur nächsten Abfage, wenn eins gesetzt wurde wird der neue (sonst der alte)Spannungs-
wert mit der nächsten U Spannung vergleichen usw. hört sich jetzt kompliziert an aber guckt euch dass
Programm an, ist recht einfach!

die Variable Spannung vorde vorher mit int deklariert...

Als Beispiel kommentiere ich mal den eine Spannung von 1000V und einen Strom von 250A!


{
int I;
long U1,U2,U3,U4,U5,U6,U7,U8,U9,U10,U11,U12;

I=drehgeberi.wert /10;    //250 / 10 = 25
U1 = Spannung/2/4;    //1000 / 2 / 4 = 125
U2 = Spannung/2/8;    //1000 / 2 / 8 = 62,5
U3 = Spannung/2/16;     //=31,25
U4 = Spannung/2/32;     //=15,625
U5 = Spannung/2/64;     //=7,813
U6 = Spannung/2/128;     //=3,906
U7 = Spannung/2/256;     //1,953
U8 = Spannung/2/512;     //0,977
U9 = Spannung/2/1024;     //0,488
U10 = Spannung/2/2048;     //0,244
U11 = Spannung/2/4096;     //0,122
U12 = Spannung/2/8192;     //0,061

if U1 < I     //if 125 < 25  Ist nicht, also wird nichts gesetzt und gerechnet. Stimmt auch noch!!
{
pcf.set(modul1,0,1);
I=I-U1;
}

if U2 < I      //if 62,5 < 25  Ist nicht, also wird nichts gesetzt und gerechnet.Stimmt auch noch!!
{
pcf.set(modul1,1,1);
I=I-U2;
}

if U3 < I     //if 31,25 < 25  Ist nicht, also wird nichts gesetzt und gerechnet.Stimmt auch noch!!
{
pcf.set(modul1,2,1);
I=I-U3;
}

if U4 < I    //if 15,625< 25  Ist wahr, also wird der Ausgang gesetzt und gerechnet.Stimmt auch noch!!
{
pcf.set(modul1,3,1);
I=I-U4;     //25 - 15,625 = 9,375
}

if U5 < I    //if 7,813< 9,375  Ist wahr, also wird der Ausgang gesetzt und gerechnet.Stimmt auch noch!!
{
pcf.set(modul1,4,1);
I=I-U5;     //9,375 - 7,813 = 1,562
}

if U6 < I    //if 3,906< 1,562  Ist nicht, also wird nichts gesetzt und gerechnet.Stimmt als letztes noch!!
{
pcf.set(modul1,5,1);
I=I-U6;
}

if U7 < I    //if 1,953< 1,562  stimmt nicht, aber der Controller setzt mir da trotzdem den Ausgang!
//Dieses Problem habe ich auch bei anderen Werten, immer zum Schluss ist dass Bitmuster falsch!
//Dieses zieht sich jetzt auch bis zum Schluss durch, dass Bitmuster weicht immer vom errechneten
//ab... Woran liegt es wohl???

{
pcf.set(modul1,6,1);
I=I-U7;
}

if U8 < I
{
pcf.set(modul1,7,1);
I=I-U8;
}

if U9 < I
{
pcf.set(modul2,0,1);
I=I-U9;
}

if U10 < I
{
pcf.set(modul2,1,1);
I=I-U10;
}

if U11 < I
{
pcf.set(modul2,2,1);
I=I-U11;
}

if U12 < I
{
pcf.set(modul2,3,1);
}
}


MfG Markus


    Antwort schreiben


Antworten:

Re: Rechenfehler?? oder was ganz anderes... (von krassos - 23.08.2005 21:48)
    Re: Rechenfehler?? oder was ganz anderes... (von Markus - 23.08.2005 22:17)
        Re: Rechenfehler?? oder was ganz anderes... (von krassos - 24.08.2005 15:28)
            Re: Rechenfehler?? oder was ganz anderes... (von Markus - 24.08.2005 16:20)