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!
hoffe ihr könnt mir helfen, hab jetzt schon länger gesucht aber auch hier nichts zu meinem Thema gefunden!
Problem liegt darin, dass ich ein Boolean Array mit den einzelnen Spalten eines 2D Boolean Arrays vergleiche. Wenn eine Spalte übereinstimmt zeichne ich ein Bild (je Spalte ein anderes). Das Problem ist, das sobald ich das serialisiertePixmap.vi in die Schleife einbaue das ganze bis zu mehreren Sekunden dauert. Unzumutbar das man als Benutzer solange warten muss ;D
Ich denke es gibt sicher einen besseren Weg das zu programmieren als wie ich das gemacht habe. Hoffe die Erklärung war nicht zu umständlich, Programm ist angefügt.
Lg Manuel
GrafikTest.vi ladet das 2D Array aus Fahrwege.csv, der Pfad müsste bei euch also aktualisiert werden, ebenso der Pfad für die png dateien.
Anzeige
05.12.2011, 19:52 (Dieser Beitrag wurde zuletzt bearbeitet: 05.12.2011 19:54 von schrotti.)
Warum zeichnest Du bis zu 40 mal das gleiche Bild in der letzten Schleife?
Hier würde es helfen, wenn nur einmal gezeichnet wird, falls ein TRUE in dem Array ist.
Abgesehen davon sollte das Laden der immer selben Datei auch nicht in der Schleife stecken.
Ansonsten ließen sich noch ein paar Verbesserungen anbringen: Automatisches Indizieren, Intialisierung von "Array" über Initialize Array.vi, Einsatz von logischen Operatoren statt Case-Anweisung.
Die Indizes der Schleifen solltest Du auch noch mal überprüfen.
06.12.2011, 08:29 (Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2011 08:39 von kirmac09.)
das zeichnen steckt deshalb in der Schleife weil im richtigen Programm dann für jede Spalte ein eigenes Bild gezeichnet wird, also wenn schaltartikel=wie 1. Spalte von Fahrwege dann 1. bild, wenn =2. Spalte dann 2. Bild, können auch durchaus mehrere gezeichnet werden, habe das nur zum Test vereinfacht.
Deswegen muss das Zeichnen doch in der Schleife stecken, habe keine andere Möglichkeit gefunden!
Dasselbe mit dem Laden, weil bis jetzt hatte ich das so gemacht das er durch die aktuelle Schleifenposition (i-Schleifeniteration) erkennt welches Bild er darüberzeichnen soll. Bin auf keine bessere Lösung gekommen.
Im Prinzip soll das ganze Programm aufgrund der Übereinstimmung der Schaltartikel mit den Fahrwegen bestimmte Bilder anzeigen.
Das mit dem Initialisieren und den Indizes werd ich mir mal anschauen!
EDIT:
Zum automatischen indizieren, damit meinst du wahrscheinlich die 2 Schleifen am Anfang wo ich die Werte in das Array schreibe, wenn ich dort allerdings automatisch indiziere hatte das zuerst so, überspringt er die For-Schleife einfach, oder vertausche ich da jetzt was?
Lg
06.12.2011, 11:14 (Dieser Beitrag wurde zuletzt bearbeitet: 06.12.2011 11:15 von kirmac09.)
zu deiner Lösung: da ist doch einiges an RubeGoldberg drin...
Siehe Anhang!
- Im ersten Frame: "konstante Operationen" außerhalb von Schleifen durchführen, Autoindizierung bei FOR-Loops nutzen, effiziente Funktionen zum Cluster-Bauen nutzen
- dritter Frame: Autoindizierung in der FOR-Loop nutzen! Wozu überhaupt eine FOR-Loop mit 60 Iterationen, wenn eines der beteiligten Arrays mit nur einem einzigen Element initialisiert wird? Wozu die FOR-Loop um den Pfad-Vergleich?
FOR-Loops unterstützen Autoindizierung - welche fast immer zu effizienteren Programmen (und leichter lesbaren) führt!!!
(06.12.2011 08:29 )kirmac09 schrieb: Zum automatischen indizieren, damit meinst du wahrscheinlich die 2 Schleifen am Anfang wo ich die Werte in das Array schreibe, wenn ich dort allerdings automatisch indiziere hatte das zuerst so, überspringt er die For-Schleife einfach, oder vertausche ich da jetzt was?
Lg
Mit der äußeren Schleife sollte das automatische Indizieren gehen. In der inneren Schleife geht es nicht, da Du jedes zweite Element nutzen willst (2*i).
(06.12.2011 11:14 )kirmac09 schrieb: ..
Eine Frage noch an unicorn, was genau meinst du mit
Zitat:Einsatz von logischen Operatoren statt Case-Anweisung
Versteh ich nicht ganz, bitte um Erklärung
..
Dritter Frame: in der Schleife berechnest Du nur 'Not And' aus den beiden Boolean des Clusters. Das wäre der besagte logische Operator.
"Array"-Control und lokale Variable sind nicht nötig. Einfach einen Draht ziehen.
Bei Initialize Array nicht die Dimension, sondern die Anzahl der Elemente in der ersten Dimension angeben. Soll das Array zwei- oder mehrdimensional sein, muss das Initialize Array VI entsprechend größer ziehen.
Danke für die Hilfe, hat mir sehr viel weitergeholfen.
Hab das jetzt dementsprechend umgeändert.
Einzige Frage wenn ich mit einem 2D Array die Autoindizierung nutze, wird bei der ersten Schleife doch immer der Zeilenindex gewählt, was ist wenn ich den Spaltenindex zuerst will? Ist das möglich?
(06.12.2011 17:23 )kirmac09 schrieb: Einzige Frage wenn ich mit einem 2D Array die Autoindizierung nutze, wird bei der ersten Schleife doch immer der Zeilenindex gewählt, was ist wenn ich den Spaltenindex zuerst will? Ist das möglich?