INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

XY Graph wärend der VI Ausführung aktualsieren



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!

21.10.2010, 14:11
Beitrag #1

Knulf Arnulfson Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: May 2010

2011
2010
kA


Deutschland
XY Graph wärend der VI Ausführung aktualsieren
Hallo,

ich habe zwei Anliegen:

Anliegen 1:
Ich lese in einer Whileschleife Daten aus einem FIFO, die ich per "Array erstellen" mit jedem Schleifendurchgang per Schieberegister hintereinander hänge.
Ich würde gerne die neuen Werte in meinem Plot direkt anzeigen. Da ich pro Schleifendurchgang mehrere Werte aus dem FIFO lese macht auch eine Verzögerung nichts. Nur, dass ich gerne ein paar mal pro Sekunde den Plotverlauf checken wollen würde. In der Grafik kann man sehen, dass ich erst nach der Schleife dann alle Daten gleichzeitig plotte.

Anliegen 2:

Ich kann mir vorstellen, dass das Array durch Schieberegister durch die Gegend zu schieben mit höherer Datenanzahl ziemlich Rechenaufwendig ist und würde gerne eine elegantere Alternative erfragen falls meine Vermutung korrekt ist.


Danke schonmal für er Hilfe und ich hoffe, dass Anliegen 2 nicht im falschen Forum steht. sonst gerne einfach löschen.

Gruß

knulf


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.10.2010, 19:54
Beitrag #2

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
XY Graph wärend der VI Ausführung aktualsieren
Hallo knulf,

die VIs wie "Array erstellen"/"Build Array" oder "In Array einfügen"/"Insert Into Array" mit großen Arrays sollte man nie in Schleifen aufrufen, schon gar nicht in Real-Time-Anwendungen. Bei jedem Einfügen wird das gesamte Array in einen neuen Speicherbereich kopiert. Auf Real-Time-Anwendungen kann es bei großen Arrays aufgrund der Fragmentierung sogar zu einem vermeintlich "vollen" Speicher kommen, obwohl der Speicher fast leer, jedoch sehr fragmentiert ist. Der neue Speicherbereich muss immer zusammenhängend sein, damit ein Array kopiert werden kann.
Genug der Theorie.

Kannst du von vornherein festlegen, wie groß dein Array maximal sein wird?
Beispiel: Max. Messdauer: 30 Sekunden, Abtastrate: 100 Hz
Das macht dann max. 30 s * 100 Werte/s = 3000 Werte

In dem Fall kannst du her gehen und über das VI "Array initialisieren" ein Array mit der Größe 3000 erstellen. Dann wird einmalig Speicher zugewiesen. In der Schleife selbst machst du es genau wie oben mit dem Schieberegister, jedoch mit dem VI "Teil-Array ersetzen".
Dann werden die Elemente ersetzt und es muss kein Speicher zugewiesen werden, was dann natürlich deutlich schneller geht und nebenbei noch deterministisch ist.

Den Graphen kannst du auch innerhalb der Schleife aktualisieren, indem du dein Gebilde im unteren Teil in die Schleife packst (z.B. per Sub-VI, um die Übersicht zu erhöhen). Ist es nicht erforderlich, den Graphen in jedem Schleifendurchlauf zu aktualisieren (das kostet massiv Performance), kannst du das z.B. auch alle 250 ms oder alls x Schleifendurchläufe veranlassen. Dazu musst du dann eine entsprechende Case-Struktur einbinden.

Für die untere Schleife gilt das mit dem Array natürlich auch. Es ist immer schlecht, fortlaufend dynamisch Speicher zuzuweisen.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.10.2010, 21:22 (Dieser Beitrag wurde zuletzt bearbeitet: 26.10.2010 21:25 von Lucki.)
Beitrag #3

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
XY Graph wärend der VI Ausführung aktualsieren
Das Signalverlaufsdiagramm hat ja bereits einen eingebauten Buffer, das kannst Du mit neuen Einzelwerten in einer Schleife ständig aktualisieren und muß Dir nicht mit selbstgebastelten Schieberegistern und Ringpuffern die Sache erschweren.
Und für die XY-Darstellung gibt es ein entsprechendes VI auch. Es nennt sich "Express XY Graph". Probiers einfach mal aus. Ich nehme das in solchen Fällen, auch wenn ich sonst kaum Express-VIs verwende.
Das gehört dann natürlich in die Schleife rein, in der die Daten entstehen, und nicht außen hin so wie bei Dir jetzt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.11.2010, 13:32
Beitrag #4

Knulf Arnulfson Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: May 2010

2011
2010
kA


Deutschland
XY Graph wärend der VI Ausführung aktualsieren
Danke für die schnelle Hilfe. Bin aber heute erst wieder an mein Problem zurück gekommen.

Zitat:Und für die XY-Darstellung gibt es ein entsprechendes VI auch. Es nennt sich "Express XY Graph".

Ich finde ein solches Express VI nicht.

Ich benutze LV 8.6

Kannst du mir, wenn es in der Version vorhanden ist, sagen wo ich es finde? (Suchfunktion habe ich schon benutzt)

An sonsten ist das was ich da mache aus dem Beispiel XY Graph.vi übernommen.

Gruß

knulf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.11.2010, 17:22
Beitrag #5

Knulf Arnulfson Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: May 2010

2011
2010
kA


Deutschland
XY Graph wärend der VI Ausführung aktualsieren
Zitat:Das Signalverlaufsdiagramm hat ja bereits einen eingebauten Buffer, das kannst Du mit neuen Einzelwerten in einer Schleife ständig aktualisieren und muß Dir nicht mit selbstgebastelten Schieberegistern und Ringpuffern die Sache erschweren.
Und für die XY-Darstellung gibt es ein entsprechendes VI auch. Es nennt sich "Express XY Graph". Probiers einfach mal aus. Ich nehme das in solchen Fällen, auch wenn ich sonst kaum Express-VIs verwende.
Das gehört dann natürlich in die Schleife rein, in der die Daten entstehen, und nicht außen hin so wie bei Dir jetzt.

Ich habe jetzt versucht das "Express XY Graph" VI einzubinden. Bekomme aber Probleme mit der Datenform.
Ich habe bzgl. der Datenformen noch nicht viel gearbeitet und sitze deshalb gerade auf dem Trockenen.

Mein Problem ist folgendes:

Mein FPGA schreibt mit jedem Schleifendurchlauf 4 Werte in das FIFO [Schleifenzähler, Wert 1, Wert2, Wert3].
Ich lese nun alle x ms Werte aus dem FIFO, die ich dann per 1 D Array dezimieren in 4 1D arrays aufsplitte.
Ich würde gerne nun die 3 Werte zusammen gegenüber dem Schleifenzähler auftragen.

Wie bekomme ich denn nun die Arrays in ein Format, das ich dem Entsprechenden VI füttern kann?
Bisher habe ich die Funktion benutzt wie oben in dem angehangenen Bild.

Ich habe mich damit selber nicht auseinander gesetzt, da dies meine letzten Fragen kurz vor Feierabend sind, deshalb wäre es eine nette Geste wenn mir jemand Denkanstöße geben kann. Da ich aber nicht verlangen kann, dass ihr meine Arbeit macht würde ich es wohl verstehen wenn ihr Euch noch nicht äussertSmile.
Wenn ich mich weiter damit beschäftigt habe und ein wenig rumgesucht habe melde ich mich wieder mit Fragen die ich nicht durch Recherche beantwortet bekomme.

Gruß
Knulf
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.11.2010, 16:43
Beitrag #6

Knulf Arnulfson Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: May 2010

2011
2010
kA


Deutschland
XY Graph wärend der VI Ausführung aktualsieren
Hallo nochmal,

ich bin jetzt soweit, dass ich meine Daten mittels XY Expres VI dargestellt bekomme.
Gibt es nun eine Möglichkeit meine Daten in Text/Tabellenform abzuspeichern?

Ich habe da mal einen Versuch unternommen das in der Schleife zu machen. Dabei speichere ich aber meine Daten-Arrays als Arrays und es läuft so schon nicht mehr flüssig. Liegt das daran, dass ich eine schlechte Möglichkeit genutzt habe meine Daten zu speichern? Oder ist Speicherzugriff in einer Echtzeitanwendung grundsätzlich mit mehr Zeit zu bedenken? Und wenn ich nun mittels For-Schleife die Array-Werte noch auseinander ziehe, würde das sicher nicht den Ablauf beschleunigen...

Zitat:Ist es nicht erforderlich, den Graphen in jedem Schleifendurchlauf zu aktualisieren (das kostet massiv Performance), kannst du das z.B. auch alle 250 ms oder alls x Schleifendurchläufe veranlassen. Dazu musst du dann eine entsprechende Case-Struktur einbinden.

Ich hoffe die Case Struktur sinnvoll gelöst zu haben.

Schaut mal bitte kurz drüber.


Gruß

Knulf


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.11.2010, 09:21
Beitrag #7

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
XY Graph wärend der VI Ausführung aktualsieren
Wenn Du während der Datenerfassung nur einen Teil der Werte sehen willst, sagen wir die letzten 1000 Wert, um festzustellen, dass etwas aufgenommen wir, bietet sich der Waveform Chart an. Hier kann in jedem Schleifendurchlauf ein neuer Wert reingeschrieben werden. LabView übernimmt, so weit ich weiß, die Aktualisierung des Waveform Charts zu vernünftigen Zeitpunkten. Es wird also nicht bei jedem Wert das komplette Diagramm neu gezeichnet.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Invariante Ausführung mit fest Kopieanzahl für Filter-Initalisierung erzwingen t.hipp 2 3.954 08.01.2018 20:56
Letzter Beitrag: t.hipp
  Legende im XY-Plot wärend der Laufzeit editieren m0n0g0n 2 4.521 28.10.2008 13:59
Letzter Beitrag: m0n0g0n

Gehe zu: