LabVIEWForum.de - Signale ein-/ausblenden

LabVIEWForum.de

Normale Version: Signale ein-/ausblenden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo!

Ich bin völlig neu in der LabVIEW-Welt und habe dementsprechend ein paar Startschwierigkeiten. Huh Es wäre nett wenn mir hier vielleicht jemand helfen könnte.

Ich erfasse mit Hilfe eines cDAQ-9172-Chassis und fünf AI-Modulen (2 x NI 9203 und 3 x NI 9217) analoge Eingangssignale. Im MAX habe ich mir einen entsprechenden Task „Analog IN“ angelegt. Leider muss ich alle Kanäle der fünf Module in einen Task stecken, weil bei meiner Hardware nicht mehrere AI-Tasks gleichzeitig laufen können.

Ich habe mir dann ein VI geschrieben, um die Daten an den Kanälen einzulesen und in eine Queue zu geben, die dann später von einem Main.vi ausgelesen werden soll. Die eingelesenen Daten werden in einem Diagramm angezeigt. Da ich mit meinem Task nun aber 28 Kanäle gleichzeitig einlese, würde ich die einzelnen Kanäle im Diagramm gerne ein- und ausblenden können. Diese Funktion habe ich über den Eigenschaftsknoten des Diagramms realisiert. Das funktioniert prinzipiell auch ganz gut, allerdings habe ich folgendes Problem: Wenn ich eine Check-Box anklicke um eine Kurve aus- oder einzublenden, dann bleibt das Diagramm kurz stehen. Wenn ich mehrere Checkboxen schnell hintereinander anklicke, dann läuft durch dieses stehenbleiben der Puffer voll und ich bekomme eine Fehlermeldung, dass versucht wurde Abtastwerte zu lesen, die nicht mehr zur Verfügung stehen. Ich habe auch schon ausprobiert das ein-/ausblenden in eine eine Ereignisstruktur in einer eigenen While-Schleife auszugliedern, aber das Problem bleibt trotzdem bestehen.

Kann mir da jemand weiterhelfen?

Danke und Gruß
Sumo

[attachment=9315] [attachment=9316]
Was ist nicht verstehe: Du schreibst die Eigenschaften jedesmal, egal, ob du was an den Buttons änderst oder nicht. Dann müsste doch auch die nötige Zeit für die Abarbeitung immer die gleiche sein...
Hi!

Tja, wie gesagt ich verstehs ja auch nicht. Sobald ich eine Checkbox anklicke (egal ob ich sie grade aktiviere oder deaktiviere) bleibt das Diagramm kurz stehen.

Gäbe es eigentlich prinzipiell eine elegantere Lösung das zu realisieren? Wäre es besser das ein- und ausblenden in eine Ereignisstruktur zu tun? Wie gesagt ich hab noch nicht viel Ahnung vom LabVIEW-Programmieren, ich bin also auch für allgemeine Verbessungsvorschläge sehr dankbar.
Na und? Es steht doch in der Fehlermeldung drin, was zu tun ist: Vergrößern des Puffers. Wie groß ist der denn, und hast Du das überhaupt schon versucht? Wie ist er denn überhaupt konfiguriert? Darüber verlierst Du kein Wort.
Du liest also pro Lesevorgang 1000 Werte pro Kanal aus. Der Puffer sollte z.B 5mal so groß sein, damit er diese zeitweiligen Unterbrechungen auffangen kann.
Ich hatte im MAX bei den Timing-Einstellungen folgendes vorgegeben: Erfassungsmodus: kontinuierlich, zu lesende samples: 10000, rate: 10 kHz. Das heißt also meine Puffergröße betrug bisher 10.000.

Ich habe jetzt nochmal mit der Puffergröße rumprobiert und bin jetzt bei einer Größe von 100.000 angekommen. Da kam die Fehlermeldung bisher nicht mehr. Allerdings bleibt das Diagramm trotzdem immer noch kurz stehen beim ein- und ausblenden. Kann man dieses Stehenbleiben nicht irgendwie abstellen?
' schrieb:Kann man dieses Stehenbleiben nicht irgendwie abstellen?
Ja sicher, wenn Du etwas ganz anderes machst:
Nicht die Plots ein-und ausblenden, sondern nur die erwünschten Plots zum Diagramm senden. Hat normalerweise den Nachteil, daß die Farb-Zuordnung der Plots verloren geht. Damit das nicht passiert, mache ich es so: Die nicht sichtbaren Plots erhalten anstelle der Daten Dummy-Daten mit NaN-Werten. Im Bild ist das Prinzip angedeutet:
[attachment=9324]
Ideal ist natürlich, wenn die Anzahl der Dymmy-Daten gleich der Anzahl der echten Daten ist, damit kein Reorganisation des Arrays stattfinden muß.
hi

ich mach sowas immer in dieser art ...

[attachment=9330]

Toaran
' schrieb:ich mach sowas immer in dieser art ...
Es ist ein Todsünde, Eigenschaftsknoten unnötigerweise in der zeitkritischen Hauptausführungsschleife aufzurufen.
Dein Vi ist in dieser Hinsicht ein Fortschritt, da die Eigenschaftsknoten nicht mehr immer, sondern nur noch bei Wertänderung aufgerufen werden. Dann allerdings von allen 28 Plots, auch wenn in der Regel nur ein Plot betroffen ist.
Eine weitere Stufe der Verbesserung, wäre, wenn bei Wertänderung der Plot-Sichtbarkeit nur der betreffende Plot behandelt wird und nicht immer alle 28.
Z.B so:
[attachment=9332]
Hi Leute,

vielen Dank für eure Hilfe!

Ehrlich gesagt verstehe ich die letzten Lösungen nicht so ganz. Ich hatte auch schon mal eine Lösung mit einer Ereignisstruktur ausprobiert und habe das ganze so gemacht:

[attachment=9337]

@Lucki: Was genau bezweckst Du in Deiner Lösung mit der For-Schleife und dem Schieberegister? Es wäre nett wenn Du mir das kurz erklären könntest.


Gruß
Sumo
' schrieb:Hi Leute,

vielen Dank für eure Hilfe!

Ehrlich gesagt verstehe ich die letzten Lösungen nicht so ganz. Ich hatte auch schon mal eine Lösung mit einer Ereignisstruktur ausprobiert und habe das ganze so gemacht:

[attachment=36242:ereignis.gif]

@Lucki: Was genau bezweckst Du in Deiner Lösung mit der For-Schleife und dem Schieberegister? Es wäre nett wenn Du mir das kurz erklären könntest.
Gruß
Sumo


bei deiner Lösung musst du ein ereigniss für jede einzellne checkbox anlegen .... bei Lucki's und meiner Lösung sind die checkboxen in einem Array ... das bedeutet ... wenn eine wertänderung in dem array( eine der checkboxen) auftritt läuft die for schleife los ...die rödelt dann alle elemente in dem array durch und wenn alter wer nicht gleich neuer wert, dann wird der plot sichtbar oder unsichtbar gemacht je nach checkboxwert ... das schieberegister ist nur der Zähler für den plot .. man kann auch den index der Forschleife benutzen ...

@Lucki:bei meiner lösung wird auch nur der ereignissknoten aufgerufen bei dem die änderung auftritt;)aber deine lösung is schickerSmile

Toaran...
Seiten: 1 2
Referenz-URLs