INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Schlaufe wird zu oft ausgeführt



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!

14.07.2009, 15:39
Beitrag #1

Corono Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Jul 2009

8.6.1
-
en

8050
Schweiz
Schlaufe wird zu oft ausgeführt
Hallo zusammen

Ich habe ein Projekt, bei dem mir ein Teil des LabVIEW-Programms gerade ziemlich Kopfzerbrechen vereitet. Ich habe Bilder dazu angehängt.
Zwar geht es darum, dass eine While-Schleife ausgeführt wird mit einer bestimmten Abfolge und zwei inneren While-Schleifen. In denen wird immer für eine gewisse Zeit der Ausgang Power und PowerLamp eingeschaltet, danach, wird Power für kurze Zeit ausgeschaltet und und PowerLamp blinkt (das passiert in der Abfolge mit den inneren While-Schleifen, die äussere wiederholt das ganze einfach noch mal). Das Funktioniert auch alles prima. Was mich jetzt aber stört: Sobald ein bestimmter Eingang gesetzt wird, wird das sog. PowerFailureStopSignal auf 1 gesetzt, was die Abbruchbedingung ist. Das Signal wird auch korrekt gesetzt. Was ich jetzt aber nicht begreiffe: Das Signal wird irgendwo mitten in der Schleife gesetzt, z.B. als Power gerade on ist. Es wird korrekt erkannt, springt aus der ersten inneren Schleife raus, geht weiter, schaltet Power aus, springt aus der zweiten inneren Schleife raus und ist am Ende der Abfolge. Jetzt Überprüft er die äussere Schleife und stellt fest, dass die Abbruchbedingung der äusseren Schleife erfüllt ist. So weit so gut. Nur läuft jetzt aus irgend einem Grund die ganze äussere Schleife noch einmal durch. Und das ist das, was ich nicht verstehe. Kann mir das jemand erklären?


Wenn ich jetzt nämlich den Power-Ausgang messe, zeigt sich das durch einen Peak, es wird noch mal kurz eingeschaltet, bevor komplett ausgeschaltet wird. und das will ich eigentlich nicht. Ich begreiffe nur nicht, wieso das passiert. Ich habe an einem anderen Ort eine fast gleiche Schleife und dort passiert das nicht.

Ich hoffe, es ist klar, was mein Problem ist

Danke für die Hilfe


MFG Corono


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 15:50
Beitrag #2

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Schlaufe wird zu oft ausgeführt
an welche rstelle setzt du denn PowerFailureStopSignal auf True?? Das Problem ist, das du LabVIEW zwei Möglichkeiten gibst.

1. (so wie du es willst) wird der schleifen inhalt ausgeführt mitsamt allen unterschleifen und so weiter. anschließend wird die lokale variable PowerFailureStopSignal ausgelesen und danach entschiden ob die äußere schleife weiter läuft.

2. es ist genau anders herum, zuerst wird die lokale variable ausgelesen und dann der schleifeninhalt abgearbeitet. wenn du innerhalb der schleifeninhaltes nun den wert der variablen PowerFailureStopSignal änderst, interessiert das die abbruchbedingung nciht mehr, sie hat ja schon ihren wert.

LG
Torsten

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 16:01
Beitrag #3

Corono Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Jul 2009

8.6.1
-
en

8050
Schweiz
Schlaufe wird zu oft ausgeführt
Hmmm...

Aber eigentlich sollte das ja keine Rolle spielen.
Der Unterbruch wird irgendwann innerhalb der Schleife sein. Wenn er nun am Ende überprüft und feststellt, dass die Variable gesetzt ist, bricht er daraufhin ab. Wenn jetzt am Anfang überprüft wird, läuft die Schleife zu Ende, danach wird sie wieder gestartet, überprüft die Variable, stell fest, dass sie gesetzt ist und führt die Schleife auch nicht aus. Sollte meiner Meinung nach ja aufs Gleiche rauslaufen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 16:20
Beitrag #4

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Schlaufe wird zu oft ausgeführt
evtl wäre es gut wenn du dein VI mal hochlädst (so dass man es laufen lassen kann).

so wie ich dich verstanden habe, schaltest du irgendwann die abbruchbedingung auf TRUE. danach sollte die schleife nciht erneut durchlaufen. tut sie aber trotzdem. meine idee war, dass die lokale variable für die abbruch bedingung ausgelesen wird, bevor sie gesetzt wird. dann läuft die schleife auch ein weiteres mal durch.

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 16:28
Beitrag #5

Corono Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Jul 2009

8.6.1
-
en

8050
Schweiz
Schlaufe wird zu oft ausgeführt
Hmm, glaube nicht, dass dir nur das vi was bringen würde, bräuchtest wahrscheinlich das ganze Projekt, oder?
Soll ichs einfach zipen und hochladen? Weil nur das vi-File hat dann weder die entsprechenden SubVI noch die ganze FPGA-Struktur.

Glaube aber nicht, dass es daran liegt, weil das komische war, dass ich im Debugmodus geschaut habe und da wurde der richtige Wert gesetzt, aber trotzdem wurde die schlaufe noch mal ausgeführt.

Aber ich lade es gerne hoch, wenn du mir sagst, was du alles brauchst.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 16:44
Beitrag #6

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Schlaufe wird zu oft ausgeführt
naja wenns zu umfangreich ist, wirds wahrscheinlich schwer.

was genau meinst du denn mit "da wurde der richtige Wert gesetzt"?? wurde wirklich ein TRUE an die abbruchbedingung der schleife übergeben? oder wurde die Variable "PowerFailureStopSignal" gestezt?

Verscuh doch einfach mal, an deine Sequenzstruktur einen weiteren rahmen anzuhängen. In diesen Rahmen legst du nur die lokale Variable "PowerFailureStop" und verdrahtest diese mit dem roten Beenden der äußeren Schleife.

Hier mal schemenhaft angedeutet:
   


LG
Torsten

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 16:47
Beitrag #7

Corono Offline
LVF-Grünschnabel
*


Beiträge: 32
Registriert seit: Jul 2009

8.6.1
-
en

8050
Schweiz
Schlaufe wird zu oft ausgeführt
Naja, beim debuggen steht ja immer der Wert, der übergeben wird, und da stand bei PowerFailureStop in der Schleife true.
Aber danke für die Antwort, ich probiere es morgen mal aus.


MFG Corono
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 17:15 (Dieser Beitrag wurde zuletzt bearbeitet: 14.07.2009 19:11 von Lucki.)
Beitrag #8

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Schlaufe wird zu oft ausgeführt
' schrieb:an welche rstelle setzt du denn PowerFailureStopSignal auf True?? Das Problem ist, das du LabVIEW zwei Möglichkeiten gibst.
1. (so wie du es willst) wird der schleifen inhalt ausgeführt mitsamt allen unterschleifen und so weiter. anschließend wird die lokale variable PowerFailureStopSignal ausgelesen und danach entschiden ob die äußere schleife weiter läuft.
2. es ist genau anders herum, zuerst wird die lokale variable ausgelesen und dann der schleifeninhalt abgearbeitet. wenn du innerhalb der schleifeninhaltes nun den wert der variablen PowerFailureStopSignal änderst, interessiert das die abbruchbedingung nciht mehr, sie hat ja schon ihren wert.

Theoretisch ist das richtig, aber zu 99.99999% tritt immer die zweite Möglichkeit ein.

Beim Eintritt des Programmes in eine Struktur (hier: in die große while-Schleife) werden immer zuerst die Bedienelemente und lokalen Variablen gelesen, und erst dann bearbeitet das Programm die Strukturen, Funktionen und SubVIs innerhalb der Struktur. Das steht nirgendwo, aber ich habe es nie anders erlebt. Das heißt: Das Programm läuft also nie wie gewünscht. Da nützt es auch nichts, wenn die lokale Variable weit rechts in der While-Schliefe positioniert ist, so daß für uns als "Links-nach-Rechts-Leser" der visuelle Eindruck entsteht, diese wird zuletzt gelesen. LabVIEW liest aber nicht so.
Die Korrektur ist hier ganz einfach: Die lokale Variable 1 cm nach oben verscheiben, so daß sie sich dann in der letzen Sequenz der Sequenzstruktur befindet. Dann funktionierts wie gewünscht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 20:03
Beitrag #9

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Schlaufe wird zu oft ausgeführt
würde er die lokale variable einfach in den vorhandenen sequenzrahmen setzen, wäre das selbe problem da. nur eben reduziert auf den letzten rahmen. deswegen hatte ich vorgeschlagen, einen neuen rahmen hinten anzufügen.

LG
Torsten

"Über Fragen, die ich nicht beantworten kann, zerbreche ich mir nicht den Kopf!" (Konrad Zuse)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
14.07.2009, 22:18
Beitrag #10

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Schlaufe wird zu oft ausgeführt
' schrieb:würde er die lokale variable einfach in den vorhandenen sequenzrahmen setzen, wäre das selbe problem da. nur eben reduziert auf den letzten rahmen. deswegen hatte ich vorgeschlagen, einen neuen rahmen hinten anzufügen.
Im Prinzip hast Du recht, aber wenn Du mich fragst, dann würde ich hier keinen einzigen Sequenzrahmen verwenden.(Oder nur mal einen winzig kleinen für eine lokale Veriable). Die exzessive Verwendung von Sequenzrahmen ist immer das perönliche Signum, mit der sich der Poster mit seinem VI als Anfänger ausweist - so auch hier.
Gruß Ludwig
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: