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

Re: Rechenfehler?? oder was ganz anderes... Kategorie: Programmierung (von krassos - 23.08.2005 21:48)
Als Antwort auf Rechenfehler?? oder was ganz anderes... von Markus - 23.08.2005 21:13
Ich nutze:
C-Control II Unit, CC2-ReglerBoard, 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...


Hallo,

hier wird wohl ein Teil Deines Problems liegen.
Schau einfach hier mal nach: FAQ

Deine Berechnung ist mir auch nicht ganz klar:
Wenn Du zuweist:

Spannung=1000;  //seh ich hier aber nicht!!


ist in ganzzahliger Berechnung

U2 = Spannung/2/8;

das Ergebnis 62.

Gehe ich also recht in der Annahme, das Du 1000V=1000000 Digits zuweist?

GruĂ? krassos


>
> 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 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)