02.08.2010, 09:26
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2010 10:01 von Y-P.)
Beitrag #1
|
jak888
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."
|
|
|
02.08.2010, 09:41
Beitrag #2
|
nookie
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.
|
|
|
02.08.2010, 10:02
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2010 10:07 von jak888.)
Beitrag #4
|
jak888
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."
|
|
|
02.08.2010, 10:03
Beitrag #5
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
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 !!
--------------------------------------------------------------------------
|
|
|
02.08.2010, 10:04
Beitrag #6
|
|
|
02.08.2010, 10:13
Beitrag #7
|
jak888
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."
|
|
|
02.08.2010, 10:21
(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2010 10:32 von Lucki.)
Beitrag #8
|
Lucki
Tech.Exp.2.Klasse
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.
|
|
|
02.08.2010, 10:34
Beitrag #9
|
|
|
02.08.2010, 10:36
(Dieser Beitrag wurde zuletzt bearbeitet: 03.08.2010 08:09 von jg.)
|
jak888
LVF-Gelegenheitsschreiber
Beiträge: 133
Registriert seit: Apr 2010
2010
2010
en
97447
Deutschland
|
Laufzeitproblem
OK, hier mal die VI
Verz_gerung.vi (Größe: 26,42 KB / Downloads: 227)
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."
|
|
|
| |