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!
den case "Aufzeichnung bei Änderung des Pegels" habe ich die Tage nicht mehr benutzt - das kanns nicht sein. Das Demo VI von Oliver ist eindrücklich - aber so kann ich das (leider) nicht im Taskmanager beobachten, wenn ich mein VI ausführe. Muß mir wahrscheinlich mal länger Zeit nehmen. Inner viertel Stunde verändert sich der nicht merklich...aber irgendwann passierts - naja. Ein anderes Problem beschäftigt mich auch noch, aber das poste ich mal lieber bei DAQ.
die Demo sorgt ja auch für einen "sichtbaren" Speicherverbrauch.
In meinem Programm habe ich vielleicht im Sekundentakt eine Queue benutzt.
Entsprechend schleichend war der Speicherverbrauch, entsprechend lange war die Fehlersuche...
Hatte mehrere Male die verschiedensten Dinge umprogrammiert, um den Fehler auszuschließen
Also starte dein VI und schreiben den Speicherstand auf.
Dann tue nichts anderes mit dem Rechner, bis deine Fehlermeldung kommt und vergleiche dann den aktuellen Speicherstand.
Letztendlich teile uns das Ergebnis mit...
hast Du die Speicherprobleme wenn Du "Aufzeichnung bei Änderung des Pegels" gewählt hast?
Hier benutzt Du die Funktion "In Array einfügen" und als Index den Schleifenzähler. Das Array wird daher ziemlich groß und belegt Dir wohl mit der Zeit den ganzen Speicher.
Gruß,
Marko
Hi Marker,
wie lösche ich am besten ein Array in regelmäßigem Takt, bzw. wie kann ich einem Array nur eine bestimmte Größe (Speicherbereich) zuordnen, damit es sich selber wieder überschreibt?
wenn Du ein Array der erfoderlichen Größe initialisierst und dann die Funktion "Teilarray ersetzen" verwendest, kannst Du sicher sein, dass Dein Array niemals größer wird. Mit dieser Funktion werden die alten Daten durch die neuen Daten an den angegebenen Indizes ersetzt (Arraygrösse bleibt gleich).
Die Funktion "In Array einfügen" ist sehr komfortabel für dynamische Arrays, sollte aber nur mit Vorsicht verwendet werden, da bei Fehlanwendung die Gefahr besteht, dass die Arraygrösse ins unermessliche anwächst. Mit dieser Funktion werden neue Daten an den angegebenen Indizes eingefügt, die alten Daten werden nach hinten verschoben (Array wird vergrössert).
Danke
Gut zu wissen. Werd ich bei nächster Gelegenheit gleich mal testen.
Wenn ich allerdings Daten über die RS232 empfange und diese mit der Funktion "Tabellenstring zu Array" weiterverarbeite. Die Daten werden gleich weiter verarbeitet und nirgends in einem Gesamtarray gespeichert. Füllt mir dieses Array ebenfalls den Speicher (glaube schon) oder verwirft LV die Daten nach bestimmten Zeitperioden?
die Größe eines Arrays das aus einem Tabellenstring erzeugt wird, ist abhängig von der Größe des Strings.
Wird der String immer größer wird auch das Array immer größer.
Wird der String gelöscht ist das resultierende Array leer.
ich hab bissel rumprobiert und bin jetzt zum Schluß gekommen, dass nicht mein Speicher das Problem ist sondern der Puffer (Datenerfassung). Den Fehler kann ich abfangen und den Puffer löschen. Leider gehen dabei Daten verloren, aber Puffer löschen ohne Datenverlust geht ja wohl nicht. Mein Dilema ist jetzt entweder einen großen Puffer zu verwenden und die Schleife zu timen, oder eine hohe CPU-Last (>50%) zu haben...naja.
Der String bleibt von der Zeilenlänge immer gleich. Er wird, wie bei einem Array, im Takt durch eine weitere Zeile vergrößert/ergänzt.
--> Ich lese aus einer Steuerung Daten heraus. Akzeptiere die Daten nur, wenn eine bestimmte Zeichenfolge eingehalten wird. Und wandele sie mit der Funktion Tabellenstring zu Array um, damit ich die Daten auswerten kann. Gespeichert werden die Daten automatisch in einem File. Ausgabe erfolgt eigentlich in keinem Array, nur indizierte, nummerische Ausgabefenster und Diagramme.
Muss bzw. kann ich nun den String, Array irgendwie begrenzen?
Lg,
Rolf
PS: Ich fahre in ein paar Stunden in Urlaub;)Es könnte also ein wenig dauern mit meiner Antwort.
rolfi schrieb:Der String bleibt von der Zeilenlänge immer gleich. Er wird, wie bei einem Array, im Takt durch eine weitere Zeile vergrößert/ergänzt.
Wenn der String immer um eine Zeile verlängert wird, wird das Array natürlich auch immer größer.
Warum übergibst Du nicht immer nur den aktuellen String? Wenn ich Dich richtig verstanden habe brauchst Du die alten Daten ja nicht mehr.