Hallo zusammen, ich habe folgendes Problem/Aufgabe: Ich möchte gerne von einem Messgerät (Fluxmeter http://www.magmess-ballanyi.de/pdf/P-D-B3.pdf), welches über eine RS232 Schnittstelle verfügt und mittels eines RS232-USB Konverters an einen PC angeschlossen ist, Messdaten auswerten und als Grafik darstellen (am besten in Excel). Die Messdaten des Messgerätes kann ich mittels Putty laufend anzeigen. Es geht um ein Prüfgerät welches auf einer Metallstange, mittels einer Verfahreinheit, etappenweise verfahren wird und alle paar Sekunden der Messwert des Fluxmeters abgespeichert werden muss um somit eine Grafik zu erstellen. Ich bin noch ziemlich unerfahren auf diesem Gebiet, verfüge über Grundkenntnisse in Java, bin aber bereit mich einzuarbeiten. (Das ganze geschieht im Ramen einer Bachelorarbeit) Welche Möglichkeiten gibt es für die Realisierung, wie setze ich am besten an? Gruß, Bene
Man könnte die Messwerte in eine Datei schreiben, als CSV (comma separated value) und dann in Excel importieren. Ob Excel wirklich "am besten" ist, sei dahingestellt - meiner Meinung nach wird es für viel zu viele Dinge verwendet, für die es gar nie konzipiert war.
natürlich geht jeder anders an so eine Aufgabe heran. Ich habe sowas neulich mit VB.NET gemacht (Visualisierung von Messwerten, Zeichnen von Temperaturverläufen etc.). Die Kommunikation mit der Seriellen Schnittstelle (USB wird intern auch als COM behandelt) ist dabei super einfach. Die Ausgabe von Grafiken geht auch recht einfach ... für mich ein guter Weg. Alternativ könnte man z. B. in C / C++ auch ein kleines Programm schreiben, dass die Schnittstelle permanent ausliest und die Werte z. B. in eine CSV-Datei schreiben. Diese kannst Du dann wieder in Excel importieren und dort weiter verarbeiten. Wenn Du noch irgendwo die Mscomm32.ocx auftreibst, kannst Du die Serielle Schnittstelle auch direkt in Excel per VBA abfragen. Früher war diese Datei mal in Office enthalten - heute leider nicht mehr so weit ich weiß. Leider kenne ich die Lizenzbestimmungen für die Datei nicht und kann Dir deshalb nicht sagen, ob es legal ist, sie aus dem Netz herunter zu laden. Java halte ich nur für begrenzt sinnvoll, da der Zugriff auf die Schnittstellen hier doch ein ziemlicher Graus ist.
Benedikt F. schrieb: > ...Messdaten auswerten und als Grafik darstellen (am besten in Excel). Du kannst die Messdaten auch direkt mit Excel an der Schnittstelle abholen und dann anzeigen. Ein Beispielprogramm findet sich hier: Beitrag "Re: Serielle Schnittstelle mit VB auslesen und in Excel Darstellem" gk
gk schrieb: > Benedikt F. schrieb: >> ...Messdaten auswerten und als Grafik darstellen (am besten in Excel). > > Du kannst die Messdaten auch direkt mit Excel an der Schnittstelle > abholen und dann anzeigen. Ein Beispielprogramm findet sich hier: > > Beitrag "Re: Serielle Schnittstelle mit VB auslesen und in Excel > Darstellem" > > gk Danke für die schnellen Antworten! Ist es über Excel dann möglich das Auslesen der Messwerte zu bestimmen Zeiten festzulegen? Also die Verfahreinheit stoppt alle paar Zentimeter und in diesen Pausen sollte dann der Messwert abgespeichert werden und dies möglichst automatisch ohne dass ich eine Taste oder so drücken muss.
woher soll Excel denn wissen, wann Du stoppst? Dazu müßte Excel permanent auslesen um feststellen zu können, dass es keine Lageänderung gibt. Dazu reicht es dann nicht mehr, nur die Werte des Fluxmeters zu übertragen sondern musst auch die Positionsinfo mitsenden.
Benedikt F. schrieb: > Ist es über Excel dann möglich das Auslesen der Messwerte zu bestimmen > Zeiten festzulegen? Ja, warum den nicht. gk
Digi Spark schrieb: > woher soll Excel denn wissen, wann Du stoppst? Dazu müßte Excel > permanent auslesen um feststellen zu können, dass es keine Lageänderung > gibt. Dazu reicht es dann nicht mehr, nur die Werte des Fluxmeters zu > übertragen sondern musst auch die Positionsinfo mitsenden. Ja das ist mir klar, ich meinte eher zu sagen dass ich nach 10 sec einen Messwert speichern will, dann nach 20sec 30sec usw.
Benedikt F. schrieb: > Digi Spark schrieb: >> woher soll Excel denn wissen, wann Du stoppst? Dazu müßte Excel >> permanent auslesen um feststellen zu können, dass es keine Lageänderung >> gibt. Dazu reicht es dann nicht mehr, nur die Werte des Fluxmeters zu >> übertragen sondern musst auch die Positionsinfo mitsenden. > > Ja das ist mir klar, ich meinte eher zu sagen dass ich nach 10 sec einen > Messwert speichern will, dann nach 20sec 30sec usw. Mit der Application.OnTime Methode kann man Excel anweisen nach einer gegebenen Zeit ein Makro (also eine VBA Sub) aufzurufen: http://msdn.microsoft.com/en-us/library/office/ff196165.aspx
1 | Private Sub Workbook_Open() |
2 | FetchData ' Das erste mal Daten lesen |
3 | End Sub |
4 | |
5 | Sub FetchData() |
6 | ' Einlesen und ins worksheet eintragen.. |
7 | ' [...] |
8 | ' In 10 Sekunden wieder FetchData aufrufen |
9 | Application.OnTime Now + TimeValue("00:00:10"), "FetchData" |
10 | End Sub |
:
Bearbeitet durch User
Digi Spark schrieb: > natürlich geht jeder anders an so eine Aufgabe heran. Ich habe sowas > neulich mit VB.NET gemacht (Visualisierung von Messwerten, Zeichnen von > Temperaturverläufen etc.). Die Kommunikation mit der Seriellen > Schnittstelle (USB wird intern auch als COM behandelt) ist dabei super > einfach. Die Ausgabe von Grafiken geht auch recht einfach ... für mich > ein guter Weg. Kannst du mir kurz erklären wie ich die Daten mit VB.NET auslese. Ich versuche schon die ganze Zeit ein Programm zu schreiben welches mir einfach den Wert des Messgerätes anzeigt sobald ich auf einen Button klicke, ich komme aber einfach nicht dahinter. (Verwende Microsoft Visual Studio Express 2013)
Benedikt F. schrieb: > Kannst du mir kurz erklären wie ich die Daten mit VB.NET auslese. > Ich versuche schon die ganze Zeit ein Programm zu schreiben welches mir > einfach den Wert des Messgerätes anzeigt sobald ich auf einen Button > klicke, ich komme aber einfach nicht dahinter. > (Verwende Microsoft Visual Studio Express 2013) Schon mal der grundsätzlich falsche Ansatz. Nicht das VB.NET Programm 'liest die Daten aus', sondern das Messgerät sendet ständig die Daten (wie in deinem ersten Post steht). D.h. das VB.NET Programm empfängt einfach nur etwas an der seriellen Schnittstelle und du musst es dann eben entsprechend auswerten. Was dir frei steht ist, entsprechend gesendete Daten zwar von der Seriellen abzuholen, die Daten danach aber zu ignorieren. Dazu gibt es nun im WWW wahrlich genügend Seiten, die einem zeigen, wie man in VB.NET mit der seriellen Schnittstelle umgeht.
:
Bearbeitet durch User
Das Auslesen einfach nur über die Zeit kann bei wenigen Punkten noch gehen, aber bei vielen Punkten Addieren sich Fehler bei der Zeitnahmen ggf.. Die Frage wie die Bewegung und Datenaufnahme Synchronisiert werden ist da eher noch nicht gelöst. Die Tendenz geht dazu erst einmal alle Daten aufzunehmen und zu Speichern, auch wenn man bei einer normalen Messung nur einen kleinen Teil darstellt. Die Extra Daten können dazu dienen auch Nachträglich Fehler zu finden, etwa wenn das mit der Synchronisierung nicht ganz funktioniert hat.
Ja das mit der Synchronisierung wird nicht ganz leicht, aber im so weit bin ich im Moment noch gar nicht. Ich habe nochmal eine Frage bezüglich VBA in Excel. Und zwar habe ich die MSCOMM32.OCX runtergeladen in meinen SysWOW64 Ordner kopiert und dann registriert. Wenn ich jetzt in Excel (2010) im Werkzeugkasten MSComm auswählen will kommt: "Der Antragsteller gilt für den vorgegebenen Vorgang nicht als vertrauenswürdig" Zwar finde ich im Internet viele Beiträge dazu aber alle führen auf folgende Seite: http://www.nirsoft.net/utils/axhelper.html Aber was ich jetzt genau mit der Software machen muss verstehe ich nicht. Wäre nett wenn mir jemand kurz helfen würde.
Hallo Benedikt, Benedikt F. schrieb: > Ich möchte gerne von einem Messgerät (Fluxmeter > http://www.magmess-ballanyi.de/pdf/P-D-B3.pdf), welches über eine RS232 > Schnittstelle verfügt und mittels eines RS232-USB Konverters an einen PC > angeschlossen ist, Messdaten auswerten und als Grafik darstellen (am > besten in Excel). > Die Messdaten des Messgerätes kann ich mittels Putty laufend anzeigen. > > Es geht um ein Prüfgerät welches auf einer Metallstange, mittels einer > Verfahreinheit, etappenweise verfahren wird und alle paar Sekunden der > Messwert des Fluxmeters abgespeichert werden muss um somit eine Grafik > zu erstellen. > [...] > Welche Möglichkeiten gibt es für die Realisierung, wie setze ich am > besten an? Wenn ich mir den Thread hier anschaue, scheint das Ganze mit Excel-Mitteln nicht so einfach zu sein. Deswegen möchte ich hier gern einmal einen etwas anderen Ansatz aufzeigen. Der Einfachheit halber würde ich die Software in zwei Komponenten trennen: nämlich in eine, die die Daten kontinuierlich ausliest und sie abspeichert, und eine zweite für die Visualisierung. Die erste Komponente sähe bei mir so aus (Code in Python):
1 | import time, serial |
2 | if __name__ == '__main__': |
3 | ser = serial.Serial('\\.\COM1', 9600) # port, baudrate |
4 | log = file('log.txt', 'a') |
5 | while 1: |
6 | log.write("%f,%s"%(time.time(), ser.readline())) |
Dieses Skript öffnet die serielle Schnittstelle und die Datei 'log.txt', dann folgt eine Endlosschleife, die zeilenweise aus der seriellen Schnittstelle liest und das Gelesene mit einem Zeitstempel in die Datei 'log.txt' schreibt. Die zweite Softwarekomponente würde die Daten dann visualisieren. Das kannst Du natürlich mit Excel machen, aber auch mit gnuplot, Matplotlib oder jeder anderen Software, die die Daten aus der CSV-Datei lesen und hybsche Kurven daraus malen kann. Ein weiterer Vorteil der von mir skizzierten Lösung mit der Trennung der Aufgaben auf verschiedene Komponenten ist, daß es letztlich völlig egal ist, wie die jeweiligen Komponenten aussehen. Die Daten könnte auch ein Raspberry Pi, Sheevaplug, Arduino oder beliebiges Microcontroller-Board sammeln; die serielle Schnittstelle zu lesen und die Ergebnisse in eine Datei zu schreiben, ist ja nun wirklich keine Rocket Science, erfordert keine besonderen Anforderungen an die Performance und muß natürlich auch nicht in Python geschehen. HTH, Karl
Erst mal vielen Dank für die Hilfe, hat mir sehr geholfen! Ich habe jetzt mit VB ein Programm geschrieben welches eine Text Datei mit den Messwerten abspeichert. Hier mal der Ausschnitt dazu:
1 | Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick |
2 | Dim Messwert = SerialPort1.ReadLine |
3 | My.Computer.FileSystem.WriteAllText("C:\Users\Bene\Desktop\log.txt", Messwert + vbNewLine, True) |
4 | End Sub |
Da das Messgerät aber immer den Messwert mit Datum und Uhrzeit ausgibt (14.01.2014 07:48 -0839Vs) wollte ich noch fragen ob man nur den Messwert abspeichern kann, also in diesem Fall die -0839. Meine Überlegung wäre, dass ich vielleicht am Ende der Messung das log.txt wieder öffne und die ersten 16 Bits und die letzten 2 Bits jeder Zeile lösche, nur weiß ich nicht wie ich dies am besten anstelle.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.