Entwickler-Ecke
Basistechnologien - Werte aus Timer in Array schreiben
neisael - Mo 03.05.10 07:34
Titel: Werte aus Timer in Array schreiben
Hallo,
folgendes:
Ich habe mir einen Timer gebastelt der mir den Strom inm 1/1000 sekunden bereich anzeigt.
Nun schwankt dieser wert sehr stark so dass ich mir gern jeweils 10 werte am stück herauspicken und davon den mittelwert bilden möchte.
so sieht das etwa aus:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| private void updateTimer_Tick(object sender, EventArgs e) { updateData();
umc.umc_GetCurrent(g_controllerNr, 0, out value0, out age); current0 = value0.ToString();
} |
nur wie kann ich das jetzt am geschicktesten machen ohne schlaufe? oder sonst wie? mir fällt leider nichts ein.
gruß und danke
danielf - Mo 03.05.10 07:42
Hallo und :welcome:,
ohne Schlaufe? Meinst du damit eine Schleife?
Weil eigentlich würde ich dir genau dazu raten. Mach eine eigene Methode um den Wert auszulesen und gib ihr als Parameter die Anzahl an Messungen mit.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public double GetMean(int g_controllerNr, int musstDuWissen, int readings) { double sum, value, age; for (int i = 0; i < readings; i++) { updateData(); umc.umc_GetCurrent(controllerNr, musstDuWissen, out value, out age); sum += value; }
return sum / readings; } |
Gruß
PS: Bitte markiere hier im Forum Code als solchen. Das kannst mit den cs-Tags ([cs]Code[/cs ]) machen oder über Bereiche, C#, markieren und + drücken. Deinen Beitrag kannst du mit klick auf das Scherensymbol auch noch im Nachhinein bearbeiten.
neisael - Mo 03.05.10 08:39
Hey danke für die schnelle antwort.
hab das jetzt mal so umgebaut das es passt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| public double GetMean(int readings) { readings = 10; int sum, value; uint age; for (int i = 0; i < readings; i++) { updateData(); umc.umc_GetCurrent(g_controllerNr, 0, out value, out age);
sum += value; }
return sum / readings; } |
aber er sagt mir jetzt noch:
Fehler 1 Verwendung der nicht zugewiesenen lokalen Variablen "sum"
0 steht für den Axen Motor, also den ersten sozusagen. Und das macht er dann wirklich für jeden Timer_Tick? Und += heisst das er alles aufsummiert? Wie wahrscheinlich festzustellen ist bin ich doch noch starker anfänger und hoffe auf etwas Nachsicht.
Und ja meinte natürlich eine Schleife.
Gruß
JüTho - Mo 03.05.10 08:44
Hallo und noch :welcome:
Die Fehlermeldung sagt schon alles:
neisael hat folgendes geschrieben : |
| Fehler 1 Verwendung der nicht zugewiesenen lokalen Variablen "sum" |
Unter C# muss eine Variable ausdrücklich initialisiert werden, bevor sie benutzt werden kann. Weiter unten addierst du einen Wert dazu; damit das möglich ist, muss die Variable mit einem Anfangswert versehen werden. Das geschieht in diesem Fall am besten gleich bei der Deklaration.
Gruß Jürgen
neisael - Mo 03.05.10 10:01
danke:) nun ist auch dieses problem gelöst.
dafür gibt es ein weiteres. wenn das nun für zB 10 werte läuft, istd as kein problem. bei 20 werten (pro tausendstel sekunder die ein timer_tick hat) beginnt mein programm an zu stocken(wohl ziemliche viele werte)
was kann ich da dagegen noch machen? ausser die werte bei 10 zu belassen oder das tiemr intervall herab zu setzen?
danke
danielf - Mo 03.05.10 10:07
Ich vermute nichts. "Deine" updateData wird wohl kaum Optimierungspotenzial haben.
Das ist wohl einfach zuuu schnell... auch scheint es mir dann so, dass du mit Synchronisierung aufpassen musst, bzw. abfangen.
Ich denke die eine Schleife ließt noch werte aus, während die nächste bereits eine neue Schleife beginnt... Das kann nicht gut gehen bzw. sinnvoll sein.
JüTho - Mo 03.05.10 10:07
Das ist unter Windows so nicht möglich. Bis zu 20 oder 30 msec Timer-Intervall ist Windows noch arbeitsfähig; alle kürzeren Intervalle führen zu "Pi-mal-Daumen". Einige Anmerkungen siehe z.B. unter
Timer zu langsam [
http://www.mycsharp.de/wbb2/thread.php?threadid=47581]; dort habe ich per Forumssuche noch andere Beiträge zum Thema "Timer Echtzeit" gefunden.
Jürgen
neisael - Mo 03.05.10 10:25
ok dann bedanke ich mich vielmals für eure hilfe, werde sie sicher noch öfters benötigen.
bis dann
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!