Moinmoin Zsammen,
hier mein kleines Problem.
Ich habe ein Programm geschrieben, bei dem ein Ball 4 Lichtschranken durchrollt. Mit der ersten wird die erste Zeitmessung gestartet, mit der 2. Stoppt die 1. und Beginnt die 2. und so weiter.
Nun habe ich die Daten in einen XY-Graphen geschrieben und möchte gerne Wissen, wann der Ball theoretisch zum stehen kommt. Also die X-Achse schneidet. Y=0.
Wie kann ich das Realisieren?
Mit freundlichen Grüßen
Tobi
Hallo Tobi,
Zitat:Wie kann ich das Realisieren?
Zuerst mal die ganzen (unnötigen) lokalen Variablen entfernen. Danach die unnötigen TimedWhileLoops...
Dann die Programmstruktur ändern:
- Statemachine einführen anstatt 5 parallel abgefragter Cases mit darin versteckten Schleifen
- für jede Lichtschranke einfach folgende Abfrage: Wenn High-Flanke dann aktuelle Zeit merken
- nach der Messung über der Zeit die bekannte X-Position der Lichtschranke auftragen
- dann eine passende Regressionsfunktion auf deine 4 Messpunkte anwenden und die nach y=0 auflösen...
Hey Gerd,
über die lokalen variablen lässt sich reden. aber die timed while loops brauch ich, da das programm auf 1ms genau arbeiten soll.
bevor ich das programm in eine statemachine überführe würde ich gerne erstmal testen ob es auch so geht.
"nach der Messung über der Zeit die bekannte X-Position der Lichtschranke auftragen"
--> die 4 versch. x-positionen krieg ich ja schon.
"dann eine passende Regressionsfunktion auf deine 4 Messpunkte anwenden und die nach y=0 auflösen... "
--> wie soll ich das machen. wenn ich eine regressionsgrade auf die kurve anwende, ermittelt die mir ja nicht den genauen nulldurchgang.
Danke für dir Hilfe bisher.
TK
Hallo Tobi,
Zitat:aber die timed while loops brauch ich, da das programm auf 1ms genau arbeiten soll.
Das ist auf einem normalen PC mit Windows Illusion...
Zitat:wenn ich eine regressionsgrade auf die kurve anwende, ermittelt die mir ja nicht den genauen nulldurchgang.
Nicht direkt: du erhälst (wahrscheinlich) ein paar Polynomkoeffizienten, die dir eine Kurve (= Funktion) beschreiben. Und mit ein bisschen
Magie Mathematik kann man berechnen, wo diese Funktion die Nulllinie kreuzt (sowas nennt sich Nullstelle)...
P.S.: Deine Shift-Tasten sind anscheinend defekt...
Zitat:Das ist auf einem normalen PC mit Windows Illusion...
--> Sobald das Programm das tut was es soll, werd ich noch ein Real-Time Modul einbinden.
Zitat:Nicht direkt: du erhälst (wahrscheinlich) ein paar Polynomkoeffizienten, die dir eine Kurve (= Funktion) beschreiben. Und mit ein bisschen Magie Mathematik kann man berechnen, wo diese Funktion die Nulllinie kreuzt (sowas nennt sich Nullstelle)...
--> Wie heist denn das VI welches ich benutzen soll. zZ arbeite ich daran eine Exponentialfunktion an die Kurve zu legen und über die den Nulldurchgang zu ermitteln, aber mit mäßigem Erfolg.
Zitat:P.S.: Deine Shift-Tasten sind anscheinend defekt...
Hallo Tobi,
ist die Funktion, mit der ein Ball ausrollt, exponentiell?
Für Polynome gäbe es
PolynomialRoots!
Mit den Minima-Funktionen in der Optimierungspalette kenne ich mich nicht aus - aber eine Schleife zu programmieren, die Nullstellen sucht und bei vorgegebener Genauigkeit abbricht, ist eigentlich eine typische Einsteigeraufgabe
Zitat:Sobald das Programm das tut was es soll, werd ich noch ein Real-Time Modul einbinden.
Hattest du bisher nicht erwähnt! Außerdem: warum packst du TWL innerhalb von CaseStrukturen innerhalb einer anderen TWL? Das ist mMn nicht sinnvoll... Deshalb nochmal:
Statemachine programmieren - von mir aus auch mit einer TWL als äußere Schleife...
Zitat:ist die Funktion, mit der ein Ball ausrollt, exponentiell?
-->ich denke sie sollte eher linear sein
Zitat:Für Polynome gäbe es PolynomialRoots!
-->Okay, aber PolynomialRoots ermittelt mir doch die Nullstellen einer Funktion, die auch wirklich welche hat. Meine hat ja nur eine theoretische. Der Ball kommt hinter den Lichtschranken zum stehen. Aus den Daten der Lichtschranken soll dann der "zukünftige" Endpunkt (Nullpunkt y-Achse) ermittelt werden.
Zitat:Mit den Minima-Funktionen in der Optimierungspalette kenne ich mich nicht aus - aber eine Schleife zu programmieren, die Nullstellen sucht und bei vorgegebener Genauigkeit abbricht, ist eigentlich eine typische Einsteigeraufgabe
--> Ich bin recht neu in LabVIEW drin, deshalb hab ich mich ja auch an euch gewendet
Weist du wie so eine Schleife aussehen könnte?
Mit freundlichen Grüßen
TK
Hallo Tobi,
Zitat:PolynomialRoots ermittelt mir doch die Nullstellen einer Funktion, die auch wirklich welche hat. Meine hat ja nur eine theoretische. Der Ball kommt hinter den Lichtschranken zum stehen. Aus den Daten der Lichtschranken soll dann der "zukünftige" Endpunkt (Nullpunkt y-Achse) ermittelt werden.
Du suchst den Punkt, wo der Ball liegen bleibt. Ob der Punkt nun in deinen Messwerten enthalten ist oder nicht, ist unerheblich - dieser Punkt ist durch die Nullstelle deiner Bewegungsfunktion definiert...
Zitat:Weist du wie so eine Schleife aussehen könnte?
Mal etwas Pseudocode:
Repeat until genauigkeit
...wenn sign(f(untere grenze)) <> sign(f(obere grenze))
...dann neue grenze = mitte(alte grenzen)
...sonst berechnungsfehler
end repeat
Zitat:Mal etwas Pseudocode:
Repeat until genauigkeit
...wenn sign(f(untere grenze)) <> sign(f(obere grenze))
...dann neue grenze = mitte(alte grenzen)
...sonst berechnungsfehler
end repeat
--> also ich versteh das wie folgt:
Repeat until genauigkeit
... wenn 0 (was ja meine untere grenze ist) <> aktueller y-wert
... dann neue grenze = mitte(alte grenzen) ???
...sonst berechnungsfehler
end repeat.
Kann man sich mit LabVIEW die Funktion zu einer generierten Kurve (bzw. Geraden) ermitteln lassen?