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!
ich soll zur Zeit ein Programm ändern das ein Vorgänger geschrieben hat. In dem Programm werden verschiedene Plots in einem XY-Graphen dargestellt. Leider ist es nicht wirklich durchdacht, denn n dem Array der die verschiedenen Plots enthält und diese an den eig. xy-Graphen weitergibt sind "zwischendurch" Subarrays ohne Wert, sozusagen Platzhalter.
Wenn ich also z.B. 2 Graphen darstellen möchte, erhält der Array mit den Graphen jeweils einen Subarray (mit den Messwerten) für die Indizes 0,1,2,3. Dabei sind aber nur Messwerte unter der Indizes 0 und 2 zu finden. Unter 1 und 3 ist jeweils ein leerer, aberk initialisierter Array.
D.h. der Graph plottet zwar nur die beiden tatsächlichen Kurven, denkt aber er hat 4, wobei die zwei fehlenden nicht dargestellt werden weil sie nur aus Nullen bestehen.
Meine Frage ist nun ob es eine Möglichkeit gibt die Anzahl der wirklichen Plots (die "Nicht-Null-Plots"), hier also 2, in LV auszulesen?
- Ein Array enthält keine Subarrays, sondern nur Spalten, Zeilen, Seiten, etc.
- Was ist ein leeres, aber initialisiertes Array? Entweder leer oder initialisiert...
Zitat:wobei die zwei fehlenden nicht dargestellt werden weil sie nur aus Nullen bestehen.
Nullen werden auch geplottet und somit dargestellt. Tipp: NaNs werden nicht geplottet...
Zitat:eine Möglichkeit gibt die Anzahl der wirklichen Plots (die "Nicht-Null-Plots"), hier also 2, in LV auszulesen?
Ich dachte, das wäre eine User-Vorgabe? Damit hast du doch schon alle benötigten Vorgabewerte?!
Ansonsten: Testen auf "leere" Plots (die, wo nur Nullen/NaNs enthalten)...
(22.11.2011 16:58 )GerdW schrieb: - Ein Array enthält keine Subarrays, sondern nur Spalten, Zeilen, Seiten, etc.
Ein xy-Graph bekommt ja einen Cluster aus x-Wertearray und y-Wertearray zum Plotten einer Kurve. Will ich nun mehrere Kurven plotten, übergebe ich dem xy-Graph einen Array aus Clustern aus x-Wertearray und y-Wertearray. Mit Subarray mein ich dann sozusagen eine Spalte/Zeile des Clusterarrays. Zugegeben, da hab ich mich ziemlich schlecht ausgedrückt
(22.11.2011 16:58 )GerdW schrieb: - Was ist ein leeres, aber initialisiertes Array? Entweder leer oder initialisiert...
Wenn ein Array nicht initialisiert ist, sind sowohl die Werte in den Spalten/Zeilen grau, als auch der Index zum durchklickern. Ist er initialisiert, aber leer sind die Werte in den Zeilen/Spalten grau, nicht aber der Index zum durchklickern. Den kann ich verändern
22.11.2011, 22:17 (Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2011 22:20 von GerdW.)
Zitat:Wenn ein Array nicht initialisiert ist, sind sowohl die Werte in den Spalten/Zeilen grau, als auch der Index zum durchklickern. Ist er initialisiert, aber leer sind die Werte in den Zeilen/Spalten grau, nicht aber der Index zum durchklickern.
Also ich kann immer die Indizes eines Array-Controls/Indicators ändern, egal ob leer/uninitalisiert oder nicht...
Zitat:Ein xy-Graph bekommt ja einen Cluster aus x-Wertearray und y-Wertearray zum Plotten einer Kurve.
Ein xy-Graph arbeitet auch mit einem reinen Array (bei Verwendung der komplexen Datentypen)...
Das Einfügen von solchen Dummy-Plots kann übrigens durchaus Sinn machen. Wenn man z.B. Plots 1,2,3 hat und man läßt Plot 2 aus, so dass man nur noch Plots 1 und 3 hat, dann wird aus Plot 3 Plot 2 und nimmt dessen Farbe an. Wenn man aber PLot 2 nicht auslässt, sondern durch einen nicht sichbaren Dummy ersetzt, dann bleiben die Farben der anderen Plots erhalten.
Zum Thema: Hier wird das Pferd doch von hinten aufgezäumt. Das Programm weiß doch genau, was zum Graphen geschickt wird, wie viel echte Plots und wie viel Dummys. Da braucht man doch nicht viel mehr als an der richtigen Stelle eine Anzeige zu haben. Aus dem Grapheninhalt dann diese Information wieder zurückzuholen, ist zwar nicht unmöglich, aber wozu sich das antun?
hier nochmal zur Verdeutlichung der drei unterschiedlichen Array-"Initialisierungsstufen":
(1) Array mit Inhalt:
(2) Array initialisiert ohne Inhalt:
(3) Array nicht initialisiert ohne Inhalt:
Der ganze Aufwand eig. auch nur weil im dem Programm ein Button ist, mit dem man die Plotlinienbreite zwischen 1 und 3 Pixel umschalten kann
. Das Programm gibt dann aber manchmal Fehler aus, wenn eben Plots dick/dünn gemacht werden sollen, der Plot aber nicht vorhanden ist, weil der entsprechende Array von Typ (2) ist.
Wenn ihr mir sagen könnt wie ich diese Plotliniendickeveränderung (in LV2010) besser hinbekomme, wäre ich euch auch sehr dankbar.
viele grüße
Anzeige
23.11.2011, 09:26 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2011 09:28 von GerdW.)
bei deinen 3 Bildern musst du unterscheiden zwischen dem "äußeren" und den "inneren" Arrays. Als Zwiebelschale dazwischen liegt immer noch ein Cluster...
Bild 1&2: Äußeres Array enthält Elemente (Cluster), wobei der Clusterinhalt aber unterschiedlich ist.
Bild 3: Äußeres Array ist leer, damit sind auch die Clusterinhalte undefiniert...
Merke: Auch wenn ein Array leer ist, kann man trotzdem an der Indexanzeige rumspielen (Bild 3, äußeres Array). Wenn dagegen ein Cluster (mit seinem Inhalt) nicht vorhanden ist (Bild 3, innere Arrays), kann man auch nicht dran manipulieren...
Zitat:Programm gibt dann aber manchmal Fehler aus, wenn eben Plots dick/dünn gemacht werden sollen, der Plot aber nicht vorhanden ist, weil der entsprechende Array von Typ (2) ist.
Ich sagte doch schon:
Zitat:Tipp: NaNs werden nicht geplottet...
Anstatt also Plots leer zu initialisieren, könntest du sie mit jeweils einem NaN für X- und Y-Vektor initialisieren. Dann sind die Plots auch vorhanden und können per Property eingestellt werden - trotz Unsichtbarkeit im Graph...
Der altbekannte Ärger, Ploteigenschaften eines nicht-vorhandenen Plots zu ändern.
Das lässt sich schon seit einigen LabVIEW-Versionen hiermit verhindern:
Einfach dem Graph "sagen", dass er mind. x Plots kennen soll, egal ob mit oder ohne Daten.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
Anstatt also Plots leer zu initialisieren, könntest du sie mit jeweils einem NaN für X- und Y-Vektor initialisieren. Dann sind die Plots auch vorhanden und können per Property eingestellt werden - trotz Unsichtbarkeit im Graph...
auch mit dieser Methode kommt der Fehler:
23.11.2011, 10:12 (Dieser Beitrag wurde zuletzt bearbeitet: 23.11.2011 10:15 von GerdW.)
und wenn du es mit Fehlerbehandlung versuchst?
Wenn deine Plots wirklich alle korrekt vorhanden sind, sollte die Fehlermeldung nicht auftauchen. In deinem Bild ist leider nicht zu sehen, bei welchem Plot diese Fehlermeldung auftaucht und welche Daten dieser Plot beinhaltet...
Also: Überprüfe diese Vorgabe bitte. Außerdem solltest du eventuelle RaceConditions prüfen - oder was soll das Datenkopieren von der lokalen Variablen in ihr eigenes Terminal bewirken?