Schalter in bestimmten Rahmen einer Sequenz "latchen"?
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!
Schalter in bestimmten Rahmen einer Sequenz "latchen"?
' schrieb:Bei mir kommt genau das selbe raus, wie bei dir.
Das beruhigt mich schon mal
' schrieb:Erster Schritt war ja auch nur, diese eine 1 beim zweiten Start zu eliminieren.
Jetzt muss ich fragen warum wir die 1 eleminieren? Dachte, das wäre die "Bestätigung", dass wir im Unterprogramm die Case Struktur im Rahmen 0 einmalig ausführen.
Oder hat dies jetzt wieder mit dem "Nichtverstehen meinerseits" des Datenflusses zu tun?
' schrieb:Jetzt kommt der zweite Schritt. Und der lautet: Was erwartest du denn an diesen beiden Stellen? Sollen die Werte, die beim ersten Start generiert worden sind, so weitergeführt werden, dass es in der ersten Spalte mit 3,436 3,437 usw. weitergeht? Was soll in der letzten Spalte stehen: Neubeginn bei 0 oder weiter bei 1000,0?
Was also erwartest du ab dem 2. Start in Spalte eins und drei?
In Spalte eins und drei soll es wieder bei 0 beginnen. Sprich die Zeit soll nach Reset wieder hochlaufen und ebenso der Sollweg.
Beim gleichen Eingabegrößen Weg, Geschwindigkeit und Beschleunigung sollten somit beim 2. Durchlauf in etwa die gleichen Werte wie beim ersten rauskommen. So mein Gedanke
Schalter in bestimmten Rahmen einer Sequenz "latchen"?
' schrieb:Jetzt muss ich fragen warum wir die 1 eleminieren? Dachte, das wäre die "Bestätigung", dass wir im Unterprogramm die Case Struktur im Rahmen 0 einmalig ausführen.
Richtig. Die eliminierte Eins ist die Bestätigung, dass dieser eine Befehl nur ein einziges Mal gemacht wird.
Zitat:In Spalte eins und drei soll es wieder bei 0 beginnen. Sprich die Zeit soll nach Reset wieder hochlaufen und ebenso der Sollweg.
Das ist doch mal ein Wort.
Zitat:Beim gleichen Eingabegrößen Weg, Geschwindigkeit und Beschleunigung sollten somit beim 2. Durchlauf in etwa die gleichen Werte wie beim ersten rauskommen.
"In etwa die gleichen Werte" geht nicht. Wenn die Eingangswerte "gleich" sind, müssen auch die Ausgangswerte "gleich" sein. Es muss also heißen "beim 2. Durchlauf die gleichen Werte wie beim ersten". Sollte es anders gedacht sein, so muss es einen Unterschied geben zwischen 1. und 2. Durchlauf.
Sollen die Werte also "gleich" sein, oder nur "ungefähr gleich"?
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Schalter in bestimmten Rahmen einer Sequenz "latchen"?
' schrieb:Richtig. Die eliminierte Eins ist die Bestätigung, dass dieser eine Befehl nur ein einziges Mal gemacht wird.
Okay, ganz verinnerlicht hab ich das noch nicht, aber das wird schon.
Hab das jetzt so verstanden, dass die "1"nicht mehrgeschrieben wird, aufgrund des Befehls im Hauptprogramm (die von dir hinzugefügte Struktur), der Rahmen ansich aber ausgeführt wird?!
' schrieb:"In etwa die gleichen Werte" geht nicht. Wenn die Eingangswerte "gleich" sind, müssen auch die Ausgangswerte "gleich" sein. Es muss also heißen "beim 2. Durchlauf die gleichen Werte wie beim ersten". Sollte es anders gedacht sein, so muss es einen Unterschied geben zwischen 1. und 2. Durchlauf.
Sollen die Werte also "gleich" sein, oder nur "ungefähr gleich"?
Nach dieser Aussage "gleich"! War mir nicht sicher ob mein delta t immer identisch ist, und somit die gleichen Werte rauskommen. Aber nach dieser Aussage sollen es die gleichen Werte bei identischen Eingangsparametern sein.
Schalter in bestimmten Rahmen einer Sequenz "latchen"?
' schrieb:Oder hat dies jetzt wieder mit dem "Nichtverstehen meinerseits" des Datenflusses zu tun?
"Hilfs-Position" gilt neben den drei tatsächlichen Eingängen s, v und a ebenfalls als Eingangsparameter - nämlich für den Algorithmus im SubVI. Daher müssen die Ergebnisse des zweiten Durchlaufes nicht zwangsläufig mit denen des ersten Duchlaufes identisch sein, obwohl a, v und a identisch sind.
Beim ersten Aufruf von SubVI beim ersten START wird "Hilfs-Position" explizit auf Null gesetzt. Beim ersten Aufruf von SubVI beim zweiten START hat "Hilfs-Position" den Wert vom letzten Aufruf von SubVI beim ersten Start (das klinkt zwar komsich, ist aber so: so geht halt dein Algorithmus). Dieses "Verhalten" von Hilfs-Position bewirkt, dass die ersten Werte des zweiten Durchlaufes nicht mit den ersten Werten des ersten Durchlaufes identsich sind.
Das, was du als letztem Tabelleninhalt gepostet hast, entspricht also genau deinem Algorithmus.
Willst du dagegen haben, dass die Werte beider Durchläufe identsich sind, dann musst du bei jedem Start die Hilfs-Position resettet. Das aber wolltest du ja explizit nicht haben.
Der dritte Schritt wäre jetzt den Algorithmus zu überprüfen.
Hier noch zwei Hinweise:
Beachte, dass das Express-VI nur eine Auflösung von ca. 16ms hat. Daher sind in der ersten Spalte manchmal doppelte Werte. Ich würde ja sagen, dass das bestimmt nicht im Sinne deines Algorithmusses ist.
Die unterschiedliche Anzahl der Nuller in der Zeitspalte zu Beginn eines jeden STARTs kommt daher, weil die Programmlaufzeit nicht konstant ist. Bedenke: Windows ist kein Echtzeitsystem. Wenn du die anderen Zeitwerte ankuckst, siehst du, dass auch bei diesen Werten die Anzahl mal mehr mal weniger ist.
Hier noch meine Muster-VIs. Beachte, dass die Sequenzstruktur nicht notwendig ist.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Schalter in bestimmten Rahmen einer Sequenz "latchen"?
' schrieb:"Hilfs-Position" gilt neben den drei tatsächlichen Eingängen s, v und a ebenfalls als Eingangsparameter - nämlich für den Algorithmus im SubVI. Daher müssen die Ergebnisse des zweiten Durchlaufes nicht zwangsläufig mit denen des ersten Duchlaufes identisch sein, obwohl a, v und a identisch sind.
Beim ersten Aufruf von SubVI beim ersten START wird "Hilfs-Position" explizit auf Null gesetzt. Beim ersten Aufruf von SubVI beim zweiten START hat "Hilfs-Position" den Wert vom letzten Aufruf von SubVI beim ersten Start (das klinkt zwar komsich, ist aber so: so geht halt dein Algorithmus). Dieses "Verhalten" von Hilfs-Position bewirkt, dass die ersten Werte des zweiten Durchlaufes nicht mit den ersten Werten des ersten Durchlaufes identsich sind.
Das, was du als letztem Tabelleninhalt gepostet hast, entspricht also genau deinem Algorithmus.
Okay, das kann ich soweit alles nachvollziehen.
' schrieb:Willst du dagegen haben, dass die Werte beider Durchläufe identsich sind, dann musst du bei jedem Start die Hilfs-Position resettet. Das aber wolltest du ja explizit nicht haben.
Da haben wir an einander vorbeigeredet, bzw ich hab mich nicht explizit ausgedrückt.
Das war eigentlich genau das, was ich wollte. Bin eigentlich auch davon ausgegangen, dass das der Weg zum Ziel ist.
Nur scheitern meine Fähigkeiten die Hilfs-Position wirklich bei jedem Start zu reseten, dass sie auch wirklich mit 0 in den ersten Schleifendurchlauf eingeht und nicht wie bisher bei mir erst im zweiten.
Wie du ja sagtest ist die Hilfs-Position ein Eingangsparameter für das SubVI.
Wär klasse, wenn wir da noch mal ansetzen könnten
' schrieb:Hier noch zwei Hinweise:
Beachte, dass das Express-VI nur eine Auflösung von ca. 16ms hat. Daher sind in der ersten Spalte manchmal doppelte Werte. Ich würde ja sagen, dass das bestimmt nicht im Sinne deines Algorithmusses ist.
Die unterschiedliche Anzahl der Nuller in der Zeitspalte zu Beginn eines jeden STARTs kommt daher, weil die Programmlaufzeit nicht konstant ist. Bedenke: Windows ist kein Echtzeitsystem. Wenn du die anderen Zeitwerte ankuckst, siehst du, dass auch bei diesen Werten die Anzahl mal mehr mal weniger ist.
Dass mein Windows Rechner nicht Echtzeitfähig ist, ist mir bewusst. Denke, dass die entstehenden Werte (natürlich abgesehen von den Anfangswerten worum sich derzeit alles dreht) tolerierbar sind. Meine Regelung des Systems findet auf einer cRIO statt, wobei meine Sollposition dort "nur" als Eingangsgröße für einen Positionierschlitten dient.
Wie gesagt wichtig wär es mir die "Störgrößen", resultierend aus der nicht- bzw zu spät zurückgesetzen Hilfsgröße zu eleminieren.
Schalter in bestimmten Rahmen einer Sequenz "latchen"?
' schrieb:Das war eigentlich genau das, was ich wollte. Bin eigentlich auch davon ausgegangen, dass das der Weg zum Ziel ist.
Zwischen diesen Zeilen lese ich, dass dein Vorgehen im Allgemeinen richtig war: Ziel erfassen, nachdenken, programmieren! Dass einer der Punkte falsch ausgeführt wurde, ist erst im zweiten Schritt relevant. Wo es heutezutage leider oft mangelt ist, dass keiner gelernt hat, dass man zuerst mal ein Ziel erfassen muss.
Zitat:Nur scheitern meine Fähigkeiten die Hilfs-Position wirklich bei jedem Start zu reseten, dass sie auch wirklich mit 0 in den ersten Schleifendurchlauf eingeht und nicht wie bisher bei mir erst im zweiten.
Guckst du meine Ausführung des SubVIs. Hier wird jetzt mit diesem einen Boolschen Eingang eigentlich nichts weiter gemacht als die Hilfsposition vor den Algorithmus zu resetten. Wenn du im MainVI das Schieberegister in der While-Schleife nicht mehr von diesem einen Zähler abhängig machst, sondern vom Button wie zuvor, dann wird bei jedem Start die Hilfsposition gelöscht.
Zitat:Wär klasse, wenn wir da noch mal ansetzen könnten
Wenn tatsächlich bei jedem START immer das selbe Ergebnis (siehe Tabelle) herauskommen soll, dann musst du im MainVI lediglich eben den Zähler wieder eliminieren und das Schieberegister vor der While-Schleife mit TRUE initialisieren.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Schalter in bestimmten Rahmen einer Sequenz "latchen"?
' schrieb:Guckst du meine Ausführung des SubVIs. Hier wird jetzt mit diesem einen Boolschen Eingang eigentlich nichts weiter gemacht als die Hilfsposition vor den Algorithmus zu resetten. Wenn du im MainVI das Schieberegister in der While-Schleife nicht mehr von diesem einen Zähler abhängig machst, sondern vom Button wie zuvor, dann wird bei jedem Start die Hilfsposition gelöscht.
Wenn tatsächlich bei jedem START immer das selbe Ergebnis (siehe Tabelle) herauskommen soll, dann musst du im MainVI lediglich eben den Zähler wieder eliminieren und das Schieberegister vor der While-Schleife mit TRUE initialisieren.
Ich glaub ich habs! Ich kann dir gar nicht genug danken. Vielen Dank, du hast mir einiges an weiteren Kopfschmerzen erspart.
' schrieb:Zwischen diesen Zeilen lese ich, dass dein Vorgehen im Allgemeinen richtig war: Ziel erfassen, nachdenken, programmieren! Dass einer der Punkte falsch ausgeführt wurde, ist erst im zweiten Schritt relevant. Wo es heutezutage leider oft mangelt ist, dass keiner gelernt hat, dass man zuerst mal ein Ziel erfassen muss.
Dank auch dafür. Aber ich denke, dass es Grundlage ist, möchte ich denn in absehbarer Zeit wirklich Ingenieur werden.
Werde noch ein wenig mit meinem Programm herumexperimentieren, aber ich hoffe nicht, dass weitere tiefgreifende Probleme auftauchen, die ich nicht selber lösen kann.