Rechenfehler?? oder was ganz anderes... Kategorie: Programmierung (von Markus - 23.08.2005 21:13) | ||
| ||
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) |