Hallo!
Ich hab ein Cluster mit 6 Boolschen Elementen. Je nachdem welche aktiviert werden kommt eine andere dezimal Zahl heraus. Jetzt wollte ich eine dezimal Zahl in ein Boolsches Array umwandeln und das in ein Cluster um den 6 Boolschen Elementen im Cluster ein Wert zuweisen. Mein Problem ist jetzt das bei der Umwandlung von Array zu Cluster die Dimension sich ändert bzw. einige Werte neu dazukommen. Wie ist das möglich? Leider gibts bei Cluster nicht die Option wie bei Arrays ein Teilbereich zu lesen.
Hab mal ein Bild angefügt wo man es sieht.
[
attachment=27415]
MfG
Rechtsklick auf Array To Cluster -> "Cluster Size..."
Gruß, Jens
Hallo LabNeuling,
und was bitte soll die FOR-Loop mit dem Vergleich???
Der Vergleich mit einem FALSE ist nichts anderes als ein boolsches NOT - welches als
Primitive verfügbar ist...
Die FOR-Loop ist nicht nötig, da LV-
Primitives (meist) auch mit Arrays umgehen können (aka
Polymorphismus).
Eine Konstante am "N"-Eingang der Loop ist bei aktiviertem AutoIndexing ebenfalls nicht nötig, es sei denn, du willst nicht alle Arrayelemente bearbeiten...
Also die gesamte FOR-Loop durch ein einfaches NOT ersetzen!
Konstrukte wie deine nennt man
Rube-Goldberg
Also die For-Schleife brauchte ich um am Ausgang immer ein Array mit 6 Boolschen Werten zu haben. Wenn der Eingang eine "3" ist dann kommt normalerweise bestimmt nicht 000011 raus. Der Vergleich in der For-Schleife war/ist nur zum "initialisieren", wenn LabVIEW automatisch alles auf False setzt ist gut, macht aber bestimmt nicht jede Programmiersprache.
Zitat:Die FOR-Loop ist nicht nötig, da LV-Primitives (meist) auch mit Arrays umgehen können (aka Polymorphismus).
Jetzt weiß ich es.
Zitat:Also die gesamte FOR-Loop durch ein einfaches NOT ersetzen!
Ich denke das würde aus 0 eine 1 und aus 1 eine 0 machen. Wieso sollte ich das brauchen. Das macht die For-Schleife nicht...
Edit: Ach und es sollte mit True verglichen werden. Hab es aus einem anderen SubVi und hier ist es wohl falsch
Hallo Labneuling,
in deiner FOR-Loop vergleichst du ein Bit mit FALSE, machst also aus einer "1" eine "0" und umgekehrt!
Das kannst du auch mit einem NOT erledigen, viel eleganter und IMHO "richtiger"...
Da du nur 6 Bits brauchst, kannst du auch ein ArraySubset nach deinem NumberToBoolArray einfügen - statt einer FOR-Loop mit 6 Iterationen.
Vorteil der polymorphen Funktionen: Üblicherweise rechnet LV schneller, wenn man Funktionen direkt auf Arrays anwendet statt per FOR-Loop jedes Element einzeln zu behandeln. Bei einem Array mit nur 6 Elementen mag der Unterschied nur gering sein, aber das "richtige" Programmieren (bzw. das Erlernen desselben bzw. das Ausnutzen von LabVIEW-typischen Strukturen) von Anfang an erspart später viel Ärger bzw. "Optimierungsbedarf"...
Edit:
Ach, du wolltest mit TRUE vegleichen? Wird ja immer besser

Also so etwas wie:
IF TRUE THEN TRUE ELSE FALSE???
Denk mal drüber nach... (Hier noch ein Link zu
Rube-Goldberg, Leben&Wirken 2. Absatz

)
Edit2:
Nach kurzer Denkpause kam das hier raus (

):
[
attachment=27425]
Dürfte so ungefähr das sein, was du wolltest (ClusterSize=6)...
Nu gebts ihm doch...[
attachment=27433]
oh, zu langsam, aber bitteschön, identisch. Da gibt es dann
eine gewisse Chance, das das wirklich die kürzeste Lösung ist...
Also Jens G hat schon alles gesagt was ich wissen wollte.
Hallo Labneuling,
"Also Jens G hat schon alles gesagt was ich wissen wollte."
Das macht dein gezeigtes Beispiel aber nicht besser... Und ich nehme an, du wolltest noch (mehr als nur Clustersize) dazulernen?