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 

VI, das als Eingang einen unbekannten Cluster hat



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!

16.08.2010, 09:17 (Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2010 09:42 von Matze.)
Beitrag #1

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
VI, das als Eingang einen unbekannten Cluster hat
Hallo zusammen,

ich möchte eine Art Protokoll definieren. Dazu dachte ich mir, dass ich einen Cluster nehme (Typndefinition), der boolsche Elemente (Bit), Integer-Elemente und Double-Elemente beinhalten kann.
Da möchte ich z.B. definieren, dass bei einem Ethernetprotokoll das erste Byte aus 8 einzelnen Bits besteht, das 2. ein Int8 ist, das 3. und 4. Byte ein Int16 und Byte 5 - 8 ein Int32.
Im Endeffekt möchte ich das hier allgemein umsetzen (Quelle: ni.com):

   

Da kam ich auf die Idee mit dem allgemeinen Cluster. Ich möchte nicht jedesmal ein neues SubVI erstellen müssen. Wenn das mal 100 Byte sind, wird das sonst zu komplex und ist kaum wartbar.
Nun dachte ich an ein VI, das als Eingang diesen Cluster hat und als Ausgang ein Array, das die Daten für das Protokoll aufbereitet enthält.
Nur wie kann ich denn einen ganz allgemeinen Clustereingang definieren, der jeden Cluster akzeptiert?
Diesen möchte ich dann allgemein aufschlüsseln und je nach Inhalt die entsprechenden Array-Werte zusammensetzen (wie im oben angehängten Screenshot).

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.08.2010, 12:17
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.430
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
VI, das als Eingang einen unbekannten Cluster hat
Hallo Mecha,

LabVIEW arbeitet streng typisiert - und ein Cluster ist nun mal eine feststehende Typdefinition. Da kannst du nicht beliebige Cluster an den Eingang eines subVIs anschließen.

Solange die Anzahl der unterschiedlichen Cluster überschaubar bleibt, kannst du ein polymorphes VI erstellen. Ist im Grunde eine Sammlung von unterschiedlichen subVIs, die deine unterschiedlichen Clusterdefinitionen bearbeiten.

Ansonsten kannst du noch mit Variants rumprobieren oder mit "flattened strings". Vielleicht geht sowas auch mit LV-OOP, aber da muss ich mich erst noch reinarbeiten...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.08.2010, 12:57
Beitrag #3

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
VI, das als Eingang einen unbekannten Cluster hat
Hallo Gerd,

das dachte ich mir schon fast. Ein polymorphes VI kommt nicht in Frage, da der Aufbau des Protokolls beliebig sein kann.

Hast du eine Idee, wie ich allgemein so ein Protokoll definieren könnte?
Also dass ich sage, das erste Byte sind 8 einzelne Bits, das zweite soll als Int8 interpretiert werden etc?

Ich möchte damit erreichen, dass ich das Protokoll möglichst einfach definieren kann ohne jedesmal umfangreiche VIs dafür schreiben zu müssen.

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.08.2010, 13:22
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.430
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
VI, das als Eingang einen unbekannten Cluster hat
Hallo Mecha,

willst du jetzt einmal ein Protokoll definieren oder ständig neue entwerfen???

Wie ich es jetzt interpretiere, hast du einen Bytestream, den du interpretieren willst.
Dabei erzeugst du jedoch jedesmal einen neuen/anderen (Ausgangs-)Cluster. Und das ist ohne Weiteres (d.h. LV-Skripting) nicht möglich. Du musst also zwingend für jeden zu erzeugenden Datentyp ein subVI erstellen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.08.2010, 13:40 (Dieser Beitrag wurde zuletzt bearbeitet: 16.08.2010 13:43 von Matze.)
Beitrag #5

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
VI, das als Eingang einen unbekannten Cluster hat
Hallo Gerd,

je nach Anwendung variieren die zu übertragenden Daten.

Maschine 1 hat einen Bytestream, der anders aussieht als der von Maschine 2.

Daher muss ich das laufend machen (also alle paar Wochen). Pro LabVIEW-Anwendung ist es natürlich fest.
Wenn ich da nun 100 Bytes habe und diese jedesmal von Hand in einem neuen SubVI zerlegen und in einem weiteren SubVI zusammen fügen muss, ist das sehr aufwändig.
Im Endeffekt gehören immer 2 SubVIs zusammen. Das eine macht jedoch genau das Gegenteil vom anderen (zusammen fügen: Cluster -> Array, zerlegen: Array -> Cluster).

Grüße
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.08.2010, 14:26
Beitrag #6

cb Offline
LVF-SeniorMod


Beiträge: 1.731
Registriert seit: Feb 2006

2018SP1
2001
EN

40xxx
Deutschland
VI, das als Eingang einen unbekannten Cluster hat
LV Scripting ist in diesem Fall vermutlich auch keine Lösung, weil Scripting zur zur Entwicklungs-Zeit zur Verfügung steht. Zur Laufzeit kann man nichts mehr scripten.

Vermutlich willst du den "anythin"-Eingang haben, an den man alles anklemmen kann, wie z.B. bei der "to Variant"-Primitive. Wenn du das haben willst, musst du dich wohl oder übel mit X-Nodes beschäftigen. Am besten schreit jetzt gleich der Rolf "Halt, ne, stop, mach das nicht, da kommst du in Teufels Küche" und vermutlich hat er rechtBig Grin... für ein Produktiv-System würde ich die auch auf keinen Fall verwenden.

Last but not least bleibt noch die Möglichkeit, alle Daten, die über das Protokoll übertragen werden sollen in einen Variant umzuwandeln, das ist der einzige, "variable" Datentyp in LabVIEW und den Variant mit einem Enum in einen Cluster zu stecken, der dem Empfänger mitteilt um was für Daten es sich handelt.

Wenn du es generisch aufbauen willst, dann eignet sich vielleicht LVOOP, ich kann jetzt aber nicht abschätzen, wieviel Arbeit das wird, das hängt hauptsächlich davon ab, wieviel unterschiedliche Datentypen du generieren willst und wieviel Override-Methoden du dazu schreiben musst ...

http://www.rotabench.com - rotierende Prüfstände nach dem Baukasten-Prinzip
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
16.08.2010, 14:51
Beitrag #7

Matze Offline
LVF-Team
LVF-Team

Beiträge: 1.027
Registriert seit: Apr 2010

20xx
2010
DE_EN

7xxxx
Deutschland
VI, das als Eingang einen unbekannten Cluster hat
Hallo,

mein Ansatz sieht nun wie folgt aus:

Ich habe eine Typendefinition, die das Protokoll definiert:

   

Das Protokoll besteht immer aus 4-Byte-Blöcken und die Definition der Blöcke erfolgt in dem gezeigten Array. In dem Fall enthält das 0. Byte 8 einzelne Bits, das 1. und 2. Byte wird als eine I16-Zahl interpretiert und das 3. Byte als Character.

Analog dazu habe ich eine Typendefinition für die Daten erstellt. Je nachdem, was im Protokoll definiert ist, wird der entsprechende Wert bzw. die Werte ausgewertet:

   

Bei der obigen Definition hier bei Byte 0 die 8 einzelnen Bits. Die nummerischen Felder werden ignoriert.

Noch bin ich mir nicht sicher, wie ich das nun in einem SubVI "verkuddeln" kann, aber ich probiere da etwas herum.

Grüße
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
  Elemente Cluster in Cluster ansprechen simcum 3 2.685 02.10.2023 10:49
Letzter Beitrag: th13
  SubVI Eingang, Array mit variabler Dimensiosgröße Philipp_O 3 3.548 25.11.2022 11:45
Letzter Beitrag: GerdW
  Element in Cluster of Array of Cluster ausblenden R.Fuertig 4 6.493 26.09.2016 07:47
Letzter Beitrag: GerdW
  Case Struktur Fehler - Eingang in Ausgang wandeln Fraser-Island 10 7.993 13.02.2015 17:26
Letzter Beitrag: jg
  SubVI Eingang mehrfach belegen J.Engel 4 4.322 05.09.2014 15:04
Letzter Beitrag: Kiesch
  Zugriff auf unbekannten VI-Name/Beschreibung? Lucius2 2 2.730 03.06.2014 13:36
Letzter Beitrag: Lucius2

Gehe zu: