AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Datenlogger zerstört CompactFlash (CF) Karten
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi Datenlogger zerstört CompactFlash (CF) Karten

Ein Thema von rhuber · begonnen am 11. Sep 2012 · letzter Beitrag vom 11. Sep 2012
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 14:53
Gibt's keine interne Festplatte?
von da täglich, alle 6Stunden.. auf Stick/CF-Card sichern?

oder vllt eine USB-Festplatte?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#12

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 15:14
Ich denkie mal das ist eine Preis-, Platz- und vorallem Energiefrage.

CF-Karte als Ersatz für HDDs sind schon seit langem bekannt ... praktisch der Vorgänger der SSDs.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Sep 2012 um 15:32 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#13

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 15:22
Lösung: RAM-DISK
Nur 1x täglich auf Flash-Speicher schreiben.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 16:11
Die "richtige" Methode ist wenn man die Datei zum Schreiben öffnet, mit Seek ans Ende geht und dort weiterschreibt.
Was man vermeiden sollte ist den alten Inhalt in eine Stringliste einzulesen, dann Daten anhängen und den gesamten Inhalt wegzuschreiben.
Mit dieser falsche Methode würde man alle Daten, die man bisher geschrieben hat nochmals schreiben (nicht gut für die CF).

Ich habe mal auf die Schnelle eine Hilfsklasse geschrieben, mit der man es besser machen kann.

Delphi-Quellcode:
type
   // Mit dieser Klasse kann man Daten an eine bestehende Datei anhängen
   TAppendFileWriter = class(TObject)
   private
     FStream : TFileStream;
     FFilename : string;
     function GetFilesize: Int64;
   public
     constructor Create(const filename:string);
     destructor Destroy;override;

     procedure WriteString(const s : String);
     procedure WriteLine(const line:string);
     function Flush:Boolean;

     property Filename:string read FFilename;
     property Filesize:Int64 read GetFilesize;
   end;



{ TAppendFileWriter }

constructor TAppendFileWriter.Create(const filename: string);
begin
  inherited Create;
  FStream := TFileStream.Create(filename, fmOpenReadWrite or fmShareDenyWrite);
  FStream.Seek(0, soFromEnd);
end;

destructor TAppendFileWriter.Destroy;
begin
   FStream.Free;
   inherited;
end;

procedure TAppendFileWriter.WriteString(const s: String);
begin
   if s <> 'then
      FStream.WriteBuffer(s[1], Length(s));
end;

procedure TAppendFileWriter.WriteLine(const line: string);
begin
   WriteString(line+#13#10);
end;



function TAppendFileWriter.GetFilesize: Int64;
begin
   Result := FStream.Size;
end;


// Daten sicher schreiben
procedure TAppendFileWriter.Flush;
begin
   if not FlushFileBuffers(FStream.Handle) then
      RaiseLastWin32Error;
end;
Andreas
  Mit Zitat antworten Zitat
rhuber

Registriert seit: 11. Sep 2012
12 Beiträge
 
Delphi 7 Personal
 
#15

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 16:34
Wow, das ist ja super,besten Dank für eure Vorschläge!!!

Genau, der Embedded-PC braucht im Betrieb mit Win2k nur ca. 2 Watt. Da ich auch auf bewegte Teile verzichten wollte, läuft alles über eine Interne CF-Karte. Das Ganze soll mindestens 2 Jahre ohne Eingriffe (Tastatur,Monitor usw. gibts nicht) betrieben werden, lediglich der USB-Stick wird monatlich gewechselt. Immer nach dem Neustart um Mitternacht werde die Log-Files von der internen CF-Karte auf den USB-Stick kopiert.

Hab jetzt mal eine RAM-Disk gemacht, sollte ja den selben Effekt haben wie eine StringList.

Meine Speichervariante:
Code:
If FileExists(fileName) Then Begin //fileName=.csv-File des aktuellen Tages
   try
     AssignFile(TxtFile, fileName); //.csv-File Laden
     Append(TxtFile);
     WriteLn(TxtFile,messwerte);  //Neue Zeile mit Messwerte in Logfile hinzufügen (ca.300 Zeichen)
     CloseFile(TxtFile);
Ist wohl nicht gerade optimal,richtig? Ich werd auch mal versuchen die vorgeschlagene Klasse einzubauen. Kenn mich mit der Materie leider noch nicht so aus...

Gruss Roman
  Mit Zitat antworten Zitat
taveuni

Registriert seit: 3. Apr 2007
Ort: Zürich
533 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 16:38
Immer nach dem Neustart um Mitternacht werde die Log-Files von der internen CF-Karte auf den USB-Stick kopiert.
Weshalb schreibst Du nicht direkt zyklisch auf den USB Stick?
Die obige Aussage repräsentiert meine persönliche Meinung.
Diese erhebt keinen Anspruch auf Objektivität oder Richtigkeit.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#17

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 16:41
Bei neueren Delphi-Versionen kann man auch was aus IOUtils.pas nutzen:

Delphi-Quellcode:
class procedure TFile.AppendAllText(const Path, Contents: string; const Encoding: TEncoding);
class function TFile.AppendText(const Path: string): TStreamWriter;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
rhuber

Registriert seit: 11. Sep 2012
12 Beiträge
 
Delphi 7 Personal
 
#18

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 16:49
Weshalb schreibst Du nicht direkt zyklisch auf den USB Stick?
Weil man den USB-Stick jederzeit entfernen können muss. Er wird automatisch abgemeldet, sobald nach dem täglichen Neustart die Logfiles des vergangenen Tages von der CF-Karte auf den Stick kopiert wurden.
Zudem haben die Sticks MLC-Speicherzellen, deshalb möchte ich möglichst wenig drauf scheiben...

Der interne (CF-Karte) Speicher dient natürlich auch als Backup, falls mal kein Stick drin ist.

Bei neueren Delphi-Versionen kann man auch was aus IOUtils.pas nutzen:
Ok, muss mal schauen ob Delphi 7 schon zu den "neueneren" Versionen zählt

Also wenn ich's jetzt hinkriege, dass der Inhalt der Ram-Disk kurz VOR dem Neustart auf die CF-Karte und den USB-Stick kopiert werden, ist mein Problem ja schon gelöst

Gruss Roman
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#19

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 21:57
Tipp: Man kann in seinem Profil angeben, was man benutzt, damit Andere ihre Antworten/Lösungen entsprechend ausrichten können.

Nja, es kommt halt drauf an, wieviele Zugriffe man einsparen will.

- Du kannst natürlich mit der RAM-Disk arbeiten, aber wenn es jetzt nur für diese CSV-Dateien sein soll, dann könnte man auch die Dateizugriffe selber anpassen.

- Du kannst weiterhin die alten Pascalfunktionen belassen, solltest aber nicht ständig die Datei öffnen und schließen
und solltest vorallem das Caching dieser Funktionen verbessern. (128 Byte sind pervers ... mindestens Clustergröße oder besser noch das Mehrfache davhon, wäre schon besser und würde ein Vielfaches der Zugriffe einsparen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Sep 2012 um 22:11 Uhr)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#20

AW: Delphi Datenlogger zerstört CompactFlash (CF) Karten

  Alt 11. Sep 2012, 22:13
Wir loggen in einer SPS unter WXP 5x pro Sekunde in CSV-Dateien. Der Zugriff erfolgt innerhalb der SPS (ca. 50MB pro Tag). Parallel läuft ein Delphi-Programm, das ca. 1x pro Sekunde Daten in eine Log-Datei schreibt.

Mir sind keine Ausfälle der CF Karten (ca. 300 Anwendungen) bekannt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz