Hi @ all
Ich bekomme meine Daten über ein USB-Interface. Diese Daten möchte ich in einem großen Array schreiben um dies anschließend visuell darzustellen. Jedoch nimmt die Verarbeitungszeit mit der Arraygröße deutlicht zu, so das ich nicht mehr schnell genug auf mein USB-Interface zugreifen kann. Dadurch kommt es zum Bufferüberlauf und somit gehen Daten verloren. Es kommt alle 5ms ein Datenblock von 2000 Bytes. Jedoch dauert das Schreiben der Daten schon ca. 15ms (so ca. beim 999 Block) Bei den ersten Blöcken braucht LabVIEW nur ca 1ms um die Daten in das Array zu speichern (siehe Arrays mit Zeiten).
Ich benutze ich meinem Programm ein Subvi. Diese setzt ein Flag sobald genügend Daten vorhanden sind. Ist dies der Fall werden die Daten (die 2000 Bytes), die das Subvi liefert, in das dynamische Array geschrieben. Dadurch entsteht ein zweidimensionales Array. Damit ich das Programm auch ohne USB-Modul zur Verfügung stellen kann habe ich das Subvi entfernt. Es bleibt eine For-Schleife über, die ein zweidimensionales Array füllt. Jedoch kann man da schon deutlich erkennen, dass das Abspeichern der Daten im zweidimensionalen Array mit der größe des Array zunimmt (siehe Zeitarray).
In C++ hatte ich mal das Thema dynamische verkettet Listen, die den Vorteil besitzen, das auch große Array die gleiche Verarbeitungszeit besitzen. Ich dachte LabVIEW macht es auch so.
test.vi (Größe: 12,79 KB / Downloads: 250)
Wie kann ich es besser machen? Habe schon versucht ein großes Array zu erstellen und dann mit "Teilarray ersetzen" (diese Funktion braucht aber noch viel mehr Zeit) Die automatische Indizierung (bei der For-Schleife) geht bei mir nicht, da ich die Daten nur beim gesetzten Flag in das Array eintragen möchte (der Flase-Fall im Case würde das Array überdimensional vergrößern)
Grüsse
JoeDoe