Forum: PC-Programmierung Chart Klasse c#


von sepp (Gast)


Lesenswert?

Hallo Leute,
ich möchte am Pc Daten vom Mikrocontroller in einer Graphik darstellen.
Das ganze möchte ich in C# realisieren. Die Daten vom Mikrocontroller 
zum Pc bringe ich über die Serielle Schnittstelle und das kriege ich 
auch schon recht gut hin. Für den Graph verwende möchte ich die Chart 
Klasse verwenden.
Was ich jetzt noch nicht weiß wie ich die Daten die ich alle 100mS 
kriege vernünftig anzeige und ob ich für die x Achse die 100mS Takt 
verwenden soll.
Wie soll man die Daten vernünftig in "Series" packen und wann giebt man 
das Ganze aus.
Entschuldigt meine Unwissenheit bin noch ein blutiger Anfänger.

Vielen Dank für Eure Hilfe

sepp




















d

von Lord Z. (lordziu)


Lesenswert?

Das kommt drauf an, was du für Daten hast und wie die Zuordnung ist.

Wenn du zum Beispiel pro Zeiteinheit nur einen Wert hast (sagen wir mal, 
du misst alle 100ms eine Spannung), dann sind diese Werte nur eine 
Series im Chart-Control.

Deine Zuordnung ist also:

t(ms)    U(V)
[0]     [2.1]
[100]   [2.2]
[200]   [2.3]
[300]   [2.4]
...

(Angenommen, die 2.x sind deine gemessenen Werte)

Diese Datenzuordnung (z.B. als Dictonary verpackt) sind eine Series.

von sepp (Gast)


Lesenswert?

Wann aber gebe ich die Series aus?
Ich möchte ziemlich in Echtzeit ausgeben aber geht das so überhaupt?

Danke für deine Hilfe
Sepp

von Lord Z. (lordziu)


Lesenswert?

Wann man die ausgibt? Das ist falsch gedacht, denke ich.

Dein Chart ist immer da, sobald das Programm läuft. Wenn du einen neuen 
Messwert bekommst, packst du ihn in die Serie, z.B. mit
1
series.Points.Add(...);

Dann musst du sicher noch das Chart refreshen. Wie die Methodenaufrufe 
aussehen, musst du dir mal selber raussuchen.

von sepp (Gast)


Lesenswert?

Vielen Dank für Deine Hilfe.
Ich habe ein wenig experimentiert und dabei bin ich auf folgendes 
Problem gestoßen.
Ich möchte in meinen Series immer gleich viele Einträge haben das heißt 
die ältesten sollten gelöscht werden und die neuen vorne dazugegeben ist 
das möglich.

Ich hoffe ich hab mich richtig ausgedrückt!

Gruß
Sepp

von sepp (Gast)


Lesenswert?

Ich komme nicht weiter mit meinem Problem.
Wäre nett wenn mir jemand helfen könnte!

Danke
Sepp

von Warhawk (Gast)


Lesenswert?

Hallo die Lösung ist eigentlich ganz einfach.

Du legst eine Queue (FIFO) oder eine List mit den Datenpunkten an. Dann 
bindest du diese Queue mittels Databinding an dein Chart. (Beispiele 
findest du genügend im Internet) Beim einfügen in die Queue prüfst du ob 
eine bestimmte Größe überschritten ist und entnimmst ggf. das älteste 
Element aus der Queue/List. Deine Grafik solltest du nach dem einfügen 
und entfernen von Elementen aus der List natürlich aktuallisieren.

Viele Grüße, Warhawk

von sepp (Gast)


Lesenswert?

Super Tipp mit Queue echt super Klasse.
Wenn ich jetzt aber in den Eigenschaften meiner Chart unter DataSurce 
mein Queue auswählen will klappt das nicht.
Muss ich die Bindung irgendwie anders machen?
Entschuldigt mich wenn ich mich dumm anstelle aber bin leider noch ganz 
am Anfang in c#

Danke und schönen Abend

Sepp

von Lord Z. (lordziu)


Lesenswert?

sepp schrieb:
> Wenn ich jetzt aber in den Eigenschaften meiner Chart unter DataSurce
> mein Queue auswählen will klappt das nicht.
> Muss ich die Bindung irgendwie anders machen?

Woher sollen wir denn wissen, wie du es machst und was dabei nicht 
funktioniert?

Es gibt im WWW unzählige Beispielcodes für DataBindings unter C#. Such 
einfach mal ein bisschen und probiere rum. Dabei kann man ne Menge 
lernen. Ich glaube ja, du solltest dich erstmal mit den Grundlagen von 
OO-Programmierung und C# auseinander setzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.