Forum: PC-Programmierung Messdaten auswerten


von Benedikt F. (bene_f)


Lesenswert?

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

von Mark B. (markbrandis)


Lesenswert?

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.

von Digi S. (digispark)


Lesenswert?

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.

von gk (Gast)


Lesenswert?

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

von Benedikt F. (Gast)


Lesenswert?

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.

von Digi S. (digispark)


Lesenswert?

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.

von gk (Gast)


Lesenswert?

Benedikt F. schrieb:
> Ist es über Excel dann möglich das Auslesen der Messwerte zu bestimmen
> Zeiten festzulegen?


Ja, warum den nicht.

gk

von Benedikt F. (Gast)


Lesenswert?

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.

von Luther B. (luther-blissett)


Lesenswert?

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
von Benedikt F. (Gast)


Lesenswert?

Vielen Dank, genau danach hab ich gesucht!

von Benedikt F. (Gast)


Lesenswert?

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)

von Karl H. (kbuchegg)


Lesenswert?

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
von Ulrich (Gast)


Lesenswert?

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.

von Benedikt F. (Gast)


Lesenswert?

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.

von Karl Käfer (Gast)


Lesenswert?

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

von Benedikt F. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.