Einen wunderschönen Freitag Nachmittag,
ich habe heute eine ganze Weile nach einem passenden Ringpuffer-Konzept für mich gesucht und wohl auch gefunden. Als ich fertig war ist mir die Idee gekommen, dass man vielleicht einfach die Historie vom Diagramm nehmen könnte. Beim ersten Testen musste ich aber festestellen, dass hier von Historie (im Sinne von 'Vergangenes'
nicht die Rede sein kann. Denn die Signalblöcke der Historie sind genauso lang wie DAQrd sie mir ausspuckt und keinen Deut länger. Ich dachte, wenn ich z.B. Historielänge 512 einstelle, dass ich dann auch irgendwann 512er Blöcke erhalte. Anscheinend habe ich da was falsch verstanden. Wie ist das?
Das erstmal dazu. Nun zu meinem Ringpuffer-Konzept, dass ich letzten Endes nachgebaut habe:
[
attachment=23000]
[
attachment=23001]
Das arbeitet genauso wie ich's haben will. Glaub ich zumindest. Aber ich bekomm's einfach nicht hin das ganze in meine DAQ-Test-Umgebung einzubinden:
[
attachment=23002]
[
attachment=23003]
Ein Satz zum Verwendungszweck: Ich habe pro Iteration zuwenig Samples um ein gescheites Spektrum darzustellen.
Gruß dimitri
' schrieb:wenn ich z.B. Historielänge 512 einstelle, dass ich dann auch irgendwann 512er Blöcke erhalte
Historenlänge 512 heißt, dass pro Kanal 512 Samples gespeichert werden. Du erhälst also genau einen Block mit 512 Samples, nicht mehrere Blöcke zu je 512. Die Historie ist schon ein Schieberegister, halt nur auf die Anzahl geschränkt, die angegeben wird.
Zitat:Aber ich bekomm's einfach nicht hin das ganze in meine DAQ-Test-Umgebung einzubinden:
Ich schätze mal so:
' schrieb:Du erhälst also genau einen Block mit 512 Samples, nicht mehrere Blöcke zu je 512. Die Historie ist schon ein Schieberegister, halt nur auf die Anzahl geschränkt, die angegeben wird.
Das ist klar. Ich hab' den Plural 'Blöcke' verwendet, weil ich ja viele Iterationen habe; hab' mich da blöd ausgedrückt.
Nur war da so: DAQrd war auf 64 Samples eingestellt. Historie war auf 512 eingestellt. Trotzdem habe ich von der Historie immer nur konstant 64er Blöcke bekommen. Ich habe aber erwartet von der Historie nach genug Durchläufen auch 512er Blöcke zu bekommen.
Zitat:Ich schätze mal so:
Ich probier's am Monatg aus. Sieht aber gut aus.
EDIT: Oder kann ich den Puffer vielleicht direkt als Signalverlauf initiieren und mir so die Umwandlung komplett sparen?
Zitat:
So klappt's doch nicht. Das "Array nach Cluster" nimmt nur 4 Elemente mit.
Irgendwie verstehe ich deine Initialisierung deines Ringpuffers nicht.
Du erstellst ein Array mit 4 Elementen, wandelst das in einen Cluster, und dann daraus wieder ein 512er Array. Dein Ringpuffer ist also ein Array of Cluster, Cluster bestehend aus 4 Double.
Aus DAQmx bekommst du (bei 4 Kanälen) 4 Arrays raus. Somit bietet sich als Ringpuffer doch viel eher ein 2D-Array an, oder halt ein Cluster of Array. So, wie du das jetzt aufgebaut hast, musst du jedes Array-Element einzeln in deinen Ringpuffer einbauen, halte ich für sehr umständlich.
Gruß, Jens
P.S.: Bei deinem Bsp. Ringpuffer_emg_test.vi stimmt doch auch was nicht, du übernimmst von der (simulierten) Datenerfassung immer nur den ersten Messpunkt in den Ringpuffer.
' schrieb:Somit bietet sich als Ringpuffer doch viel eher ein 2D-Array an, ...
Ja so versuch ich das auch gerade mit 'nem 2d Array.
[
attachment=23016]
Alleine klappts so. Aber in dem DAQ VI fehlt mir die Übersicht. Soll ich transponieren oder nicht. Soll ich beim Array Indizieren den Zeilen oder Spalteneingang nehmen. Blödes Rumraten
Zitat:P.S.: Bei deinem Bsp. Ringpuffer_emg_test.vi stimmt doch auch was nicht, du übernimmst von der (simulierten) Datenerfassung immer nur den ersten Messpunkt in den Ringpuffer.
Ja da stimmt noch sehr wenig. Ich weiß das VI "1d-Array rotieren" nicht besser einzusetzen als elementweise. (Glaub' ich versteh' nicht was du meinst.)
Mal ein paar Hinweise zu deinem letzten Screenshot:
1. 2D-Array Initalisierung ist gut so, jeder Kanal stellt eine Zeile da. Somit musst du auch immer Zeilen ersetzen.
2. Im Normalfall erst rotieren, dann ersetzen.
3. Nicht nur um 1 Element rotieren, sondern um so viele Elemente, wie du in der Datenerfassung pro Lese-Vorgang erhalten hast (in Screenshot also 3).
4. Entsprechend musst du die unteren Shift-Register anders berechnen, aber das darfst du selber machen.
Gruß, Jens
EDIT:
5. Bei Replace-Array-Subset beim 2D-Array wirst du nicht drumherumkommen, jedes Element einzeln zu ersetzen, da diese Funktion bei 2D-Arrays entweder eine gesamte Zeile, eine gesamte Spalte oder ein Element ersetzen will...
' schrieb:So klappt's doch nicht. Das "Array nach Cluster" nimmt nur 4 Elemente mit.
Hinweis:
Kontextmenü des Elementes "Array nach Cluster" öffnen und Anzahl der Clusterelemete eingeben.
' schrieb:Hinweis:
Kontextmenü des Elementes "Array nach Cluster" öffnen und Anzahl der Clusterelemete eingeben.
So bringt mir das nix, weil zum einen die Puffergröße auf 256 Elemente begrenzt wäre und man sie außerdem nicht dynamisch einstellen könnte.
@Jens ... Ich denke ich hab's jetzt. Vielen Dank für die Hinweise.
[
attachment=23018]
PS Falls man was "kürzen" kann bin gerne für Vorschläge zu haben.
Gruß dimitri
EDIT: Wie ist denn das eigentlich mit meiner ursprünglichen Idee mit der Chart History? Ist das ein Bug, dass die Länge, die ich erhalte, nicht der mit übereinstimmt, die ich einstelle?
' schrieb:PS Falls man was "kürzen" kann bin gerne für Vorschläge zu haben.
Dazu bitte VI hochladen, denn ich werde deinen Screenshot nicht nachprogrammieren.
Gruß, Jens