LabVIEWForum.de - Iterationszähler

LabVIEWForum.de

Normale Version: Iterationszähler
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo ihr Lieben,

ich habe ein VI, bei dem es mehrere Schleifen gibt. Ich möchte den Gesamt-Iterationszähler (also die äußerste Schleife) pro Sekunde um 1 erhöhen. Innerhalb dieser Schleife ist eine weitere, die 5 mal wiederholt wird. In dieser Zeit läuft ja der äußere Zähler nicht weiter, da zunächst die innere 5 mal wiederholt wird (pro Durchlauf ebenfalls 1 sekunde). Das soll auch so beibehalten werden, dass jeder Durchlauf 1 Sekunde dauert aber halt auch der äußere Zähler jedesmal um 1 nach oben geht. Wenn ich die innere Schleife durch einen Button anhalte, soll der äußere Iterationszähler weiterhin um 1 pro Sekunde steigen. Ich hoff ich konnte beschreiben was ich meine:)Kann man da was machen? Wahrscheinlich ist es total simpel und ich steh auf dem Schlauch...
So wie Du Dir das vorstellst geht das nicht. Wenn Du so was haben möchtest, dann musst Du die Schleifen parallel laufen lassen und nicht eine Schleife in der anderen. Vielleicht kannst Du ja kurz sagen, was Du damit erreichen möchtest, dann kann man Dir bestimmt einen Tip geben, wie Du das besser lösen könntest.

Gruß Markus

' schrieb:Kann man da was machen?
Also ich habe einen Tank der je nach Wert eines bestimmten Quotienten entweder einen Zulauf erhält oder nicht. Wenn der Quotient kleiner als 1 ist, ist der Zulauf geöffnet und wird für 5 Durchläufe einer Schleife so beibehalten. Wenn er kleiner ist als 1 dann bleibt der Zulauf geschlossen ebenfalls für 5 Durchläufe. Außerdem hat das System einen Schalter um den zulauf manuell zu stoppen. Ich habe eine numerische und graphische Volumenanzeige und eine Uhr für die vergangene Zeit in Form des Iterationszählers. Der Iterationszähler soll immer weiter zählen und die graphische Anzeige jede Sekunde jegliche Veränderung anzeigen auch wenn es keine gibts da der Quotient über 1 ist.
So soll es am Ende ausehen.
' schrieb:Ich möchte den Gesamt-Iterationszähler (also die äußerste Schleife) pro Sekunde um 1 erhöhen. Innerhalb dieser Schleife ist eine weitere, die 5 mal wiederholt wird. In dieser Zeit läuft ja der äußere Zähler nicht weiter, da zunächst die innere 5 mal wiederholt wird (pro Durchlauf ebenfalls 1 sekunde). Das soll auch so beibehalten werden, dass jeder Durchlauf 1 Sekunde dauert aber halt auch der äußere Zähler jedesmal um 1 nach oben geht. Wenn ich die innere Schleife durch einen Button anhalte, soll der äußere Iterationszähler weiterhin um 1 pro Sekunde steigen.
Unsure
Einfach den Wire für den Zähler der äußeren Schleife mit Schieberegister durch die innere Schleife führen und dort beide Zähler erhöhen? Am Außgang der inneren Scheife den äußeren Zähler in Abhängigkeit "Abbruch" erhöhen?

Oder:
Eine FGV machen mit integrierter Anzeige (Referenz auf Anzeigeelement in der FGV hinterlegen) und die überall dort platzieren, an der hochgezählt werden soll.
' schrieb:Also ich habe einen Tank der je nach Wert eines bestimmten Quotienten entweder einen Zulauf erhält oder nicht. Wenn der Quotient kleiner als 1 ist, ist der Zulauf geöffnet und wird für 5 Durchläufe einer Schleife so beibehalten. Wenn er kleiner ist als 1 dann bleibt der Zulauf geschlossen ebenfalls für 5 Durchläufe.
Das Du machen willst läßt auf einfachste Weise zu lösen. Die innere Schleife anhalten geht allerdings nicht, wie Du inzwischen weißt. Also packe einen Case in die innere Schleife rein und sorge dafür, daß im "angehaltenen Zustand" in der Schleife nichts getan wird.
[attachment=25791]
@Lucki danke, das hab ich bereits es geht wirklich nur um den IterationszählerSmile

@IchSelbst was ist eine FGV?
' schrieb:was ist eine FGV?
Eine "Funktionale Globale Variable".

Vom Gültigkeitsbereich her ist es eine "Globale Variable" - und somit überall verfügbar. Überall heißt in deinem Falle, dass der Wert sowohl in der äußeren als auch in der inneren Schleife verfügbar ist. Er kann also in beiden Schleifen gelesen bzw. manipuliert werden.

Eine FGV besteht aus einer While-Schleife mit Bedingungsanschluss = TRUE (also so, dass die Schleife nur ein einziges Mal durchlaufen wird). Wichtig ist lediglich ein Schieberegister auf der Whileschleife. Hierin liegt nämlich der Wert der "globalen Variable". Eine FGV hat einen Steuereingang, der sinnvollerweise mindestens die Zustände "Variable schreiben" (mit Daten von Dateneingang) und "Variable lesen" (=> FGV-Wert geht an Datenausgang) beinhaltet. Man kann die FGV jetzt aufbohren um einen Enumeratoreingang und eine Case-Struktur in der While-Schleife. Dann kann man so Sachen machen wie "Erhöhe Datenwert", "Resette Datenwert", "Merke Referenz zur Anzeige des Datenwertes" etc. Praktisch ist das mit der Anzeige z.B. dann, wenn gleich nach dem Erhöhen der Wert auch noch angezeigt werden soll. Man spart sich somit die Verdrahtung der Anzeige am BD des VIs.
Er wollte doch in der inneren Schleife auch jede Sekunde den Zähler (i) erhöhen. Wenn die innere Schleife aber fünf Sekunden dauert, kann er den Zähler (i) der darumliegenden Schleife nicht jede Sekunde erhöhen. Da muss er sich halt einen eigenen Zähler basteln, aber den schleifeneigenen Zähler (i) kann er so nicht verwenden.

Gruß Markus

' schrieb:Das Du machen willst läßt auf einfachste Weise zu lösen. Die innere Schleife anhalten geht allerdings nicht, wie Du inzwischen weißt. Also packe einen Case in die innere Schleife rein und sorge dafür, daß im "angehaltenen Zustand" in der Schleife nichts getan wird.
[attachment=54315:Schleife_anhalten.png]
' schrieb:schleifeneigenen Zähler (i)
Ach er redet vom schleifeneigenen Zähler.

Kann man den auch verwenden? (Wink) Ich verwenden den außer für Indizierungen nie. -_-
Davon bin ich ausgegangen.... Unsure

Gruß Markus

' schrieb:Ach er redet vom schleifeneigenen Zähler.
Referenz-URLs