LabVIEWForum.de
Daten an Array anhängen über SubVI sehr langsam - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Daten an Array anhängen über SubVI sehr langsam (/Thread-Daten-an-Array-anhaengen-ueber-SubVI-sehr-langsam)



Daten an Array anhängen über SubVI sehr langsam - astraios_ - 13.04.2006 10:18

Hallo,

ich hab da ein mittelschweres Problem.
Folgende Situation: Ich empfange Nachrichten von einem CAN-Bus. Das sind momentan knapp 1000 pro Sekunde - kann aber auch noch mehr werden.
Jetzt möchte ich jede Nachricht, die mir in einem Cluster vorliegt an ein 1D-Array bestehend aus eben diesen Clustern anhängen. Dazu verwende ich zunächst ein SubVI wie es im angehängten Bild aufgebaut ist.
Das Problem stellt sich jetzt so dar, dass die ganze Sache nach ca. 1000 bis 1500 aufgezeichneten Nachrichten sehr langsam wird und sich das Programm schließlich gänzlich verabschiedet.
Wenn ich aber das Anhängen der Daten an das Array nicht in ein SubVI auslagere, sondern direkt im HaupVI vornehme, funktioniert alles ohne Probleme! Also liegt der Hase irgendwo bei der Datenübergabe zwischen den VIs begraben... Leider muss ich das in ein VI auslagern, da ich noch weitere Funktionalitäten einbauen will.

Wer kann mir helfen - bzw. ist mir überhaupt zu helfen?

Danke schonmal im Voraus Wink


Daten an Array anhängen über SubVI sehr langsam - eg - 13.04.2006 11:58

1000 Hz ist ziemlich die Grenze für LabVIEW.

Man sollte sich irgendwie überlegen, die Nachrichten vor dem LV zu puffern und dann am Stück diesen Puffer in LV einlesen.

Gruss, Eugen


Daten an Array anhängen über SubVI sehr langsam - Lucki - 13.04.2006 13:29

Wie sieht dann das SUB-VI aus? Es kann doch nicht sein, daß es einzig und allein nur aus diesem Array-Biulder besteht und Du alle 3 Daten ständig liest und schreibst? Oder doch? Du verwendest doch hoffentlich ein nichtinitialisiertes Shift-Register im Sub-VI zur Zwischenspeicherung der Daten? Und mußt Du überhaupt jedesmal, wenn Du neue Daten einliest, den gesamten Array wieder auslesen, oder brauchst Du du diese gesammelten Daten nur am Schluß einer Mess-Serie? Wenn Du das beantwortest, folgt Vorschlag. Auch interessant: Welche Struktur hat das Cluster (Wegen evtl. Erkennung, wenn am Eingang des SUB-VI nichts angeschlossen ist und nur gelesen werden soll)


Daten an Array anhängen über SubVI sehr langsam - astraios_ - 13.04.2006 13:37

Ja, momentan besteht das SubVI nur aus der Komponente auf dem Bild.
Verwendet wird das SubVI in einer FOR-Schleife, die dieses MsgArray über ein Schieberegister führt. Das ist aber kein nicht-initialisiertes. Es bekommt bereits Daten, da sich diese FOR-Schleife wiederum in einer WHILE-Schleife befindet, die dieses MsgArray ebenfalls in einem Schieberegister fürht. Dieses Schieberegister ist mit einer Konstante initialisiert.

Die gesammelten Daten brauch ich dann theoretisch erst nach beendeter Messung.


Daten an Array anhängen über SubVI sehr langsam - astraios_ - 13.04.2006 13:48

Ach ja: das MessageCluster hat folgende Struktur:


Daten an Array anhängen über SubVI sehr langsam - Martin.Henz - 13.04.2006 20:38

astraios_ schrieb:Ach ja: das MessageCluster hat folgende Struktur:

Hmm, ja, ganz ohne ist das nicht, wenn du das FrontPanel des SubVI zum debuggen auch noch geöffnet offen hast, dann bist du schon bei 1000 Elementen im Array nahe einer Katastrophe. Je nachdem, wie das aufrufende VI aufgebaut ist, bekommst du mitunter ziemlich massive Probleme. Das wundert mich nicht. Lass dir etwas einfallen ...


Daten an Array anhängen über SubVI sehr langsam - Lucki - 13.04.2006 21:25

Habe Für Dich ein superschnelles Sub-VI zum Einsammeln deiner Daten erstellt, eine Komplettlösung also, wie es hier an sich nicht die Regel sein sollte. Gleichzeitig (Als Bild) eine Schaltung, mit der Du die erzielte Rate testen kannst. Du must natürlich noch Deinen Clustertyp einsetzen, ich hatte keine Lust, dein JPG in LabVIEW umzusetzen. Da mein Cluster nur aus einem Element beteht, schätze ich, daß Du statt 500kHz nur nach 50kHz erreichen wirst. Rückmeldung über die ereichte Rate wäre schön.
Das Grundprinzip ist, daß überflüssiges Updaten von Variablen vermieden wird, und daß die Datenspreicherung in Shift-Registern wesentlich schneller ist als in normalen Variablen.
Edit: Vergiß den Draht in dem "i" im Bild


Daten an Array anhängen über SubVI sehr langsam - astraios_ - 18.04.2006 07:59

Super! Vielen Dank für Deine Mühe! Mit meinem Cluster schaff ich eine Rate von um die 150k.
Das hilft mir wirklich weiter. Bin erst seit 2 Wochen am Werkeln mit LV - da fehlt's noch ein bisschen an Erfahrung, um die Daten sinnvoll hin und her zu schaufeln Wink

Also nochmal vielen Dank!


Daten an Array anhängen über SubVI sehr langsam - eg - 18.04.2006 10:09

@ Lucki

Was bringt das Anschliessen des "i" in der For-Loop ?

Gruss, Eugen


Daten an Array anhängen über SubVI sehr langsam - Lucki - 18.04.2006 10:30

@eugen
gar nichts, und weil ich nicht Lust hatte das Bild zu verbesseren hatte ich dieses hier in den Text hineingeschrieben:
[quote]Edit: Vergiß den Draht in dem "i" im Bild