# Visual Studio + Kurvenanzeige



## Larry Laffer (30 Dezember 2009)

Hallo,
getreu meines Leitsatzes für das nächste Jahr habe ich nun mal angefangen mich intensiver mit Visual-Studio, im Hinblick auf einen möglichen Visu-Ersatz, zu beschäftigen. Dabei habe ich mich dann auch gleich um das Thema bemüht, das mir am Meißten am Herzen liegt : Kurven anzeigen.
Hier war ich dann schon ein wenig überrascht, festzustellen, dass Visual Studio derartige Anzeigen von sich aus gar nicht kann - man muß dafür ein Addon laden - das ist allerdings glücklicherweise Freeware ...
Nachdem ich mich zunächst mit dem (nach meiner Meinung) etwas gewöhnungsbedürfitigen Workflow davon arragiert hatte stellt sich mir nun die Frage : "Wie kann ich dem Ding Darstellungswerte übergeben ?". Ich habe mir im Script ein Array mit x- und y-Werten erzeugt. Diese liegen in der Menge Anzahl vor. Vielleicht kann mir dazu jemand den einen oder anderen Tip geben - eine brauchbare Beschreibung habe ich dazu bislang nicht gefunden ... 

Grüße
LL


----------



## Rainer Hönle (30 Dezember 2009)

Welches Tool verwendest Du dazu genau? Und welche Version vom VS? Und welche Sprache?


----------



## Larry Laffer (30 Dezember 2009)

Hallo Rainer,
ich habe mir *das* herunter-geladen.
Dazu gehören in Summe aber 2 Dateien - nämlich MSChart.exe und MSChart_VisualStudio_Addon.exe.

Gruß
LL


----------



## HMI-Muckel (30 Dezember 2009)

Hallo,
du kannst dir ja mal folgende Lösungen ansehen.
Die sind gut dokumentiert man bekommt Support, und sind frei erhältlich.

http://www.codeproject.com/KB/wtl/WTL_Oscilloscope.aspx

http://www.codeproject.com/KB/atl/SmartGraph.aspx

http://www.codeproject.com/KB/miscctrl/oscope.aspx

http://www.codeproject.com/KB/miscctrl/High-speedCharting.aspx

http://www.codeproject.com/KB/miscctrl/ntgraph_activex.aspx


----------



## enter (30 Dezember 2009)

Hi Larry Laffel,
schau dir das auch mal an

http://zedgraph.org/wiki/index.php?title=Line_&_Symbol_Charts

ich wollte das mal Testen bloß es fehlt die Zeit, über Feedback würde ich mich freuen


----------



## Larry Laffer (30 Dezember 2009)

@HMI-Muckel und Enter:
Danke für die Vorschläge - leider treffen sie nicht auf mein Problem zu. Charts (Kurvenanzeigen) gibt es von unterschiedlichen Herstellern - meiner wäre dann von Microsoft. Obwohl sie zum Teil Ähnliches können wollen sie doch jeder für sich ganz unterschiedlich behandelt werden - und das genau ist aktuell mein Problem ...

Gruß
LL


----------



## vierlagig (30 Dezember 2009)

hey larry,

ich kenne diese klasse zwar nicht, aber was ich gerade so beim überfliegen aufschnappen konnte ist, dass du die einzelnen punkte deines charts (ich hab explizit nach linien geguckt, denke bei punkt und anderem sollte es ähnlich funktionieren) einer serie hinzufügen mußt.

in C# bedeutet das in etwa:


```
*
chart1.Series["Series1"].Points.AddY(myPoint);
```

offensichtlich wird davon ausgegangen, dass auf der x-Achse immer die selbe schrittweite gilt...

um nochmal zurück auf zedgraph zu kommen ... das setze ich auch oft und exzessiv ein  ...guter stoff


----------



## Question_mark (30 Dezember 2009)

*TChart*

Hallo,



			
				vl schrieb:
			
		

> in C# bedeutet das in etwa:
> 
> 
> Code:
> ...



Ich vermute mal ganz stark, das es sich hier um ein Derivat der TeeEngine der Firma Steema Software handelt.

Dann sollte auch folgendes möglich sein :

chart1.Series["Series1"].Points.AddXY(myXPoint, myYPoint);

Die Chart interpoliert dann den X-Value trotz fester Schrittweite entsprechend in die X-Achse.

Gruß

Question_mark


----------



## vierlagig (30 Dezember 2009)

Question_mark schrieb:


> chart1.Series["Series1"].Points.AddXY(myXPoint, myYPoint);



habe ich so in den verfügbaren beispielen nicht gefunden und leider auch keine _sichtbare künstlerwerkstatt _installiert um das zu testen.
aber larry wirds rausfinden 
trotzdem bleibt der umweg über für(i=0;i<meineFeldLänge;i++) tue Feld[i,0] als X und Feld[i,1] als Y hinzufügen. das scheint mir der kleinweich-weg zu sein...


----------



## Question_mark (30 Dezember 2009)

*KISS : Keep it simple, stupid*

Hallo,



			
				vl schrieb:
			
		

> für(i=0;i<meineFeldLänge;i++) tue Feld[i,0] als X und Feld[i,1]



Bei sowas kommt mir immer das kalte Grausen, ich verstehe den Code zwar. Aber es geht wirklich einfacher und transparenter. Allerdings nicht bei Kleinweich...



			
				vl schrieb:
			
		

> das scheint mir der kleinweich-weg zu sein...



Yeep, geht aber einfacher in Delphi (und hier ist die Chart Componente gleich im Lieferumfang des Compilers enthalten) :


```
chart1.Series["Series1"].Points.AddXY(myXPoint, myYPoint);
```

Aber jeder wie er es persönlich mag, ich bevorzuge die letztere Variante.

Gruß

Question_mark


----------



## vierlagig (30 Dezember 2009)

Question_mark schrieb:


> Yeep, geht aber einfacher in Delphi (und hier ist die Chart Componente gleich im Lieferumfang des Compilers enthalten)



wir könnten uns jetzt über die vor- und nachteile des delphin-wegs streiten ... versionskompatibilität etc. aber lassen wir larry erstmal addXY testen und danach zedgraph, welches zwar auch den Add(x,y)-alkoholrhythmus vertraut, aber ansonsten sehr komfortabel ist...


----------



## Question_mark (30 Dezember 2009)

*Einfach neue Ideen haben ...*

Hallo,



			
				vl schrieb:
			
		

> über die vor- und nachteile des delphin-wegs streiten ... versionskompatibilität etc. aber lassen wir larry erstmal addXY testen und danach zedgraph,



Streiten will ich mich auch nicht über den richtigen Weg. Ich habe mir einfach den Weg gesucht, der mich mit möglichst wenig Aufwand zu akzeptablen Ergebnissen führt. Aber viele Wege führen nach Rom ...



			
				vl schrieb:
			
		

> versionskompatibilität



Das Problem entsteht nur, wenn man nicht die Quelltexte zur Verfügung hat, also evtl. irgendwo aus dem Internet irgendwelche obskuren Komponenten für lau herausgefischt hat. 

Allerdings hat sich Embarcadero ab D2009 ein hausgemachtes Problem geschaffen. Man hat die vielfachen Benutzerwünsche eines einzelnen Users  nach UniCode endlich erfüllt und damit für die Community wirklich Riesenprobleme geschaffen. Ein String ist also ab D2009 nicht mehr ein AnsiString mit 8 Bit/Zeichen, sondern ein UniCodeString mit 16 Bit/Zeichen.

Ich hatte dann das Vergnügen, ca. hundert von mir erstellte Komponenten nach UniCode zu portieren 

Darunter auch den Delphi-Wrapper für AG_Link40. Wobei ich gerade versuche, das ganze in eine Delphi VCL-Komponente zu verpacken. Der Vorteil ist eben eine einfache Konfiguration der Kommunikations-DLL und Aufruf der Funktionen mit deutlich weniger Parametern, da das meiste in Objekten verpackt ist und der Rest im Objektinspektor per Mausklick konfiguriert werden kann. Um mit der DLL eine Verbindung zur SPS aufzubauen, waren bisher ca. 50 Zeilen Quellcode erforderlich, das ganze kann ich dank der Verpackung in eine VCL-Komponente nun auf eine einzige Zeile reduzieren ...
Ich habe das bisher nur für die RK512 Kommunikation erstellt, aber das funktioniert schon ganz gut und hat meinen Aufwand für die Programmerstellung erheblich reduziert.
Insofern hat mich die Versionsinkompatibilität eher zu neuen Ideen angeregt ...

Gruß

Question_mark


----------



## NetFritz (31 Dezember 2009)

Hallo
Ich weis ja nicht aus welcher DB die Daten geholt werden.
Wenn man auch eine DB braucht dann ist rrd-tools das optimale Tool um
Charts zu erstellen.
http://oss.oetiker.ch/rrdtool/
Gruß NetFritz


----------



## Larry Laffer (31 Dezember 2009)

@Vierlagig:
Danke für den Hinweis mit dem Add-Befehl. Den hatte ich zwar gesucht, aber nicht gefunden - ich muß allerdings gestehen, dass ich, nachdem ich entdeckt hatte, dass man den übergebenen Variablentyp angeben konnte, mehr nach etwas gesucht habe, wo es möglich ist gleich ein ganze Array oder aber mindestens, wie QM schon geschrieben hat, ein Werte-Paar übergeben kann.

@QM:
Nur weil ich mich vordergründig zunächst für Visual-Studio entschieden habe heißt das nicht unbedingt, dass das so bleibt. VS war ein Vorschlag meines Mitarbeiters, der dies favourisiert hat. Mit Delphi habe ich auch schon geliebäugelt und mir von meinem Sohn seine SW nun auch zum Testen besorgt habe. Mal schauen, wie das bei mir so abschneidet - vor Allem, was das angesprochene Tool (und dessen Handling) angeht.
Ich werde weiter dazu schreiben ...


----------



## Larry Laffer (31 Dezember 2009)

```
*
chart1.Series["Series1"].Points.AddY(myPoint);
```

Als Ergänzung :
Es gibt hier natürlich auch bei MS einen AddXY(myXPoint,myYPoint).
Meine Frage nun :
Wie hast du das Ding gefunden - wie schon geschrieben hatte ich auch danach gesucht, bin aber nicht so recht fündig geworden ...

Gruß
LL


----------



## vierlagig (31 Dezember 2009)

ich soll dir das geheimnis meines erfolgs verraten? 

beständige und hartnäckige recherche ... auf der von dir verlinkten seite gibt es zum einen einen link zur dokumentation: http://www.microsoft.com/downloads/...35-B087-4324-9DBA-6DD5E844FD9F&displaylang=en (nicht sehr aufschlussreich, wenn man noch nie damit gearbeitet hat aber als spätere referenz zu empfahlen) und von da aus gibt es einen link zu beispielen: http://code.msdn.microsoft.com/mschart ... diese solltest du dir auf jeden fall ansehen, wenn du weiter mit _sichtbare künstlerwerkstatt_ arbeiten willst.


----------

