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 

Programm Stop



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!

29.07.2009, 11:07
Beitrag #1

wohl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Oct 2008

2010
2008
DE

68723
Deutschland
Programm Stop
Ich habe ein großes Programm geschrieben, mit einer While-Schleife. Die Zeitdauer der Schleife ist 30 Sekunden.

Gebe ich einen Stop über das Frontpanel ein, dauert es immer recht lange, bis das Programm endlich stehen bleibt. Ich habe den Eindruck, es erfolgen noch zwei Schleifen-Durchläufe, bis der Stop das Programm endlich zum Stillstand bringt.

Durch das Stop-Signal habe ich die Anzahl der Iterationen in einer enthaltenen For-Schleife geändert, sowie die Laufzeit der While-Schleife verkürzt. Doch richtig glücklich bin ich damit nicht.

Gibt es eine Möglichkeit?


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

Falk Offline
ja, das bin ich...
***


Beiträge: 343
Registriert seit: Jan 2006

8.0 :: 201x ::202x
2006
DE_EN


Deutschland
Programm Stop
Moinsen!

Ich würde das Ganze anders herum aufziehen. Lasse doch die Schleife im Sekunden-Takt laufen und führe deine Aktion bei jedem 30ten Schleifdurchlauf aus. Dann greift das Stop und damit der Schleifenabbruch halt nach 1 Sekunde.

Schöne Grüße
Falk

Currently: zzzZZZZZZZZ
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.07.2009, 14:28
Beitrag #3

wohl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Oct 2008

2010
2008
DE

68723
Deutschland
Programm Stop
Aha!
Das ist mir aber jetzt ein zu großer Aufwand, das ganze Programm dahingehend umzumodeln, damit die Reaktion auf die Stop-Taste schneller geht.

Ich habe inzwischen noch einen anderen Beitrag gefunden, der auch über dieses problem handelte. Auch hier war nur die Rede davon, kürzere Iterations-Zeiten zu verwenden. Offensichtlich muß man schon beim Design das Anhalten des Programmes genauer ins Auge fassen, insbesondere bei langsamen Anwendungen.

Eventuell wäre da Handlungsbedarf seitens National Instruments.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.07.2009, 14:38
Beitrag #4

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Programm Stop
Es gehört allgemein zum guten Programmierstil sich VORHER gedanken zu machen, welche Funktion das Programm haben soll. Was kann NI dafür, wenn man erst später merkt, dass man das Programm auch zwischendurch beenden möchte?

Das es dir so vorkommt als würde die Schleife noch zweimal durchlaufen ist auch nur natürlich:

In jedem Schleifendurchlauf werden alle Funktionen innerhalb der Schleife in beliebiger Reihenfolge abgearbeitet. Es sei denn, sie sind durch den Datenfluss sequenziert. Eine Aufgabe die innerhalb der Schleife erledigt werden muss, ist zum Beispiel den aktuellen Wert des Stopp-Buttons an deine ODER-Verknüpfung zu übergeben. Wenn du erst danach den Stoppbutton drückst, hat das auf den aktuellen Schleifendurchlauf ekine Auswirkungen. LabVIEW arbeitet also zunächst den aktuellen Schleifendurchlauf ab und beginnt dann den nächsten. Diesesmal ist der Button gedrückt worden, trotzdem muss der Schleifendurchlauf vollständig abgearbeitet werden. Dadurch können fast zwei vollständige Durchläufe nach dem Drücken von Stopp entstehen.

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
31.07.2009, 10:53
Beitrag #5

wohl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Oct 2008

2010
2008
DE

68723
Deutschland
Programm Stop
Sag ich ja: Beim nächten Mal mache ich es besser!

Aber Dein erstes Programm war sicher auch nicht perfekt!

Aber mein Programm (While-Schleife) durchläuft offensichtlich eine zweite Schleife!

Ich denke, ich werde noch einen großen Case einsetzen, in dem mein ganzes Programm sitzt, und der ist durch die Stop-Funktion gesteuert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2009, 11:04
Beitrag #6

TSC Offline
LVF-Team
LVF-Team

Beiträge: 1.882
Registriert seit: Sep 2008

LV 2018 SP1
2008
EN

52379
Deutschland
Programm Stop
' schrieb:Sag ich ja: Beim nächten Mal mache ich es besser!
Sehr löblich!
Zitat:Aber Dein erstes Programm war sicher auch nicht perfekt!
Natürlich war es das. Mein erstes Programm hieß HelloWorld und wurde damals in Basic programmiert. Und es läuft heute noch einwandfrei ohne jegliche Fehler.
Zitat:Ich denke, ich werde noch einen großen Case einsetzen, in dem mein ganzes Programm sitzt, und der ist durch die Stop-Funktion gesteuert.
Du kannst auch einfach sicherstellen, dass der Stoppbutton erst am Ende der Schleife ausgelesen wird. Dann hast du eine maximale Reaktionszeit von einem Schleifendurchlauf. und den bekommst du auch nicht mit der umfassenden Casestruktur weg.

Ansonsten wäre es eben eine gute Alternative, die große Schleife in viele kleine parallele aufzuteilen. Aber das bedeutet Arbeit und ist nicht immer möglich.

Viel Spaß noch mit deinem Programm,
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
Anzeige
31.07.2009, 11:59
Beitrag #7

abrissbirne Offline
LVF-Stammgast
***


Beiträge: 480
Registriert seit: Aug 2007

LV2009, LV2010
2007
EN

66123
Deutschland
Programm Stop
' schrieb:Sag ich ja: Beim nächten Mal mache ich es besser!

Ich denke, ich werde noch einen großen Case einsetzen, in dem mein ganzes Programm sitzt, und der ist durch die Stop-Funktion gesteuert.
Wenn du dich verbessern willst solltest du dir einige Programmarchitekturen ansehen. LV ist im Gegensatz zu textbasierten Programmiersprachen datenflussorientiert. D.h. du musst dafür sorgen das der Datenfluß erstens überhaupt existiert und zweitens auch so wie du es dir vorstellst. Sprich macht die Applikation das Richtige zur richtigen Zeit? Schau dir für den Anfang mal Zustandsautomaten (Statemachine) an. Diese Art der Programmierung ermöglicht dir einfach Datenflussorientiert zu programmieren, ist beliebeig erweiterbar und schnell umgesetzt.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2009, 12:05
Beitrag #8

schrotti Offline
LVF-Freak
****


Beiträge: 842
Registriert seit: Feb 2008

2009 - 2011
2006
kA

70180
Deutschland
Programm Stop
Quick & Dirty: Whileschleife durch zeitgesteuerte Schleife ersetzen, die kannst du einfach mit der Funktione "Zeitgesteuerte Schleife stoppen" beenden.

Gruß Julius
Empfehlungen: expressionflow, LavaG , mooregoodideas, OpenG, JKI Blog
Tipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2009, 14:33
Beitrag #9

wohl Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 78
Registriert seit: Oct 2008

2010
2008
DE

68723
Deutschland
Programm Stop
Ich habe das Problem mit langsamem Stop genauer angeschaut:

Stellvertretend für das große Programm habe ich eine Blinkschaltung gebastelt. Blinkfrequenz 10 sec..

In beiden Fällen blinkt das Licht mit der gleichen Frequenz. Drücke ich STOP, ist die Reaktion aber unterschiedlich. Wenn das zeitglied in der gleichen Schleife wie die Stop-Funktion ist, wird der Zeitablauf nochmals gestartet, wenn Stop gegeben ist. Mit dem Zeitglied im Case wird nach Zeitablauf sofort beendet bei Stop.

Für eine schnelle Reaktion auf Stop empfiehlt sich also, das zeitbegrenzende Glied nicht in höchter Ebene einzusetzen.


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.07.2009, 21:31
Beitrag #10

unicorn Offline
LVF-Freak
****


Beiträge: 680
Registriert seit: Jul 2009

8.6.1, 2010 - 2012
1994
EN

10xxx
Deutschland
Programm Stop
Wie wär es mit folgendem VI. Da eh nur gewartet wird kann man eine Ereignisstruktur mit Timeout einsetzen. Stoppt sofort wenn man Stop drückt.


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Stop eines VIs aus drei Schleifen Lab_fänger 3 3.323 14.10.2015 06:56
Letzter Beitrag: Lucki
  Stop während Eventstruktur am laufen ist haydenfan 5 5.428 05.11.2013 09:50
Letzter Beitrag: haydenfan
  Search & Replace STOP gottfried 8 6.372 01.08.2013 08:44
Letzter Beitrag: eb
  Stop-Button stoppt nicht zwei While-Schleifen wiktor 2 8.412 07.07.2011 19:29
Letzter Beitrag: Lucki
  Reset nach Stop in der whileschleife applefan 8 10.556 22.12.2010 14:17
Letzter Beitrag: NWOmason
  Manueller Start- /Stop-Trigger 4037 22 17.873 01.12.2010 14:42
Letzter Beitrag: 4037

Gehe zu: