Forum: PC-Programmierung LabView: Ein einfach SubVI mit Ausgang?


von Borislav B. (boris_b)


Lesenswert?

Argh, dieses Programm macht mich noch wahnsinnig ;-)

Ich würde gerne ein ganz einfaches Sub VI mit einem Eingang und einem 
Ausgang bauen (z.B. ein +1-Addierer). Aber wie bekomme ich den Ein- und 
Ausgang an mein VI (so dass man im Top-Level VI etwas an mein VI 
anschließen kann)?
Ich kann in der ganzen Library keinen Input bzw. Output-Connector 
Baustein finden.

Auch die Hilfe bzw. Google konnten mir diese Frage nicht beantworten...
Hilfe!

von MirkoB (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Links neben dem VI Symbol findest Du die Anschlussbelegung. 
(Frontpanel-Ansicht)

Über die rechte Maustaste kann man diese verändern.

Anschluss:

Erst auf den Anschluss klicken (wird schwarz), danach auf das 
Bedien-/Anzeigeelement (Mauszeiger wird zur "Garnrolle")

VI speichern - Bei VI einfügen sollten dann die oben festgelegten 
Anschlüsse vorhanden sein.

Achtung! Wenn nachträglich Anschlüsse verändert werden, muss im 
"Haupt"-VI über "rechte Maustaste - Mit SubVI neu verbinden" die 
Konsistenz neu hergestellt werden.

Mirko

von Borislav B. (boris_b)


Lesenswert?

Hi, danke erstmal.
Das ist auch das was man immer im Netz findet.
IMHO ist das aber keine Lösung, denn:

1. Braucht mein VI kein Frontpanel. Daher würde ich gerne auf 
Steuerelemente verzichten.

2. Funktioniert das nicht ;-)
Das VI bekommt dann zwar tatsächlich die Connectoren. Aber weder Inputs 
die ich anlege kommen beim VI an, noch bekomme ich auf dem Top-Level die 
Outputs meines VI zu sehen...

von ASDF (Gast)


Lesenswert?

Boris B. schrieb:
> Hi, danke erstmal.
> Das ist auch das was man immer im Netz findet.
> IMHO ist das aber keine Lösung, denn:
>
> 1. Braucht mein VI kein Frontpanel. Daher würde ich gerne auf
> Steuerelemente verzichten.

Die definieren aber die Datentypen. Du musst dem SubVI nur sagen, dass 
er diese nicht exportieren soll, sondern nur im Sub Vi gültig sind.

von ASDF (Gast)


Lesenswert?

Boris B. schrieb:
> 2. Funktioniert das nicht ;-)
> Das VI bekommt dann zwar tatsächlich die Connectoren. Aber weder Inputs
> die ich anlege kommen beim VI an, noch bekomme ich auf dem Top-Level die
> Outputs meines VI zu sehen...

Du musst die Anschlüsse natürlich auch noch verschalten. Wie soll er 
sonst wissen, was ein- und Ausgang ist?

von blablub (Gast)


Lesenswert?

1. VIs in LabView haben immer so ein Frontpanel. Gehört zu dem schrott 
wohl dazu.

2. Musst du in deinem SubVI den Input/Output mit einbauen und verwenden. 
Hab das jetzt leider nicht auf dem Rechner deshalb kann ich das nicht so 
genau beschreiben. Sollte aber 1000x im Netz beschrieben sein.

von Borislav B. (boris_b)


Lesenswert?

ASDF schrieb:
> Du musst die Anschlüsse natürlich auch noch verschalten. Wie soll er
> sonst wissen, was ein- und Ausgang ist?

Ich denke das habe ich:

In meinem Sub-VI habe ich einen Addierer (Input + Konstante), ein 
Numeric Input und ein Numeric Output (auf dem Front-Panel). Letztere 
sind mit Terminals (komisches Icon oben rechts) verbunden.
Im Top-Level-VI sind nun 2 Anschlüsse an meinem Sub-VI verfügbar. Hier 
habe ich nochmals zwei Numric controls angeschlossen, um mein Sub-VI zu 
testen.

So weit so gut? Leider regt sich da nix. Wenn ich mein Sub-VI direkt 
teste, funktioniert es hingegen tadellos... Nur die Integrations in das 
Top-Level-CVI scheint schief zu gehen.

von blablub (Gast)


Lesenswert?

Was hast du an den Ausgang angeschlossen? Eine Ausgabeeinheit ist 
normalerweise kein Numeric Control

von Borislav B. (boris_b)


Lesenswert?

An einen Numeric Indicator.
Gibt es noch andere Ausgangstypen?

von MirkoB (Gast)


Lesenswert?

Boris B. schrieb:
> 1. Braucht mein VI kein Frontpanel. Daher würde ich gerne auf
> Steuerelemente verzichten.

Wie bekommst Du z.Z. Deine Daten in das VI?
Irgend ein Eingabe/Ausgabeelement muss doch da sein?

Man könnte es noch über globale Variablen machen...allerdings ist das 
sehr unsauber und entspricht nicht gerade den Datenflussmodell.

> 2. Funktioniert das nicht ;-)
> Das VI bekommt dann zwar tatsächlich die Connectoren. Aber weder Inputs
> die ich anlege kommen beim VI an, noch bekomme ich auf dem Top-Level die
> Outputs meines VI zu sehen...

Poste bitte mal das VI als Bild (PNG), Irgendwie hast Du da was 
vergessen zu verbinden.

Mirko

von Borislav B. (boris_b)


Angehängte Dateien:

Lesenswert?

Hast Recht, ein Bild sagt mehr als 1000 Worte :-)

Oben ist mein Sub-VI.
Darunter die "Testumgebung" (Top-Level-VI).

Da sind jetzt 2 Dinge drin (beide funktionieren nicht auf dem 
Top-Level):
1. Ein +1-Addierer
2. Ein Generator, der jede Sekunde eine Zufallszahl ausspuckt

von MirkoB (Gast)


Lesenswert?

So auf den ersten Blick kann das nicht klappen:

Du hast eine While-Schleife, welche niemals verlassen wird, da die 
Abbruchbedingung nicht erfüllt wird. Welchen Wert soll das Sub-VI also 
beim beenden(!) zurückliefern?

Immer im Hinterkopf behalten, dass man nach dem Datenfluss-Prinzip 
programmiert: Was irgendwo rein geht, muss auch wieder rauskommen... ;)

Mirko

von MirkoB (Gast)


Lesenswert?

...ich sollte mich vielleicht doch mal anmelden:

Einfach im Haupt-VI mal die kleine Lampe neben dem Startknopf 
anschalten: Und schon sieht man wo es hängt... ;)

Mirko

von Borislav B. (boris_b)


Lesenswert?

MirkoB schrieb:
> So auf den ersten Blick kann das nicht klappen:
>
> Du hast eine While-Schleife, welche niemals verlassen wird, da die
> Abbruchbedingung nicht erfüllt wird. Welchen Wert soll das Sub-VI also
> beim beenden(!) zurückliefern?
>
> Immer im Hinterkopf behalten, dass man nach dem Datenfluss-Prinzip
> programmiert: Was irgendwo rein geht, muss auch wieder rauskommen... ;)
>
> Mirko

Ja Mooooment ;-)
Der Zufallszahlengenerator soll ja kontinuierlich laufen, und jede 
Sekunde einen Wert ausspucken. Dieser soll dann weitere Aktionen 
antriggern...
(Er ist also eine Quelle im Datenfluss)

: Bearbeitet durch User
von MirkoB (Gast)


Lesenswert?

Einfach die While Schleife vom Sub-Vi um das Haupt-Vi legen... ;)

Ansonsten könnte das noch über einen (User-)Event lösbar sein.
...
Oder über eine globale Variable, welche auf ihre Aktualität geprüft 
wird.
(If WertNeu # WertAlt Then Neue Zufallszahl)

Wege gibt es derer viele. Wie würdest Du es in einer anderen 
Programmiersprache lösen? PAP erstellen und in Labview umsetzen. ;)

Mirko

von Borislav B. (boris_b)


Lesenswert?

Also es gibt ja z.B. auch Waveform-generatoren in labview. Das wäre ja 
im prinzip das, was ich auch will:
Eine Schliefe, die als Quelle in bestimmten Zeitabständen Daten ausgibt.

Die muss ja auch irgendwie implementiert sein?

von MirkoB (Gast)


Lesenswert?

Boris B. schrieb:
> Eine Schliefe, die als Quelle in bestimmten Zeitabständen Daten ausgibt.
>
> Die muss ja auch irgendwie implementiert sein?

Schau es Dir an: rechte Maustaste -> Frontpanel öffnen -> Konvertieren
Dann liegt es Dir als normales VI vor.

Und dir wird auffallen, dass es immer einen Wert gibt, der die Anzahl 
der zu erzeugenden Werte enthält.

So etwas wie Du vorhast geht zwar, aber sehr umständlich und ist alles 
andere als sauber.

Dir sind die Grundzüge der Datenflussprogrammierung noch nicht so 
richtig vertraut. Wie würde man es in einer anderen Programmierpsrache 
lösen?
Timer auf 1 sek -> Interrupt -> Zufallszahl in eine Variable schreiben 
-> dem Hauptprogramm mitteilen, dass eine neue Zufallszahl da ist -> In 
ROutine für Verabreitung springen uswusf.

Geht alles mit Eventstrukturen zu machen...

...oder man erzeugt die Zufallszahl, wenn man sie braucht.

Mirko

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.