Hallo,
ich suche ein Beispiel in C++, womit man die Daten von der RS232
auf dem PC grafisch darstellen lassen kann.
z.B. Temperaturmesswert von einem Controller.
Die Y-Achse Temperaturwerte und X-Achse Zeit.
Hat jemand schon mal so etwas gemacht?
Danke Xenu,
ich möchte das ganze unter Windows XP machen.
Ich verwende als Programmiertool Microsoft Visual C++ .NET 2003 bzw.
2005.
Hast du das ganze mal zum laufen gebracht?
Wie müsste ich den Code z.B. in meine WinForms-Anwendung (.NET)
einbinden?
Ich habe mir mal den Code heruntergeladen:
>>http://www.codeproject.com/miscctrl/pgllib.asp
Also ich kann da keine Grafik sehen. Ich habe das ganze mal mit Visual
C++ 2005 .NET ausgeführt.
Mit GDI+ lässt sich das ganze auch ziemlich einfach ohne zusätzliche
Komponenten erledigen
(das ganze am besten in einem eigenen UserControl)
Beispiel ist C#
Danke ich habs mir mal heruntergeladen.
Aber leider weiss ich nicht wie ich das ganze einbinden könnte.
So ein misst seit ein paar Tagen sitze ich vor dem PC und suche im Netz
geeignete Sachen, mit dem ich eine Temperaturkurve oder z.B.
luftdruckkurve auf dem PC darstellen lassen kann.
Irgendwie gibt es für Borland builder C++ bzw. Visual C++ .NET nix
gescheites. Für jede weitere Anregung bin ich sehr dankbar!
Ich habe mir den Source Code
>>http://www.codeproject.com/miscctrl/pgllib.asp
ja heruntergeladen und mit Visual Studio C++ 2005 .NET gestartet.
Das funktioniert ja überhaupt nicht. Gibt es hier in diesem Forum jemand
der dieses Projekt zum laufen gebracht hat?
Ich verzweifle noch. Egal was ich mache es tut nichts.
Also das .NET ist so ein kompilzierter Scheiss.
Vor ein paar Jahren habe ich alles mit dem Borland Builder C++
realisiert.
Ich brauch nur mal ein kleines Beispiel mit dem ich eine Temperaturkurve
darstellen lassen kann. Ich verwende WinForms (C#,C++). Also KEIN MFC.
> Also das .NET ist so ein kompilzierter Scheiss.
Das o.a. Beispiel ist .NET (fehlt nur noch die Beschriftung, Achsen
etc., die aber ebenso einfach erstellt werden können)
Hallo arc, welche Beispiel meinst du?
Das hier >>http://www.codeproject.com/miscctrl/pgllib.asp
Wenn ja weisst du wie man das ganze in die WinForms Umgebung einbinden
kann?
Also ich habe mit C++ .NET eine WinForms Anwendung erstellt. Wenn ich
zum Beispiel einen Button da drücke, dann soll mir erst mal die Grafik
erscheinen.
Wie binde ich das ganze ein?????
Willst was ganz einfaches ... brauchst du MFC
Wie im Folgenden zu sehen ist, wird ganz einfach ein array mit
Verbindungslinie LineTo(..) gezeichnet. Die Skala werden mit der größten
und kleinsten Zahl beschriftet.
Ich habe mal gelesen, dass sich auch irgendwie die plot-Funktion von
Matlab als Bibl. in C++ einbinden lassen. Stimmt das, oder hab ich was
falsch verstanden.
Hallo etsmart,
danke für den Code. Ich habe diesen gleich mal mit Visual C++ 6.0 (MFC)
getestet. Es erscheint immer eine Fehlermeldung:
pDC --> nicht deklarierter Bezeichner
du kannst/musst diesen Befehl in OnDraw ausführen. pDC ist das Ziel wo
gezeichnet wird.
NameView - Name ist der Name deines Projektes - View ist festgelegt
data wird als Zeiger übergeben. Deshalb wird die Größe
sizeof(data)/sizeof(data[0]) als weiterer Parameter übergeben.
Ich empfehle erst einmal
http://www.uni-trier.de/urt/user/baltes/docs/vcpp/vcpp6/vcpp6.pdf
Jetzt erscheint diese Fehlermeldung.
Ich habe es so gemacht :
{
NameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// ZU ERLEDIGEN: Hier Code zum Zeichnen der ursprünglichen Daten
hinzufügen
double data[]={0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,4,6,7,8,7};
GraphOut Graph1;
Graph1.Graph_Background(pDC);
Graph1.d2Graph(pDC,data,(sizeof(data)/sizeof(data[0])));
}
Schau mal
//Dateiname: GraphOut.h
Du kopierst den Code von oben in eine header Datei.
Dann bindest du die ein. Dadurch wird die Klasse vor dem eigentlichen
Quellcode eingefügt.
error C2065: 'GraphOut' : nichtdeklarierter Bezeichner
GraphOut ist nicht deklariert, weil keine header Datei eingebunden in
der das deklariert ist
error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'Graph1'
resultiert aus vorherigem Fehler. Ansonsten wäre GraphOut die Klasse und
Graph1 erbt halt alles aus GraphOut -> Objektorientiert
error C2065: 'Graph1' : nichtdeklarierter Bezeichner
Graph1 wurde durch vorhergehende beide Fehler nicht erzeugt
und so weiter
Aber ich vermute, dass du nicht die notwendige Erfahrung in Sachen
OOP,MFC u.ä. hast. Dieses Uni-Trier Skript scheint ganz brauchbar
Danke für den Link.
Ich habe jetzt mal ein neues Projekt erstellt.
Dieser Code befindet sich in meiner Test.cpp Datei.
Ich habe auf meinem Formular ein Button plaziert.
Wenn ich den Button drücke, dann soll OnDraw ausgeführt werden.
Wie rufe ich dies in der Button Routine aus?
void CView::OnDraw(CDC* pDC)
{
double data[]={0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,4,6,7,8,7};
GraphOut Graph1;
Graph1.Graph_Background(pDC);
Graph1.d2Graph(pDC,data,(sizeof(data)/sizeof(data[0])));
CView* t;
//t->OnDraw
}
void CTestDlg::OnButton1()
{
// TODO: Code für die Behandlungsroutine der
Steuerelement-Benachrichtigung hier einfügen
//MessageBox("Test","Info", MB_ICONEXCLAMATION);
}
Brauche ich eigentlich dies hier?
NameDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
Ich glaube, du musst erstmal verstehen, wass es mit Objektorientierter
Programmierung auf sich hat...
Um auf deine "eigene" Klasse "GraphOut" zugreifen zu können, musst du
sie deklarieren. (Wie oben gezeigt)
Anschließend musst du sie in die .cpp datei einbinden. Entweder
'reinkopieren, oder per .h Datei.
>Wenn ich den Button drücke, dann soll OnDraw ausgeführt werden.
Und hier wiederum solltest du ersteinmal nachvollziehen, wie die Windows
Programmierung per MFC abläuft. (Zugegebenermaßen ist das nicht grad
sehr einfach, aber, soweit ich das richtig verstanden hab, das
einfachste zur Zeit um Windows-Programme schreiben zu können).
"On..." Methoden (Funktionen...) kannst du nicht aufrufen. Bzw, du
solltest es nicht tun.
Diese Methoden werden mit Windows-Messages verknüpft (Nachrichten, die
Windows an dein Programm schickt) und somit aufgerufen, wenn die
passende Windows-Message eintrifft.
Wird dein Programmfenster zum Beispiel verschoben, oder maximiert, so
wird OnDraw aufgerufen, um die komplette Fenster"oberfläche" zu
zeichnen.
Als Hinweis: Es ist dennoch möglich, ein neues Zeichnen der Oberfläche
zu erzwingen. Die Klasse CView (wovon "NameView" in deinem Falle
abgeleitet ist) hat hierfür die Methode "Invalidate();". Da du dich
privat in der CView Klasse, bzw in einer Ableitung der CView Klasse
befindest, reicht ein einfaches "Invalidate();" um ein erneutes Zeichnen
zu erzwingen.
PS: Habe selber gerade erst angefangen, mir die MFC anzueignen, also
Nachsicht bitte ;)
Mit Microsoft Visual Studio 2005 C++ .NET habe ich mal ein kleines
Projekt angefangen. Mit DrawLine möchte ich den Temperaturverlauf in
einem pictureBox darstellen.
Deiser DrawLine Funktion muss ich ja einen Anfangswert für X und Y
eintragen und einen Endwert für X und Y. Irgendwie haut das bei mir
nicht so hin.
Der Nullpunkt ist ja links oben. Wenn ich einen Temperaturverlauf
anzeigen lassen möchte,
dann muss ich ja links unten anfangen. Wie kann ich dies mit DrawLine
realisieren. Ich komme mit dieser DrawLine Funktion durcheinander.
Kann ich eigentlich nur ein PIXEL anzeigen lassen? Wie geht das?
(C°)
|
| .
| . .
| .... .
|. .....
-----------------> (time)