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!
01.07.2007, 21:40 (Dieser Beitrag wurde zuletzt bearbeitet: 02.07.2007 09:20 von joeb78.)
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.
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
02.07.2007, 12:07 (Dieser Beitrag wurde zuletzt bearbeitet: 02.07.2007 12:09 von rolfk.)
' 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.
' 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.
' 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.
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.
02.07.2007, 16:41 (Dieser Beitrag wurde zuletzt bearbeitet: 02.07.2007 16:54 von joeb78.)
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?