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!
Und zwar: Ich habe ein VI, welches den Schwellstrom eines Lasers ermittelt. Da Laser ja temperaturabhängig sind, soll ich nun eine T0 Messung hinzufügen. Das heißt: Ich stelle meine Starttemperatur, meine Endtemperatur und die Schrittweite ein. Pro Temperatur soll die Messung des Schwellstroms durchgeführt werden und im Endeffekt dann aus den Temperaturmessungen T0 ermittelt werden.
Ich weiß nun allerdings nicht, wie ich meinem VI sage, dass er nach jeder Messung des Schwellstroms die Temperatur um den gegebenen Schritt erhöht, erneut misst und im Endeffekt die T0 Messung macht (also quasi einen Fit über alle Messwerte?).
Kann mir von euch jemand vielleicht einen Denkanstoß geben? Könnte es vielleicht mit einem Schieberegister gehen, wo jedes mal abgefragt wird, ob die aktuelle Temperatur noch geringer ist, als die Endtemperatur und wenn das wahr ist, die Messung wiederholt wird?
Zitat:wie ich meinem VI sage, dass er nach jeder Messung des Schwellstroms die Temperatur um den gegebenen Schritt erhöht
Einfache Antwort: die Temperatur in einem Schieberegister halten und in jeder Iteration die Schrittweite dazu addieren...
Zitat:Könnte es vielleicht mit einem Schieberegister gehen, wo jedes mal abgefragt wird, ob die aktuelle Temperatur noch geringer ist, als die Endtemperatur und wenn das wahr ist, die Messung wiederholt wird?
Jetzt wird es komisch. ich denke, du gibst die Temperatur vor? Jetzt plötzlich musst du doch wieder Temperaturen abfragen???
Vielleicht so: du sendest den neuen T-Sollwert an dein Stellgerät (Ofen?) und programmierst eine Schleife, in der du wartest, bist die gewünschte Temperatur erreicht wurde. Dann wird der Laser vermessen...
Tipp: Schau dir das Konzept einer Statemachine an. Scheint (nach meiner Interpretation) zu passen...
Zitat:Könnte es vielleicht mit einem Schieberegister gehen, wo jedes mal abgefragt wird, ob die aktuelle Temperatur noch geringer ist, als die Endtemperatur und wenn das wahr ist, die Messung wiederholt wird?
Jetzt wird es komisch. ich denke, du gibst die Temperatur vor? Jetzt plötzlich musst du doch wieder Temperaturen abfragen???
Hallo GerdW, danke für deine Antwort. Das war vielleicht etwas undeutlich formuliert.
Etwas ausführlicher: Ich gebe eine Starttemperatur (z.B. 10°C), eine Endtemperatur (z.B. 40°C) und die Schrittweite (z.B. 3°C). Dann starte ich das VI. Nun soll die erste Messung des Schwellstroms bei T=10°C durchgeführt werden. Da ich ja komplett bis 40°C hochmessen möchte, soll nun abgefragt werden, ob die Temperatur bereits 40°C beträgt. Wenn dies nicht so ist, soll die Temperatur durch die Schrittweite von 3°C auf T=13°C erhöht werden und erneut der Schwellstrom gemessen werden. Dies soll dann eben so oft wiederholt werden, bis die Messung bei 40°C durchgeführt wurde und anschließen soll die Messung beendet werden. Daher kam der Ansatz mit der Abfrage, ob die aktuelle Temperatur noch geringer ist, alsdie Endtemperatur, denn irgendwoher muss das VI ja wissen, dass es weiterhin die Temperatur hochregeln soll.
Ist das nun etwas deutlicher?
Und noch eine kleine Frage dazu: Wenn ich nicht möchte, dass mein Programm die Temperaturmessung durchführt, sondern lediglich nur den Schwellstrom messen soll, für eine Temperatur, kann ich dies dann durch einen Boolean Knopf im Frontpanel möglich machen?
Grüße,
Epion
Nachtrag: Ich denke die Statemachine ist ein guter Tipp. So in etwa war es gemeint. Und im Anhang kurz das zusammengeklickt, wie ich mir vorstelle, dass es funktionieren könnte?
du könntest verschiedene States programmieren, u.a.:
- Temperatur vorgeben
- warten, bis Temperatur eingestellt ist
- Messung durchführen
- Abbruchbedingung prüfen
Man kann für jeden State Fehler- und Abbruchbedingungen prüfen und immer entscheiden, wie man weitermachen will. Außerdem ist es einfach, neue States (z.B. weitere Messungen) unterzubringen...
die aktuelle Temperatur würde ich eher als Parameter denn als State-Selector nehmen. Erstelle dir für deine States ein (typdefiniertes) Enum - du findest Beispiele hier im Forum als auch im Beispielfinder!
ich habe mich nun ein bisschen in das Thema Statemachine eingelesen und auch für mich nochmal überlegt, wie ich das Problem gerne lösen würde und bin allerdings zu keiner Lösung gekommen.
Könntest du mir vielleicht noch einen Tipp geben, oder schnell etwas zusammen basteln?
LG,
Epicon
07.03.2013, 09:36 (Dieser Beitrag wurde zuletzt bearbeitet: 07.03.2013 09:38 von GerdW.)
schnell was zusammenbasteln bringt dir nichts, da ich es nur als LV8 speichern kann. Mit deinem LV6 hängst du leider >10 Jahre hinterher...
Frag doch mal freundlich bei deinem Chef nach. Es wird auch keiner mehr mit TurboPascal in der DOS-Umgebung programmieren, wenn er als Betriebssystem ein Win7 oder gar schon Win8 verwendet!
Statemachines bauen sich am einfachsten, wenn man als Stateselector ein (typdefiniertes) Enum verwendet. In deinem Fall würden sich die States Init, SetTemp, WaitForTemp, Measurement anbieten.
- Bei SetTemp wird der neue Temperaturwert berechnet und eingestellt. Der Temperaturwert wird in einem Schieberegister gehalten.
- Bei WaitForTemp wird dein Ofen (?) abgefragt, ob die gewünschte Temperatur erreicht ist. Dann wird entschieden, ob man weiterhin den State WaitForTemp oder doch den State Measurement aufruft.
- Measurement und Init sind wohl selbsterklärende State-Namen...