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!
16.06.2015, 13:50 (Dieser Beitrag wurde zuletzt bearbeitet: 16.06.2015 14:04 von JohnnyJones.)
ich arbeite seit 3 Monaten erst an einem Programm, welches eine Fernfeldmessung für einen Laser ausführt.
Alles funktioniert, jedoch dauert es jedes Mal fürchterlich lange, bis die Messung abgeschlossen ist, da der Schrittmotor, an dem der Sensor angeschlossen ist, einfach den kompletten Messbereich abfährt. Und das in ca. 0,1 Grad Schritten.
Ziel ist es, dass der Sensor einen Schnelldurchlauf fährt und, dass das Programm aus den in diesem Durchlauf ermessenen Daten den Maximumwert (Spannungswert mit dazugehörigem Grad) heraussucht, diesen dann mit 0,1 multipliziert, damit dann die eigentliche Messung NUR zwischen dem unteren 10% Wert des Maximums und dem oberen 10% Wert des Maximums stattfindet.
Auf den Bildern ist die Vorgängerversion zu sehen. (Messbereichserfassung)
Ich schaffe es leider nicht, dieses Ziel in die Tat umzusetzen.
(16.06.2015 13:50 )JohnnyJones schrieb: Ziel ist es, dass der Sensor einen Schnelldurchlauf fährt und, dass das Programm aus den in diesem Durchlauf ermessenen Daten den Maximumwert (Spannungswert mit dazugehörigem Grad) heraussucht, diesen dann mit 0,1 multipliziert, damit dann die eigentliche Messung NUR zwischen dem unteren 10% Wert des Maximums und dem oberen 10% Wert des Maximums stattfindet.
Hallo Johnny,
Wie sieht die Datenstruktur deiner Messdaten aus? in der Arraypalette findest du die Funktion zur Maximalwertsuche.
Ansonsten müsstest du uns mit einem Bildchen oder einem VI behelligen.
Die Messdaten scheinen also als 1D-Array von Floatwerten vorzuliegen. In der Arraypalette findest du die Min/Max-Suche und in dr Vergleichspalette die Limitprüfung.
Wenn du die Messdaten in Korrelation mit den Schritten der Verfahreinrichtung benötigst, müsstest du diese Schritte auch mit abspeichern - im einfachsten Fall als paralleles 1D-Array zu deinen Messwerten. Die Min/Max.-Suche im Array gibt dir auch den Fundindex zurück mit dem du dann dein anderes Array indizieren kannst.
Spannend ist bei solchen Optimierungen auch immer die eigentliche Messaufgabe. Denn normalerweise kann man auch 180° mit 0,1°-Schritten in <5 sek. scannen. (Schnell genug für zwei orthogonale Scans, aber langsam wenn es ein ganzes 2D-Profil werden soll.) Deshalb noch folgende Gegenfragen:
- wie groß ist denn in etwa der zu erwartende maximale Fernfeldwinkel?
- soll nur eine Achse oder beide Achsen oder eine ganze Matrix abgescannt werden?
- wie lange dauert denn die Erfassung eines einzelnen Wertes?
=> Hat zwar alles nichts mit der Ursprungsfrage, aber dafür mit dem "Ursprungsanliegen" zu tun.
(17.06.2015 14:22 )Nordvestlys schrieb: Spannend ist bei solchen Optimierungen auch immer die eigentliche Messaufgabe. Denn normalerweise kann man auch 180° mit 0,1°-Schritten in <5 sek. scannen. (Schnell genug für zwei orthogonale Scans, aber langsam wenn es ein ganzes 2D-Profil werden soll.) Deshalb noch folgende Gegenfragen:
- wie groß ist denn in etwa der zu erwartende maximale Fernfeldwinkel?
- soll nur eine Achse oder beide Achsen oder eine ganze Matrix abgescannt werden?
- wie lange dauert denn die Erfassung eines einzelnen Wertes?
=> Hat zwar alles nichts mit der Ursprungsfrage, aber dafür mit dem "Ursprungsanliegen" zu tun.
Hallo,
das hört sich auch interessant an. Darüber habe ich, wenn ich ehrlich bin, auch noch nicht nachgedacht.
Antworten:
- ca. 25-30 Grad umfasst der Bereich, in dem die Laser max. "streuen" (genau weiß ich das nicht, da ich nicht weiß, welche Laser ich später zu testen habe.)
- eine einzige Achse wird nur abgescannt
- die Erfassung selber dauert nicht lange, jedoch fährt der Schrittmotor z.B.0,1°, bleibt stehen, misst und fährt weiter, usw. (irgendwie schlecht gelöst, wenn ich an deinen Lösungsansatz denke)
(18.06.2015 13:56 )JohnnyJones schrieb: - eine einzige Achse wird nur abgescannt
Naja, dann ist das ganze (zeitlich) ja schonmal relativ entspannt, und es kommt nicht auf jede einzelne Sekunde an.
(18.06.2015 13:56 )JohnnyJones schrieb: - die Erfassung selber dauert nicht lange, jedoch fährt der Schrittmotor z.B.0,1°, bleibt stehen, misst und fährt weiter, usw. (irgendwie schlecht gelöst, wenn ich an deinen Lösungsansatz denke)
Nur mal so als Anregung:
- Man könnte ausserhalb vom Messbereich beschleunigen und abbremsen, dazwischen kontinuierlich aufzeichnen und beides (Verfahrweg + Messwerte) anschliessend zuordnen.
(Schnell aber evtl. zu ungenau. Insbesondere wenn die absolute Position wichtig ist.)
- Oder der Schrittmotor fährt kontinuierlich und die Schrittmotorsteuerung triggert in wählbaren Intervallen die Messwerterfassung. (Genau und flexibel, hängt aber von Steuerung ab)
- Oder bei jedem (Mikro-)Schritt ein Messwert, unabhängig vom geforderten Abstand der Messungen. Mein Favorit, weil man dann Auflösung und Geschwindigkeit "automatisch" maximal sind. (In Abhängigkeit von der gewählten Schrittweite.) Evtl. etwas Triggerelektronik nötig.
...vorausgesetzt, dass die Messwerterfassung deutlich schneller ist (Fotodiode), als ein Schritt dauert....
(Okay, bei therm. Messverfahren bleibt es wohl langsam.)
(18.06.2015 13:56 )JohnnyJones schrieb: - eine einzige Achse wird nur abgescannt
Naja, dann ist das ganze (zeitlich) ja schonmal relativ entspannt, und es kommt nicht auf jede einzelne Sekunde an.
(18.06.2015 13:56 )JohnnyJones schrieb: - die Erfassung selber dauert nicht lange, jedoch fährt der Schrittmotor z.B.0,1°, bleibt stehen, misst und fährt weiter, usw. (irgendwie schlecht gelöst, wenn ich an deinen Lösungsansatz denke)
Nur mal so als Anregung:
- Man könnte ausserhalb vom Messbereich beschleunigen und abbremsen, dazwischen kontinuierlich aufzeichnen und beides (Verfahrweg + Messwerte) anschliessend zuordnen.
(Schnell aber evtl. zu ungenau. Insbesondere wenn die absolute Position wichtig ist.)
- Oder der Schrittmotor fährt kontinuierlich und die Schrittmotorsteuerung triggert in wählbaren Intervallen die Messwerterfassung. (Genau und flexibel, hängt aber von Steuerung ab)
- Oder bei jedem (Mikro-)Schritt ein Messwert, unabhängig vom geforderten Abstand der Messungen. Mein Favorit, weil man dann Auflösung und Geschwindigkeit "automatisch" maximal sind. (In Abhängigkeit von der gewählten Schrittweite.) Evtl. etwas Triggerelektronik nötig.
...vorausgesetzt, dass die Messwerterfassung deutlich schneller ist (Fotodiode), als ein Schritt dauert....
(Okay, bei therm. Messverfahren bleibt es wohl langsam.)
Viel Spaß beim tüfteln!
Hi,
schonmal Danke.
Es handelt sich bei der Fotodiode um die DET36A/M von ThorLabs. Ich würde es gerne so versuchen, dass die eigentliche Messroutine einfach viel schneller ist, und anschließend die nicht benötigten Werte aus dem gespeicherten Array "abschneide".
Ich füge Bilder der eigentlichen Messroutine an.
Für meinen Geschmack viel (!) zu viele Sequenzen! Und dann auch noch Sequenzen in Sequenzen von Sequenzen. Und die auch noch gestapelt. Und viele lokale Veriablen. Und das ganze als Bilder anstatt als VI.
=> Mach doch erstmal aus den vielen gestapelten Sequenzen eine einzige flache. Dann ersetze möglichst viele lokale Variablen durch Drähte und räume das ganze so auf, dass es von der Höhe her auf einen Bildschirm passt und man nur noch nach rechts und links scrollen muss.
Wenn dabei der Datenfluss halbwegs konsequent von links nach rechts geht erhöht das den Überblick, das Verständnis und die Fehlersuchmöglichkeiten ganz enorm.
Und wenn Du das als VI hochlädst (und nicht als Bild) können andere das noch besser verstehen und helfen - oder gleich Verbesserungsvorschläge machen.
Was ich aus Deinen Bildern glaube erkennen zu können ist, dass der komplette Ablauf (start-antwort-verfahre-antwort-stop-antwort-messung-antwort-start-....) streng sequentiell abläuft. Da summiert sich schnell jede Millisekunde. Übersichtlicher (und vermutlich schneller) wäre eine Schleife mit verschiedenen Cases für die Motorsteuerung und eine Schleife zur Messwertaufnahme. Die Synchronisierung erfolgt dann entweder über Labview oder per Trigger-Leitung.
Zur Messung an sich noch folgender Hinweis: Falls Du nicht den Laser drehst (oder die Fotodiode auf einem Goniometer verfährst), sondern eine lineare Achse benutzt, solltest Du die Winkelabhängigkeit der Messung prüfen. (Bei 1-2 Grad vermutlich egal, bei 20-30 Grad vermutlich relevant.)
Bei linearer Verschiebung haben die Randstrahlen nicht nur einen längeren Weg als die mittleren Strahlen, sondern treffen auch noch schräg auf den Detektor auf. Also mehr Reflexion und weniger Absorption / Detektion.
(24.06.2015 14:40 )Nordvestlys schrieb: Für meinen Geschmack viel (!) zu viele Sequenzen! Und dann auch noch Sequenzen in Sequenzen von Sequenzen. Und die auch noch gestapelt. Und viele lokale Veriablen. Und das ganze als Bilder anstatt als VI.
=> Mach doch erstmal aus den vielen gestapelten Sequenzen eine einzige flache. Dann ersetze möglichst viele lokale Variablen durch Drähte und räume das ganze so auf, dass es von der Höhe her auf einen Bildschirm passt und man nur noch nach rechts und links scrollen muss.
Wenn dabei der Datenfluss halbwegs konsequent von links nach rechts geht erhöht das den Überblick, das Verständnis und die Fehlersuchmöglichkeiten ganz enorm.
Und wenn Du das als VI hochlädst (und nicht als Bild) können andere das noch besser verstehen und helfen - oder gleich Verbesserungsvorschläge machen.
Was ich aus Deinen Bildern glaube erkennen zu können ist, dass der komplette Ablauf (start-antwort-verfahre-antwort-stop-antwort-messung-antwort-start-....) streng sequentiell abläuft. Da summiert sich schnell jede Millisekunde. Übersichtlicher (und vermutlich schneller) wäre eine Schleife mit verschiedenen Cases für die Motorsteuerung und eine Schleife zur Messwertaufnahme. Die Synchronisierung erfolgt dann entweder über Labview oder per Trigger-Leitung.
Zur Messung an sich noch folgender Hinweis: Falls Du nicht den Laser drehst (oder die Fotodiode auf einem Goniometer verfährst), sondern eine lineare Achse benutzt, solltest Du die Winkelabhängigkeit der Messung prüfen. (Bei 1-2 Grad vermutlich egal, bei 20-30 Grad vermutlich relevant.)
Bei linearer Verschiebung haben die Randstrahlen nicht nur einen längeren Weg als die mittleren Strahlen, sondern treffen auch noch schräg auf den Detektor auf. Also mehr Reflexion und weniger Absorption / Detektion.
Hallo,
okay ich verstehe. Das Problem ist ich wurde als blutiger Anfänger an das nicht vernünftig laufende Programm gesetzt um es zu verbessern. Nicht gerade der Hammer als "erstes Projekt".
Ich pack jetzt hier mal das VI dran, damit ihr euch das mal so anschauen könnt.