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 habe mir ein VI geschrieben, in dem ich die Plotlegende dynamisch anlegen kann.
Das ganze läuft wie folgt ab:
Aus einem zuvor abgearbeiteten subVI erhält dieses VI ein boolsches Array (array_all) mit insgesamt 29 "true" oder "false" Werten, je nachdem, welcher kanal gemessen werden soll.
Danach wird mit Hilfe des boolschen Array ermittelt, wie die Plotlegende heissen soll (also der Plotname). ebenfalls wird eine Zufallsfarbe pro Plot gewählt.
Die Ausgänge des VI sind für dieses Problem unwichtig.
Mein problem:
Das Anlegen der Plotlegende funktioniert nur richtig, wenn der erste Case "...7, Default" mindestens einmal aufgerufen wurde. Wird dieser Fall nicht behandelt, wird zwar trotzdem eine Plotlegende mit dem richtigen namen und einer Farbe angelegt, jedoch haben die Plots im Chart eien andere Farbe als in der Legende angezeigt. Beispielsweise zeigt die Legende an, dass ein Plot rot ist, im Chart ist er aber blau.
Meiner Meinung nach hat es nichts damit zu tun, dass noch keine Messdaten vorliegen, wenn die Plotlegende angelegt wird (Thema active plot), denn es funktioniert ja, wenn der erste Case behandelt wird. Ich lasse mich da aber gern eines besseren belehren.
Es wäre toll, wenn jemand wüsste wo das Problem ist.
wie kann es sein, dass der Case "..7, Default" nicht aufgerufen wird? Du startest doch immer bei "0", egal wieviele Elemente aus "array_all" kommen (Ausnahme: keine Elemente in "array_all"). Hast du schon mal im Highlight-Modus (Glühbirne!) geschaut, was passiert?
Ich hab leider nur Lv 8.0.1...kann dein VI darum nicht öffnen. Evtl. kannst du's mal runterkonvertieren (File >> Save for previous version), dann kann ich auch mal schauen...
Kleiner Tipp: Verlager doch das Zusammenbauen deines String-Array in ein SubVI, oder noch besser, mach drei kleinere String-Array-Konstanten [0.1.2.3.4.5.6.7] + [0.1.2.3.4.5.6.7] + [2.3.4.5.6.7.8.9.10] und bau diese mit "Build Array" zusammen. So sparst du Platz und es wird viel übersichtlicher!
Die Flat Sequence brauchst du auch nicht, die Reihefolge ergibt sich automatisch durch die Referenz an den Knoten!
Noch ein Tipp: Definiere doch immer die gleichen Farben (1-Rot, 2-Blau,...), dass wär für den Benutzer einfacher auf dem Graph. Du kannst ja ein Farbarray mit z.B. 150 Farben an der Schleife anschließen (wenn dir diese Anzahl reicht). Bei mehr als 50 Kurven kann man aber eh nichts mehr erkennen...
Gruss
Achim
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
danke für deine Hilfe, ich habe Das VI nochmal für 8.0 gespeichert (frühere Version ging nicht).
Der case "...7, Default" wird beispeilsweise dann nicht aufgerufen, wenn im booleschen array die ersten 8 Werte false sind, also 0.
Um ein wenig den hintergrund aufzudecken:
Ich habe hier ein PXI.System mit 3 Messkarten und ich erfasse Temperaturen mit Thermoelementen, die ich alle in einem Chart visualisieren möchte. Und dazu gehört nunmal, dass die Plotlegende eigene Namen und frben hat.
1. Die case-struktur in den hochgeladenen Programmen muss bis 30 gehen, und nicht bis 29.
2. Bei Programmstart werden zwar neue Farben für die Plotlegende angelegt, der plot hat aber noch die alte farbe, die angelegt wurde, als das Programm zuvor ausgeführt wurde.
Zum Programmbeginn setze ich den graphen per invoke node auf default.
Gruss André
31.01.2007, 16:52 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2007 17:00 von Achim.)
dein Fehler rührt vermutlich daher, dass du zwar nur ausgewählte Plots einfärbst, aber wohl noch irgendwelche alten Informationen im Graph sind. Evtl. zeichnest/wählst du mehr Plots, als du haben willst. Wenn im angehängten VI der Fall "Fehler" eingestellt ist (im BD), hab ich das von dir beschriebene Verhalten!
Ich hab das mal nachvollzogen, siehe das angehängte VI. Da sollte jetzt alles funktionieren.
Wenn ich alles korrekt verstanden habe, dann gibst du dem Plot, den ich angezeigt haben möchte, 20 zufällig generierte Werte, und zwar BEVOR sie eingefärbt werden (Fall "Kein Fehler").
Aber im Fall "Fehler" machst du doch dasselbe, oder nicht??
Ich habe mal ein Bild anbei, vielleicht mache ich ja etwas bei der Zuweisung zum Chart falsch...
im Fall "Fehler" werden soviele Kurven mit je 20 Werten erzeugt, wie Elemente im "array_all" sind, egal ob die Werte "T" oder "F" sind! Alle Kurven werden dann auf dem Graph gezeichnet! Die Plotlegende wird jedoch nur für die "T"-Kurven erstellt.
Bei "Kein Fehler" werden nur die Kurven ausgewählt und gezeichnet, bei denen die Elemente in "array_all" auf "T" stehen! Und die Plotlegende wird auch nur für diese erstellt!
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
Dein Vi funktioniert wenn ich es allein ausführe. Wenn ich es als Subvi in meinem hauptprogramm ausführe, funktioniert es nur, wenn im array_all mindestens 1 der ersten 8 Kanäle true war.
Im ángehangenen Bild siehst du wie es sich auswirkt. Siehe Plotlegendenfarbe und Plotfarbe.
Beende ich das VI und starte es neu und wähle wieder dieselben kanäle, so ist die Farbe wieder die gleiche (hier grün).
Ich prüfe nun mal, ob das array_all korrekt zusammengesetzt wird.
mein VI ist auch nicht als SubVI gedacht, es soll dir nur zeigen, dass du vermutlich zu viele Kurven zeichnest. Nämlich soviele, wie Elemente in "array_all" sind...auch wenn diese False sind! Du darfst aber nur die zeichnen, die du auch in der Legende sehen willst...nämlich die, die in "array_all" True sind! Also...mein VI ist nur ein Beispiel!
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)