Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
ich speichere sekündlich empfangene Daten in ein txt-File mit der Funktion "Zeichen in Datei schreiben".
Leider wird das ganze extrem CPU-Lastig, wenn das Programm eine längere Laufzeit hat bzw. das txt-File schon eine größere Datenmenge beinhaltet.
Weiß jemand von euch eine Lösung (außer das txt-File zu splitten)?
lass doch mal die Finger von den Aldi-Funktionen und nimm für solche Fälle die Low-Level VI's Open-, Read-, Write- und Close File.vi.
Bedenke mit jedem mal Speichern, soll LabVIEW die Datei für dich aufmachen, den Cursor ans Ende der Datei setzen, Daten schreiben und die Datei schließen...
Versuchs mal einfacher: Datei öffnen - schreiben, schreiben, schreiben - und erst am Ende: Datei schließen.
Hallo Erst-maa,
ich hab auch ne Applikation die einen Canbus mitloggen soll.
Dort benutze ich auch nur das "Zeichen in Datei schreiben" VI.
allerdings erzeuge ich immer wenn die Datei größer 1MB ist einfach eine neue im vollgenden Format "DateinameUhrzeit.txt".
Das hat den Vorteil das du das Programm Starten kannst und bis zum SanktNimmerleinstag laufen lassen kannst, oder eben bis die Festplatte voll ist. Und Wenn der Strom ausfällt du wenigstens noch ein paar Daten hast.
Den Rechner den ich dafür benutzt habe hat allerdings 1GHZ und 256MB RAM
Was für eine Maschine hast du denn genau CPU, RAM??
diese Rechner varieren von 500 MHz bis 1GHz mit 128 MB RAM.
Die Textfiles haben z.T. 5-6 MB.
Grundsätzlich möchte ich davon absehen, Dateien zu splitten.
Mit der bisherigen Methode, war der Datenverlust kein Problem, denn die Daten waren immer im File verewigt, auch wenn die Maschine abschmierte.
rolfi schrieb:ich speichere sekündlich empfangene Daten in ein txt-File mit der Funktion "Zeichen in Datei schreiben".
Leider wird das ganze extrem CPU-Lastig, wenn das Programm eine längere Laufzeit hat bzw. das txt-File schon eine größere Datenmenge beinhaltet.
Weiß jemand von euch eine Lösung (außer das txt-File zu splitten)?
Schreibst du bei jedem Schreibvorgang den kompletten Dateiinhalt oder schreibst du nur die neuen Daten in die Datei? Falls der erstgenannte Fall zutrifft, dann ändere dein Programm so, dass nur noch die neuen Daten an die Datei angehängt werden. Trifft der zweite Fall zu, dann must du an einer anderen Stelle nach dem Problem suchen.
ich speichere immer nur eine weitere Daten-Zeile in Sekundenabständen in das File.
Meine Recherchen ergaben, dass das Programm ohne große CPU-/Speicher-Last arbeitet, wenn die Funktion nicht aktiviert ist.
Sobald ich anfange, die geloggten Daten zu speichern, steigt die CPU-Last bei längerer Betriebsdauer = großer Datenmengen.
Jetzt habe ich das Programm so abgeändert, dass das File nur einmal geöffnet und nach Beendigung des Schreibvorgangs geschlossen wird.
Ich bin gespannt, wie sich das ganze auswirkt.
[quote=rolfi]ich speichere immer nur eine weitere Daten-Zeile in Sekundenabständen in das File.
Meine Recherchen ergaben, dass das Programm ohne große CPU-/Speicher-Last arbeitet, wenn die Funktion nicht aktiviert ist.
ich habe jetzt gut 36h Dauertest durchlaufen lassen und muss sagen, dass jetzt "kaum" noch CPU-Belastung anfällt.
Der Speicherbedarf ist über die Zeit ziemlich gleich geblieben und ist eigentlich im Verhältnis zum phy. Speicher auch nicht überwältigend groß.
Was habe ich geändert?
- Ich habe die Schreibfunktion aus der "(Mess)schleife" genommen.
- Eine zweite Schleife parallel zu "Messschleife" gelegt und mit Melder versehen.
- In dieser zweiten Schleife habe ich die Schreibfunktion gesplittet, sodass das File nur noch einmal geöffnet und einmal geschlossen wird.
Wie hat Achimedes das denn gemacht das nach mehr als 1MB file size ein neues file geschrieben wird. Ich mach das jetzt so: Datei öffnen-> schreiben,schreiben,...->Datei schließen. Wie komme ich aber während des Schreibens an die File-size ran?
Hab da noch keine richtige Idee, kann mir jemand auf die Sprünge helfen?