www.mikrocontroller.net

Forum: PC-Programmierung Prinzipfrage: kontinuierlichen Datenstrom speichern


Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe mal eine Prinzipfrage da ich nicht weiß, wie ich ich mein 
Problem am besten lösen kann.

Ich habe mit C# eine Prüfsoftware geschrieben die mir über 4...5h hinweg 
jede Sekunde ein paar Messwert liefert.
Diese Messwerte möchte ich nun in eine csv schreiben was auch klappt.

Momentan warte ich in der Software bis ich einen Messwert bekomme und 
schreibe in sofort in die Datei.

Wenn ich nun aber 5x in der Sekunde, über Stunden hinweg, ständig die 
Datei schreibe/erweitere, habe ich ja eine Unmenge an Schreibzyklen. 
Macht das dem Speichermedium etwas aus? (derzeit hdd, später vlt. mal 
flash)

Also habe ich überlegt ob ich nicht die Messwerte in einen Buffer 
schreiben soll und dann immer z.b. 100 Messwerte auf einmal zu schreiben 
- das wiederum benötigt ja aber mehr RAM (wobei 1000 Messwerte a 4 Byte 
ja in heutigen Zeiten ein "Witz" sind!)

Wie machen das nun die Profis!? wirklich jeden Messwert einzeln 
schreiben oder aber in einem arry zwischenpuffern - und warum ist die 
eine Lösung besser als die andere?

hoffe Ihr könnt mir weiter helfen!

Grüße Micha

Autor: Archie F..... (archie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du beantwortest doch deine Frage schon von sich aus. Wenn du zukünftig 
einen Flash-Speicher verwenden solltest, wäre Page-Write Prinzip am 
sinnvollsten.

>habe ich ja eine Unmenge an Schreibzyklen.
>Macht das dem Speichermedium etwas aus? (derzeit hdd, später vlt. mal flash
Zu HDD kann ich nciht viel sagen, aber dem Flash macht es schon was aus. 
Die Schreibzyklen sind begrenzt (wenn du auf die gleiche Adresse immer 
wieder schreibst). Soll der Speicher ~unendlich Mal überschreibbar sein, 
eignet sich da eher ein FRAM. Kannst aber das Datenblatt vom Flash 
angucken und ausrechnen ob dein Prüfgerät beim vollen Einsatz die 
Garantiezeit überlebt :), denn Flash's sind um einiges billiger als die 
FRAM's.

Autor: sebihepp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Betriebssystem selbst hat die Aufgabe, diese Zugriffe bestmöglichst 
umzusetzen. Windows und Linux legen selber einen Puffer dafür an. 
Deshalb gibt es ja die "Flush"-Funktionen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micha schrieb:

> Wie machen das nun die Profis!? wirklich jeden Messwert einzeln
> schreiben oder aber in einem arry zwischenpuffern

Das Betriebssystem buffert normalerweise ja schon von sich aus.
Die eigentliche Frage lautet: Was passiert wenn das System zwischendurch 
abschmiert und die gebufferten Daten verloren gehen ehe sie es aufs 
Medium schaffen. Macht das was oder ist das egal.

Autor: Micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das is nicht so tragisch wenn mir die letzten paar Daten verloren gehen, 
dann müsste ich den letzten Teil der Messung eben nochmal starten.

Die jetztige Prüfsoftware und der dazugehörige Rechner laufen aber 
derzeit stabil. Abstürzen tut es nur wenn, die Putzfrau Abends kommt und 
den PC aussteck...
...damit der Staugsauger in die Steckdose eingesteckt werden kann :-)))


Dass Windows zwischendurch puffert wußte ich nicht, spielt da eignetlich 
die Programmiermgebung eine Rolle? Benütze C# auf VS Express 2008

Mir fehlt da eben die Erfahrung was "viel" Schreibzyklen sind! - 
Hauptsächlich wird sicherlich auf HDD geschrieben, und da frage ich mich 
eben ob der (deutliche) Mehraufwand fürs pagewrite gerechtfertigt ist.

Autor: Hartmut (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem Du als Autor der Software nicht sicher weißt, was der User jetzt 
und in aller Zukunft dann damit macht, würde ich in jedem Fall die Daten 
zwischenspeichern und in größeren Blöcken auf den Datenträger schreiben.

z. B. meinst Du jetzt, daß die Daten nur auf die HD geschrieben werden. 
Die hält das problemlos aus. Aber was ist, wenn der nächste User sich 
das Logfile einfach direkt auf den USB-Stick schreiben lässt? Auch das 
ist ein Flash-Speicher mit beschränkter Anzahl von Zyklen. Selbst nach 
der Pufferung durch das Betriebssystem kommt da noch eine bedenkliche 
Anzahl von Schreibzyklen zustande.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hartmut schrieb:
> würde ich in jedem Fall die Daten
> zwischenspeichern und in größeren Blöcken auf den Datenträger schreiben

für sowas gibt es bufferd streams, wenn ich mich recht erinnere

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich würde einfach reinschreiben und fertig, soll sich doch das 
Betriebssystem darum kümmern.
Bei Festplatten brauchst Du Dich nicht um die Schreibzyklen zu kümmern.
Ich vermute mal, dass Deine Anwendung aber sowieso völlig unkritisch 
ist, auch für Flashspeicher. Denn die Datei wird ja nur ständig ergänzt 
und nicht immer wieder komplett neu erstellt.
Einen Puffer braucht es nur dort wo Deine Messdaten reinkommen, denn es 
kann zwischendurch schon mal vorkommen, dass Windows ein wenig 
beschäftigt ist und die Daten vielleicht nicht so schnell speichern kann 
wie Du möchstest.
Als Alternative zur Datei könntest Du die Daten auch in eine Datenbank 
schreiben die sich auf demselben PC oder im Netzwerk befindet. Da sind 
auch von Haus aus genügend Mechanismen vorhanden um Probleme zu 
vermeiden.
Aber wie gesagt, das mit der Datei passt schon und einfach laufend 
reinschreiben/ergänzen sollte kein Problem sein.

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich vermute mal, dass Deine Anwendung aber sowieso völlig unkritisch
> ist, auch für Flashspeicher. Denn die Datei wird ja nur ständig ergänzt

Aber die Dateigröße wird irgendwo im Filesystem immer an der gleichen 
Stelle geschrieben wenn du deinen Datenträger nicht mit einem geeigneten 
Filesystem formatiert hast oder der Controller selbst intelligent genug 
ist, dass ers verteilt.

Trotzdem: Das ist alles nicht deine Aufgabe. Das Puffern sollte das 
Betriebssystem machen. Oder die Laufzeitbibliothek. Vielleicht musst du 
noch was konfigurieren.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micha schrieb:
> Wie machen das nun die Profis!? wirklich jeden Messwert einzeln
> schreiben oder aber in einem arry zwischenpuffern - und warum ist die
> eine Lösung besser als die andere?

Hallo Micha,

das ist ziemlich egal: der Dateisystemtreiber puffert die Daten, das 
System verwaltet einen generellen Hard Disk Cache und auf der Festplatte 
werden die Daten auch erst in einen Buffer geschrieben - das sind also 
mindestens 3 hintereinander, da kommt es auf deinen Buffer nicht mehr 
wirklich an.

Viel schwieriger ist es, dafür zu sorgen, dass die Daten unverzüglich 
auf dem Medium landen, das lohnt sich aber auch selten.

Ich würde höchstens eine oder ein paar Sekunden puffern.

Gruss Reinhard

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.