Forum: Mikrocontroller und Digitale Elektronik Messwertübertragung über Ethernet an Server


von Andreas G. (andreasgs)


Lesenswert?

Hi,

Ich habe ein Carambola Entwicklerboard. Auf diesem Board möchte ich 
einen Hardwaretreiber/Software schreiben, die über zusätzliche 
Perepherie Messwerte captured.

Den Treiber bekomm ich schon zum laufen, das ist nicht das Problem. Ich 
möchte über eine der LAN bzw. WLAN Schnittstellen die Messwerte an einen 
Server schicken. Hierzu fehlt mir nun der prinzipielle Ansatz, damit ich 
mir mit der mühsam zusammenprogrammiertern Treiberarchitektur nicht ins 
Knie schieße.

Wie kann ich möglichst einfach die Daten zum Server übertragen und dort 
Speichern, damit diese weiterverarbeitet werden können?
Wie muss eine Anwendung am Server aussehen, damit ich die Messwerte in 
einem Plotter anzeigen lassen kann?
Ein Plotterfenster eingebettet in einer Webseite wäre MEGA.

Es ist und bleibt ein Hobbyprojekt. Eine möglichst einfache Lösung, die 
man auch recht einfach umsetzen kann, wäre erstrebenswert.

Grüßle,
Andreas

von nicht "Gast" (Gast)


Lesenswert?

Hiho,

du kannst ja deine LAN/WLAN Schnittstelle einfach über den Treiber 
ansprechen. So wies Aussieht läuft da ja eh ein Linux drauf.

Schau mal hier: http://www.linuxhowtos.org/C_C++/socket.htm ( Achtung 
erster Treffer bei Google und nur kurz überflogen)

Deine Stickworte bei Google sind Linux und Socket


Viel Spaß

von hp-freund (Gast)


Lesenswert?

Ich denke Du solltest dir für die Darstellung der Messwerte AJAX 
ansehen.
http://www.genlogic3.com/glg_demos/process_demo.html

Falls auf dem Server eine Datenbank läuft kannst Du mit einem mini 
Datenbank Clinet die Daten dorthin übertragen.
http://www.hsg-kl.de/faecher/inf/datenbanken/postgres/python/index.php

von hp-freund (Gast)


Lesenswert?

Sorry. War der falsche link für die Messwertdarstellung.

http://www.genlogic3.com/glg_demos/ajax_dashboard_demo.html

von nicht "Gast" (Gast)


Lesenswert?

Ach, die hälfte vergessen^^

Du must natürlich deine Serverapplikation die Daten entgegennehmen und 
speicher lassen....ganz überraschend. Das ist letzendlich nur ein 
Programm, welchen auf dem Port lauscht und die eintrudelnden Daten 
wegschreibt.

Wie du das in dein Browserfenster bekommst? Hm, mir fallen spontan zwei 
Ansätze ein.

1. über gnuplot ein Bild mit den Daten erstellen und das dann von einem 
Webserver deiner Wahl und der Homepage deiner Programmierkunst 
ausliefern lassen.
2. die Homepage von eionem Python Script im Zusammenspiel mit der Lib 
Mathplotlib die Homerpage erstellen und denn wieder über den Webserver 
ausliefern.


PS: Da lasse ich mich auch gerne eines besseren Belehren, da ich das zur 
Zeit über python mache und mir das irgend wie ein wenig umständlich 
vorkommt.

Grüße,

von Gerd E. (robberknight)


Lesenswert?

Beim Plotten nimmt man ja oft die Zeit für eine der Achsen. Damit kommt 
es dann drauf an daß man nicht nur die Messwerte aufzeichnet, sondern 
die auch möglichst früh mit Zeitstempeln verknüpft.

Wenn Du auf Deiner Peripherie nen µC hast würde ich dort die Zeitstempel 
machen, anonsten spätestens auf dem Carambola. Bis das Zeug beim Server 
ist, ist es zu stark verjittert.

Wenn das einmal gelöst ist, kannst Du die Daten ganz relaxed zum Server 
bekommen. Wie schon vorgeschlagen kannst Du die Daten per Socket zum 
Server schicken. Halte ich aber für aufwendiger. Vom Client aus direkt 
in die Datenbank auf dem Server ist nicht schlecht wenn Du die Daten 
sowieso in ner Datenbank dauerhaft speichern willst.

Wenn Du keine Datenbank verwenden möchtest fände ich das hier die 
einfachste Lösung:

- Ein Skript oder kleines Programm sammelt die Daten und schreibt sie in 
eine Datei
- Die Datei liegt am besten auf einer Ramdisk (tmpfs)
- Je nach Datenmenge wird alle paar Sekunden/Minuten/Stunden eine neue 
Datei angefangen
- Auf dem Server gibst Du ein Verzeichnis frei, z.B. per SMB oder NFS
- Die alte Datei wird geschlossen und auf das freigegebene Verzeichnis 
verschoben
- Den Verschiebevorgang auf den Server machst Du am besten asynchron vom 
Aufzeichnen der Daten (z.B. 2. Skript mit & hintendran starten). Damit 
können kurze Netzunterbrechnungen etc. nicht das weitere Aufzeichnen 
unterbrechen.
- Die Daten liegen jetzt hübsch nach Zeit sortiert in einem Verzeichnis 
auf dem Server. Plotten kannst Du die jetzt z.B. mit Gnuplot

von Na Sowas (Gast)


Lesenswert?

>Es ist und bleibt ein Hobbyprojekt. Eine möglichst einfache Lösung, die
man auch recht einfach umsetzen kann, wäre erstrebenswert.


Schoen ... andere verbraten Monate daran.

von mafenic (Gast)


Lesenswert?

Vielleicht ist ja ser2net eine Möglichkeit.
http://sourceforge.net/projects/ser2net/

Gruß
mafenic

von Jobst M. (jobstens-de)


Lesenswert?

Andreas Gassner schrieb:
> Ein Plotterfenster eingebettet in einer Webseite wäre MEGA.

Wenn sowieso schon ein Webserver läuft, kann dieser die Daten auch 
entgegen nehmen und mittels php o.ä. z.B in einer DB ablegen.

Einfach eine Verbindung zum Webser aufbauen und z.B.:
"GET /datenerfassung.php?daten=123"
dahin schicken. (Siehe HTTP z.B. bei Wikipedia)

Ein Plotterfenster kann der Webserver mittels php auch erstellen.


Gruß

Jobst

von Andreas G. (andreasgs)


Lesenswert?

Hallo Zusammen,

Vielen Dank für eure Antworten. Ich versuche mal die beiden Varianten, 
so wie ich sie Verstanden habe, zusammenzufassen:

1. Auf Basis Dateifreigabe:
- Der Client erzeugt zyklisch eine Messdatendatei, die mit festen 
abständen auf einer Serverfreigabe die Messdatei abspeichert
- die Weiterverarbeitung läuft damm am Server, seis die Datein 
zusammenzufassen, in einer DB zu speichern, oder auf einen WebServer zu 
legen

2. Auf Basis ClientServer über Sockets
- "natürliche" Interprozesskomunikation, wie im Netzwerk üblich
- die Intelligenz liegt im Server der die Daten wie gebraucht 
weiterverarbeitet
- Der Server verteilt entweder eine Systemzeit, oder einen Broadcast 
trigger, auf dem die Clients ihre Messstellen abfragen.
- Die Clients kümmern sich nur ums Capturen und Zeitstempeln der 
Messdaten

Bewertung 1:
- Formatierung der Messdatei als Basis der Funktionen
- Proprietärer Ansatz, Clients setzen redundant Funktionen um, die 
besser im Server aufgehoben sind
- Änderungen und Erweiterungen müssen auf allen Clients ausgerollt 
werden
- Höherer Aufwand (Speicher) in Clients
- Keine einheitliche Zeitbasis
- Wenn auch Server ein Carambola board ist, könnte es wegen dem 
Dateioverhead mit Speicherplatz eng werden

Bewertung 2:
- Resourcenbedarf bei Clients gering
- Server verteilt entweder eine einheitliche Zeitbasis, oder einen 
Messtrigger, damit ist zeitliche Konsitenz der Daten gesichert
- System und Funktionsänderungen betreffen nur das Serversystem, nicht 
aber die Clients
- Trennung von Datenerfassung und Datenverarbeitung
- Nutzen eines Standards
- Es gibt einen zentralen Datenpool, gerne auch DB

Ich denke dass die Lösung zwei insgesamt die bessere Lösung ist.Danke 
für eure Hilfe, die Architektur steht.

Grüßle
Andreas

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der clientseitige Aufwand lässt sich noch weiter reduzieren, indem der 
Client nicht Dateien erzeugt und diese mit Dateiübertragungsprotokollen 
(SMB, FTP etc.) über Netzwerkfreigaben bewegt, sondern indem der Client 
mittels HTTP-GET- bzw. POST-Requests Daten an ein auf dem Webserver 
laufendes CGI-Skript sendet, das diese wiederum in eine Datenbank 
einträgt.

Das CGI-Skript kann problemlos z.B. in php geschrieben werden.

Der Client muss neben dem grundlegenden TCP/IP-Stack nur noch über die 
Fähigkeit verfügen, HTTP-Requests abzusetzen, und das ist 'ne ziemlich 
leichte Übung.

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.