LabVIEWForum.de
Verschachtelte zeitgesteuerte Schleifen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Verschachtelte zeitgesteuerte Schleifen (/Thread-Verschachtelte-zeitgesteuerte-Schleifen)



Verschachtelte zeitgesteuerte Schleifen - joeb78 - 01.07.2007 21:40

Ich würde gerne mehrere Heizpatronen in einem festen Heizintervall (z.B. 5 Sek.) ansteuern.
Die Heizzeiten sollen aber maximal je nach benötigter Leistung zwischen 0-70%, d.h. 0-3,5 Sek des Heizintervalls betragen.

Ich wollte das so lösen, dass ich 2 zeitgesteuerte Schleifen ineinander packe. Die Äußere mit 5 Sekunden und die innere mit 50ms.
Am Anfang der äußeren Schleife werden die Heizpatronen gestartet und die Heizzeiten ausgerechnet, die dann jeweils in der inneren Schleife um 50ms reduziert werden bis 0 erreicht wird und dann die jeweilige Heizpatrone wieder ausschaltet. Die restlichen 1,5 Sek sollte nichts passieren.

Das klappt aber so irgendwie nicht. Beide Schleifen starten kurz nacheinander, aber die äußere Schleife dauert nach Beendigung der inneren Schleife um bis zu 3,5 Sek. länger. Erst wenn ich die äußere Schleife auf 7 Sekunden erhöhe, wird die Kombi korrekt ausgeführt.
In den Schleifen greife ich ja auf die Hardware zu. Dauert eventuell dieser Zugriff zu lange, dass er die äußere Schleifenzeit verlängert?

>>Würde gerne das Vi hochladen, weiß aber nicht wie.
Gestern Abend war da ein weißes leeres Feld, heute gehts.

Gruß
Joe


Verschachtelte zeitgesteuerte Schleifen - cb - 02.07.2007 06:18

' schrieb:Würde gerne das Vi hochladen, weiß aber nicht wie.

dafür gibts doch die Tutorials:

--> Wie stelle ich eine Frage

--> Wie lade ich ein VI hoch?


Verschachtelte zeitgesteuerte Schleifen - Lucki - 02.07.2007 08:26

Hierfür brauchst Du keine zwei Schleifen, so würde es z.B funktionieren:
[attachment=7214]


Verschachtelte zeitgesteuerte Schleifen - joeb78 - 02.07.2007 11:05

Naja, so kann ich es machen, wenn ich 1- 3 Heizelemente hätte, die die gleiche Heizzeit benötigen oder ich müsste für jedes Heizelement eine eigene Sequenz machen, wobei das Problem besteht, dass die Anzahl der Heizelemente variieren kann.

Ich habe aber bis zu 12 Heizelemente mit unterschiedlichen Heizzeiten, die alle parallel heizen müssen.
Alle nacheinander ansteuern und deren Heizzeit abwarten, klappt so nicht.

Gruß
Joe


Verschachtelte zeitgesteuerte Schleifen - rolfk - 02.07.2007 12:07

' schrieb:Naja, so kann ich es machen, wenn ich 1- 3 Heizelemente hätte, die die gleiche Heizzeit benötigen oder ich müsste für jedes Heizelement eine eigene Sequenz machen, wobei das Problem besteht, dass die Anzahl der Heizelemente variieren kann.

Ich habe aber bis zu 12 Heizelemente mit unterschiedlichen Heizzeiten, die alle parallel heizen müssen.
Alle nacheinander ansteuern und deren Heizzeit abwarten, klappt so nicht.

Gruß
Joe

Also variable Anzahl Objekte wo Du etwas damit tun musst ==> immer eine Arraydatenstruktur.

Ich würde eine Loop machen, wo die Attribute der verschiedenen Heizelemente in einem Clusterelement eines Arrays abgespeichert sind das in einem Schieberegister der Loop abgelegt wird.
Bei jeder Iteration wird der Array untersucht nach einem Heizelement das eine Aktion benötigt und dann diese Aktion entsprechend ausgeführt. Wenn Du ganz intelligent sein willst untersuchst Du das Array gleichzeitig auch noch nach dem nächsten Erreignis und gibst die Differenz der aktuellen Zeit nach dem Ausführen der Aktion und dem gewünschten Zeitpunkt des nächsten Erreignisses an eine Delay Funktion um so nicht unnötig in Deiner Loop zu iterieren, wenn eh nichts zu tun ist.

Rolf Kalbermatter


Verschachtelte zeitgesteuerte Schleifen - eg - 02.07.2007 12:09

' schrieb:Naja, so kann ich es machen, wenn ich 1- 3 Heizelemente hätte, die die gleiche Heizzeit benötigen oder ich müsste für jedes Heizelement eine eigene Sequenz machen, wobei das Problem besteht, dass die Anzahl der Heizelemente variieren kann.

Ich habe aber bis zu 12 Heizelemente mit unterschiedlichen Heizzeiten, die alle parallel heizen müssen.
Alle nacheinander ansteuern und deren Heizzeit abwarten, klappt so nicht.

Gruß
Joe


Es ist aber wirklich einfach, mit Paste und Copy diese eine While-Schleife zu kopieren und nebeneinander zu platzieren. Dann laufen die schon parallel.

eg

P.S. nur so, für den Anfang


Verschachtelte zeitgesteuerte Schleifen - Lucki - 02.07.2007 15:40

' schrieb:Es ist aber wirklich einfach, mit Paste und Copy diese eine While-Schleife zu kopieren und nebeneinander zu platzieren. Dann laufen die schon parallel.
Da hast ja recht, aber es würde bereits genügen, wenn man die Sequenzstruktur mehrfach in die eine Schleife hineinkopieren würde.

Wie Rolf aber schon erwähnte, ist die Verwendung von Arrays bei solchen Aufgaben immer die eleganteste Lösung. Ich habe mal etwas zusammengebaut, wobei ich mir nicht sicher bin, ob das schon die beste Lösung ist. Es wird das VI "verstrichene Zeit" verwendet, und da sich dieses nicht reentrant machen läßt, wird es in ein Sub-VI reingepackt.
[attachment=7232]

NB: in die hochgeladenen VIs konnte ich mich nicht hineinfinden, es fehlen Sub-Vis. JOE78, es wäre auch schön, wenn Du bei künftigen Anfagen statt solcher VIs ein stark reduziertes Vi posten würdest, wo nur noch das drin ist, was zum Problem unbedingt dazugehört. Das macht zwar Mühe, aber nicht im Entferntesten so viel wie die Summe der Bemühungen von denen, die Dir hier antworten.


Verschachtelte zeitgesteuerte Schleifen - joeb78 - 02.07.2007 16:41

Sorry, hab die beiden Sub-Vi's übersehen. Verspreche das nächste mal das Vi weiter zu reduzieren.
Ich probiere die neuen Vorschläge mal die nächste Zeit mal aus.

@Lucki
Ich kann die Vi's nicht aufrufen weil sie wohl mit LV8.2 erstellt wurden und ich nur LV7.1 habe.
Wäre es möglich in einer kompatiblen Version abzuspeichern?

Vielen Dank


Verschachtelte zeitgesteuerte Schleifen - Lucki - 02.07.2007 17:27

' schrieb:Wäre es möglich in einer kompatiblen Version abzuspeichern?
2 mal herunterterkompiliert, ohne Garantie daß es noch funktioniert.