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 

Laufzeitproblem



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!

02.08.2010, 09:26 (Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2010 10:01 von Y-P.)
Beitrag #1

jak888 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 133
Registriert seit: Apr 2010

2010
2010
en

97447
Deutschland
Laufzeitproblem
Moin,

ich habe ein Programm, dass einen Ausgang verzögert Schaltet. Da teilweise sehr lange Schaltzeiten eingegeben werden und man sehen soll, wo das Programm gerade ist, habe ich einen Fortschrittsbalken eingebaut, der in einer For Schleife alle 100 ms aktualisiert wird. Die For Schleife ist sowieso nötig, da ich das Programm eventuell auch anhalten will, wenn die Verzögerung gerade läuft.

Leider ist es so, dass durch while Schleife Zeitprobleme entstehen: Wenn ich die zeit nachmesse und mit der eingegebenen Zeit vergleiche bestehen immer gewisse unterschiede.

   

Mir ist klar, dass die 3 Lokalen Variablen in der Schleife alles andere als optimal sind, allerdings hat sich auch nicht viel geändert, nachdem ich die "verz0" aus der gelesen wird, durch ein Shift register ersetzt habe.

Falls jemand einen Vorschlag hat, wie ich das Laufzeitproblem beheben kann, bin ich dankbar.

"Good judgement comes from experience, experience comes from bad judgement."
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 09:41
Beitrag #2

nookie Offline
CLA
*


Beiträge: 47
Registriert seit: May 2008

2011
2004
EN

2540
Oesterreich
Laufzeitproblem
Hallo,

mit der Funktion "Wait", die du verwendest hältst du den gesamten Programmablauf (in dem jeweiligen VI) bei jedem mal Ausführen der while Funktion für 100ms an.

Du kannst dir zum Beispiel einen periodischen Trigger bauen, mit dem du alle 100ms sozusagen eine aktualisierung auslößt.

lG nookie

Intuition ist die Fähigkeit, die Lage in sekundenschnelle falsch einzuschätzen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 09:58 (Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2010 10:10 von Lucki.)
Beitrag #3

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Laufzeitproblem
Wege der lokalen Variable muß Du Dir hier keine Gedanken machen. Ich für für meinen Teil scheue aber Konvertierungpunkte wie der Teufel das Weihwasser. Ich würde die Verzögerungsanzeige auf I32 umstellen, und das IQ aus dem Divisorausgang in I32 konvertieren. Die Lokale Vrz0 schreibend könnte man durch eine Konstante ersetzen, und man brauchte in "Fortschritt2" nicht dauernd eine Null hineinschreiben. Und die Wait-Funktion würde ich hier durch einen Metronom ersetzen.

Und was LV-Professional nookkie sagt ist falsch: Die Wait-Funktion blockiert nicht den "gesamten Programmablauf". Die Wartezeit wird im Gegenteil dazu genutzt, daß alles getan wird, was sich in anderen Teilen des Programmes noch erledigen läßt.
Blockieren würde das Wait nur dann, wenn das ganze Programm in eine Sequenzstruktur eingebettet wäre - was leider Anfänger sehr gern tun, da sie dem Datenflußprinzip nicht so recht trauen. Während das Programm in einer Sequenz wartet, werden alle anderen Sequenzen blockiert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 10:02 (Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2010 10:07 von jak888.)
Beitrag #4

jak888 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 133
Registriert seit: Apr 2010

2010
2010
en

97447
Deutschland
Laufzeitproblem
Das heißt also, dass solange die Funktion wartet nichts anderes abläuft... Dann dauert das Schreiben und Lesen bei den lokalen Variablen ja gar nicht so lange...

Wie kann ich einen externen Trigger realisieren?

@Lucki:

Ich habe die Verzögerung durch ein Metronom ersetzt, was zur Folge hatte, dass die Abweichungen noch größer wurden. Die funktion wartet ja auf das nächste Vielfache von der Zahl die man übergibt. und wenns da noch ein bischen hin ist, dauerts halt.
Die Datentypen werd ich ändern und mal schaun.

"Good judgement comes from experience, experience comes from bad judgement."
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 10:03
Beitrag #5

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
Laufzeitproblem
Bitte keine externen Bilderlinks von VIs!! :rulez:Ich habe den Link gelöscht und das Bild hier hochgeladen.

Gruß Markus

' schrieb:Moin,

ich habe ein Programm, dass einen Ausgang verzögert Schaltet. Da teilweise sehr lange Schaltzeiten eingegeben werden und man sehen soll, wo das Programm gerade ist, habe ich einen Fortschrittsbalken eingebaut, der in einer For Schleife alle 100 ms aktualisiert wird. Die For Schleife ist sowieso nötig, da ich das Programm eventuell auch anhalten will, wenn die Verzögerung gerade läuft.

Leider ist es so, dass durch while Schleife Zeitprobleme entstehen: Wenn ich die zeit nachmesse und mit der eingegebenen Zeit vergleiche bestehen immer gewisse unterschiede.

[attachment=57207:boxdv8bk.png]

Mir ist klar, dass die 3 Lokalen Variablen in der Schleife alles andere als optimal sind, allerdings hat sich auch nicht viel geändert, nachdem ich die "verz0" aus der gelesen wird, durch ein Shift register ersetzt habe.

Falls jemand einen Vorschlag hat, wie ich das Laufzeitproblem beheben kann, bin ich dankbar.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 10:04
Beitrag #6

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
Laufzeitproblem
' schrieb:Ich für für meinen Teil scheue aber Konvertierungpunkte wie der Teufel das Weihwasser.
Kleines Gegenargument: Die Konvertierung mit dem Punkt geschieht meist inplace, die händische immer mit einer Datenkopie.

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 10:13
Beitrag #7

jak888 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 133
Registriert seit: Apr 2010

2010
2010
en

97447
Deutschland
Laufzeitproblem
' schrieb:Kleines Gegenargument: Die Konvertierung mit dem Punkt geschieht meist inplace, die händische immer mit einer Datenkopie.

Das hab ich nicht verstanden.

"Good judgement comes from experience, experience comes from bad judgement."
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 10:21 (Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2010 10:32 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
Laufzeitproblem
' schrieb:Ich habe die Verzögerung durch ein Metronom ersetzt, was zur Folge hatte, dass die Abweichungen noch größer wurden. Die funktion wartet ja auf das nächste Vielfache von der Zahl die man übergibt. und wenns da noch ein bischen hin ist, dauerts halt.
Wenn das so ist, dann ist in Deinem VI ewas ganz anderes faul. Das was Du hier machst ist so lächerlich wenig, das es, wenn überhaut, im einstelligen Millisekunden-Bereich zu erledigen ist. Dann hast Du in Deinem VI oder in Deiner Windows-Umgebung etwas laufen, was 100% Prozessorlast beansprucht - z.B eine zweite While-Schleife mit vergessenem Wait drin.
Wenn Du nichts findest, dann lade doch mal Dein VI hoch.

@Dimitri
Zitat:Kleines Gegenargument: Die Konvertierung mit dem Punkt geschieht meist inplace, die händische immer mit einer Datenkopie.
Interessant, aber glauben tue ich das erst beim Nachweis, daß NI das so gesagt hat. Ungläubig bin ich schon deshalb, weile eine Inplace-Struktur mir bisher noch niemals Schhnelligkeit gebracht hat, sondern es geht ausschließlich um die Einsparung von Speicherplatz. Also Du mögest mit der Inplace-Struktur durchaus recht haben. Damit ist noch lange nicht geagt, daß Dein Argument hier zieht.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 10:34
Beitrag #9

dimitri84 Offline
Astronaut
*****


Beiträge: 1.496
Registriert seit: Aug 2009

2020 Developer Suite
2009
DE_EN

53562
Deutschland
Laufzeitproblem
' schrieb:Das hab ich nicht verstanden.
Das hat nicht zwangsläufig mit deinem Thema zu tun. Ich wollte nur kurz einschieben, dass ich auch meine ästhetischen Ansprüche an das BD zurückgeschraubt habe und den roten Punkt (subjektiv impliziert dieser ja subtil ein Fehlverhalten des Programmiers) zähneknirschend akzeptiere.

Fazit: Ein roter Punkt ist halb so wild, da oft weniger Datenkopien angelegt werden, als wenn man es selbst konvertiert.

„Sag nicht alles, was du weißt, aber wisse immer, was du sagst.“ (Matthias Claudius)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
02.08.2010, 10:36 (Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2010 08:09 von jg.)
Beitrag #10

jak888 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 133
Registriert seit: Apr 2010

2010
2010
en

97447
Deutschland
Laufzeitproblem
OK, hier mal die VI

Lv86_img
Sonstige .vi  Verz_gerung.vi (Größe: 26,42 KB / Downloads: 225)


Es stimmt schon, dass die Verzögerung im Bereich von sehr wenig ist. Also, der Fehler liegt immer bei unter 1% meistens sogar unter 0,5%. Dennoch möchte ich wissen, ob es einen Weg gibt, komplett ohne Fehler auszukommen.

Zum Metronom wollte ich noch anfügen: Die Funktion geht nach der Systemzeit und wartet sozusagen darauf, dass diese einen bestimmten wert erreicht. Danach läuft die Schleife dann (idealerweise) mit dem eingegebenen WErt getaktet ab. Also ist der erste Schleifendurchlauf definitv kürzer als man eigentlich will und so entsteht dabei die Abweichung.

Eine Konsequenz, die ich gerade ausgetestet habe, wäre die zeit einfach radikal runterzudrehen. Also mit T = 2ms. Dann ist die Abweichung maximal 2 ms. Das ist natürlich recht Rechenintensiv.

"Good judgement comes from experience, experience comes from bad judgement."
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Case Selector / Array Laufzeitproblem? LazyCompany 3 3.355 07.06.2016 14:13
Letzter Beitrag: LazyCompany

Gehe zu: