LabVIEWForum.de - Kompensationsprofil auf Messkurve anwenden

LabVIEWForum.de

Normale Version: Kompensationsprofil auf Messkurve anwenden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Moin Moin,

da hab ich endlich mal eine Frage fürs Forum.^_^

>> Wie kompensiert man eine Messkurve mit einer Nullkurve? Lösung ok, oder gibt es elegantere Wege?

Also... mein Vorgänger hat mir ein Programm hinterlassen, welches intensiven Gebrauch von Sequenzstrukturen und lokalen Variablen macht.Huh
Der Sinn des Programmes besteht darin, mit einem Ultraschallsensor den Abstand zu einer Messfläche aufzuzeichnen. Das Programm zeigt dann auch noch die Abstandskurve mit Absolutwerten an, was eigentilch keinen Sinnmacht, da es ja um die relative Änderung des Abstands geht (also erledige ich das gleich mit). Der Sensor wird dabei von einer Traverse über die Messfläche bewegt. Leider (und ich hab im Moment keine Lust das zu ändern) erfolgt die Bewegung und Messwertaufnahme in einer Forschleife. Der Sensor ruckelt also immer 3 mm vor und nimmt einen Wert auf.

Das große Manko hat sich allerdings jetzt erst gezeigt:
Die Traverse ist nicht optimal ausgerichtet oder verspannt eingebaut worden (ja da waren die firmen-eigenen Schlosser am Werk, frei nach dem Motto "viel Hebelarm hilft viel"). Die von mir aufgezeichnete Nullkurve zeigt einen reproduzierbaren Anstieg des Abstands auf dem ersten Meter des Messwegs, leider wurde vor lauter Sequenzrahmen und Variablen anscheinend vergessen einen Kompensation der Nullkurve in das Programm einzubauen.

So und hier komme ich dann ins Spiel...
Die Nullkurve muss von den eigentlichen Messkurven abgezogen werden.

Meine Idee sieht dann so aus: [list=1]
[*]Ich normiere meine Nullkurve auf Null, d.h. ich subtrahiere den ersten Messwert von allen Messwerten der Kurve.
Die normierte Kurve startet also im Nullpunkt und zeigt die relative Abstandsänderung (des Systems). Das speichere ich dann in einer Array-Konstanten ab.<>
[*]Dann normiere ich die Messkurven auf Null.<>
[*]Jetzt subtrahiere ich jeden Punkt meiner Messkurve mit dem entsprechenden Punkt der Nullkurve. Dann erhalte ich eine kompensierte, normierte Messkurve. Fertig.<>
[st]Bekanntlich sagt ein Bild mehr als tausend Worte, aber ohne ein bisschen Text wüsste ja auch Keiner was ich eigentlich will.Big Grin
Um euch aber nicht mit dem Sequenzrahmen-Dschungel zu belästigen, hab ich das mal in ein einfaches Beispiel verpackt.

Links: Messkurve im Moment, Rechts: Messkurve wie sie eigentlich sein sollte
[attachment=21038] [attachment=21039]

Die Messwerte werden im eigentlichen Programm innerhalb der Forschleife vom Sensor eingelesen, fürs Beispiel hab ich die Werte in ein Array gepackt.
"Messprogramm":
[attachment=21036]

Kompensation[SubVI]:
[attachment=21037]

Lv85_img[attachment=21041]
Lv85_img[attachment=21040]

So was meint ihr, kann man das so machen oder habt ihr einen bessere, intelligentere, einfachere, tollere, schönere, buntere Idee?

Gruß SeBa
Hab' zwar den technischen Hintergrund nicht so ganz verstanden, aber Dein Bsp. sieht doch gut aus und vor allem ist die Frage mal löblich gestellt. Top2 Das muss man auch mal erwähnen. Wink

Gruß Markus
Vom technischen Hintergrund mal abgesehen, gehts mir ja auch hauptsächlich um die Umstetzung der Kompensation. Ist das erste Mal das ich vor dieser Problematik stehe und da:google:keine generelle Vorgehenweise zum Begriff "Kompensationsprofil" (oder nennt man das anders?)rausrückt wollte ich mal nachfragen. Wink

Gruß SeBa

PS:
Ich stelle Fragen so, wie ich sie selbst gerne vorfinden würde.
Hab mal ein Bild gemalt:

Die zu messende Fläche kann beliebig durchhängen. Das Durchhängen messen wir als Abstand von Sensor zur Fläche.

Bewegt sich der Senor parallel über eine nicht durchhängende Fläche wäre der Durchhang null. Bei idealer Sensorbewegung kann ich für den Durchhang einer Fläche also einfach den Abstandswert des Sensors nehmen.

Der Sensor ist jetzt aber an einer Traverse befestigt und die hat eine Krümmung/Schieflage ect.
Also ist die gemessene Kurve eine Überlagerung aus Schieflage der Traverse und Durchhang der Fläche.

Um nur den Durchhang der Fläche zu bekommen, muss die Schieflage der Traverse abgezogen werden.
(Traverse bewegt Sensor in y-Richtung, Fläche hängt in z-Richtung durch)

[attachment=21049]


Hmm, hilft das der Vorstellungskraft weiter?

Gruß SeBa
Es hört sich alles sehr einfach an, ich verstehe trotzden nicht alles. Z.B kenne ich den Begriff Skew in etlichen Bedeutungen (s. Wikipedia), aber in diesem Zusammenhang kommt mir das komisch vor.
Da Du aber sagst, das VI funktioniert, dann muß man ja gar nichts verstehen, es geht nur darum, das Programm evtl zu vereinfachen.
Ja, es geht, allerdings: der Begriif "vereinfachen" reicht hier gar nicht aus, da das Progrämmchen auf eine unglaublich gigantische, umständliche Art realisiert wurde. Z.B.: Noch nie etwas davon gehört, daß man, um die Elemente zweier Arrays zu summieren, einfach das Additionssymbol verwenden kann?

[attachment=21053]
Lv86_img[attachment=21054]
' schrieb:Noch nie etwas davon gehört, daß man, um die Elemente zweier Arrays zu summieren, einfach das Additionssymbol verwenden kann?

Doch, aber die Messwerte werden ja zur Laufzeit erstellt und angezeigt, also muss ich den gemessenen Wert auch direkt kompensieren. Sonst müsste ich (nix anzeigen und) warten, bis die Messung beendet ist und es dann so machen wie du beschrieben hast. Da das Programm aber nicht auf meinem Mist gewachsen ist, möchte ich die Veränderungen so gering wie möglich halten (bis ich Zeit finde es komplett neu zu schreiben).

Zum Thema Skew... keine Ahnung warum das so heißt. Die Kollegen auf der anderen Seite der Welt nennen das so, daher nennen wir das auch so. Jaja, die liebe Firmenpolitik. Soll ja alles vergleichbar sein.Tongue

Gruß SeBa


Edit:
Ích glaube ich hätte es noch ausführlicher beschreiben sollen.
Also die kleine Forschleife, in der im Beispiel die Kompensation durchgeführt wird, ist im realen Programm vollgestopft mit Befehlen zur Traversenbewegung und dem Auslesen der Sensoren. Daran kann ich ohne weiteres nix ändern. Es wird also in jedem Schleifendurchlauf der Sensor ein Stück in y-Richtung bewegt und ein Messwert (Abstand Sensor -> Fläche in z-Richtung) aufgenommen. Der wird dann auch dirket auf den Plot geschickt.
Daher mein Ansatz zwischen Aufnahme-Messwert und Anzeige-Messwert ein KompensationsVI einzufügen.

Im Beispiel bedeutet das, das Kompensationswertearray existiert vollständig und zu jeder Zeit. Das Messwertearray gibt es eigentlich garnicht, ich habe es nur erstellt um die Messwertaufnahme (dank Autoindizierung) zu simulieren. Es ist also bei jedem Schleifendurchlauf nur der aktuelle Messwert, das Kompenstionsarray und die Position der Traverse bekannt, wobei ein Schleifendurchlauf die Traversenposition um einen Schritt inkrementiert.
' schrieb:Doch, aber die Messwerte werden ja zur Laufzeit erstellt und angezeigt, also muss ich den gemessenen Wert auch direkt kompensieren.
Ja, im Hinterkopf hatte ich auch diesen Verdacht, und ich hätte diese Möglichkeit einräumen sollen, statt mich über die vermeintliche Umständlichkeit des Programms aufzuplustern. Ich finde es immer noch besser, wenn ein vereinfachtes Programm erstellt wird und das zu einem Missverständnis führt, als wenn einem - wie es meist geschieht - das Originalprogramm in voller Länge vor die Füße geknallt wird.
Bei Gelegenhait schau ich mirs noch mal an, ob sich in dieser neuen Situation noch etwas vereinfachen läßt.
Gruß Ludwig
Referenz-URLs