INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

SubVi - Array kürzen



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!

20.05.2008, 10:46
Beitrag #1

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
SubVi - Array kürzen
Hallo Leute,

habe heute eine kleine Knobelaufgabe für euchSmile

Problem ist folgendes: Ich möchte mir ein kleines SubVi schreiben, das mir einen Array kürzt. Es soll also bei Auftreten eines bestimmten Elements (variabel, z.B. 0) alle nachfolgenden Elemente wegschneiden, den Array also kürzen. Hintergrund ist der, dass ich den Array öfters ändere (vom User) und es dadurch passieren kann, dass der Array länger als nötig ist. Wenn also der User weniger Parameter eingibt, soll sich auch die Array Länge ändern. Im Frontpanel kann man ja leider nicht (oder kann man??) den Array kürzen, sondern nur die Werte auf z.B. 0 setzen.

Das SubVi schreiben ist eigentlich kein Problem (siehe Screen), allerdings möchte ich es möglichst variabel halten, so dass man nicht nur einen 1D Array anschließen kann, sondern auch 2-, idealerweise n - dimensionale Arrays. Und genau daran scheitere ich. Ich würde dann gerne die 1. Dimension des Arrays verwenden um die Schnittlänge zu erhalten und jede Dimension dann auf diese Länge kürzen.

Hat jemand eine Idee, wie man dies lösen könnte, sodass das SubVi als Eingang beliebig dimensionale Arrays animmt? Ich bekomme stets ein Problem mit den Drähten. Ausreichend wäre eigentlich schon, wenn es 1 und 2 dimensionale Arrays schafft.

Kvasir


Angehängte Datei(en) Thumbnail(s)
       

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
20.05.2008, 11:10
Beitrag #2

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
SubVi - Array kürzen
Da fallen mir 2 Möglichkeiten ein.

1. Erstellen eines PolymorphicVi. (Datei Neu) Habe ich auch noch nie gemacht, aber so geht es.

2. Wenn du nur 1D oder 2D möchtest, dann machst du einen 2D Eingang.
1D Array müssten zum anschliessen noch mit BuildArray auf 2D erhöht werde.
Im SubVi prüfst du nun ob die 2.Dim. null ist. irgendwie so.

Ich würde es nach Punkt 1 machen.

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.05.2008, 08:46
Beitrag #3

fsg4u Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 97
Registriert seit: May 2008

8.6
2008
de

23552
Deutschland
SubVi - Array kürzen
Ich weiss nicht genau ob ich es verstanden hab.
Also ich glaub ich würde es ein wenig anders machen.
So wie es in Deinem ersten Bild ist sieht es schon gut aus.

Ich würde bei diemensionen in 2 eindimensionale Arrays aufteilen.Das kannste mir "Index array" machen.
Einfach kein Index angeben.
Dann würde ich in dem Array wo die Null sein soll nach 0 suchen so wie Du das auch machst.(dann hast DU ja den Indize)
Und dann würd ich einfach mit "Slit 1D array" deine beide 1d array von der stelle an Splitten die Dein Indize Dir ausgegeben hast.
Und die beiden rauskommenden arrays wieder zu einem 2d array zusammenfügen. das sollte aufjedenfall gehen.
wenns nicht klappt.kannst ja nochmal schreiben.
Ciao FSG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.05.2008, 09:53
Beitrag #4

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
SubVi - Array kürzen
' schrieb:Ich weiss nicht genau ob ich es verstanden hab.
Also ich glaub ich würde es ein wenig anders machen.
So wie es in Deinem ersten Bild ist sieht es schon gut aus.

Ich würde bei diemensionen in 2 eindimensionale Arrays aufteilen.Das kannste mir "Index array" machen.
Einfach kein Index angeben.
Dann würde ich in dem Array wo die Null sein soll nach 0 suchen so wie Du das auch machst.(dann hast DU ja den Indize)
Und dann würd ich einfach mit "Slit 1D array" deine beide 1d array von der stelle an Splitten die Dein Indize Dir ausgegeben hast.
Und die beiden rauskommenden arrays wieder zu einem 2d array zusammenfügen. das sollte aufjedenfall gehen.
wenns nicht klappt.kannst ja nochmal schreiben.
Ciao FSG

Ja das ist schon klar. Das Problem ist (wie ich versucht habe zu beschreibenWink) nicht das Vi für 1D oder 2D Arrays zu schreiben, sondern so zu schreiben, dass es beide Typen als Eingänge akzeptiert. Also von selbst in der Lage ist zu unterscheiden, wie viele Dimensionen vorliegen. Trotzdem danke für deine AntwortSmile

Habe es inzwischen mit dem Polymorphic Vi gelöst. Dachte erst, das ist nicht optimal, da man dabei wählen muss, was anliegt, habe aber bemerkt, dass es sogar automatisch die richtige Instanz auswählt. Kannte diese Methode noch nicht. Man lernt nie aus hierWink
Habe das Vi leider nicht zur Hand heute, werde es ev. morgen hier posten, wenn es wen interessiert.

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.05.2008, 00:53
Beitrag #5

thomas.sandrisser Offline
LVF-SeniorMod


Beiträge: 1.298
Registriert seit: Sep 2005

xxxx
2005
EN

78759
United States
SubVi - Array kürzen
wenn du es komplett offen halten willst, 1d array als auch 2d array oder md array gibts drei grundsaetzliche moeglichkeiten:
a) polymorphes VI
(einfachste methode, weil -wie du schon bemerkt hast- dir korrekte Instanz per default automatisch ausgewaehlt wird)
wenn du verschachtelungen der einzelnen polymorphen instanzen im menu implementieren willst, verwende folgende syntax xxx:yyy:zzz (der doppelpunkt macht es aus, dass du eine struktur wie bei DAQmx bekommst)
b) reshape array mit einem 1D eingang fuer die nutzdaten und einem weiteren 1D eingang mit den laengeninformationen des urspruenglichen konstruktes, wobei in den einzelnen indizes die laenge der jeweiligen dimension steckt (wobei array length = array dim ist)
(methode wenn man super schlau programmieren will :-))
c) daten in variant datentyp umwandeln (vorteil: nicht nur xD numeric, sondern auch bool und string koennten verwendet werden ohne fuer jeden case eine polymorphe instanz zu generieren). den variant datentyp kannst im subVI in weiterer folge analysieren und in den entsprechenden datentyp zurueck wandeln (in einzelnen cases *dies kann als BD von den einzelnen polymorphen instanzen betrachtet werden)) und deine operation durchfuehren). Der Output ist wiederum ein Variant.
(diese variante ist eine absolute spielerei, aber absolut brauchbar wenn man ueber mehrere VIs hinweg unterschiedlichste daten austauschen muss)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.05.2008, 09:02 (Dieser Beitrag wurde zuletzt bearbeitet: 23.05.2008 09:04 von Kvasir.)
Beitrag #6

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
SubVi - Array kürzen
Das polymorphe Vi funktioniert gut soweit. Das mit den : ist auch eine interessante Erweiterung, die ich sicherlich mal brauchen kann.

Mit dem Variant Datentyp hab ich mich auch noch nie beschäftigt, klingt aber interessant.

Deine Variante b) ist "nicht so der Bär" (wie ein Freund von mir zu sagen pflegt). Denn da brauche ich ja erst wieder vor der Funktion (SubVi) Elemente, die mir den Array aufspalten und die Dimensionslängen berechnen. Das wollte ich ja eigentlich alles ins SubVi packen.
Außerdem habe ich bemerkt, dass das nicht so trivial ist, sich die Dimensionslängen zu berechnen, denn wenn du einen 1D Array in das "Arraysize" Element steckst kommt (na-no-na-net) eine Zahl heraus, und eben kein Array! Damit hast du dann wieder das Problem, dass du keine weiteren Funktionen an den (allgemeinen) Ausgang des Arraysize stecken kannst, da du nicht weißt ob ein Array oder eine Zahl kommt.
Was LV hier fehlt (meiner Meinung nach) ist eine kleine Funktion "Array Dimensionen", die sämtliche Schwierigkeiten dieses Problems einfach lösen würde.

Hier noch mein PolyVi:

Lv85_img

Sonstige .vi  ArrayCut_2D.vi (Größe: 12,21 KB / Downloads: 291)


Sonstige .vi  ArrayCut_1D.vi (Größe: 10,45 KB / Downloads: 291)


Sonstige .vi  ArrayCut_Poly.vi (Größe: 5,31 KB / Downloads: 301)


edit: bitte beachten lieber Freedrive: Das Symbol meiner Vis ist mit deinem ausgezeichneten Icon Editor erstellt Top1

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.05.2008, 09:28
Beitrag #7

kpa Offline
LVF-Stammgast
***


Beiträge: 385
Registriert seit: Mar 2007

2019
2002
DE

88***
Deutschland
SubVi - Array kürzen
Hallo,

die Dimensionen von einem Array erhälst Du wenn Du 2 mal Array-Größe hintereinander schaltest.
Die erste Array-Größe sagt Dir wie groß jede einzelne Dimension ist, die zweite wie viele Größen es gibt und das ist die Anzahl der Dimensionen.

kpa
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.05.2008, 10:36
Beitrag #8

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
SubVi - Array kürzen
Ja schon aber:

wie ich versuchte zu erklären bekommt man dann ein Problem, wenn der Array auch 1dimensional sein kann. Dann hast du das im Screenshot verdeutlichte Problem.
Was es eben nicht gibt ist eine Funktion, die die Anzahl der Dimensionen ausspuckt egal ob 1D oder mehrD.


Angehängte Datei(en) Thumbnail(s)
   

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.05.2008, 14:27
Beitrag #9

thomas.sandrisser Offline
LVF-SeniorMod


Beiträge: 1.298
Registriert seit: Sep 2005

xxxx
2005
EN

78759
United States
SubVi - Array kürzen
BREAK :-)

Die funktion array length ist polymorph, d.h. du kannst jeden xD datentyp anschliessen. (du bekommst den fehler beim mehrfachen hintereinander schalten, weil dein input array nur 1d ist, somit ist der ausgang vom array length scalar)
Als ausgang erhaelst du entweder ein scalar (1d angeschlossen) oder ein 1D (mehr Darray angeschlosen). Jeder index repraesentiert dann eine dimension:
1D -> scalar
2D -> index 0: anzahl zeilen; index 1: anzahl spalten
3D -> index 0: anzahl pages; index 1: anzazahl zeilen; index 2: anzahl spalten
...

Mit diesem hintergrundwissen ist variante zwei sehr einfach :-)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
23.05.2008, 17:50
Beitrag #10

Kvasir Offline
LVF-Freak
****


Beiträge: 642
Registriert seit: May 2006

10
2004
DE_EN

0000
Oesterreich
SubVi - Array kürzen
:END BREAK

Hmmm also entweder ich denk total ums Eck rum, oder ihr versteht nicht, was ich meineSmile

Ich weiß, wie die "Array size" Funktion arbeitetWink

Aber ich wollte ja eben selbst ein polymorphes Vi haben. Wo man also jegliche Arrays anschließen kann.

Das ist mit einem polymorphen Vi kein Problem;)aber anders eben schon.

Ob du nun 2 oder n Dimensionen anhängst ist egal, weil aus dem Arraysize immer ein Array als Antwort kommt, mit dem ich dann mit arrayfunktionen weiterarbeiten kann. (z.B. eine zweite Arraysize dranhängen).
Setze ich aber nun ein 1D Array an den Anfang, dann funktioniert nichts mehr, weil eben nur eine Zahl rauskommt und ich mit einer Zahl nicht in die gleichen Funktionen kann wie mit einem Array (auch hier das Beispiel eines zweiten Arraysize).

Klar gibt es Workarounds, aber eleganten habe ich keinen gefunden. Das glaub ich erst, wenn ich ihn sehe. Von den Lösungen als polymorphes und die Variant Methode mal abgesehen.

:BEGIN BREAK

Tongue

A few weeks of developement and testing can save a WHOLE afternoon in the library!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  SubVI Eingang, Array mit variabler Dimensiosgröße Philipp_O 3 4.307 25.11.2022 11:45
Letzter Beitrag: GerdW
  SubVI Funktionen verwenden, ohne SubVI Frontpanel (AVT Kamera) Allyoucaneat 3 8.847 25.08.2011 15:18
Letzter Beitrag: GerdW
  String vergleichen, kürzen und ausgeben nup0815 4 7.650 22.03.2011 11:57
Letzter Beitrag: nup0815
  Array über VI-Aufruf als Referenz ans SubVI übergeben NafeZ 6 8.185 27.08.2009 13:53
Letzter Beitrag: IchSelbst
  Array aus Subvi lesen ezekiel 5 5.031 24.04.2008 09:45
Letzter Beitrag: ezekiel
  Nachkommastellen kürzen PowerMicha 7 11.820 29.08.2006 13:35
Letzter Beitrag: PowerMicha

Gehe zu: