LabVIEWForum.de - Timer

LabVIEWForum.de

Normale Version: Timer
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Ich hab dir das Vi schnell umgeschrieben, sodass es als SubVi verwendet werden kann.

Ein SubVi solcher Art nennt man "funktionales Vi". Unter diesem Begriff findest du einige Beiträge hier im Forum.
Die prinzipielle Funktionsweise ist die, dass nun die Schleife pro Aufruf nur einmal durchlaufen wird, in den Shiftregistern aber die Daten des vorherigen Aufrufes gespeichert bleiben.

Beim ersten Aufruf solltest du den Wert Init einmal (und nur dieses einmal) auf True setzen.

Grüße

[attachment=18786]Lv85_img

edit: Und hier noch deine Variante modifiziert.

Lv85_img[attachment=18787]
Hmm ok vor lauter schnell muss ich hier jetzt nochwas anfügen.

Du solltest auf jeden Fall deinen Indikator "aktuelle Position" hinter der Range Abfrage positionieren (in deiner Version - in meiner passt es schon). Wenn du es davor schon abgreifst kann der Wert außerhalb der Grenzen liegen, da ja erst durch die Range Überprüfung sichergestellt wird, dass keine Werte außerhalb vorkommen!
Boar geil. Grooooooßes Dankeschön. Funzt! Aber da würdsch gern nochwas wissen: Das sog. "funktionale VI" hast du dadurch realisiert, dass du die Loop-Condition auf "Continue if true" gesetzt und mit false belegt hast oder? Und kann ich das SubVi jetzt auf mehrere andere "MainVIs" (Was eigentlich auch SubVIs sind) anwenden? Also ohne, dass ich in einem anderen VI die gleichen werte stehen habe?
Was ein funktionales Vi ausmacht ist prinzipiell eine Schleife, die nur einmal durchläuft und ein uninitialisiertes Shiftregister.
Dadurch speichert das Vi den Wert des vorherigen Aufrufes im Shiftregister. Du sparst dir damit also den Wert durch das ganze Main Vi durchzuziehen per Draht.
Du kannst natürlich auch die Schleife auf "Stop if true" und eine True Konstante vorne dranhängen. Das wesentliche ist - wie du richtig bemerkt hast - dass du eine Schleife hast, die nur einmal läuft.

Wenn du das Vi öfter anwenden willst, dann musst du es "reentrant" machen. Ohne reentrant gibt es nur eine Instanz von dem Vi. Jedesmal, wenn du es aufrufst (egal wo im Main Vi) wird der alte Wert durch den neuen ersetzt.

Schaltest du das Vi auf Reentrant, dann wird für jede Kopie (also für jedes Vorkommen deines SubVi im Blockdiagramm) des SubVi ein eigener Speicher angelegt. Damit bleibt dir der Wert also erhalten und du kannst das SubVi öfter verwenden.

Je nachdem ob du das SubVi also als Speicher für eine Variable, oder als eigenständige Funktion verwenden willst musst du also mit oder ohne reentrant arbeiten.

In deinem Fall dann mit reentrant. Einstellen tust du das über: - Datei -> Vi Einstellungen -> Ausführung -> ablaufinvariante Ausführung.

Grüße
Danke für den kleinen Privatunterricht!Big Grin
Seiten: 1 2
Referenz-URLs