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 Markus - 23.08.2005 22:17)
Als Antwort auf Re: Rechenfehler?? oder was ganz anderes... von krassos - 23.08.2005 21:48
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...
>
>
> 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

Hallo krassos!
Dass könnte schon dass Problem sein! Leider habe ich keine Ahnung was du jetzt mit Digits meinst!
Wenn der Controller mir natĂĽrlich bei 1000V/16  62 anstatt 62.5 ausgibt und dass bei den anderen
nachfolgenden Werten auch noch kann ich mir vorstellen dass die Ungenauigkeit daher kommt!
Aber wie löse ich dieses Problem??
wie setzte ich die 1000V auf 1000000digits??
Markus


    Antwort schreiben


Antworten:

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)