Analyse von Kraftsensor-Messwerten mit MATLAB zur Orts ... - Brichzin
Analyse von Kraftsensor-Messwerten mit MATLAB zur Orts ... - Brichzin
Analyse von Kraftsensor-Messwerten mit MATLAB zur Orts ... - Brichzin
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
2.1 Einführung - Aufbau und Funktion 1<br />
Gymnasium Ottobrunn<br />
Seminarfach Informatik<br />
im Schuljahr 2006/07<br />
<strong>Analyse</strong> <strong>von</strong> <strong>Kraftsensor</strong>-<strong>Messwerten</strong><br />
<strong>mit</strong> <strong>MATLAB</strong> ® <strong>zur</strong> <strong>Orts</strong>- und<br />
In Kooperation <strong>mit</strong> der<br />
Impulsbestimmung<br />
Vorgelegt <strong>von</strong>:<br />
Martin Pfaller<br />
Waldparkstraße 39c<br />
85521 Riemerling<br />
am 17.08.2007<br />
Prüfer: Peter <strong>Brichzin</strong>, StR<br />
Fakultät für Elektrotechnik und Informationstechnik,<br />
Institut für Mathematik und Datenverarbeitung<br />
Betreuung: Prof. Dr.-Ing. Werner Wolf
2.1 Einführung - Aufbau und Funktion 2<br />
Hier<strong>mit</strong> erkläre ich, Martin Pfaller, geboren am 19.08.1989 in München, dass ich<br />
die vorliegende Seminararbeit selbst und nur unter Verwendung der angegebenen<br />
Quellen verfasst habe.<br />
……………………………………….….…. …………………………..<br />
Datum, Ort Martin Pfaller<br />
Besonderer Dank gilt Herrn Prof. Dr.-Ing. habil. Werner Wolf, Herrn Josef<br />
Dochtermann und Herrn Wolfgang Weber, die durch ihre Unterstützung diese<br />
Arbeit überhaupt erst ermöglicht haben.<br />
II.
2.1 Einführung - Aufbau und Funktion 3<br />
Zusammenfassung<br />
Diese Seminararbeit stellt einen Arbeitsverlauf dar, der beschreibt, wie, aus den<br />
sechs <strong>Kraftsensor</strong>-<strong>Messwerten</strong> einer Degenfechtstation der Ort und die Stärke<br />
eines darauf einwirkenden Impulses bestimmt werden kann. Um dieses zu<br />
bewerkstelligen, wurden zuerst sowohl statische als auch dynamische Messungen<br />
durchgeführt. Die Messwerte wurden <strong>mit</strong> dem Programm <strong>MATLAB</strong> ® analysiert<br />
und ausgewertet, um daraus Rückschlüsse auf dieses System zu ziehen. Aus den<br />
<strong>Messwerten</strong> wurde durch die Informationen der Auswertung ein mathematisches<br />
Modell des Systems erstellt, das es ermöglicht, dieses zu berechnen. Die<br />
Ergebnisse dieser Arbeit sind verschiedene <strong>MATLAB</strong> ® -Programme <strong>zur</strong><br />
automatischen Auswertung <strong>von</strong> Messungen und ein Programm <strong>zur</strong> Berechnung<br />
der oben gestellten Anforderungen.<br />
III.
2.1 Einführung - Aufbau und Funktion 4<br />
Inhaltsverzeichnis<br />
1. Einführung ....................................................................................................... 5<br />
2. Der Versuch ..................................................................................................... 6<br />
2.1. Aufbau und Funktion ......................................................................................... 6<br />
2.2. Vorgehensweise bei der Problemstellung ........................................................ 10<br />
3. Statische Messung ......................................................................................... 12<br />
3.1. Durchführung der Messung ............................................................................. 12<br />
3.2. Auswertung und Ergebnisse der Messung ....................................................... 16<br />
3.3. Erklärung des Programms <strong>zur</strong> automatischen Messauswertung ...................... 35<br />
4. Dynamische Messung .................................................................................... 44<br />
4.1. Durchführung der Messung ............................................................................. 44<br />
4.2. Auswertung und Ergebnisse der Messung ....................................................... 44<br />
4.3. Probleme bei der Berechnung .......................................................................... 49<br />
5. Die Ortberechnung ........................................................................................ 50<br />
5.1. Berechnung durch zwei Sensorgleichungen .................................................... 50<br />
5.2. Berechnung durch mehrere Sensorgleichungen ............................................... 53<br />
5.3. Berechnung bei variabler aufgebrachter Kraft ................................................. 54<br />
5.4. Berechnung <strong>mit</strong> einer Linearkombination ....................................................... 55<br />
6. Ergebnisse und Ausblick ............................................................................... 57<br />
7. Anhang .......................................................................................................... 59<br />
7.1. Abbildungsverzeichnis ..................................................................................... 59<br />
7.2. Quelltext <strong>MATLAB</strong> ® -Programme ................................................................... 61<br />
7.2.1. pfaller_auswertung_dynamisch.m ........................................................................... 61<br />
7.2.2. pfaller_auswertung_messdaten.m ............................................................................ 71<br />
7.2.3. pfaller_auswertung_statisch.m ................................................................................ 93<br />
7.2.4. pfaller_flaechengleichung_2_funktionen.m ............................................................ 99<br />
7.2.5. pfaller_gleichung_lin.m ......................................................................................... 102<br />
7.2.6. pfaller_gleichung_pol.m ........................................................................................ 102<br />
7.2.7. pfaller_linearkombination_felder.m ...................................................................... 103<br />
7.2.8. pfaller_ortberechnung_impuls.m ........................................................................... 113<br />
7.2.9. pfaller_solve_linearkombination.m ....................................................................... 125<br />
7.2.10. pfaller_solve_sensorgleichungen.m .................................................................. 131<br />
7.2.11. pfaller_solve_sensorgleichungen_felder.m ....................................................... 134
2.1 1.<br />
Einführung - Aufbau und Funktion 5<br />
1. Einführung<br />
Gegenstand dieser Seminararbeit ist die Messdurchführung und Auswertung <strong>von</strong><br />
<strong>Messwerten</strong> aus <strong>Kraftsensor</strong>en. Hintergrund dieser Aufgabe ist eine Apparatur der<br />
Universität der Bundeswehr München, deren Aufgabe es ist, Degenfechter auf<br />
ihre Reaktionsschnelligkeit und Treffgenauigkeit zu trainieren. Die<br />
Degenfechtstation wurde bereits im Rahmen einer Diplomarbeit erstellt, jedoch<br />
besaß sie bislang ungenutzte <strong>Kraftsensor</strong>en, die für die Versuchsdurchführung<br />
nicht benötigt wurden. Für die Auswertung des Fechtversuches werden zum einen<br />
der Ort des Eintreffens, zum anderen der Impuls des Degenschlags benötigt. Diese<br />
beiden Werte nur <strong>mit</strong> Hilfe der <strong>Kraftsensor</strong>en zu bestimmen war die Anforderung<br />
an das Ergebnis dieser Seminararbeit. Diese Aufgabe verlangte als ersten Schritt<br />
<strong>mit</strong>tels selbst durchgeführter Messungen zunächst Informationen über das System<br />
zu sammeln, sie in einem zweiten Schritt auszuwerten und darzustellen, und<br />
letztendlich die oben genannten Anforderungen durch das Erstellen eines eigenen<br />
Programms in <strong>MATLAB</strong> ® zu erfüllen. Die Themenstellung verbindet die Inhalte<br />
der Fachgebiete der Physik, der Mathematik und der Informatik. Die Physik stellt<br />
die Grundlagen des Versuches, wie die eines Hebelarmes oder eine Impulses, <strong>zur</strong><br />
Verfügung. Zum Lösen dieser Grundlagen greift die Physik wiederum auf die<br />
Werkzeuge der Mathematik <strong>zur</strong>ück, die da<strong>mit</strong> genauso <strong>zur</strong> <strong>Analyse</strong> und<br />
Berechnung der Messdaten beiträgt. Bewerkstelligt werden diese Aufgaben aber<br />
erst durch die Informatik, hier durch das Programm <strong>MATLAB</strong> ® , das <strong>mit</strong> seiner<br />
matrizenorientierten Arbeitsweise genau für Probleme dieser Art ausgelegt ist und<br />
auch in der Praxis für diese Zwecke angewandt wird.
2.1 Der Versuch - Aufbau und Funktion 6<br />
2. Der Versuch<br />
2.1. Aufbau und Funktion<br />
11<br />
Abbildung 2-1: Die Degenfechtstation<br />
7<br />
5 6<br />
3 4<br />
9<br />
1<br />
2<br />
1) Sensor ll<br />
2) Sensor lr<br />
3) Sensor ml<br />
4) Sensor mr<br />
5) Sensor ul<br />
6) Sensor ur<br />
7) horizontales<br />
Lichtgitterpaar<br />
8) vertikales<br />
Lichtgitterpaar<br />
9) Laser<br />
10) Ultraschall-<br />
sensor<br />
11) Videoprojektor<br />
Das Kernstück der Degenfechtstation ist eine ca. 80 cm breite und ca. 190 cm<br />
hohe Plexiglasplatte, die in einen Aluminiumrahmen eingepasst ist (siehe<br />
Abbildung 2-1). Sie hat die Aufgabe, die Schläge eines Fechters auf ein, <strong>mit</strong><br />
einem Videoprojektor (11) aufprojiziertes Ziel aufzunehmen und ist zu diesem<br />
Zweck in einem senkrecht stehenden Stahlrahmen über sechs <strong>Kraftsensor</strong>en<br />
aufgehängt. Vier dieser Sensoren befinden sich an den kurzen Seiten der<br />
rechteckigen Platte, jeweils zwei an den oberen und unteren Seiten, ca. 15 cm <strong>von</strong><br />
den Ecken entfernt. Die restlichen beiden Sensoren befinden sich in der Mitte der<br />
langen Seiten des Rechtecks, sind jedoch um 180° um ihre Längsachse verdreht<br />
eingebaut und werden deshalb bei der Messaufzeichnung automatisch invertiert.<br />
Die im folgenden verwendeten Sensorbezeichnungen lauten „ll“ („lower left“) (1),<br />
für den Sensor in der Nähe der linken unteren Ecke, „lr“ („lower right“) (2), für<br />
den Sensor in der Nähe der rechten unteren Ecke, „ml“ („middle left“) (3), für den<br />
Sensor in der Mitte der linken langen Rechteckseite, „mr“ („middle right“) (4), für<br />
den Sensor in der Mitte der rechten langen Rechteckseite, „ul“ („upper left“) (5),<br />
8<br />
10
2.1 Der Versuch - Aufbau und Funktion 7<br />
für den Sensor in der Nähe der linken oberen Ecke und „ur“ („upper right“) (6),<br />
für den Sensor in der Nähe der rechten oberen Ecke.<br />
Abbildung 2-2: Eine Wägezelle (Sensor mr)<br />
Die Art der <strong>Kraftsensor</strong>en ist eine Wägezelle (siehe Abbildung 2-2). Sie hat diese<br />
Bezeichnung durch die Anwendung in Waagen, wo die Schwerkraft einer Masse<br />
er<strong>mit</strong>telt wird, und besteht aus einem Kraftaufnehmer aus Aluminium, der sich bei<br />
der Einwirkung eines Gewichts minimal verformt. Diese Verformung wird über<br />
einen Dehnungsmessstreifen, der bei einer Deformation seinen elektrischen<br />
Widerstand verändert, gemessen und da<strong>mit</strong> in ein elektrisches Signal<br />
umgewandelt.<br />
Auf dem äußeren Stahlrahmen sind an jeder Seite Infrarotlichtgitter montiert ((7)<br />
und (8)), die jeweils auf die gegenüberliegende Seite ausgerichtet sind. Die<br />
einzelnen Fotodioden werden ständig <strong>mit</strong> einer Frequenz <strong>von</strong> 100Hz abgetastet,<br />
um zu registrieren, ob diese das Lichtsignal der gegenüberliegenden Leuchtdioden<br />
erhalten oder dieses durch einen Gegenstand im Lichtstrahl blockiert ist. Für das<br />
Verständnis der nachfolgenden Diagramme ist es wichtig, sich in Erinnerung zu<br />
behalten, dass der Ursprung des Koordinatensystems des Lichtgitters auf der dem<br />
Fechter zugewandten Seite rechts unten liegt. Schlägt nun der Fechter <strong>mit</strong> seinem<br />
Degen auf die Platte, wird der Lichtstrahl eines horizontalen und vertikalen<br />
Diodenpaares unterbrochen, was <strong>von</strong> der Hardware des Gitters registriert und als<br />
Ort des Eintreffens ausgegeben wird. Zusätzlich ist oben auf dem Stahlrahmen<br />
<strong>mit</strong>tig ein Ultraschall Abstandssensor angebracht (10), des Weiteren gibt es unten<br />
in der Mitte, knapp über dem Fußboden, einen Laser (9) <strong>zur</strong> Erfassung des<br />
Ausfallschrittes, den der Fechter beim Angriff auf die Platte ausführt. Auf der<br />
dem Fechter abgewandten Seite der Apparatur ist ein lichtempfindlicher Sensor<br />
angebracht, der den Zeitpunkt registriert, zu dem das Bildsignal für den Fechter<br />
sichtbar wird. Dies ist nötig, da es auf dem Weg des Bildsignals durch die<br />
Grafikkarte des angeschlossenen Computers bis hin zum Videoprojektor
2.1 Der Versuch - Aufbau und Funktion 8<br />
Verzögerungen geben kann, und diese so<strong>mit</strong> die Messung der Reaktionszeit des<br />
Fechters verfälschen würden.<br />
Um einen stabilen Stand der Apparatur zu gewährleisten und ein Nachgeben des<br />
Rahmens bei einwirkenden Impulsen zu verhindern, ist der Stahlrahmen, an dem<br />
die Plexiglasplatte aufgehängt ist, <strong>mit</strong> einem zum Unterboden parallelen<br />
Stahlrahmen, der durch vier Saugnäpfe an den Ecken am Boden befestigt ist,<br />
verschweißt und zusätzlich zweifach daran abgestrebt. Auf diesem Bodenrahmen<br />
befindet sich auf der Seite hinter der Plexiglasplatte eine Holzplatte <strong>mit</strong> der<br />
Messelektronik.<br />
5 4 1 3<br />
6<br />
Abbildung 2-3: Die Messelektronik<br />
Die Anschlusskabel der sechs Sensoren werden zunächst über BNC-<br />
Verbindungen in zwei Messverstärker (siehe Abbildung 2-3 (1) und (2)) geführt<br />
(ein Verstärker verarbeitet vier Kanäle), wo über zwei Potentiometer (6) pro<br />
Kanal zum einen „Offset“, die Nullstellung des Sensors, und zum anderen „Gain“,<br />
der Grad der Verstärkung des Signals, reguliert werden können. Diese Verstärker<br />
wurden jedoch während der Messarbeiten durch einen neuen ersetzt, mehr dazu in<br />
Kapitel 3.1. Weiterhin gibt es eine Hardware <strong>zur</strong> Verarbeitung der<br />
Lichtgittersignale (4) und einen Lautsprecher (5) <strong>zur</strong> Signalisierung eines<br />
Treffers. Alle Sensorkanäle laufen aus den Verstärkern in einem<br />
Computerinterface (3) zusammen, welches über eine Sch<strong>mit</strong>tstelle <strong>mit</strong> dem<br />
Computer verbunden ist. Dort ist das Programm DIAdem ® <strong>von</strong> National<br />
Instruments installiert, das es ermöglicht, per Drag-and-Drop eine Oberfläche und<br />
die dahinter stehende Verarbeitung der Messkanäle für die Durchführung <strong>von</strong><br />
Messungen zu erstellen. Verwendet wurden zwei verschiedene Messprogramme,<br />
2<br />
1) Messverstärker 1<br />
2) Messverstärker 2<br />
3) Computerinterface<br />
4) Lichtgitterhardware<br />
5) Lautsprecher<br />
6) Potentiometer
2.1 Der Versuch - Aufbau und Funktion 9<br />
für statische und dynamische Messungen, mehr dazu in dem Kapitel 3.1 bzw. 4.1.<br />
Diese Programme sind nicht Teil der Seminararbeit, sondern wurden bereits fertig<br />
vom Labor <strong>zur</strong> Verfügung gestellt.
2.2 Der Versuch - Vorgehensweise bei der Problemstellung 10<br />
2.2. Vorgehensweise bei der Problemstellung<br />
Bei Aufgabenstellungen, die, wie in diesem Fall, ein völlig unbekanntes System,<br />
die Degenfechtstation, behandeln, ist es essentiell für die weitere Arbeit, zunächst<br />
möglichst viele Informationen über das System aus Messungen zu erhalten. Zu<br />
diesem Zweck wurde zunächst versuchsweise die obere Hälfte der Platte <strong>mit</strong> einer<br />
konstanten Kraft vermessen, auch <strong>mit</strong> dem Nebeneffekt besser <strong>mit</strong> dem<br />
Messvorgang und der Apparatur vertraut zu werden und diese gegebenenfalls zu<br />
modifizieren, wie dies bei der späteren Einführung eines Messverstärkers <strong>mit</strong><br />
automatischer Offsetkorrektur geschehen ist. Die nächste Aufgabe bestand darin,<br />
die große Menge an gesammelten Daten nach den gewünschten Gesichtspunkten,<br />
die Messwerte der Mess- und Ruhepunkte, zu filtern und auszugeben. Aufgrund<br />
leichter Bedienbarkeit, einfachem Umgang <strong>mit</strong> den Messdaten und Erfahrungen<br />
im Umgang <strong>mit</strong> dem Programm wurden die Daten zunächst in verschiedensten<br />
Formen in Microsoft Office Excel 2003 dargestellt und ausgewertet. Für den<br />
weiteren Weg, <strong>mit</strong> dem Ziel den Ort aus den Kraftwerten berechnen zu können,<br />
boten sich zwei Lösungsmöglichkeiten an: Zum einen ein theoretisches<br />
physikalisches Grundmodell zusammenzustellen und anhand der Messungen nur<br />
noch die plattenspezifischen Konstanten zu er<strong>mit</strong>teln, oder aber selbst zu<br />
versuchen, die gemessenen Daten in ein oder mehrere mathematische Modelle zu<br />
fassen. Die Entscheidung fiel auf den zweiten Weg, da die erste Methode nach<br />
längeren Recherchen aufgrund ihrer Komplexität ausschied und den Umfang einer<br />
Facharbeit weit übersteigen würde, bzw. generell die Möglichkeit einer<br />
analytischen Lösung des Problems, eine Platte <strong>mit</strong> sechs beliebig verteilten<br />
Auflagepunkten, nicht garantiert werden konnte, da Problemstellungen dieser Art<br />
in der Praxis üblicherweise <strong>mit</strong> der Finiten Elemente Methode gelöst werden. Die<br />
Herausforderung war nun, die einzelnen Sensorkurven in Gleichungen zu fassen,<br />
genaueres dazu in Kapitel 3.2. Als es möglich war, den Ort aus den vorher<br />
gesammelten Messdaten zu berechnen, war der nächste Schritt, diese Berechnung<br />
auch bei verschiedenen einwirkenden Kräften möglich zu machen, weswegen die<br />
Platte erneut, aber diesmal jedoch komplett, <strong>mit</strong> einem anderen Raster und vier<br />
verschiedenen Kräften, vermessen wurde. Die letzte Erweiterung des Programms<br />
bestand schließlich darin, vor die Ortberechnung einen Algorithmus<br />
hinzuzufügen, der aus dem Zeit-Kraft-Verlauf der Sensoren bei einem, auf die<br />
Platte einwirkenden Impuls eines Hubmagneten dessen Kraft ausliest, weshalb
2.2 Der Versuch - Vorgehensweise bei der Problemstellung 11<br />
noch einmal vier Reihen der Platte <strong>mit</strong> verschiedenen Impulsen vermessen<br />
wurden. Während der Arbeit wurden die einzelnen Methoden <strong>zur</strong> <strong>Orts</strong>berechnung<br />
immer wieder auf ihre Genauigkeit analysiert und verbessert. Zur einfacheren<br />
bzw. automatischen Messauswertung wurden <strong>mit</strong> fortschreitender Arbeit und<br />
fortschreitender Erfahrung im Umgang <strong>mit</strong> <strong>MATLAB</strong> ® immer mehr Aufgaben<br />
<strong>von</strong> Excel in <strong>MATLAB</strong> ® verlegt, bis letztendlich ein Programm zum<br />
automatischen Auswerten <strong>von</strong> Messungen entstand.
3.1 Statische Messung - Durchführung der Messung 12<br />
3. Statische Messung<br />
3.1. Durchführung der Messung<br />
Vor Beginn der Messung muss anfangs ein Raster aus abzutastenden<br />
Messpunkten festgelegt werden. Wichtig hierbei sind selbstverständlich<br />
Messpunkte in einem regelmäßigen Abstand <strong>von</strong>einander und gleiche Abstände<br />
der äußeren Messpunkte zum Rand der Platte. Auch bedeutet ein zu feines Raster<br />
einen erhöhten Zeitaufwand, ein zu grobes Raster lässt die Messung womöglich<br />
zu ungenau werden. Als Extrema, also die äußersten noch auf der Plexiglasplatte<br />
befindlichen Punkte, ließen sich in horizontaler Richtung die Punkte 5 und 81, in<br />
vertikaler 1 und 187 messen. Die oben genannten Bedingungen werden am besten<br />
<strong>mit</strong> einem 10 mal 10 Raster erfüllt, wobei in horizontaler Richtung 3, in vertikaler<br />
Richtung 8 Einheiten vom Rand abgetrennt werden. Dies ergibt bei 8 Spalten und<br />
18 Reihen eine Anzahl <strong>von</strong> 144 Messpunkten, <strong>von</strong> denen allerdings nur die obere<br />
Hälfte gemessen wurde.<br />
Abbildung 3-1: Die Messtechnik<br />
1<br />
4<br />
3<br />
2<br />
1) Messgestell<br />
2) Metallschiene<br />
3) Schlitten<br />
4) Kraftmesser
3.1 Statische Messung - Durchführung der Messung 13<br />
Zur Messung selbst (siehe Abbildung 3-1) wird vor die Platte ein Gestell (1)<br />
gesetzt, an dem eine Metallschiene (2) in verschiedenen Höhen festgeschraubt<br />
werden kann. Auf dieser Schiene lässt sich ein horizontal auf der Schiene<br />
bewegbarer Schlitten (3) anbringen, auf dem ein Kraftmesser (4) (siehe Abbildung<br />
3-2) montiert ist, welcher zum Einstellen des gewünschten Gewichts über eine<br />
Präzisionsschraube senkrecht <strong>zur</strong> Plattenoberfläche nach vorne und hinten<br />
verschiebbar ist. Zum Messen wird die Schiene in die gewünschte Höhe gebracht,<br />
<strong>mit</strong> dem Schlitten alle horizontalen Messpunkte <strong>von</strong> links nach rechts abgetastet<br />
und die Schiene in der nächsten Höhe befestigt, bis da<strong>mit</strong> alle vertikalen<br />
Messpunkte erfasst sind.<br />
Abbildung 3-2: Der Kraftmesser<br />
Vor der Messung wurde bereits festgestellt, dass sich die Platte schon bei kleinen<br />
Temperaturschwankungen verzieht, verursacht beispielsweise durch eine<br />
Raumheizung oder eine offene Türe, und die Offset-Werte der Sensoren dadurch<br />
ständigen Schwankungen unterliegen. Aus diesem Grund wurde folgender<br />
Messablauf festgelegt:<br />
Zu Beginn einer neuen Reihe, also einer neuen vertikalen Position der Schiene,<br />
wird die Messaufzeichnung gestartet und der Schlitten <strong>mit</strong> dem Kraftmesser zum<br />
ersten Messpunkt bewegt, wo zuerst die Platte in Ruhe, also ohne eine äußere<br />
einwirkende Kraft, gemessen wird. Danach wird über die Präzisionsschraube,<br />
durch Andrücken des <strong>Kraftsensor</strong>s an die Platte, das Gewicht <strong>von</strong> 1000g<br />
eingestellt und die Platte unter dieser Last gemessen. Zum Schluss wird die Last<br />
wieder entfernt und die Platte noch einmal in Ruhe gemessen, bevor der<br />
Kraftmesser zum nächsten Punkt bewegt wird. Sind alle Punkte einer Reihe
3.1 Statische Messung - Durchführung der Messung 14<br />
vermessen, wird die Messaufzeichnung beendet, abgespeichert und für die nächste<br />
Reihe wieder neu gestartet. Dies soll zu große Messdateien verhindern und bei<br />
Defekten im System den Schaden begrenzen.<br />
Während der Messung werden kontinuierlich die sechs Sensorspannungen und der<br />
Ort (x- und y-Koordinate) <strong>mit</strong> DIAdem ® aufgezeichnet. Um aus dieser<br />
Datenmenge wieder die Zeitpunkte der Messungen und Ruhepunkte zu finden,<br />
werden zusätzlich die Kanäle „Ruhe vor“, „Messung“ und „Ruhe nach“<br />
aufgezeichnet. Mittels eines Buttons auf der Messoberfläche für jeden dieser<br />
Kanäle werden dort bei Betätigung Ausschläge <strong>mit</strong> der Amplitude eins und der<br />
Dauer einer Sekunde aufgezeichnet und dadurch der Zeitpunkt der Messung für<br />
die kommende Auswertung der Daten markiert.<br />
Der Zeitaufwand für diese Messung betrug ca. vier Stunden. Den größten Anteil<br />
daran hatte das Aufbringen des Gewichts auf die Messpunkte, da der am<br />
Kraftmesser abgelesene Wert, bedingt durch die zu geringe Steifigkeit des<br />
Messgestells in den oberen Bereichen, ständig variiert und mehrmals<br />
nachkorrigiert werden muss, bis der Wert insofern konstant ist, dass er sich in der<br />
Zeit bis <strong>zur</strong> Betätigung des „Mess“-Buttons nicht zu stark verändert. Angestrebt<br />
wurde eine Genauigkeit <strong>von</strong> +/- 10g, jedoch stieg diese an manchen Punkten auf<br />
+/- 20g. Schwierigkeiten bereitete auch die hohe Sensibilität des Messsystems,<br />
das schon bei kleinen Bewegungen auf dem Fußboden sichtbare Veränderungen<br />
der Werte zeigte, weshalb es während des Messens einer Last nicht möglich war,<br />
seinen Standpunkt zu verändern.<br />
Nach Auswertung dieser Messung (siehe Kapitel 3.2) war der nächste Schritt eine<br />
Messung <strong>mit</strong> den Kräften 500g, 1000g, 2500g und 4000g pro Messpunkt, um das<br />
Verhalten der Sensoren bei verschiedenen Kräften zu untersuchen. Auch wurde<br />
ein Raster gewählt, dessen Ränder näher an den Plattenrändern liegen: die Punkte<br />
haben horizontal einen Abstand <strong>von</strong> 9, das Raster geht <strong>von</strong> 7 bis 79, und vertikal<br />
einen Abstand <strong>von</strong> 14, <strong>mit</strong> einem Raster <strong>von</strong> 184 bis 2. Dies ergibt eine Anzahl<br />
<strong>von</strong> 126 Messpunkten, <strong>mit</strong> den verschiedenen Kräften sind es insgesamt 504<br />
Messungen.<br />
Mittlerweile wurden die beiden Messverstärker durch einen solchen <strong>mit</strong> einer<br />
automatischen Korrektur des Offsets der Sensoren ersetzt. Über einen<br />
Eingangskanal kann vom Computer aus im Verstärker zwischen den Zuständen<br />
„hold off“, der Verstärker regelt <strong>mit</strong> einer Regelspannung den Offset ständig auf<br />
Null herunter, und „hold on“, die Regelspannung wird gehalten und die
3.1 Statische Messung - Durchführung der Messung 15<br />
Sensorkanäle werden <strong>mit</strong> der an einem Potentiometer eingestellten Verstärkung<br />
ausgegeben, gewechselt werden. Durch den neuen Messverstärker mussten die<br />
Sensoren über die Verstärkung ihrer Kanäle neu kalibriert werden. Dazu wurde<br />
auf der Platte, möglichst nahe der Befestigung jedes Sensors, eine Last <strong>von</strong> 4000g<br />
angebracht und die Verstärkung so eingestellt, dass der Sensor eine Spannung <strong>von</strong><br />
8V ausgab. Diese Kalibrierung wurde gewählt, da das Computerinterface<br />
maximal 10V verarbeiten kann und der Kraftmesser Gewichte bis 5000g misst.<br />
Jedoch ist dies eine sehr ungenaue Art der Kalibrierung, da die Sensoren<br />
weiterhin <strong>mit</strong> der Platte verbunden sind und sich so ein Teil des <strong>zur</strong> Kalibrierung<br />
verwendeten Gewichts auch auf die anderen Sensoren verteilt. Theoretisch<br />
müssten die Sensoren <strong>zur</strong> Kalibrierung ausgebaut und anschließend wieder in das<br />
System eingebaut werden, jedoch käme es auch hier durch den Aus- und Einbau<br />
zu Verfälschungen. Auf diese Verfälschung wird in Kapitel 3.2 näher<br />
eingegangen.<br />
Als die erste Folge an Messungen nach ca. sechs Stunden und neun vermessenen<br />
Spalten abgeschlossen war, stellte sich heraus, dass die Dateien der einzelnen<br />
gemessenen Reihen teilweise exakt die gleiche Dateigröße hatten. Man stellte fest,<br />
dass DIAdem ® die Messungen nur bis zu einer bestimmten Länge aufzeichnete,<br />
Messungen die über diesen Zeitpunkt hinausgingen, wurden ab diesem dort<br />
abgeschnitten. Aufgrund des Einsatzes des neuen Messverstärkers wurde bei<br />
dieser Messung auch auf das Messen <strong>von</strong> Ruhepunkten verzichtet. Allerdings<br />
zeigte sich, dass der Verstärker den Offset nicht komplett auf Null reduzierte,<br />
sondern immer zwischen +/- 0,2V schwankte, was die Messung für eine<br />
Auswertung unbrauchbar machte. Diese Messung wurde daraufhin <strong>mit</strong> den<br />
gleichen Parametern, diesmal unter Verwendung <strong>von</strong> Ruherpunkten, für die<br />
gesamte Platte wiederholt.
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 16<br />
3.2. Auswertung und Ergebnisse der Messung<br />
Um sich einen Überblick über das Verhalten der Sensoren zu verschaffen, bestand<br />
die erste Maßnahme beim Auswerten der aus der ersten statischen Messungen<br />
gesammelten Daten darin, die Daten der einzelnen gemessenen Reihen in Excel-<br />
Tabellen zu schreiben und zu versuchen, die Daten möglichst aussagekräftig<br />
darzustellen.<br />
Bei der <strong>Analyse</strong> der Ruhewerte zeigte sich, dass ein direkter Zusammenhang<br />
zwischen dem Offset der Sensoren und der Raumtemperatur des Labors bestehen<br />
muss. Diagramm 3-1 und Diagramm 3-2 (berechnet in<br />
auswertung_zeile1_statisch.xls und auswertung_zeile9_statisch.xls) zeigen jeweils den<br />
Mittelwert aus Ruhe-vor und Ruhe-nach, einmal der ersten gemessenen Reihe zu<br />
Beginn der Messung und einmal der, vier Stunden später gemessenen, letzten<br />
Reihe, in Abhängigkeit des horizontalen Ortes. Da diese Punkte der Reihe nach,<br />
<strong>von</strong> links nach rechts, gemessen wurden, ist die umgekehrte x-Koordinate (Zur<br />
Erinnerung: der Ursprung des Koordinatensystems liegt rechts unten) in etwa<br />
direkt proportional zum Zeitverlauf. Zu Beginn und zwei weitere Male während<br />
der Messung wurde der Messung wurde der Offset <strong>von</strong> Hand auf Null korrigiert.<br />
Man erkennt nun in Diagramm 3-1, dass sich der Offset, nach der anfänglichen<br />
Korrektur, während der Messreihe stark verändert. Dies liegt daran, dass vor dem<br />
Start der Messung der Raum <strong>mit</strong> der Versuchsanordnung auf eine bestimmte<br />
Temperatur aufgeheizt wurde. Mit Beginn der Messung wurde die Türe dieses<br />
Raumes geöffnet, was zu einem Absinken der Temperatur führte. Zu der Zeit, als<br />
der Verlauf <strong>von</strong> Diagramm 3-2 gemessen wurde, war die Temperatur des Raumes<br />
bereits wieder ausgeglichen, die Offsetwerte dieser Reihe sind deswegen an-<br />
nähernd konstant. Hierdurch wird auch deutlich, durch welche augenscheinlich<br />
minimale äußere Manipulation das Messsystem merklich beeinflusst werden<br />
kann.
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 17<br />
Mittelwert RVor u. RNach<br />
Diagramm 3-1: Offset bei y=179: Beginn der Messreihe (t=0)<br />
Mittelwert RVor u. RNach<br />
0,7<br />
0,6<br />
0,5<br />
0,4<br />
0,3<br />
0,2<br />
0,1<br />
0,7<br />
0,6<br />
0,5<br />
0,4<br />
0,3<br />
0,2<br />
0,1<br />
Diagramm 3-2: Offset bei y=99: Ende der Messreihe (t=4h)<br />
Eine weitere Untersuchung galt den Unterschieden zwischen dem Ruhewert vor<br />
und nach einem Messpunkt. Würden zwischen den beiden Werten starke<br />
Differenzen auftreten, wäre dies ein Anzeichen dafür, dass sich die Platte während<br />
des Aufbringens einer Kraft plastisch verformt. Die in Diagramm 3-3 (berechnet<br />
in auswertung_zeile7_statisch.xls) dargestellte prozentuale Abweichung <strong>von</strong> der<br />
Differenz aus Ruhe-vor und Ruhe-nach vom Mittelwert der beiden Werte in<br />
Abhängigkeit des horizontalen Ortes zeigt zwar, dass Abweichungen vorhanden<br />
sind. Jedoch sieht man in<br />
Zeitliche Veränderung des Offset<br />
0<br />
0<br />
-0,1<br />
10 20 30 40 50 60 70 80 90<br />
Ort horizontal (~ Zeit)<br />
Zeitliche Veränderung des Offset<br />
0<br />
0<br />
-0,1<br />
10 20 30 40 50 60 70 80 90<br />
Ort horizontal (~ Zeit)<br />
Zeit<br />
ForceIn_ll<br />
ForceIn_lr<br />
ForceIn_ul<br />
ForceIn_ur<br />
ForceIn_ml<br />
ForceIn_mr<br />
Diagramm 3-4 (berechnet in auswertung_zeile7_statisch.xls), das die prozentuale<br />
Abweichung <strong>von</strong> der Differenz aus Ruhe-nach und Ruhe-vor des nächsten<br />
Messpunktes vom Mittelwert der beiden Werte in Abhängigkeit des horizontalen<br />
Ortes darstellt, dass sich die Abweichungen dieser beiden Ruhemessungen in etwa<br />
in der gleichen Größenordnung wie in Diagramm 3-3 befinden, obwohl zwischen<br />
diesen Punkten nur ein minimaler Zeitabstand liegt und so<strong>mit</strong> theoretisch bei<br />
Zeit<br />
ForceIn_ll<br />
ForceIn_lr<br />
ForceIn_ul<br />
ForceIn_ur<br />
ForceIn_ml<br />
ForceIn_mr
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 18<br />
beiden Messungen der selbe Wert gemessen werden müsste. Zu begründen ist<br />
dieses Verhalten durch die bei der Messung herrschende Messungenauigkeit,<br />
verursacht durch leichte Berührung der Platte oder Ruhemessungen, bei denen<br />
sich die Platte noch nicht vollständig wieder in Ruhe befindet.<br />
%<br />
Diagramm 3-3: Prozentuale Abweichung <strong>von</strong> RVor und RNach (y=119)<br />
%<br />
15<br />
10<br />
5<br />
Prozentuale Abweichung <strong>von</strong> RVor und RNach<br />
0<br />
0 10 20 30 40 50 60 70 80 90<br />
-5<br />
-10<br />
-15<br />
15<br />
10<br />
5<br />
Ort horizontal<br />
Prozentuale Abweichung <strong>von</strong> RNach und RVor des nächsten Punktes<br />
0<br />
0<br />
-5<br />
10 20 30 40 50 60 70 80 90<br />
-10<br />
-15<br />
-20<br />
-25<br />
Ort horizontal<br />
Diagramm 3-4: Prozentuale Abweichung <strong>von</strong> RNach und RVor des nächsten Punktes (y=119)<br />
Zur weiteren Berechnung muss bei den gemessenen Kraftwerten noch eine<br />
Offsetkorrektur durchgeführt werden. Dies geschieht dadurch, dass <strong>von</strong> dem<br />
jeweiligen Kraftwert der Mittelwert aus den Ruhemessungen vor und nach der<br />
Kraftmessung abgezogen wird. Man kann nun die gemessenen Kraftwerte der<br />
sechs Sensoren entweder nach ihrer x-, wie beispielsweise in Tabelle 3-1, oder y-<br />
Koordinate sortieren und aus den dadurch entstandenen Wertetabellen für jede<br />
Spalte, zu sehen in Diagramm 3-6, bzw. Reihe, zu sehen in Diagramm 3-5, (beide<br />
erstellt in kraftverteilung.xls) Diagramme <strong>mit</strong> den Sensorwerten in Abhängigkeit<br />
<strong>von</strong> y bzw. x erstellen, jeweils für ein konstantes x bzw. y.<br />
ForceIn_ll<br />
ForceIn_lr<br />
ForceIn_ul<br />
ForceIn_ur<br />
ForceIn_ml<br />
ForceIn_mr<br />
ForceIn_ll<br />
ForceIn_lr<br />
ForceIn_ul<br />
ForceIn_ur<br />
ForceIn_ml<br />
ForceIn_mr
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 19<br />
Tabelle 3-1: Wertetabelle für die Reihe y=179<br />
X Y ForceIn_ll ForceIn_lr ForceIn_ul ForceIn_ur ForceIn_ml ForceIn_mr<br />
78 179 -0,046838379 -0,017270508 2,13677002 0,001293945 0,554602051 -0,001325684<br />
68 179 -0,052434082 -0,017912598 1,838000488 0,304672852 0,47423584 0,069477539<br />
58 179 -0,042678223 -0,020163574 1,54534668 0,614719238 0,386362305 0,131384277<br />
48 179 -0,039382324 -0,028017578 1,315427246 1,026054688 0,327460938 0,21739502<br />
38 179 -0,024309082 -0,030473633 0,90395752 1,283503418 0,216911621 0,26387207<br />
28 179 -0,020935059 -0,038554688 0,558427734 1,631867676 0,134697266 0,344797363<br />
18 179 -0,018225098 -0,050922852 0,266477051 1,887695313 0,070852051 0,417790527<br />
8 179 -0,017214355 -0,068400879 -0,024118652 2,186950684 0,003852539 0,517070313<br />
Sensorspannung<br />
2,5<br />
2<br />
1,5<br />
1<br />
0,5<br />
-0,5<br />
Kraftwerte in Abhängigkeit <strong>von</strong> x (bei y=179)<br />
0<br />
0 10 20 30 40 50 60 70 80<br />
Ort horizontal<br />
Diagramm 3-5: Kraftwerte in Abhängigkeit <strong>von</strong> x (bei y=179), Werte aus Tabelle 3-1<br />
Der genauere Verlauf der Kurven wird später anhand der Messdaten der zweiten<br />
statischen Messung erklärt, da diese, durch die höheren gemessenen Kräfte,<br />
ausgeprägter sind und auch die komplette Platte vermessen wurde. Die spalten-<br />
und reihenweise Darstellung lassen jedoch schon einen linearen Zusammenhang<br />
zwischen der x- und y-Koordinate und der Kraft an einem Sensor vermuten, da<br />
alle Kurven annähernd die Form einer Gerade haben.<br />
ForceIn_ll<br />
ForceIn_lr<br />
ForceIn_ul<br />
ForceIn_ur<br />
ForceIn_ml<br />
ForceIn_mr
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 20<br />
Sensorspannung<br />
2,5<br />
2<br />
1,5<br />
1<br />
0,5<br />
Diagramm 3-6: Kraftwerte in Abhängigkeit <strong>von</strong> y (bei x=68)<br />
Die Idee, den Ort zu berechnen war nun, motiviert durch die Linearität der<br />
Sensoren, für jeden Sensor eine Gleichung zu erstellen, die die Sensorspannung<br />
eines Sensors in Abhängigkeit des Ortes ausgibt. So<strong>mit</strong> hat man für jeden<br />
Messpunkt ein Gleichungssystem aus sechs Gleichungen <strong>mit</strong> zwei Unbekannten,<br />
x und y. Durch Einsetzen der sechs, an dem Messpunkt gemessenen, Kraftwerten<br />
und Lösen dieses überbestimmten Gleichungssystems lassen sich x und y<br />
er<strong>mit</strong>teln.<br />
Kraftwerte in Abhängigkeit <strong>von</strong> y (bei x=68)<br />
0<br />
90 100 110 120 130 140 150 160 170 180<br />
-0,5<br />
Ort vertikal<br />
Der nächste Schritt in der Auswertung war nun, diese Gleichungen zu finden. Da<br />
die Funktion die Form Sensorspan nung(<br />
x,<br />
y)<br />
haben soll, also die<br />
Sensorspannung in Abhängigkeit <strong>von</strong> x und y, wurde versucht, die Daten in genau<br />
dieser Form darzustellen, anders als in den bisherigen Graphen, in denen die Kraft<br />
nur jeweils in Abhängigkeit einer Koordinate dargestellt wurde, während die<br />
andere konstant war. Da dieses Diagramm aber einen Wert in Abhängigkeit <strong>von</strong><br />
zwei Eingabewerten darstellen soll, ist ein dreidimensionales Diagramm, bzw.<br />
zuerst eine dreidimensionale Wertetabelle wie in Tabelle 3-2, erforderlich.<br />
Diagramm 3-7 besitzt als Grundfläche die obere Plattenhälfte, die Achsen sind so<br />
angeordnet, dass ein Blickwinkel <strong>von</strong> oben senkrecht auf das Diagramm dem<br />
Blick des Fechters <strong>von</strong> vorne auf die Platte entspricht (beide erstellt in<br />
kraftverteilung_3D.xls). Alle Diagramme auf den folgenden Seiten zeigen<br />
stellvertretend für alle Sensoren die Werte des Sensors „ul“.<br />
ForceIn_ll<br />
ForceIn_lr<br />
ForceIn_ul<br />
ForceIn_ur<br />
ForceIn_ml<br />
ForceIn_mr
y-Koordinaten<br />
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 21<br />
Tabelle 3-2: Dreidimensionale Wertetabelle <strong>von</strong> Sensor ul (Kraft in Abhngigkeit vom Ort)<br />
78 68 58<br />
x-Koordinaten<br />
48 38 28 18 8<br />
179 2,13677002 1,838000488 1,54534668 1,315427246 0,90395752 0,558427734 0,266477051 -0,024118652<br />
169 1,827155762 1,577092285 1,332094727 1,045107422 0,783081055 0,503664551 0,234985352 -0,015395508<br />
159 1,560952148 1,36105957 1,142224121 0,914135742 0,669887695 0,459733887 0,20342041 -0,006672363<br />
149 1,28888916 1,110581055 0,935251465 0,753098145 0,565334473 0,363227539 0,180661621 -0,018632813<br />
139 1,027348633 0,889680176 0,747316895 0,615407715 0,465898438 0,303942871 0,149501953 -0,009213867<br />
129 0,804643555 0,69034668 0,583535156 0,48001709 0,373081055 0,247141113 0,133041992 0,003278809<br />
119 0,583894043 0,495939941 0,424453125 0,35137207 0,284536133 0,204597168 0,113439941 0,004602051<br />
109 0,406765137 0,337541504 0,294516602 0,252355957 0,210734863 0,163911133 0,092663574 0,012958984<br />
99 0,22963623 0,205949707 0,187849121 0,168493652 0,154572754 0,126640625 0,082211914 0,028508301<br />
Sensorspannung<br />
2,5<br />
2<br />
1,5<br />
1<br />
0,5<br />
0<br />
-0,5<br />
78<br />
Kraft an Sensor ul in Abhängigkeit vom Ort<br />
68<br />
58<br />
48<br />
Ort horizontal<br />
38<br />
Diagramm 3-7: Kraft an Sensor ul in Abhängigkeit vom Ort (erzeugt aus Tabelle 3-2)<br />
Die Fläche des Graphen hat die Form eines Geflechts aus lauter Strecken, denn<br />
sowohl in Richtung der Abszisse als auch der Ordinate besteht immer ein<br />
(annähernd) linearer Verlauf der Sensorspannung. Diese Strecken, hier die<br />
horizontalen, wurden <strong>zur</strong> Verdeutlichung in Diagramm 3-8 (erstellt in<br />
kraftverteilung.xls) eingezeichnet und, für die verschiedenen y, in Diagramm 3-9<br />
(erstellt in kraftverteilung_3D_interpoliert_ul.xls) zusammengefasst. Man erkennt,<br />
dass die einzelnen Strecken einen gemeinsamen Startpunkt haben und die<br />
Endpunkte in einem gleichmäßigen vertikalen Abstand zueinander liegen, was auf<br />
eine Regelmäßigkeit der Strecken schließen lässt. Diese „Regelmäßigkeit“ muss<br />
eine Funktion sein, die angibt, wie sich die Parameter m und t der horizontalen<br />
Geradengleichung F = m * x + t <strong>von</strong> Spalte zu Spalte verändern. Um diese<br />
28<br />
18<br />
8<br />
99<br />
119<br />
139<br />
Sensorposition<br />
159<br />
179<br />
Ort vertikal<br />
2-2,5<br />
1,5-2<br />
1-1,5<br />
0,5-1<br />
0-0,5<br />
-1-0
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 22<br />
herauszufinden, wurden zuerst die einzelnen Strecken aus Diagramm 3-9 für jede<br />
Spalte interpoliert und dann die Parameter m und t in Abhängigkeit <strong>von</strong> y<br />
gezeichnet.<br />
Sensorspannung<br />
Diagramm 3-8: Wie Diagramm 3-7, zusätzlich <strong>mit</strong> eingezeichneten horizontalen Geraden<br />
2,5<br />
2<br />
1,5<br />
1<br />
0,5<br />
-0,5<br />
2,5<br />
2<br />
1,5<br />
1<br />
0,5<br />
0<br />
-0,5<br />
78<br />
Kraft an Sensor ul in Abhängigkeit vom Ort<br />
68<br />
58<br />
48<br />
Ort horizontal<br />
38<br />
28<br />
Diagramm 3-9: Die in Diagramm 3-8 eingezeichneten Geraden<br />
Man erkennt, dass sowohl die Steigung in Diagramm 3-10, als auch der y-<br />
Abschnitt in Diagramm 3-11 ebenfalls linear <strong>von</strong> y abhängen. So<strong>mit</strong> sind die<br />
Parameter m und t der horizontalen Geradengleichung ebenfalls Geraden:<br />
18<br />
8<br />
99<br />
119<br />
139<br />
159<br />
179<br />
Ort vertikal<br />
0<br />
0 10 20 30 40 50 60 70 80<br />
ForceIn_ul (y=179)<br />
ForceIn_ul (y=169)<br />
ForceIn_ul (y=159)<br />
ForceIn_ul (y=149)<br />
ForceIn_ul (y=139)<br />
ForceIn_ul (y=129)<br />
ForceIn_ul (y=119)<br />
ForceIn_ul (y=109)<br />
ForceIn_ul (y=99)<br />
2-2,5<br />
1,5-2<br />
1-1,5<br />
0,5-1<br />
0-0,5<br />
-1-0
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 23<br />
m +<br />
= m1<br />
* y t1<br />
und t m2<br />
* y + t2<br />
= . Setzt man diese beiden Gleichungen in<br />
F = m * x + t ein, erhält man für die Flächengleichung:<br />
F = ( m * y + t ) * x + m * y + t<br />
1<br />
1<br />
2<br />
2<br />
Die Parameter m 1 , m 2 , t 1 und t 2 müssen für jeden Sensor er<strong>mit</strong>telt werden.<br />
Steigung<br />
Diagramm 3-10: Abhängigkeit der Steigung (der horizontalen Geradengleichungen) <strong>von</strong> y<br />
y-Abschnitt<br />
Abhängigkeit der Steigung (der horizontalen Geradengleichungen) <strong>von</strong> y<br />
0,035<br />
0,03<br />
0,025<br />
m = 0,0004y - 0,0344<br />
0,02<br />
Steigung<br />
0,015<br />
0,01<br />
0,005<br />
0<br />
Linear (Steigung)<br />
90 100 110 120 130 140 150 160 170 180<br />
Ort vertikal<br />
Abhängigkeit des y-Abschnitts (der horizontalen Geradengleichungen) <strong>von</strong> y<br />
0,1<br />
0,05<br />
0<br />
-0,05 90 100 110 120 130 140 150 160 170 180<br />
-0,1<br />
-0,15<br />
-0,2<br />
-0,25<br />
-0,3<br />
y<br />
Ort vertikal<br />
Diagramm 3-11: Abhängigkeit des y-Abschnitts (der horizontalen Geradengleichungen) <strong>von</strong> y<br />
Um die Parameter der Flächengleichung zu finden, wurde der in Excel integrierte<br />
„Solver“ („Extras“ -> „Solver…“) verwendet. Dem Solver wird eine Zielzelle<br />
angegeben, deren Wert er durch angegebene veränderbare Zellen entweder<br />
maximieren, minimieren oder einem bestimmten Wert annähern kann. Zur<br />
Berechnung der Parameter wurden drei (dreidimensionale) Wertetabellen erstellt:<br />
Eine <strong>mit</strong> den <strong>Messwerten</strong>, eine <strong>mit</strong> den über die Parameter aus der Funktion<br />
berechneten Sensorwerten und eine <strong>mit</strong> den quadrierten Differenzen der<br />
Messwerte und der Funktion. Als veränderbare Zellen werden dem Solver die<br />
Felder <strong>mit</strong> den Gleichungsparametern angegeben, die Zielzelle enthält die Summe<br />
der in der Wertetabelle berechneten Fehlerquadrate, die natürlich minimiert<br />
werden soll. Diagramm 3-13 zeigt die da<strong>mit</strong> gefundene Funktion für den Sensor<br />
ul, als Vergleich daneben Diagramm 3-12 <strong>mit</strong> den <strong>Messwerten</strong>. (Die Optimierung<br />
wurde einzeln für jeden Sensor in den Tabellen optimierung_ForceIn_ll.xls,<br />
optimierung_ForceIn_lr.xls, optimierung_ForceIn_ml.xls, optimierung_ForceIn_mr.xls,<br />
optimierung_ForceIn_ur.xls und optimierung_ForceIn_ur.xls durchgeführt)<br />
t = -0,0039y + 0,4281<br />
y-Abschnitt<br />
Linear (y-Abschnitt)
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 24<br />
Kraft<br />
3<br />
2,5<br />
2<br />
1,5<br />
1<br />
0,5<br />
-0,5<br />
78<br />
Diagramm 3-12: Kraftverlauf des Sensors ul (Messwerte)<br />
Kraft<br />
0<br />
3<br />
2,5<br />
2<br />
1,5<br />
1<br />
0,5<br />
0<br />
-0,5<br />
78<br />
68<br />
58<br />
48<br />
Ort horizontal<br />
68<br />
Kraftverlauf des Sensors ul (Messwerte)<br />
58<br />
48<br />
38<br />
38<br />
28<br />
Diagramm 3-13: Kraftverlauf des Sensors ul (Funktion)<br />
In Diagramm 3-14 zeigt sich, dass die Abweichung <strong>von</strong> Funktion und <strong>Messwerten</strong><br />
zwar nur gering ist, die Werte aber nach einem bestimmten Muster abweichen, ein<br />
Merkmal dafür, dass die Funktion nicht komplett linear ist. In der Mitte der<br />
oberen Plattenhälfte passt die Funktion am besten zu den <strong>Messwerten</strong>, kleine<br />
positive Abweichungen gibt es an den Rändern in horizontaler Richtung, jedoch<br />
gibt es größere negative Abweichungen an den Rändern in vertikaler Richtung die<br />
auf einen dort nicht linearen Verlauf hinweisen, was auch durch die zweite Folge<br />
28<br />
18<br />
18<br />
8<br />
99<br />
8<br />
119<br />
99<br />
139<br />
119<br />
159<br />
Kraftverlauf des Sensors ul (optimierte Funktion)<br />
Ort horizontal<br />
179<br />
Ort vertikal<br />
139<br />
159<br />
179<br />
Ort vertikal<br />
2,5-3<br />
2-2,5<br />
1,5-2<br />
1-1,5<br />
0,5-1<br />
0-0,5<br />
-1-0<br />
2,5-3<br />
2-2,5<br />
1,5-2<br />
1-1,5<br />
0,5-1<br />
0-0,5<br />
-1-0
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 25<br />
<strong>von</strong> Messungen bestätigt wird. Bei dem extrem negativen Wert an der Stelle<br />
y=179 handelt sich es um einen „Ausreißer“, vermutlich verursacht durch einen<br />
Messfehler.<br />
Funktion - Messwert<br />
0,1<br />
0,05<br />
0<br />
-0,05<br />
-0,1<br />
-0,15<br />
99<br />
Abweichung Funktion - Messwert an Sensor ul<br />
109<br />
119<br />
129<br />
Ort vertikal<br />
139<br />
Diagramm 3-14: Abweichung Funktion - Messwert an Sensor ul<br />
Im Folgenden werden die Sensorkurven der zweiten statischen Messung erklärt.<br />
149<br />
Diagramm 3-15: Kraft in Abhängigkeit <strong>von</strong> x an Sensor lr; F=4000g<br />
159<br />
169<br />
179<br />
8<br />
68<br />
48<br />
Ort horizontal<br />
28<br />
0,05-0,1<br />
0-0,05<br />
-0,05-0<br />
-0,1--0,05<br />
-0,15--0,1
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 26<br />
Diagramm 3-15 zeigt den horizontalen Kraftverlauf aller Spalten für den Sensor<br />
„lr“ bei einem Gewicht <strong>von</strong> 4000g (als Vergleich: die erste statische Messung<br />
wurde <strong>mit</strong> 1000g vermessen). Man erkennt, dass der Verlauf annähernd linear ist,<br />
abgesehen <strong>von</strong> Messungenauigkeiten in den oberen Reihen, da diese am weitesten<br />
<strong>von</strong> dem unten rechts befindlichen Sensor entfernt sind und dadurch mehr<br />
Gewicht für die Verformung der Platte aufgewendet werden kann. Die Geraden<br />
schneiden sich alle in einem gemeinsamen Nullpunkt, der ungefähr der Position<br />
des Sensors „ll“ entspricht. Bewegt man ein Gewicht <strong>von</strong> „lr“ ausgehend zu „ll“,<br />
so nimmt die an „lr“ gemessene Kraft linear bis <strong>zur</strong> Position <strong>von</strong> „ll“ und „ul“ ab.<br />
Wird das Gewicht genau an der horizontalen Position <strong>von</strong> „ll“ angebracht, ist an<br />
„lr“ keine Kraft zu messen, da das Gewicht genau auf dem Angelpunkt des Hebels<br />
angebracht wird. Bewegt man das Gewicht nun weiter bis zum Rand der Platte,<br />
wird an „lr“ eine negative Kraft gemessen, da das Gewicht <strong>von</strong> „lr“ aus gesehen<br />
an der gegenüberliegenden Seite des Angelpunktes aufgebracht wird, die Platte<br />
wird an der Position <strong>von</strong> „lr“ also nach vorne gedrückt. Trotz des linearen<br />
horizontalen Kraftverlaufs sind die Kurven der einzelnen Spalten nicht<br />
gleichmäßig angeordnet. Auch ist die Kurve der obersten Spalte nicht, wie man<br />
vermuten würde, die Spalte <strong>mit</strong> den kleinsten Werten, sondern die Spalten in der<br />
Mitte der oberen Hälfte. Um dies zu erklären, benötigt man ein neues Diagramm,<br />
das den vertikalen Kraftverlauf der einzelnen Spalten darstellt.<br />
Diagramm 3-16: Kraft in Abhängigkeit <strong>von</strong> y an Sensor ur; F=4000g
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 27<br />
Diagramm 3-16 zeigt dies am Beispiel <strong>von</strong> Sensor ur. Hier gibt es diesmal zwei<br />
gemeinsame Nullpunkte der Sensoren, die sich auf der vertikalen Position des<br />
<strong>mit</strong>tleren und unteren Sensorpaares befinden. Die ab dem Überschreiten des<br />
<strong>mit</strong>tleren Auflagepunktes an „ur“ gemessene negative Kraft nimmt nun bis <strong>zur</strong><br />
Mitte zwischen dem <strong>mit</strong>tleren und unteren Sensorpaar ab, wo sie ihren Tiefpunkt<br />
erreicht. Von dort aus steigt die Kraft wieder fast bis Null, während sie sich dem<br />
unteren Sensorpaar nähert. Dieser, durch die drei vertikalen Auflagepunkte<br />
verursachter Kraftverlauf ist nicht linear, bis auf ca. das Drittel der Platte in der<br />
Nähe des Sensors. Hier übt der dritte, am weitesten vom Sensor entfernte<br />
Auflagepunkt noch einen geringen Einfluss auf den Kraftverlauf aus, der sich dort<br />
wie der aus zwei Auflagepunkten bestehende, horizontale Kraftverlauf verhält.
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 28<br />
Diagramm 3-17: Kraft in Abhängigkeit <strong>von</strong> y; F=500g<br />
Diagramm 3-18: Kraft in Abhängigkeit <strong>von</strong> y; F=1000g
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 29<br />
Diagramm 3-19: Kraft in Abhängigkeit <strong>von</strong> y; F=2500g<br />
Diagramm 3-20: Kraft in Abhängigkeit <strong>von</strong> y; F=4000g<br />
Diagramm 3-17, Diagramm 3-18, Diagramm 3-19 und Diagramm 3-20 stellen den<br />
vertikalen Kraftverlauf aller Sensoren bei 500g, 1000g, 2500g und 4000g dar.<br />
Man erkennt in etwa, dass trotz des nichtlinearen Verlaufes die an jedem Punkt<br />
gemessene Kraft proportional <strong>zur</strong> angebrachten Kraft ist.
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 30<br />
Diagramm 3-21: Kraft in Abhängigkeit vom Ort (ur); F=500g<br />
Diagramm 3-22: Kraft in Abhängigkeit vom Ort (ur); F=1000g
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 31<br />
Diagramm 3-23: Kraft in Abhängigkeit vom Ort (ur); F=2500g<br />
Diagramm 3-24: Kraft in Abhängigkeit vom Ort (ur); F=4000g<br />
Gleiches zeigen Diagramm 3-21, Diagramm 3-22, Diagramm 3-23 und Diagramm<br />
3-24. Hier ist dreidimensional die Kraft an dem Sensor „ur“ in Abhängigkeit vom<br />
Ort dargestellt, für 500g, 1000g, 2500g und 4000g.<br />
Zur Überprüfung dieser Proportionalität wurden in Diagramm 3-25 die Kraftwerte<br />
<strong>von</strong> Sensor „ul“ an jedem Punkt bei 4000g durch die <strong>von</strong> 2500g dividiert. Bei<br />
vorliegender Proportionalität müsste sich für jeden Messpunkt dieselbe<br />
Proportionalitätskonstante ergeben.
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 32<br />
Diagramm 3-25: Untersuchung der Proportionalität <strong>von</strong> 4000g und 2500g an Sensor ul<br />
Dies wird auch <strong>von</strong> Diagramm 3-25 bestätigt. Abweichungen gibt es an den<br />
Randbereichen, da hier kleine Kräfte, die nahe bei Null liegen, gemessen werden<br />
und es dadurch schon bei kleinsten Abweichungen, durch immer vorhandene<br />
Messungenauigkeiten, zwischen beiden Messungen zu großen Unterschieden bei<br />
der Division gegenüber den anderen Messpunkten gibt.<br />
Diagramm 3-26: Angebrachte Kraft in Abhängigkeit der Summe der Sensorwerte<br />
Um bei der Auswertung die Sensorspannung in ein Gewicht bzw. eine Kraft<br />
umrechnen zu können, wurde untersucht, wie sich die Summe der sechs<br />
Sensorwerte an einem Messpunkt zu der dort angebrachten Kraft verhält. Die
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 33<br />
Summe aus den Sensoren wird deshalb verwendet, weil sich beim Anbringen<br />
einer Kraft diese sich komplett auf alle Sensoren verteilen muss, ähnlich wie<br />
wenn man sich zum Wiegen der Körpermasse auf zwei Waagen stellt und das<br />
Gewicht der beiden addiert. In Diagramm 3-1 sind nun alle diese Summen für<br />
jeden Messpunkt <strong>mit</strong> der jeweiligen angebrachten Kraft eingetragen. Zusätzlich<br />
wurde in das Diagramm eine Ausgleichsgerade für den Verlauf eingezeichnet. Die<br />
Art der Geraden ist, wie zu erwarten, annähernd eine Ursprungsgerade, denn<br />
wenn alle Sensorwerte Null sind, kann auch keine Kraft anliegen. Allerdings gibt<br />
es für höhere Kräfte ein breiteres Feld an verschiedenen gemessenen<br />
Sensorsummen, d.h. es gibt größere Differenzen zwischen den Sensorsummen der<br />
einzelnen Messpunkte. Zurückzuführen ist dies auf die zu Beginn erwähnte<br />
ungenaue Kalibrierung. Die Sensoren wurden vor der Messung so kalibriert, dass<br />
2V 1000g entsprechen, jedoch ergibt sich aus der Geradengleichung, dass 2V ca.<br />
800g entsprechen. Die Differenzen zwischen den Sensorsummen sind darauf<br />
<strong>zur</strong>ückzuführen, dass die Sensoren, eben durch diese ungenaue Kalibrierung,<br />
verschieden kalibriert sind und deswegen verschieden stark verstärkt werden, was<br />
bei höheren Kräften umso mehr sichtbar wird.<br />
Diagramm 3-27: Summe der Sensorwerte in Abhängigkeit vom Ort; F=4000g<br />
Diagramm 3-27 zeigt wieder die Summe der Sensorwerte, diesmal in<br />
Abhängigkeit des Ortes, für das angebrachte Gewicht <strong>von</strong> 4000g. Dies bestätigt
3.2 Statische Messung - Auswertung und Ergebnisse der Messung 34<br />
noch einmal die unterschiedliche Kalibrierung der Sensoren, da es einen<br />
deutlichen Trend, neben den üblichen Abweichungen durch die<br />
Messungenauigkeit, gibt, dass die Werte zum Sensor oben links hin ansteigen.<br />
Dies lässt darauf schließen, dass dieser Sensor gegenüber den anderen Sensoren<br />
zu stark verstärkt wird.
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 35<br />
3.3. Erklärung des Programms <strong>zur</strong> automatischen Messauswertung<br />
Das Programm pfaller_auswertung_messdaten.m ermöglicht es, aus einer Messung,<br />
<strong>mit</strong> einem beliebigen Raster an Messpunkten und beliebiger Anzahl an Sensoren<br />
und aufgebrachten Kräften, automatisch die <strong>zur</strong> Auswertung benötigten<br />
Diagramme zu erstellen<br />
Mess = xlsread('...\statisch_Mess_neue_messungen_korrigiert.xls');<br />
RVor = xlsread('...\statisch_RVor_neue_messungen_korrigiert.xls');<br />
Zu Beginn der Auswertung werden die zuvor <strong>mit</strong> pfaller_auswertung_statisch.m<br />
oder pfaller_auswertung_dynamisch.m erzeugten Matrizen der Mess- und Ruhewerte<br />
<strong>mit</strong>tels der Funktion xlsread eingelesen und in den Matrizen Mess und RVor<br />
gespeichert. Dieser Umweg über eine externe Datei, anstatt einer direkten<br />
Übergabe der Variablen, ist notwendig, da längere Messungen meist Fehler<br />
enthalten, die nur per Hand korrigiert werden können, wie beispielsweise das<br />
doppelte Messen eines Punktes oder eine Verfälschung der Koordinaten des<br />
Messpunktes, verursacht durch Gegenstände innerhalb des Lichtgitters. Die<br />
Excel-Tabellen müssen zuerst nach der y- und dann nach der x-Koordinate sortiert<br />
werden.<br />
rows = 14;<br />
cols = 9;<br />
forces_v = [500, 1000, 2500, 4000];<br />
sensors_v = {'ll', 'lr', 'ul', 'ur', 'ml', 'mr'};<br />
colors = {'b', 'm', 'y', 'c', 'g', 'r'};<br />
Weiterhin werden <strong>zur</strong> Auswertung Informationen über das Messverfahren<br />
benötigt. Diese sind die Anzahl der abgetasteten Reihen rows und Spalten cols,<br />
ein Vektor forces_v <strong>mit</strong> den verschiedenen Kräften, die auf einen Punkt<br />
aufgebracht wurden, sortiert in der Reihenfolge in der sie gemessen wurden, ein<br />
String-Array sensors_v <strong>mit</strong> den Bezeichnungen der Sensoren in alphabetischer<br />
Ordnung und ein String-Array colors <strong>mit</strong> den Farben <strong>zur</strong> Kennzeichnung der<br />
Kurven der einzelnen Sensoren.<br />
forces = length(forces_v);<br />
sensors = length(sensors_v);<br />
Zu Beginn des eigentlichen Programms werden zunächst die Anzahl der Kräfte<br />
forces und der Sensoren sensors <strong>mit</strong>tels der Funktion length über die Länge<br />
der vorher definierten Vektoren bestimmt.
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 36<br />
x_max = round((max(Mess(:, 1)) + 10) / 10) * 10;<br />
y_max = round((max(Mess(:, 2)) + 10) / 10) * 10;<br />
F_max = round((max(max(Mess(:, 3:(sensors + 2)))) + 1));<br />
F_min = round((min(min(Mess(:, 3:(sensors + 2)))) - 1));<br />
Anschließend werden für die nachfolgenden Diagramme die Grenzen festgelegt,<br />
zu der die jeweiligen Achsen, der x- und y-Koordinate und der Kraft, angezeigt<br />
werden. Die oberen Grenzen der Koordinaten-Achsen x_max und y_max werden<br />
berechnet, indem <strong>zur</strong> höchsten in der Messung enthaltenen x- und y-Koordinate<br />
zehn addiert und anschließend auf die Zehnerstelle gerundet wird. Da die<br />
Funktion round auf ganze Integer-Werte, d.h. auf die Einerstelle, rundet, wird der<br />
Wert vor dem Runden durch zehn dividiert und danach wieder <strong>mit</strong> zehn<br />
multipliziert. Die Begrenzungen der Kraft-Achse F_max und F_min ergeben sich<br />
durch den maximalen bzw. minimalen bei den <strong>Kraftsensor</strong>en auftretenden Wert,<br />
zu bzw. <strong>von</strong> dem eins addiert bzw. subtrahiert und anschließend auf eine ganze<br />
Zahl gerundet wird.<br />
Im nächsten Abschnitt wird aus den beiden Matrizen Mess und RVor zunächst<br />
eine Matrix ForceIn <strong>mit</strong> folgender Form erzeugt:<br />
Tabelle 3-3: Aufbau der Matrix ForceIn<br />
x y Sensor 1 Sensor 2 … Sensor sensors<br />
( O f f s e t k o r r i g i e r t )<br />
x1 y1 F1-1 F1-2 … F1-sensors ∑<br />
k = 1<br />
x2 y2 F2-1 F2-2 … F2-sensors ∑<br />
k=<br />
1<br />
∑ Kraft an<br />
Sensoren<br />
sensors<br />
sensors<br />
F<br />
F<br />
angebrachte Kraft<br />
1 −k<br />
Force 1<br />
2 −k<br />
Force 2<br />
… … … … … … … …<br />
Xcols Yrows Fcols*rows*forces-1 Fcols*rows*forces-2 … Fcols*rows*forces-sensors ∑<br />
k = 1<br />
Spaltennummer<br />
sensors<br />
F<br />
cols rows*<br />
forces−k<br />
* Force forces<br />
1 2 3 + sensors 4 + sensors<br />
ForceIn = zeros(rows * cols * forces, sensors + 4);<br />
Der erste Schritt besteht darin für ForceIn eine <strong>mit</strong> Nullen gefüllte Matrix zu<br />
erstellen. Tabelle 3-3 zeigt, dass es zum einen vier Spalten zusätzlich <strong>zur</strong> Anzahl<br />
der Sensoren sensors, und zum anderen so viele Reihen wie Messpunkte geben<br />
muss. Die Anzahl der Messungen lässt sich aus dem Produkt der gemessenen<br />
Reihen rows, der gemessenen Spalten cols und der verschiedenen Kräfte<br />
forces berechnen.
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 37<br />
ForceIn(:, 1) = Mess(:, 1);<br />
ForceIn(:, 2) = Mess(:, 2);<br />
Die Spalten eins und zwei <strong>von</strong> ForceIn <strong>mit</strong> den x- und y-Koordinaten der<br />
Messpunkte werden aus der zu Beginn eingelesenen Matrix Mess kopiert.<br />
for sen = 1:sensors<br />
ForceIn(:, 2 + sen) = Mess(:, 2 + sen) - RVor(:, 2 + sen);<br />
ForceIn(:, sensors + 3) = ForceIn(:, sensors + 3) + ForceIn(:,<br />
2 + sen);<br />
end<br />
Die for-Schleife hat nun die Aufgabe, bei den an den Sensoren gemessenen<br />
Kraftwerten eine Offset-Korrektur durchzuführen und alle Sensorwerte einer<br />
Messung in einer eigenen Spalte aufzuaddieren. Dazu zählt die Schleife <strong>mit</strong> der<br />
Variablen sen der Reihe nach alle Sensoren durch. Für die Offsetkorrektur wird<br />
bei jedem Durchlauf in ForceIn in die Spalte des aktuellen Sensors die Differenz<br />
aus den entsprechenden Spalten in Mess und in RVor geschrieben.<br />
Im nächsten Schritt wird in die Spalte nach den Sensorenwerten, die Spalte <strong>mit</strong><br />
der Nummer sensors + 3, zu dieser Spalte selbst bei jedem Durchlauf die Spalte<br />
das aktuellen Sensors addiert, um dort nach dem Ende der Schleife die Summe<br />
aller Spalten <strong>mit</strong> Sensorwerten zu erhalten.<br />
for c = 1:forces:(rows * cols * forces)<br />
for n = 1:forces;<br />
ForceIn(c+n-1, sensors + 4) = forces_v(1, n);<br />
end<br />
end<br />
Mit Hilfe der nächsten beiden Schleifen wird hinter jede Messung, in die letzte<br />
Spalte <strong>von</strong> ForceIn, die dort angebrachte Kraft geschrieben. Die äußere Schleife<br />
zählt die Variable c in Schritten <strong>von</strong> forces bis <strong>zur</strong> gesamten Anzahl aller<br />
Messpunkte bzw. Spalten <strong>von</strong> ForceIn hoch (d.h. sie macht rows * cols<br />
Durchläufe), das bedeutet sie geht der Reihe nach alle Messpunkte durch. An<br />
jedem Messpunkt gibt es wiederum eine Messung für jede Kraft. Die innere<br />
Schleife zählt nun an jedem Messpunkt alle angebrachten Kräfte forces_v durch<br />
und schreibt sie nacheinander hinter die Messungen, bevor die äußere Schleife<br />
wieder zum nächsten Messpunkt geht.<br />
Zur Weiterverarbeitung muss die listenförmige Matrix in mehrere<br />
dreidimensionale Wertetabellen zerlegt werden. Es wird eine Matrix jeweils für<br />
jeden Sensor (zusätzlich die Summe aller Sensoren) und jede angebrachte Kraft<br />
erstellt. Diese einzelnen Wertetabellen, <strong>mit</strong> dem in Tabelle 3-4 dargestellten
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 38<br />
Aufbau, werden zusammen nach dem Muster aus Abbildung 3-3 in die Matrix<br />
Werte geschrieben.<br />
Sensor 1<br />
Kraft 1<br />
Sensor 2<br />
Kraft 1<br />
Sensor sensors<br />
Kraft 1<br />
∑ Sensoren<br />
Kraft 1<br />
Sensor 1<br />
Kraft 2<br />
Sensor 2<br />
Kraft 2<br />
Tabelle 3-4: Eine einzelne dreidimensionale Wertetabelle<br />
0 x1 x2 x3 … xcols<br />
y1 F(x1, y1) F(x2, y1) F(x3, y1) … F(xcols, y1)<br />
y2 F(x1, y2) F(x2, y2) F(x3, y2) … F(xcols, y2)<br />
y3 F(x1, y3) F(x2, y3) F(x3, y3) … F(xcols, y3)<br />
… … … … … …<br />
yrows F(x1, yrows) F(x2, yrows) F(x3, yrows) … F(xcols, yrows)<br />
Zum Erzeugen der Werte-Matrix werden die folgenden vier ineinander<br />
verschachtelten for-Schleifen benötigt:<br />
Sensor 1<br />
Kraft forces<br />
Sensor 2<br />
Kraft forces<br />
… … … …<br />
Sensor sensors<br />
Kraft 2<br />
∑ Sensoren<br />
Kraft 2<br />
Abbildung 3-3: Aufbau der Matrix Werte<br />
Sensor sensors<br />
Kraft forces<br />
for sen = 1:(sensors + 1)<br />
for f = 1:forces<br />
n = (sen-1) * (rows + 2);<br />
m = (f-1) * (cols + 2);<br />
for j = 2:(rows+1)<br />
for i = 2:(cols+1)<br />
reihe = ((i-1) * rows - (j-2)) * forces;<br />
x_wert = ForceIn(reihe, 1);<br />
y_wert = ForceIn(reihe, 2);<br />
…<br />
…<br />
…<br />
…<br />
∑ Sensoren<br />
Kraft forces<br />
Werte(1 + n, i + m) = x_wert;<br />
Werte(j + n, 1 + m) = y_wert;<br />
Werte(j + n, i + m) = ForceIn((reihe - 4 + f), 2 + sen);<br />
end<br />
end<br />
end<br />
end<br />
Die innersten beiden Schleifen geben, <strong>mit</strong> dem Schleifezähler j für die Spalte<br />
und <strong>mit</strong> i für die Reihe in der Matrix, die Position des zu schreibenden
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 39<br />
Messwertes in einer einzelnen Wertetabelle an, sie tasten dort also den kompletten<br />
Bereich <strong>mit</strong> den Kraftwerten ab. Die Variable reihe stellt das Bindeglied<br />
zwischen listenförmiger und dreidimensionaler Wertetabelle dar. Mit ihr wird<br />
berechnet, in welcher Zeile der Liste ForceIn der Kraftwert <strong>mit</strong> der Position<br />
(j, i) in der dreidimensionalen Wertetabelle steht. Die x- und y-Koordinate<br />
dieses Kraftwertes, gespeichert in den Variablen x_wert und y_wert, ergibt sich<br />
aus der ersten bzw. zweiten Spalte dieser Zeile, welche dann in die erste Reihe<br />
bzw. Spalte der dreidimensionalen Wertetabelle geschrieben wird.<br />
Da dieser Vorgang aber für jeden Sensor und jede angebrachte Kraft wiederholt<br />
werden muss, gibt es die äußerste Schleife, die <strong>mit</strong> der Variablen sen die<br />
Sensoren und zusätzlich die Summer aller Sensoren durchgeht, und die nächst<br />
innere Schleife, die <strong>mit</strong> der Variablen f die verschiedenen Kräfte durchzählt. Aus<br />
ihnen werden die Variablen n und m berechnet, die den vertikalen bzw.<br />
horizontalen Anfangspunkt einer einzelnen Wertetabelle innerhalb <strong>von</strong> Werte<br />
angeben, wobei zwischen den einzelnen Wertetabellen in jeder Richtung ein<br />
Abstand <strong>von</strong> eins besteht, der automatisch <strong>mit</strong> Nullen gefüllt wird.<br />
Später werden die Einzelmatrizen aus Werte für eventuelle Weiterverarbeitungen<br />
in Excel-Tabellen exportiert.<br />
Im nächsten Abschnitt wird ein Diagramm erstellt, das die Summe aller<br />
Sensorwerte einer Messung in Abhängigkeit der bei dieser Messung angebrachten<br />
Kraft darstellt. Dies soll es später bei der Ortberechnung ermöglichen, <strong>von</strong> der<br />
Sensorspannung in eine Kraft um<strong>zur</strong>echnen.<br />
Forces_x = ForceIn(:, sensors + 4)<br />
Forces_y = ForceIn(:, sensors + 3);<br />
plot(Forces_x, Forces_y, ...);<br />
Hier<strong>mit</strong> wird zuerst ein Diagramm <strong>mit</strong> der Spalte aus ForceIn <strong>mit</strong> der<br />
angebrachten Kraft entlang der Abszisse, Forces_x, und die Summe der Kräfte<br />
entlang der Ordinate, Forces_y, erstellt.<br />
Anschließend soll für die spätere Berechnung eine Ausgleichsgerade der Form<br />
Kraft ( Sensorwert)<br />
= m * Sensorwert + t * 1<br />
über die Messwerte gelegt werden.<br />
for n = 1:rows * cols * forces<br />
links(n, :) = [Forces_x(n, 1), 1];<br />
end
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 40<br />
Zur Berechnung der Parameter der Geradengleichung m und t muss zunächst das<br />
Gleichungssystem aus Formel 3-1 <strong>mit</strong> allen Kräften und Sensorwerten erstellt<br />
werden. Die Matrix links enthält die Koeffizienten der „linken Seite“ der<br />
Gleichungen.<br />
Formel 3-1: Aufbau des Gleichungssystems<br />
⎛<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎜<br />
⎝<br />
∑<br />
∑<br />
∑<br />
∑<br />
F(<br />
x , y )<br />
F(<br />
x , y )<br />
F(<br />
x , y )<br />
F(<br />
x<br />
...<br />
cols<br />
1<br />
2<br />
3<br />
, y<br />
1<br />
2<br />
3<br />
rows<br />
solution = links\Forces_y;<br />
m = solution(1, 1);<br />
t = solution(2, 1);<br />
)<br />
1 ⎞ ⎛ Force _1<br />
⎞<br />
⎟ ⎜<br />
⎟<br />
1 ⎟ ⎜ Force _ 2 ⎟<br />
⎟ ⎜<br />
⎟ ⎛m<br />
⎞<br />
1 = Force _ 3 * ⎜ ⎟<br />
⎟ ⎜<br />
⎟ ⎝ t<br />
...<br />
⎠<br />
⎟ ⎜ ... ⎟<br />
⎟<br />
1 ⎜<br />
⎟<br />
⎠ ⎝ Force _ forces⎠<br />
links Forces_y solution<br />
Man erhält nun durch linke Matrixdivision <strong>von</strong> links durch Forces_y die Matrix<br />
solution <strong>mit</strong> den Gleichungskoeffizienten m und t. Da es sich hierbei um ein<br />
überbestimmtes Gleichungssystem handelt, nähert <strong>MATLAB</strong> die Lösung<br />
automatisch <strong>mit</strong> der Methode der kleinsten Fehlerquadrate an.<br />
x = 0:0.1:(F_max+1);<br />
y = m * x + t;<br />
Anschließend wird ein Vektor x als Eingabe für die Funktion erstellt und diese<br />
<strong>mit</strong> den oben gefundenen Parametern in dem Vektor y berechnet.<br />
if t > 0<br />
t_string = ['+ ' num2str(t)];<br />
end<br />
if t < 0<br />
t_string = num2str(t);<br />
end<br />
if t == 0<br />
t_string = '';<br />
end<br />
Um die Gleichung später in dem Diagramm anzeigen zu können, muss der<br />
Parameter t in einen String umgewandelt werden. Wenn t negativ ist, geschieht<br />
diese Umwandlung direkt über die in <strong>MATLAB</strong> integrierte Funktion num2str. Ist<br />
t aber positiv, muss noch ein „+“ vor dem String hinzugefügt werden, um die
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 41<br />
Gleichung in der Form „y = m * x + t“ anzeigen zu können. Sollte t gleich Null<br />
sein, d.h. die Gerade ist tatsächlich eine Ursprungsgerade, fällt t weg.<br />
string = ['f(x) = ' num2str(m) ' * x ' t_string];<br />
In string werden die einzelnen Segmente des Strings der Geradengleichung<br />
zusammengesetzt. Im weiteren Quelltext wird die Gerade gezeichnet, die<br />
Achsengbeschriftungen gesetzt, der Text <strong>mit</strong> der Geradengleichung platziert, die<br />
Achsenbegrenzungen gesetzt und das Diagramm als .png-Bilddatei gespeichert.<br />
Das so erzeugte Diagramm ist in Diagramm 3-26 dargestellt.<br />
Der nächste Schritt im Programmablauf ist es, ein Diagramm <strong>mit</strong> den<br />
Sensorwerten aller Sensoren in Abhängigkeit der x-Koordinate (bzw. y-<br />
Koordinate) zu erstellen, wobei die y-Koordinate (bzw. x-Koordinate) und die<br />
angebrachte Kraft in dem jeweiligen Diagramm konstant sind. Hierfür werden<br />
zwei Schleifen benötigt, um zum einen Diagramme für jede Reihe, also die Kraft<br />
in Abhängigkeit <strong>von</strong> x, bei verschiedenen y, und zum anderen für jede Spalte, also<br />
die Kraft in Abhängigkeit <strong>von</strong> y, bei verschiedenen x, zu zeichnen, alle<br />
Diagramme jeweils für alle verschiedenen angebrachten Kräfte. (siehe Diagramm<br />
3-15 bzw. Diagramm 3-16)<br />
Die folgende Beschreibung des Programms befasst sich <strong>mit</strong> der spaltenweisen<br />
Darstellung, die reihenweise Darstellung erfolgt analog dazu.<br />
for col_nr = 1:(rows*forces):(rows * cols * forces)<br />
for force_nr = 1:forces<br />
end<br />
...<br />
end<br />
Die eigentliche Plot-Funktion wird umgeben <strong>von</strong> zwei for-Schleifen, die diese auf<br />
alle Spalten, angegeben durch die Variable col_nr, und alle Kräfte, angegeben<br />
durch die Variable force_nr, anwenden, d.h. ein Durchlauf einer dieser<br />
Schleifen bedeutet die Erstellung eines neuen Diagramms bzw. einer neuen Datei.<br />
for sen = 1:sensors<br />
...<br />
end<br />
Da das Diagramm die Kurven aller Sensoren enthalten soll, muss die Plot-<br />
Funktion für jeden Sensor, bei aktiviertem hold, wiederholt werden.
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 42<br />
row = 1;<br />
for n = 1:forces:(forces * rows)<br />
Plot (row, 1) = ForceIn (n + force_nr + col_nr - 2, 2);<br />
Plot (row, 2) = ForceIn (n + force_nr + col_nr - 2, 2 + sen);<br />
row = row + 1;<br />
end<br />
Für den Plot wird hier eine Wertetabelle Plot erstellt, indem eine weitere for-<br />
Schleife <strong>mit</strong> der Variablen n alle Reihen, d.h. alle y-Koordinaten in ForceIn,<br />
durchgeht. Zusätzlich verschieben die Variablen force_nr, für die Nummer der<br />
aktuellen Kraft, und col_nr, für die Position der aktuellen Spalte in ForceIn, die<br />
Position des zu schreibenden x-Werts. Mit der Variable sen wird die Spalte in<br />
ForceIn des aktuellen Sensors, bei der aus den obigen drei Variablen errechneten<br />
Spalte in ForceIn, er<strong>mit</strong>telt. Der so gefundene Kraftwert wird in die zweite<br />
Spalte der Plot-Matrix geschrieben, unter der, aus Spalte zwei <strong>von</strong> ForceIn<br />
gefundenen, y-Koordinate.<br />
line = 1.5;<br />
marker = 15;<br />
color = char(colors(sen));<br />
style = [color, '.-'];<br />
plot(Plot(:,1), Plot(:,2), ...);<br />
Für das Zeichnen der Graphen wird im Folgenden die Linien- und<br />
Markierungsdicke gesetzt, der Farbwert des aktuellen Sensors aus der zu Beginn<br />
eingegebenen Matrix colors ausgelesen und in einen String color<br />
umgewandelt, ein String style für den Linientyp aus der Farbe und den Zeichen<br />
„.“ für den Markierungstyp „Punkt“ und „-“ für die Linienart „durchgehende<br />
Linie“ zusammengesetzt und der Graph durch die Funktion plot <strong>mit</strong> diesen<br />
Attributen gezeichnet.<br />
for leg = 1:sensors<br />
legend_forces = [legend_forces; 'Force ' char(sensors_v(leg))];<br />
end<br />
Nachdem die Graphen der einzelnen Sensoren gezeichnet wurden, wird die<br />
Legende des Diagramms in das Character-Array legend_forces geschrieben.<br />
Dies geschieht indem eine Schleife <strong>mit</strong> der Variablen leg alle Sensoren<br />
durchzählt. Bei jedem Durchlauf wird an das bestehende Array der String<br />
„Force “ plus der Bezeichnung des aktuellen Sensors hinzugefügt, um so nach<br />
dem Ende der Schleife eine Liste <strong>mit</strong> allen Kurvenbezeichnungen zu erhalten.
3.3 Statische Messung - Erklärung des Programms <strong>zur</strong> automatischen Messauswertung 43<br />
Zu dem Diagramm werden noch die Abszissen- und Ordinaten-Beschriftungen<br />
festgelegt, der Diagrammtitel hinzugefügt und die Achsenbegrenzungen gesetzt.<br />
if forces_v(force_nr) < 1000<br />
F = ['0' F];<br />
end<br />
Sollte die aktuelle angebrachte Kraft kleiner als Tausend sein, wird vor den String<br />
dieser Kraft, der in der auszugebenden png-Bilddatei Verwendung findet, eine<br />
Null hinzugefügt, um eine sinnvolle Sortierung der Dateien unter Windows zu<br />
gewährleisten.<br />
Anstatt die Werte aller Sensoren in einem Diagramm sowohl für jede gemessene<br />
Spalte (Abschnitt #1), als auch für jede gemessene Reihe (Abschnitt #2) bei jeder<br />
angebrachten Kraft zu zeichnen, lassen sich auch Diagramme jeweils für einen<br />
Sensor erstellen, die jeweils alle gemessenen Spalten (Abschnitt #4) oder alle<br />
gemessenen Reihen (Abschnitt #3) enthalten, wieder jeweils für jede angebrachte<br />
Kraft. Des Weiteren lassen sich zu letzteren beiden Diagrammen auch zusätzlich<br />
Ausgleichsgeraden eines horizontalen (Abschnitt #6) bzw. vertikalen (Abschnitt<br />
#5) Verlaufs in das Diagramm zeichnen, jedoch hat dies aufgrund des<br />
nichtlinearen vertikalen Verlaufs dort keinen Zweck.
4.1 Dynamische Messung - Durchführung der Messung 44<br />
4. Dynamische Messung<br />
4.1. Durchführung der Messung<br />
Ziel der dynamischen Messung war es nicht, noch einmal die komplette Platte <strong>mit</strong><br />
Impulsen zu vermessen, sondern eine Sammlung <strong>von</strong> verschiedenen Kraft-Zeit-<br />
Verläufen für die Auswertung zu sammeln. Für die Messung wurde das gleiche<br />
Raster der zweiten statischen Messung verwendet. Anstatt des Kraftmessers<br />
wurde ein Hubmagnet auf der Messschiene befestigt, der über einen Verstärker<br />
<strong>mit</strong> einem externen Netzteil <strong>mit</strong> dem Computer verbunden ist. An dem Magneten<br />
ist ein weiterer <strong>Kraftsensor</strong> angebracht, der direkt die vom Magneten auf die<br />
Platte aufgebrachte Kraft misst. Der Messablauf konnte vereinfacht werden, da<br />
die einzelnen Messungen nun komplett vom Computer aus steuerbar sind. Zu<br />
Beginn einer Messung wird zunächst über einen Schieberegler die Spannung des<br />
Magneten eingestellt. Bei Betätigung des Buttons für die Messung wird für 1,5s<br />
im Messverstärker „hold“ deaktiviert, um den Offset der Sensoren<br />
herunter<strong>zur</strong>egeln, und anschließend wieder für die Messung zu aktivieren. Nach<br />
0,5s, dieses Zeitintervall wird bei der Auswertung für den Ruhewert genutzt, wird<br />
für 2s die eingestellte Spannung an dem Magneten angelegt. Dieser Vorgang wird<br />
an jedem Punkt für vier verschiedene Kräfte bzw. Spannungen wiederholt. Um<br />
bei allen Messpunkten Impulse gleicher Stärke zu erhalten, muss der Hubmagnet<br />
immer im gleichen Abstand <strong>von</strong> der Platte angebracht werden. Dazu wurde bei<br />
diesem Versuch vor einer Messung ein Plastiklineal so zwischen Platte und<br />
Sensor angebracht, dass am <strong>Kraftsensor</strong> des Hubmagneten gerade keine Kraft<br />
anlag.<br />
4.2. Auswertung und Ergebnisse der Messung<br />
Der Unterschied zwischen dynamischer und statischer Messung, besteht darin,<br />
dass hier keine konstante Kraft gemessen wird, <strong>von</strong> der bei der Auswertung<br />
einfach ein Mittelwert über dem Messintervall genommen werden kann, sondern<br />
ein ständig variierender Kraftverlauf. Deshalb kam es bei der Auswertung vor<br />
allem darauf an, eine Möglichkeit, aus diesem Kraftverlauf wieder eine konstante<br />
Kraft auszulesen, zu finden und die Stärke des Impulses zu bestimmen. Dazu<br />
wurde anfangs das Muster eines dynamischen Zeit-Kraft-Verlaufs analysiert, um<br />
daraus Kriterien für eine automatische Auswertung zu entwickeln.
4.2 Dynamische Messung - Auswertung und Ergebnisse der Messung 45<br />
t0 t1 t2 t3 t4<br />
Diagramm 4-1: Zeit-Kraft-Verlauf eines Impulses<br />
Diagramm 4-1 zeigt den Zeit-Kraftverlauf eines Sensors <strong>mit</strong> einer hohen<br />
Amplitude <strong>zur</strong> Zeit des Eintreffens des Impulses des Hubmagneten, stellvertretend<br />
als Beispiel für die Kurven aller Sensoren. Zu Beginn des dargestellten Intervalls<br />
zum Zeitpunkt t0 befinden sich die Platte in Ruhe, der Hubmagnet ist vollständig<br />
<strong>von</strong> der Platte entfernt. Gleichzeitig wird an ihm die verstärkte<br />
Ausgangsspannung des Computers angelegt. In dem Intervall <strong>von</strong> t0 bis t1 trifft<br />
nun die in Bewegung gebrachte Spitze des Magneten auf die Platte auf und<br />
wandelt ihre kinetische Energie in elastische Energie der Platte um. Zum<br />
Zeitpunkt t1 ist die kinetische Energie komplett in elastische Energie<br />
umgewandelt worden, d.h. der Magnet hat die Geschwindigkeit Null und die<br />
Platte ist maximal gespannt, was dazu führt, dass der Magnet wieder leicht in die<br />
entgegengesetzte Richtung beschleunigt wird, aber durch die immer noch<br />
wirkende Kraft auf der Platte gehalten wird, wobei die elastische Energie wieder<br />
in kinetische Energie übergeht. Die Kraft des Magneten sorgt nun dafür, dass der<br />
Magnet wieder abgebremst und auf die Platte zu beschleunigt wird. So findet die<br />
ganze Zeit ein Wechsel zwischen kinetischer Energie und elastischer Energie statt,<br />
der <strong>zur</strong> im Diagramm sichtbaren Schwingung des Systems führt. Die Schwingung
4.2 Dynamische Messung - Auswertung und Ergebnisse der Messung 46<br />
wird dadurch gedämpft, dass dem System durch Reibung Energie entzogen wird,<br />
was zu einer exponentiellen Abnahme der Amplitude führt. Bei ca. Zeitpunkt t2<br />
hat sich das System stabilisiert, es herrscht ein Kräftegleichgewicht zwischen der<br />
Kraft des Magneten und der Gegenkraft der Platte, das bis Zeitpunkt t3<br />
beibehalten wird. Dann wird nach 2s bei Zeitpunkt t3 die Spannung vom<br />
Hubmagneten entfernt, wodurch dieser schlagartig, beschleunigt durch einen<br />
Gummiring, der an dem Magneten angebracht ist, <strong>von</strong> der Platte <strong>zur</strong>ückschnellt.<br />
Durch den schnellen Abfall der Kraft des Magneten herrscht nun kein<br />
Kräftegleichgewicht mehr und die Platte wird, da die Masse der Platte konstant<br />
ist, gemäß dem zweiten Newton’schem Axiom nach F = m * a (Kraft ist gleich<br />
Masse mal Beschleunigung), in Bewegung gesetzt, wobei die elastische Energie<br />
der Platte in Bewegungsenergie umgewandelt wird, was, genauso wie schon beim<br />
Eintreffen des Impulses beschrieben, zu einem Ausschwingen der Platte führt, bis<br />
sie sich ca. bei Zeitpunkt t4 auf ihrem Neutralwert stabilisiert.<br />
Ein mechanisches Analogon hierzu ist das vertikal gedämpft schwingende<br />
Federpendel, bei dem ebenfalls die Energie ständig zwischen kinetischer und<br />
elastischer Energie umgewandelt wird. Stabilisiert wird das Pendel an dem Punkt,<br />
wo Federkraft und Gewichtskraft der Masse des Pendelkörpers im Gleichgewicht<br />
sind. Dem Aufbringen des Impulses auf die Platte entspräche das Fallenlassen des<br />
Pendelgewichtes und das anschließende Einpendeln auf der Ruheposition. Dem<br />
schlagartigen Entfernen des Hubmagneten entspräche das Abtrennen des im<br />
Gleichgewicht <strong>mit</strong> der Feder befindlichen Pendelgewichtes und das anschließende<br />
Ausschwingen der Feder.<br />
P1<br />
P2
4.2 Dynamische Messung - Auswertung und Ergebnisse der Messung 47<br />
Diagramm 4-2: Er<strong>mit</strong>tlung der Kraft des Hubmagneten<br />
Nun ist zunächst das Ziel der Auswertung, die konstante Kraft des Hubmagneten<br />
während dem Kräftegleichgewicht zu er<strong>mit</strong>teln.<br />
Wie in Diagramm 4-1 gezeigt, sind für die Er<strong>mit</strong>tlung der Kraft des Hubmagneten<br />
die Zeitpunkte t1 und t3 wichtig, da zwischen ihnen diese Kraft aufgebracht wird.<br />
Um diese Punkte automatisch in einer Messung zu finden, wird für jeden<br />
Messpunkt zuerst der Sensor ausgewählt, der bei diesem Zeit-Kraft-Verlauf die<br />
höchste Amplitude besitzt, da dort die Kurve am stärksten ausgeprägt ist. Der<br />
Startpunkt des Kraftintervalls P1 befindet sich in der auf dem <strong>mit</strong>tleren Kraftwert<br />
zwischen dem ersten Hochpunkt und dem ersten Tiefpunkt, also in der Mitte der<br />
ersten Schwingung. Genauso befindet sich der Endpunkt P2 in der Mitte der<br />
letzten Schwingung vor dem Kraftabfall. Der Kraftwert errechnet sich, indem für<br />
jeden Sensor der Mittelwert in dem <strong>von</strong> den beschriebenen Zeitpunkten<br />
begrenztem Intervall genommen wird.<br />
t1 t2<br />
Diagramm 4-3: Er<strong>mit</strong>tlung des Impulses des Hubmagneten<br />
Diagramm 4-3 zeigt den Ausschnitt aus dem vorherigen Diagramm, auf dem der<br />
Einschlag des Hubmagneten erkennbar ist. Zur Bestimmung der Stärke des<br />
Impulses kommt es auf die Maximalkraft F1 und die Kraft des Hubmagneten F0
4.2 Dynamische Messung - Auswertung und Ergebnisse der Messung 48<br />
bei der Summe aller sechs Sensorkurven an. Die Differenz aus den beiden ist die<br />
Kraft, die durch die zeitliche Impulsänderung des Magneten aufgebracht wird.<br />
Das zweite Newton’sche Axiom sagt auch aus, dass die Kraft die Impulsänderung<br />
pro Zeit ist, also F = p&<br />
, d.h. die Kraft ist die Ableitung des Impulses nach der<br />
Zeit. Integriert man diese Gleichung nach der Zeit, erhält man<br />
t2<br />
∫<br />
t1<br />
F ( t)<br />
dt = p − p , d.h. die Impulsänderung ist das Integral der Kraft über die<br />
2<br />
1<br />
Zeit, wobei der Anfangsimpuls des Magneten p1 gleich Null ist, da dieser in Ruhe<br />
liegt. Die Stärke des Impulses ist also die Fläche unter dem Kraft-Zeit-Verlauf<br />
<strong>von</strong> F1 bis zu F0, die unten <strong>von</strong> F0 beschränkt wird. Die Integrationsgrenzen sind<br />
deswegen die Zeitpunkte t1 und t2, zu denen die Kraft der ersten Schwingung<br />
gleich der Kraft des Hubmagneten F0 ist, bzw. am nächsten daran liegt. Von der<br />
Fläche des Integrals wird noch die gesamte Fläche unterhalb <strong>von</strong> F0 abgezogen.<br />
Mit dieser Berechnung erhält man nun die Fläche, die im Graphen rot markiert ist.<br />
Die Stärke des Impulses ergibt sich folglich aus der Hälfte dieser Fläche.<br />
In<br />
Diagramm 4-4: Zeit-Kraft-Verlauf aller gemessenen Impulse
4.3 Dynamische Messung - Probleme bei der Berechnung 49<br />
Diagramm 4-4 wurden die Zeit-Kraft-Kurven aller 144 gemessenen Messungen<br />
aufeinander gelegt. Es zeigt zum einen, dass der in Diagramm 4-1 gezeigte Ablauf<br />
bei jedem Sensor an jedem Punkt exakt gleich ist und es so<strong>mit</strong> möglich ist, die an<br />
einem Messpunkt bei einem Sensor gefundenen Zeitpunkte auf die anderen<br />
Sensoren anzuwenden. Keine der 144 verschiedenen gemessenen Schwingungen<br />
nach dem Entfernen des Hubmagneten reißt aus dem Schema aus, sie sind alle<br />
gleichphasig. Da es sich um eine freie Schwingung des Systems Platte-Sensoren<br />
handelt, schwingt die dargestellte Schwingung <strong>mit</strong> der Eigenfrequenz dieses<br />
Systems.<br />
4.3. Probleme bei der Berechnung<br />
Wie Kapitel 2.1 erwähnt, ist das <strong>mit</strong>tlere Sensorpaar verdreht eingebaut und wird<br />
daher <strong>von</strong> DIAdem invertiert. Jedoch stellte sich nach Abschluss der dynamischen<br />
Messarbeiten heraus, dass wahrscheinlich durch diese Invertierung das Signal der<br />
Messung nur <strong>mit</strong> 100Hz, d.h. eine Messung alle 10ms, aufgezeichnet wird,<br />
während die vier restlichen Sensoren <strong>mit</strong> 1000Hz, d.h. eine Messung pro<br />
Millisekunde, aufgezeichnet werden. Das Problem ist nun nicht die<br />
unterschiedliche Messfrequenz für die Sensorsignale, da DIAdem die Daten der<br />
100Hz-Messung automatisch auf zehn Millisekunden ausbreitet (d.h. jedem<br />
wirklich gemessenen Wert neun gleiche Kopien nachfolgen lässt), sondern die<br />
dadurch entstehende Ungenauigkeit. Für die dynamische Messung wurden die<br />
<strong>mit</strong>tlere Reihe, und die drei Reihen über dieser gemessen, also genau auf Höhe<br />
der <strong>mit</strong>tleren Sensoren. Deshalb ist die oben beschriebene Impulsberechnung nur<br />
sehr ungenau, da das Integral <strong>zur</strong> Impulsberechnung nur eine Länge <strong>von</strong> ca. 40ms<br />
hat, d.h. die <strong>mit</strong>tleren Sensoren messen während dieser Zeit nur vier Kraftwerte.<br />
Dadurch, dass in dem gemessenen Bereich die <strong>mit</strong>tleren Sensoren die höchste und<br />
die restlichen Sensoren nur eine sehr geringe Amplitude haben, lassen sich auch<br />
die Integrationsgrenzen nur auf 10ms genau bestimmen. Da für die<br />
Impulsberechnung die Summe aus allen sechs Sensoren verwendet wird, breitet<br />
sich diese Ungenauigkeit auf die gesamte Berechnung aus. Um eine genaue<br />
Berechnung zu ermöglichen, müsste diese Messung <strong>mit</strong> einer durchgängigen<br />
Messfrequenz <strong>von</strong> 1000Hz wiederholt werden, was leider aus Zeitgründen nicht<br />
durchführbar ist.
5.1 Die Ortberechnung - Berechnung durch zwei Sensorgleichungen 50<br />
5. Die Ortberechnung<br />
5.1. Berechnung durch zwei Sensorgleichungen<br />
Bei der Auswertung der ersten statischen Messung entstanden die in 3.2<br />
beschriebenen Sensorgleichungen. Da zu Beginn der Berechnungen noch wenig<br />
Erfahrung in <strong>MATLAB</strong> vorlag, wurde vorerst versucht, das Problem der<br />
Ortberechnung <strong>mit</strong> konventionellen Mitteln zu lösen. Da jede dieser<br />
Sensorgleichungen nur zwei Unbekannte, x und y, besitzt, ist es möglich, dieses<br />
Gleichungssystem auch <strong>mit</strong> nur zwei Gleichungen zu lösen. Dies kann man<br />
erreichen, indem man eine Gleichung nach x und die andere nach y auflöst und<br />
eine Gleichung jeweils in die andere einsetzt. Man erhält ein Polynom zweiter<br />
Ordnung, das sich <strong>mit</strong> Hilfe der Lösungsformel für quadratische Gleichungen<br />
(„Mitternachtsformel“) nach x bzw. y auflösen lässt.<br />
Gleichung für ersten Sensor: Q = ( a * y + b)<br />
* x + c * y + d<br />
Gleichung für zweiten Sensor: W = ( e * y + f ) * x + g * y + h<br />
Nach x aufgelöste Gleichung:<br />
− aQ + ah − bg + eW − de + cf +<br />
x =<br />
Nach y aufgelöste Gleichung:<br />
− eW + de − bg + aQ − ah + cf +<br />
y =<br />
( aQ − ah + bg − eW + de − cf )² − 4(<br />
be − af )( −gW<br />
+ cQ − ch + dg)<br />
2(<br />
be − af )<br />
( eW − de + bg − aQ + ah − cf )² − 4(<br />
ag − ce)(<br />
bh − bQ + fW − df )<br />
2(<br />
ag − ce)<br />
Der Nachteil dieser Methode ist, neben der Unübersichtlichkeit, dass der Ort<br />
immer nur aus zwei Sensoren berechnet wird. Allerdings ließen sich dadurch<br />
schon erste <strong>Analyse</strong>n <strong>zur</strong> Genauigkeit der Berechnung durchführen.<br />
In den folgenden beiden Diagrammen sind die Abweichungen der aus den<br />
Gleichungen <strong>von</strong> Sensor „ul“ und „ur“ berechneten Koordinaten zu den<br />
tatsächlichen Koordinaten dargestellt. Dort sind jeweils als blaue Quadrate alle<br />
Messpunkte zu sehen, die roten Kreise stellen die berechneten x-Koordinaten, wie<br />
in Diagramm 5-1, bzw. y-Koordinaten, wie in Diagramm 5-2, dar. Zur<br />
Orientierung sind zusätzlich die Positionen der Sensoren markiert.<br />
In Diagramm 5-1 zeigt sich, dass die x-Koordinaten in der Nähe der Sensoren,<br />
also im oberen Viertel der gesamten Platte, <strong>mit</strong> sehr guter Genauigkeit berechnet<br />
werden. Entfernt man sich immer weiter <strong>von</strong> den Sensoren, werden die
Platte X<br />
Platte Y<br />
110<br />
90<br />
70<br />
50<br />
30<br />
10<br />
5.1 Die Ortberechnung - Berechnung durch zwei Sensorgleichungen 51<br />
berechneten x-Koordinaten immer weiter gestreut, da durch den weiteren Weg<br />
zum Sensor die am Sensor gemessene Kraft immer mehr verfälscht wird.<br />
Abweichungen MessungFunktion aus ul-ur<br />
90 100 110 120 130 140 150 160 170 180<br />
-10<br />
190<br />
170<br />
150<br />
130<br />
110<br />
Platte Y<br />
Diagramm 5-1: x-Abweichungen Messung - Funktion aus ul-ur<br />
Abweichungen MessungFunktion aus ul-ur<br />
ur ul<br />
90<br />
0 10 20 30 40 50 60 70 80<br />
Platte X<br />
Diagramm 5-2: y-Abweichungen Messung - Funktion aus ul-ur<br />
ul<br />
ur<br />
X-Mess<br />
X-Funktion<br />
Y-Mess<br />
Y-Funktion
5.1 Die Ortberechnung - Berechnung durch zwei Sensorgleichungen 52<br />
Die in Diagramm 5-2 berechneten y-Koordinaten weisen jedoch ein ganz anderes<br />
Abweichungsbild auf. Die berechneten y-Koordinaten scheinen während eines<br />
horizontalen Verlaufs immer in einem Bogen angeordnet zu sein, die größten<br />
Abweichungen gibt es jeweils an den Rändern der Platte. Diagramm 5-3 zeigt<br />
eine übersichtlichere Darstellung dieser Abweichungen. Hier sind die<br />
prozentualen Abweichungen <strong>von</strong> Funktionswert und Messwert in Abhängigkeit<br />
vom Ort dargestellt.<br />
%<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
-1<br />
-2<br />
-3<br />
-4<br />
99<br />
109<br />
y-Abweichung Messwert Funktion aus ul-ur<br />
119<br />
129<br />
Ort vertikal<br />
139<br />
149<br />
Diagramm 5-3: prozentuale y-Abweichungen dreidimensional<br />
159<br />
Auch hier weist wieder der gleichmäßige Verlauf der Abweichung darauf hin,<br />
dass diese Abweichungen nicht (nur) durch Messungenauigkeiten verursacht<br />
wurden, sondern dass die Funktion eben nicht linear verläuft. Jedoch ergibt sich<br />
für die x-Koordinate eine geringere durchschnittliche Genauigkeit <strong>von</strong> 6,6%, als<br />
bei der y-Koordinate <strong>mit</strong> 1,6%. (Berechnet jeweils für jede Zweier-Kombinaten<br />
aus den oberen vier Sensoren: abweichungen_funktion-messwerte-ml_mr.xls,<br />
abweichungen_funktion-messwerte-ml_ul.xls, abweichungen_funktion-messwerte-<br />
ml_ur.xls, abweichungen_funktion-messwerte-mr_ur.xls, abweichungen_funktion-<br />
messwerte-ul_mr.xls und abweichungen_funktion-messwerte-ul_ur.xls)<br />
169<br />
179<br />
68<br />
48<br />
28<br />
8<br />
Ort horizontal<br />
5-6<br />
4-5<br />
3-4<br />
2-3<br />
1-2<br />
0-1<br />
-1-0<br />
-2--1<br />
-3--2<br />
-4--3
5.2 Die Ortberechnung - Berechnung durch mehrere Sensorgleichungen 53<br />
5.2. Berechnung durch mehrere Sensorgleichungen<br />
Die Verwendung <strong>von</strong> mehreren Gleichungen <strong>zur</strong> <strong>Orts</strong>berechnung, also mehr<br />
Gleichungen als Unbekannte, macht den Einsatz eines Tools zum Lösen dieses<br />
Gleichungssystems nötig, da für dieses Problem keine mathematische Lösung<br />
mehr gibt, sondern eine Lösung, die insgesamt bei allen Gleichungen die<br />
geringste Abweichung aufweist. Die Lösung muss also <strong>mit</strong> Hilfe der Methode der<br />
kleinsten Fehlerquadrate angenähert werden. Dies kann zum einen <strong>mit</strong> dem in<br />
Excel integrierten Solver bewerkstelligt werden, jedoch müsste dazu jeder Punkt<br />
einzeln optimiert werden (siehe berechnung_koordinaten_durch_solver.xls).<br />
Zur automatischen <strong>Orts</strong>berechnung (siehe Datei DATEI) wird die in <strong>MATLAB</strong><br />
integrierte Funktion fsolve zum Lösen nichtlinearer Gleichungssysteme<br />
verwendet. Dazu wird zuerst <strong>mit</strong> allen Sensoren der Ort eines Messpunktes<br />
berechnet, der anschließend in eines <strong>von</strong> vier gleich großen Feldern der oberen<br />
Plattenhälfte eingeteilt wird, wo der Ort noch einmal <strong>mit</strong> den Sensoren berechnet<br />
wird, die für diesen Bereich die besten Ergebnisse erzielen (Genauigkeit: x: 3,4%;<br />
y: 1,9%). Die Genauigkeitsanalyse wurde für jeden Sensor durchgeführt, indem in<br />
jede Sensorgleichung alle gemessenen x- bzw. y-Koordinaten eingesetzt und die<br />
daraus berechneten y- bzw. x-Koordinaten in ein Diagramm <strong>mit</strong> den tatsächlichen<br />
Koordinaten eingezeichnet wurden. Diagramm 3-1 ist ein Diagramm dieser Art,<br />
für den Sensor „ul“ bei Berechnung der x-Koordinaten.<br />
Diagramm 5-4: x-Abweichungen Messung - Funktion aus ul, y=const
5.3 Die Ortberechnung - Berechnung bei variabler aufgebrachter Kraft 54<br />
5.3. Berechnung bei variabler aufgebrachter Kraft<br />
Wie schon in Diagramm 3-25 gezeigt, verhalten sich alle Kraftwerte eines Sensor<br />
direkt proportional <strong>zur</strong> angebrachten Kraft, d.h. wird z.B. die doppelte Kraft auf<br />
einen Sensor aufgebracht, verdoppelt sich auch der gemessene Kraftwert an jedem<br />
Messpunkt:<br />
⎛ F1<br />
( x1,<br />
y1)<br />
⎜<br />
⎜ ...<br />
⎜<br />
⎝ F1<br />
( x1,<br />
yrows<br />
)<br />
...<br />
...<br />
...<br />
F1<br />
( xcols<br />
, y1)<br />
⎞ ⎛ F2<br />
( x1,<br />
y1)<br />
⎟ ⎜<br />
... ⎟ = const * ⎜ ...<br />
F ( , ) ⎟ ⎜<br />
1 xcols<br />
yrows<br />
⎠ ⎝ F2<br />
( x1,<br />
yrows<br />
)<br />
...<br />
...<br />
...<br />
F2<br />
( xcols<br />
, y1)<br />
⎞<br />
⎟<br />
... ⎟<br />
F ( , ) ⎟<br />
2 xcols<br />
yrows<br />
⎠<br />
Da dies bei einem einzelnen Sensor zutrifft, gilt dies auch für die Summe aller<br />
Sensoren an einem Messpunkt:<br />
F<br />
F<br />
2−Sensor<br />
2<br />
F<br />
F<br />
1 −Sensor<br />
1 1−Σ<br />
= =<br />
2−Σ<br />
const<br />
Der Programmablauf ist nun folgender: die <strong>Orts</strong>berechnung ist für einen<br />
bestimmten Kraftwert F 0−Σ<br />
definiert. Zuerst wird die Summe aller Sensorwerte an<br />
einem Messpunkt F 1−Σ<br />
berechnet, die Kraft die an diesem Punkt auf den Sensor<br />
einwirkt ist F 1.<br />
Gesucht ist der Kraftwert 0 F , der auf dem gleichen Punkt wie F 1<br />
bei einer Gesamtkraft <strong>von</strong> F 0−Σ<br />
auf den Sensor einwirken würde. Aus der oberen<br />
Gleichung ergibt sich für F 0 :<br />
F<br />
F0<br />
=<br />
F<br />
0−Σ<br />
1−Σ<br />
* F<br />
1
5.4 Die Ortberechnung - Berechnung <strong>mit</strong> einer Linearkombination 55<br />
5.4. Berechnung <strong>mit</strong> einer Linearkombination<br />
Bei der Auswertung der zweiten statischen Messung stellte sich heraus, dass die<br />
Fläche der Kraft-Ort-Sensorkurve nicht linear genähert werden kann. Deswegen<br />
war die Idee, die Funktion in vertikaler Richtung aus einem linearen und einem<br />
quadratischen Teil zusammen zu setzen. In Diagramm 5-5 ist in rot der lineare<br />
Verlauf der Gleichung für den oberen Teil der Fläche und in braun der<br />
quadratische Verlauf für den unteren Teil der Fläche in dem Kraft-Ort-Diagramm<br />
für Sensor „ul“ skizziert.<br />
Diagramm 5-5: Kraft-Ort Fläche <strong>mit</strong> skizzierter vertikaler zusammengesetzter Funktion<br />
Es ist zwar möglich, im zweidimensionalen jeden vertikalen Verlauf wie oben<br />
beschrieben zu optimieren, jedoch funktioniert dies nicht bei dreidimensionalen<br />
Flächen, wie Diagramm 5-6 zeigt.
5.4 Die Ortberechnung - Berechnung <strong>mit</strong> einer Linearkombination 56<br />
Diagramm 5-6: Kraft-Ort Fläche aus zwei zusammengesetzten Funktionen<br />
Hier wurde die Fläche aus einer linearen Funktion <strong>von</strong> y=2 bis y=100 und einer<br />
quadratischen <strong>von</strong> y=100 bis y=184 zusammengesetzt.<br />
Die lineare Funktion (Verlauf horizontal und vertikal linear):<br />
F = ( m * y + t ) * x + m * y + t<br />
1<br />
1<br />
2<br />
2<br />
Die quadratische Funktion (Verlauf horizontal linear, vertikal quadratisch):<br />
F = ( a * y²<br />
+ b * y + c)<br />
* x + d * y²<br />
+ e * y +<br />
Das Problem ist, dass die Optimierung der Gleichungskoeffizienten für jede der<br />
beiden separat durchgeführt wird, d.h. es werden eigentlich zwei verschiedene<br />
Flächen optimiert, die danach zusammengesetzt werden. Dies führt dazu, dass die<br />
Annäherung, im Gesamten betrachtet, sehr ungenau und „eckig“ ausfällt,<br />
besonders an den Nahtstellen.<br />
Da diese Art der <strong>Orts</strong>berechnung nun wegfiel, wurde ein alternativer<br />
Lösungsansatz verfolgt. Dieser besteht darin, sowohl die x- als auch die y-<br />
Koordinate als Linearkombination der sechs Sensorenwerte darzustellen:<br />
x = a * F + a * F + a * F + a * F + a * F + a * F<br />
1<br />
1<br />
1<br />
1<br />
2<br />
2<br />
2<br />
2<br />
3<br />
3<br />
y = b * F + b * F + b * F + b * F + b * F + b * F<br />
3<br />
3<br />
4<br />
4<br />
4<br />
4<br />
Dieser Weg ist sehr einfach und schnell zu rechnen, benötigt weniger zu<br />
er<strong>mit</strong>telnde Gleichungskoeffizienten als der Weg über sechs Sensorgleichungen<br />
und ist teilweise genauer (Abweichung x: 2,4%; y: 2,2%). Auch hier besteht<br />
wieder die Möglichkeit, die Platte in verschiedene Felder zu unterteilen, die <strong>mit</strong><br />
verschiedenen Koeffizienten gerechnet werden, jedoch haben Berechnungen<br />
gezeigt, dass sich dadurch nur ein minimal besseres Ergebnis erzielen lässt.<br />
5<br />
5<br />
f<br />
5<br />
5<br />
6<br />
6<br />
6<br />
6
5.4 6.<br />
Ergebnisse und Ausblick - Berechnung <strong>mit</strong> einer Linearkombination 57<br />
6. Ergebnisse und Ausblick<br />
Diese Seminararbeit zeigt, wie es möglich ist, aus einem unbekannten<br />
Messsystem nur <strong>mit</strong> Hilfe der Messdaten Rückschlüsse auf dieses System zu<br />
ziehen und daraus ein Modell zu erstellen, <strong>mit</strong> dem dieses berechenbar wird. Es<br />
war interessant festzustellen, wie aus scheinbar minimalen Veränderungen doch<br />
relativ präzise ein Wert bestimmt werden kann. Durch das Anbringen einer Kraft<br />
auf die Platte wird diese für das menschliche Auge so gut wie nicht sichtbar<br />
bewegt, was aber <strong>von</strong> den <strong>Kraftsensor</strong>en, trotz nur winziger Verbiegung ihrer<br />
Aluminiumträger, so genau registriert wird, dass aus den geringfügigen<br />
Unterschieden der sechs Sensoren der Ort des Eintreffens bestimmt werden kann.<br />
Allerdings ergeben sich auch daraus die Nachteile dieses Systems. Diese genaue,<br />
und auch notwendige Messung erfordert aber auch eine mindest ebenso genaue<br />
Messapparatur und Messdurchführung, die teilweise nicht gegeben waren. Die<br />
fälschliche Aufzeichnung der <strong>mit</strong>tleren Sensoren <strong>mit</strong> 100Hz zeigen, dass trotz<br />
einer, auf den ersten Blick, <strong>mit</strong> einer Messung alle hundertste Sekunde, sehr<br />
genauen Messaufzeichnung, diese Genauigkeit noch nicht ausreicht, um da<strong>mit</strong><br />
genaue Ergebnisse zu erzielen.<br />
Da die komplette Berechnung auf <strong>Messwerten</strong> basiert, wäre es für eine tiefer<br />
gehende <strong>Analyse</strong> und genauere Berechnung nötig, noch einmal Messungen<br />
durchzuführen. Dazu wäre eine Präzisierung des Messsystems nötig. Die Platte<br />
müsste ständig unter gleicher Temperatur und Luftfeuchtigkeit, also unter<br />
Laborbedingungen, gelagert sein. Auch sollte die Eichung der Sensoren vor dem<br />
Einbau vorgenommen werden. Des Weiteren müssten die mechanischen Elemente<br />
des Systems verstärkt und stabilisiert werden, um für einen festeren Stand der<br />
Apparatur und des Messgestells zu sorgen. Unter diesen Bedingungen wäre dann<br />
eine komplette Vermessung der Platte <strong>mit</strong> einem engeren Raster denkbar. Auch<br />
sollte für eine genauere Auswertung die gesamte Platte <strong>mit</strong> verschiedenen<br />
Impulsen vermessen werden, bei einer durchgängigen Messfrequenz <strong>von</strong> 1000Hz.<br />
Diese Seminararbeit könnte endlos fortgeführt werden. Interessant wäre der<br />
Nachbau des Systems aus Sensoren und Plexiglasplatte <strong>mit</strong> einem Finite Elemente<br />
Programm, um dort das Verhalten der Platte bei einwirkenden Impulsen<br />
durchzusimulieren und das Schwingungsverhalten sowie die Kraftverteilung und<br />
die Durchbiegung der Platte zu analysieren. Anschließend könnten die dadurch<br />
erhaltenen „theoretischen Messwerte“ <strong>mit</strong> den tatsächlich gemessenen verglichen
5.4 6.<br />
Ergebnisse und Ausblick - Berechnung <strong>mit</strong> einer Linearkombination 58<br />
werden, um diese zu bestätigen oder eventuell sogar zu widerlegen. Dazu müssten<br />
wiederum Messungen <strong>zur</strong> Bestimmung der plattenspezifischen Konstanten wie<br />
dem Elastizitätsmodul unternommen werden.<br />
Durch dieses Projekt habe ich selbst einen kleinen Einblick in die<br />
Forschungstätigkeiten an einer Universität bekommen und halte deswegen das<br />
Seminarfach für eine gute Vorbereitung und einen Vorgeschmack auf ein<br />
Studium. Das Seminarfach ermöglicht die Durchführung komplexerer Projekte,<br />
die bei einer herkömmlichen Facharbeit nicht denkbar sind, genauso wenig wie<br />
eine Arbeit, die mehrere Fachgebiete umfasst. Diese Versuchsdurchführung und –<br />
Auswertung <strong>mit</strong> <strong>MATLAB</strong> ® wäre in einem privaten Rahmen nie denkbar<br />
gewesen, weshalb es für die teilnehmende Schüler eine große Chance darstellt,<br />
diese Infrastruktur und Hilfestellung <strong>von</strong> einem externen Partner <strong>zur</strong> Verfügung<br />
gestellt zu bekommen. Wünschenswert wäre bei einem umfangreicheren Projekt<br />
jedoch eine längere Bearbeitungszeit gewesen, um die gebotenen Möglichkeiten<br />
auch gebührend auszuschöpfen und so<strong>mit</strong> den oben erwähnten Ausblick in der<br />
Arbeit umzusetzen.
7.1 Anhang - Abbildungsverzeichnis 59<br />
7. Anhang<br />
Abbildungen<br />
7.1. Abbildungsverzeichnis<br />
Abbildung 2-1: Die Degenfechtstation .................................................................... 6<br />
Abbildung 2-2: Eine Wägezelle (Sensor mr) .......................................................... 7<br />
Abbildung 2-3: Die Messelektronik ........................................................................ 8<br />
Abbildung 3-1: Die Messtechnik ........................................................................... 12<br />
Abbildung 3-2: Der Kraftmesser ........................................................................... 13<br />
Diagramme<br />
Diagramm 3-1: Offset bei y=179: Beginn der Messreihe (t=0) ............................ 17<br />
Diagramm 3-2: Offset bei y=99: Ende der Messreihe (t=4h) ................................ 17<br />
Diagramm 3-3: Prozentuale Abweichung <strong>von</strong> RVor und RNach (y=119) ........... 18<br />
Diagramm 3-4: Prozentuale Abweichung <strong>von</strong> RNach und RVor des nächsten<br />
Punktes (y=119) ..................................................................................................... 18<br />
Diagramm 3-5: Kraftwerte in Abhängigkeit <strong>von</strong> x (bei y=179), Werte aus Tabelle<br />
3-1 .......................................................................................................................... 19<br />
Diagramm 3-6: Kraftwerte in Abhängigkeit <strong>von</strong> y (bei x=68) .............................. 20<br />
Diagramm 3-7: Kraft an Sensor ul in Abhängigkeit vom Ort (erzeugt aus Tabelle<br />
3-2) ........................................................................................................................ 21<br />
Diagramm 3-8: Wie Diagramm 3-7, zusätzlich <strong>mit</strong> eingezeichneten horizontalen<br />
Geraden .................................................................................................................. 22<br />
Diagramm 3-9: Die in Diagramm 3-8 eingezeichneten Geraden .......................... 22<br />
Diagramm 3-10: Abhängigkeit der Steigung (der horizontalen<br />
Geradengleichungen) <strong>von</strong> y ................................................................................... 23<br />
Diagramm 3-11: Abhängigkeit des y-Abschnitts (der horizontalen<br />
Geradengleichungen) <strong>von</strong> y ................................................................................... 23<br />
Diagramm 3-12: Kraftverlauf des Sensors ul (Messwerte) ................................... 24<br />
Diagramm 3-13: Kraftverlauf des Sensors ul (Funktion) ...................................... 24<br />
Diagramm 3-14: Abweichung Funktion - Messwert an Sensor ul ........................ 25<br />
Diagramm 3-15: Kraft in Abhängigkeit <strong>von</strong> x an Sensor lr; F=4000g .................. 25<br />
Diagramm 3-16: Kraft in Abhängigkeit <strong>von</strong> y an Sensor ur; F=4000g ................. 26<br />
Diagramm 3-17: Kraft in Abhängigkeit <strong>von</strong> y; F=500g ........................................ 28<br />
Diagramm 3-18: Kraft in Abhängigkeit <strong>von</strong> y; F=1000g ...................................... 28
7.1 Anhang - Abbildungsverzeichnis 60<br />
Diagramm 3-19: Kraft in Abhängigkeit <strong>von</strong> y; F=2500g ...................................... 29<br />
Diagramm 3-20: Kraft in Abhängigkeit <strong>von</strong> y; F=4000g ...................................... 29<br />
Diagramm 3-21: Kraft in Abhängigkeit vom Ort (ur); F=500g ............................ 30<br />
Diagramm 3-22: Kraft in Abhängigkeit vom Ort (ur); F=1000g .......................... 30<br />
Diagramm 3-23: Kraft in Abhängigkeit vom Ort (ur); F=2500g .......................... 31<br />
Diagramm 3-24: Kraft in Abhängigkeit vom Ort (ur); F=4000g .......................... 31<br />
Diagramm 3-25: Untersuchung der Proportionalität <strong>von</strong> 4000g und 2500g an<br />
Sensor ul ................................................................................................................ 32<br />
Diagramm 3-26: Angebrachte Kraft in Abhängigkeit der Summe der Sensorwerte<br />
............................................................................................................................... 32<br />
Diagramm 3-27: Summe der Sensorwerte in Abhängigkeit vom Ort; F=4000g .. 33<br />
Diagramm 4-1: Zeit-Kraft-Verlauf eines Impulses ............................................... 45<br />
Diagramm 4-2: Er<strong>mit</strong>tlung der Kraft des Hubmagneten ....................................... 47<br />
Diagramm 4-3: Er<strong>mit</strong>tlung des Impulses des Hubmagneten ................................. 47<br />
Diagramm 4-4: Zeit-Kraft-Verlauf aller gemessenen Impulse.............................. 48<br />
Diagramm 5-1: x-Abweichungen Messung - Funktion aus ul-ur .......................... 51<br />
Diagramm 5-2: y-Abweichungen Messung - Funktion aus ul-ur .......................... 51<br />
Diagramm 5-3: prozentuale y-Abweichungen dreidimensional ............................ 52<br />
Diagramm 5-4: x-Abweichungen Messung - Funktion aus ul, y=const ................ 53<br />
Diagramm 5-5: Kraft-Ort Fläche <strong>mit</strong> skizzierter vertikaler zusammengesetzter<br />
Funktion ................................................................................................................. 55<br />
Diagramm 5-6: Kraft-Ort Fläche aus zwei zusammengesetzten Funktionen ........ 56<br />
Formeln<br />
Formel 3-1: Aufbau des Gleichungssystems ......................................................... 40<br />
Tabellen<br />
Tabelle 3-1: Wertetabelle für die Reihe y=179 ..................................................... 19<br />
Tabelle 3-2: Dreidimensionale Wertetabelle <strong>von</strong> Sensor ul (Kraft in Abhngigkeit<br />
vom Ort) ................................................................................................................ 21<br />
Tabelle 3-3: Aufbau der Matrix ForceIn ........................................................... 36<br />
Tabelle 3-4: Eine einzelne dreidimensionale Wertetabelle ................................... 38
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 61<br />
7.2. Quelltext <strong>MATLAB</strong> ® -Programme<br />
7.2.1. pfaller_auswertung_dynamisch.m<br />
Programm <strong>zur</strong> Auswertung der DIAdem-Messdateien <strong>von</strong> dynamischen Messungen. Benötigt das Programm ShowData der Universität. (Hinzufügen<br />
<strong>mit</strong>: File > Set Path...)<br />
% Benötigt das Programm ShowData der Universität. (Hinzufügen <strong>mit</strong>: File ><br />
% Set Path...)<br />
clear;<br />
% function GetDataFromChannel<br />
global Header;<br />
solution = dlmread('gerade.txt');<br />
m = solution(1, 1);<br />
t = solution(2, 1);<br />
Mess = [];<br />
row = 1;<br />
koordinaten = [];<br />
amplitudes_ll = [];<br />
amplitudes_lr = [];<br />
amplitudes_ml = [];<br />
amplitudes_mr = [];<br />
amplitudes_ul = [];<br />
amplitudes_ur = [];<br />
amplitudes_ll_mean = [];
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 62<br />
amplitudes_lr_mean = [];<br />
amplitudes_ml_mean = [];<br />
amplitudes_mr_mean = [];<br />
amplitudes_ul_mean = [];<br />
amplitudes_ur_mean = [];<br />
amplitudes_mag_f = [];<br />
amplitudes_mag_in = [];<br />
% #########################################################################<br />
% Beginn vorgefertigter Quelltext<br />
[ffiles, fpath] = ListFilesForSelect;<br />
ffile = [];<br />
fileNr = length(ffiles);<br />
if ~isempty(ffiles)<br />
detectUiPp.prompText = 'Now select your desired file.dat!';<br />
detectUiPp.boxHeaders = {' '};<br />
for i = 1:fileNr<br />
detectUiPp.boxNames(i, 1) = {[ffiles(i).name ' ' ffiles(i).comment]};<br />
detectUiPp.boxValues(i, 1) = 0;<br />
end<br />
end<br />
qq = AutoDetectUIInput(detectUiPp); % local function<br />
if ~ischar(qq)<br />
for i = 1:fileNr<br />
if qq.boxValues(i, 1)=='1';<br />
ffile = ffiles(i).name;<br />
break;<br />
end<br />
end<br />
end<br />
clear detectUiPp qq ffiles;<br />
if ~isempty(ffile),
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 63<br />
Header.FullFilename = '';<br />
fullfilename = fullfile(fpath, ffile);<br />
if strcmpi(ffile((end - 2):end), 'DAT'), % DIADEM file.<br />
hfilename = [fullfilename(1:(end - 4)), '_diaheader.mat'];<br />
if exist(hfilename),<br />
load(hfilename); % open MAT file with HEADER data.<br />
if ~strcmp(Header.FullFilename, fullfilename), %---<br />
Header.FullFilename = fullfilename;<br />
[fpath, dummy] = fileparts(fullfilename);<br />
Header.FilePath = fpath;<br />
save(hfilename, 'Header')<br />
end<br />
else,<br />
Header = TransformDiademToMat(fullfilename);<br />
end<br />
else<br />
dummy = ['File type ', fullfilename((end - 2):end), ...<br />
'is not supported.'];<br />
Notify(dummy, [], 'r')<br />
error([' ### ShowData: ', dummy])<br />
end<br />
for i = 1:Header.NChannels,<br />
switch Header.Channel(i).Name<br />
case 'control'<br />
[amplitude, xnew] = GetDiaData(i, 0, Header.Channel(i).Length);<br />
Mess = (find(diff(amplitude)>0.5) + 1);<br />
Mess = [Mess(1); Mess(find(diff(Mess)>1500)+1)];<br />
end<br />
end<br />
% Ende vorgefertigter Quelltext<br />
% #####################################################################<br />
% Schreiben der Daten der einzelnen Kanäle zu den vorher gefundenen
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 64<br />
% Zeitpunkten in ihre Matrizen<br />
for j = 1:size(Mess, 1), % Zählt alle gefundennen Messzeitpunkte durch<br />
for i = 1:Header.NChannels, % Zählt die Messkanäle durch<br />
switch Header.Channel(i).Name % Wählt je nach Name des Messkanals<br />
case 'X'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
koordinaten(row, 1) = mean(Ynew);<br />
case 'Y'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
koordinaten(row, 2) = mean(Ynew);<br />
case 'ForceIn_ll'<br />
% GetDiaData(Kanalnummer, Startzeitpunkt, Intervallänge);<br />
% Y_offset: Amplituden in Intervall (500ms)<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset = mean(Y_offset); % Offset = Mittelwert auf Intervall<br />
% Ynew: Matrix <strong>mit</strong> Aplituden der Messung<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
% Offsetkorrektur<br />
amplitudes_ll(size(amplitudes_ll, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_lr'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_lr(size(amplitudes_lr, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_ul'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 65<br />
offset = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_ul(size(amplitudes_ul, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_ur'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_ur(size(amplitudes_ur, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_ml_i(5)'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_ml(size(amplitudes_ml, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_mr_i(6)'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_mr(size(amplitudes_mr, 1)+1, :) = Ynew - offset;<br />
case 'ForceMagIn'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_mag_f(size(amplitudes_mag_f, 1)+1, :) = Ynew - offset;<br />
case 'HubMagIn'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 66<br />
end<br />
end<br />
end<br />
end<br />
row = row + 1;<br />
offset = [];<br />
offset = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_mag_in(size(amplitudes_mag_in, 1)+1, :) = Ynew - offset;<br />
hold on;<br />
for n = 1:size(amplitudes_ll, 1)<br />
% Suchen des Messpunktes <strong>mit</strong> der höchsten Amplitude<br />
maximum = [max(max(amplitudes_ll(n, :))), max(max(amplitudes_lr(n, :))), max(max(amplitudes_ml(n, :))),<br />
max(max(amplitudes_mr(n, :))), max(max(amplitudes_ul(n, :))), max(max(amplitudes_ur(n, :)))];<br />
nr = find(maximum == max(maximum));<br />
switch nr<br />
case 1<br />
value = amplitudes_ll(n, :);<br />
case 2<br />
value = amplitudes_lr(n, :);<br />
case 3<br />
value = amplitudes_ml(n, :);<br />
case 4<br />
value = amplitudes_mr(n, :);<br />
case 5<br />
value = amplitudes_ul(n, :);<br />
case 6<br />
value = amplitudes_ur(n, :);<br />
end<br />
% Finden des Startwerts x1 des Kraftintervalls
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 67<br />
% Position <strong>von</strong> x1 = Mitte der 1. Schwingung nach dem Kraftanstieg<br />
x1_1 = 50; % Startwert 50 [ms], kurz vor dem Kraftanstieg<br />
% Suchen des 1. HOP<br />
while value(x1_1) = value(x1_2+1)<br />
x1_2 = x1_2 + 1; % x1_1 ist die Position des TIP nach dem 1. HOP<br />
end<br />
% Von jedem Kraftert zwischen HOP und TIP in der Matrix wird der Mittelwert der beiden subtrahiert<br />
delta_1 = value(1, x1_1:x1_2) - (ones(1, x1_2 - x1_1 + 1) * (value(x1_1) + value(x1_2))/2);<br />
delta_1 = abs(delta_1); % Betrag der obigen Matrix<br />
% Findet das Minimum der Matrix (= Punkt der am nächsten am Mittelwert gelegen ist<br />
x1 = find(delta_1 == min(delta_1), 1, 'last');<br />
x1 = x1 + x1_1 - 1;<br />
% Finden des Endwerts x2 des Kraftintervalls<br />
% Position <strong>von</strong> x2 = Mitte der letzten Schwingung vor dem Kraftabfall<br />
x2_1 = find(value == min(value), 1, 'first'); % Startwert ist Minimum der gesamten Kurve<br />
% Suchen des 1. HOP vor dem Minimum<br />
while value(x2_1)
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 68<br />
while value(x2_2) >= value(x2_2-1)<br />
x2_2 = x2_2 - 1; % x2_1 ist die Position des letzten TIP vor dem Kraftabfall<br />
end<br />
% Finden des Punktes x2 der dem Mittelwert aus x2_1 und x2_2 am nächsten liegt<br />
delta_2 = value(1, x2_2:x2_1) - (ones(1, x2_1 - x2_2 + 1) * (value(x2_1) + value(x2_2))/2);<br />
delta_2 = abs(delta_2);<br />
x2 = find(delta_2 == min(delta_2), 1, 'first');<br />
x2 = x2 + x2_2 - 1;<br />
clear summe;<br />
summe = (amplitudes_ll(n, :)); % Addieren der Kräfte aller Sensoren<br />
summe = summe + (amplitudes_lr(n, :)); % (<strong>zur</strong> Übersicht untereinander geschrieben)<br />
summe = summe + (amplitudes_ml(n, :));<br />
summe = summe + (amplitudes_mr(n, :));<br />
summe = summe + (amplitudes_ul(n, :));<br />
summe = summe + (amplitudes_ur(n, :));<br />
% Finden der 1. Integrationsgrenze des Impulses<br />
% Position: Stelle zwischen 1 und x1_1, die am nähesten an der<br />
% konstanten Kraft liegt<br />
delta_i1 = summe(1:x1_1) - ones(1, x1_1) * mean(summe(x1:x2));<br />
delta_i1 = abs(delta_i1);<br />
i_start = find(delta_i1 == min(delta_i1), 1, 'first');<br />
% Finden der 2. Integrationsgrenze des Impulses<br />
% Position: Stelle zwischen x1_1 und x1_2, die am nähesten an der<br />
% konstanten Kraft liegt
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 69<br />
delta_i2 = summe(x1_1:x1_2) - ones(1, x1_2 - x1_1 + 1) * mean(summe(x1:x2));<br />
delta_i2 = abs(delta_i2);<br />
i_end = find(delta_i2 == min(delta_i2), 1, 'last');<br />
i_end = i_end + x1_1 - 1;<br />
% Berehnung des Impulses<br />
impuls = sum(summe(i_start:i_end)); % Integrieren des Impulses <strong>mit</strong> den vorher gefundenen Grenzen<br />
impuls = impuls - mean(summe(x1:x2)); % Abziehen der konstanten Kraft (=Fläche unter der konstanten Kraft)<br />
impuls = impuls * (i_end - i_start + 1) / 2; % Halbieren der Fläche<br />
impuls = impuls / 1000; % Umrechnung der Millisekunden auf Sekunden<br />
impuls = impuls * m + t; % Umrechnung der Sensorspannung in g<br />
impuls = impuls / 1000; % Umrechnung der g in kg<br />
impuls = impuls * 9,81; % Umrechnung der kg in N<br />
impuls_matrix(n, 1) = impuls; % Schreiben des aktuellen Impulses in eine Matrix<br />
% Berechnen der Mittelwerte<br />
amplitudes_ll_mean(n, 1) = mean(amplitudes_ll(n, x1:x2));<br />
amplitudes_lr_mean(n, 1) = mean(amplitudes_lr(n, x1:x2));<br />
amplitudes_ml_mean(n, 1) = mean(amplitudes_ml(n, x1:x2));<br />
amplitudes_mr_mean(n, 1) = mean(amplitudes_mr(n, x1:x2));<br />
amplitudes_ul_mean(n, 1) = mean(amplitudes_ul(n, x1:x2));<br />
amplitudes_ur_mean(n, 1) = mean(amplitudes_ur(n, x1:x2));<br />
amplitudes_mag_f_mean(n, 1) = mean(amplitudes_mag_f(n, x1:x2));<br />
amplitudes_mag_in_mean(n, 1) = mean(amplitudes_mag_in(n, x1:x2));<br />
end<br />
hold off;<br />
% Schreiben der gefundenen Werte in eine Matrix<br />
amplitudesMess(:, 1:2) = koordinaten;<br />
amplitudesMess(:, 3) = amplitudes_ll_mean;<br />
amplitudesMess(:, 4) = amplitudes_lr_mean;<br />
amplitudesMess(:, 5) = amplitudes_ul_mean;<br />
amplitudesMess(:, 6) = amplitudes_ur_mean;<br />
amplitudesMess(:, 7) = amplitudes_ml_mean;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 70<br />
amplitudesMess(:, 8) = amplitudes_mr_mean;<br />
amplitudesMess(:, 9) = impuls_matrix;<br />
amplitudesMess(:, 10) = amplitudes_mag_f_mean;<br />
amplitudesMess(:, 11) = amplitudes_mag_in_mean;<br />
xlswrite(amplitudesMess, 'dynamisch_Mess_neue_messungen')<br />
% xlswrite(amplitudesMess, 'Dynamische Messung', {'X', 'Y', 'ForceIn_ll', 'ForceIn_lr', 'ForceIn_ul', 'ForceIn_ur',<br />
'ForceIn_ml', 'ForceIn_mr', 'Impuls', 'Mag_F', 'Mag_in'}, 'dynamisch_Mess_neue_messungen', 'Tabelle1');
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 71<br />
7.2.2. pfaller_auswertung_messdaten.m<br />
Programm zum automatischen Auswerten <strong>von</strong> Messungen. In Zeile 7 und 8 müssen die Speicherpfade der Excel-Tabellen <strong>mit</strong> den korrigierten Ruhe-<br />
Vor- und Mess-Daten eingegeben werden. Bei dynamischen Messungen muss das Kommentarzeichen in Zeile 39 entfernet werden, da es bei dieser Art<br />
<strong>von</strong> Messung keine Ruhewerte gibt. Erzeugt die Datei gerade.txt, wird <strong>von</strong> Programm pfaller_ortberechnung_impuls.m benötigt.<br />
clear;<br />
%##########################################################################<br />
% Matrizen <strong>mit</strong> den <strong>Messwerten</strong><br />
Mess = xlsread('D:\Pfaller\Auswertung\excel\statisch_Mess_neue_messungen_korrigiert.xls'); % Gemessene Kraftwerte<br />
RVor = xlsread('D:\Pfaller\Auswertung\excel\statisch_RVor_neue_messungen_korrigiert.xls'); % Gemessene Ruhewerte<br />
% Messparameter<br />
rows = 14; % Anzahl der gemessenen Reihen<br />
cols = 9; % Anzahl der gemessenen Spalten<br />
forces_v = [500, 1000, 2500, 4000]; % Die verschiedenen angebrachten Kräfte in [g] (sortiert nach Messreihenfolge)<br />
sensors_v = {'ll', 'lr', 'ul', 'ur', 'ml', 'mr'}; % Bezeichnungen der Sensoren<br />
colors = {'b', 'm', 'y', 'c', 'g', 'r'}; % Farben der Sensoren in den Diagrammen<br />
%##########################################################################<br />
% PROGRAMMBEGINN
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 72<br />
forces = length(forces_v); % Anzahl der verschiedenen angebrachten Kräfte<br />
sensors = length(sensors_v); % Anzahl der Sensoren<br />
x_max = round((max(Mess(:, 1)) + 10) / 10) * 10; % Obere Grenze für Achsen <strong>mit</strong> x-Werten<br />
y_max = round((max(Mess(:, 2)) + 10) / 10) * 10; % Obere Grenze für Achsen <strong>mit</strong> y-Werten<br />
F_max = round((max(max(Mess(:, 3:(sensors + 2)))) + 1)); % Obere Grenze für Achsen <strong>mit</strong> F-Werten<br />
F_min = round((min(min(Mess(:, 3:(sensors + 2)))) - 1)); % Untere Grenze für Achsen <strong>mit</strong> F-Werten<br />
% Erstellen der Matrix ForceIn <strong>mit</strong> Koordinaten der Messpunkte (Spalte 1-2), Offset-korrigierten<br />
% Kraftwerten für jeden Sensor (3-8), Summe der Kräfte pro Messpunkt (9), angebrachte Kräfte (10)<br />
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br />
% RVor = zeros(rows * cols * forces, sensors + 4); % Aktivieren bei dynamischen Messungen, da diese bereits Offsetkorrigiert<br />
sind<br />
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br />
ForceIn = zeros(rows * cols * forces, sensors + 4);<br />
ForceIn(:, 1) = Mess(:, 1); % X-Koordinaten<br />
ForceIn(:, 2) = Mess(:, 2); % Y-Koordinaten<br />
for sen = 1:sensors<br />
% Berechnen der tatsächlichen Kraftwerte jedes Sensors<br />
% Kraftwert = Messwert - Ruhe_vor<br />
ForceIn(:, 2 + sen) = Mess(:, 2 + sen) - RVor(:, 2 + sen);<br />
end<br />
% Bilden der Summe der <strong>Kraftsensor</strong>werte für jeden Messpunkt<br />
ForceIn(:, sensors + 3) = ForceIn(:, sensors + 3) + ForceIn(:, 2 + sen);<br />
% Erstellen einer Spalte <strong>mit</strong> den angebrachten Kraftwerten<br />
for c = 1:forces:(rows * cols * forces)<br />
for n = 1:forces;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 73<br />
end<br />
end<br />
ForceIn(c+n-1, sensors + 4) = forces_v(1, n);<br />
% Erstellen <strong>von</strong> dreidimensionalen Wertetabellen für jeden Sensor und die<br />
% Summe der Kräfte, in Abhängigkeit des Ortes, jeweils für jede angebrachte Kraft<br />
for sen = 1:(sensors + 1)<br />
for f = 1:forces<br />
n = (sen-1) * (rows + 2);<br />
m = (f-1) * (cols + 2);<br />
for j = 2:(rows+1) % matrix vertikal<br />
for i = 2:(cols+1) % matrix horizontal<br />
reihe = ((i-1) * rows - (j-2)) * forces;<br />
x_wert = ForceIn(reihe, 1);<br />
y_wert = ForceIn(reihe, 2);<br />
end<br />
end<br />
end<br />
end<br />
Werte(1 + n, i + m) = x_wert; % X<br />
Werte(j + n, 1 + m) = y_wert; % Y<br />
Werte(j + n, i + m) = ForceIn((reihe - 4 + f), 2 + sen); % Daten<br />
% Exportieren der offsetkorrigierten Messwerte aller Sensoren in Listenform in Excel<br />
xlswrite('statisch_Mess-Offset', ForceIn);<br />
% xlswrite(ForceIn, 'Statische Messung (ohne Offset)', {'X', 'Y','ForceIn_ll', 'ForceIn_lr', 'ForceIn_ul', 'ForceIn_ur',<br />
'ForceIn_ml', 'ForceIn_mr', 'Kraft [g]', 'Summe Kräfte'}, 'statisch_Mess-Offset', 'Tabelle1');<br />
% Export der dreidimensionalen Wertetabellen für jeden Sensor und für jede Kraft<br />
for sen = 1:(sensors + 1)
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 74<br />
end<br />
for f = 1:forces<br />
end<br />
F_str = num2str(forces_v(f)); % Die aktuelle Kraft als String<br />
if forces_v(f) < 1000<br />
F_str = ['0' F_str]; % Fügt bei dreistelligen Zahlen eine 0 vor den String<br />
end % (notwendig für richtige Sortierung der Dateien unter Windows)<br />
if sen == (sensors + 1) % Wenn der Sensorzähler um 1 größer ist als die Anzahl der Sensoren<br />
Sen_str = 'ges'; % enthält 'matrix' die Summe der Sensorwerte -> 'ges' als Sensorname<br />
else<br />
Sen_str = char(sensors_v(sen)); % Dr aktuelle Sensorname als String<br />
end<br />
n1 = 1 + (sen - 1) * (rows + 2); % Vertikaler Startpunkt der Einzelmatrix<br />
n2 = (sen) * (rows + 2) - 1; % Vertikaler Endpunkt der Einzelmatrix<br />
m1 = 1 + (f - 1) * (cols + 2); % Horizontaler Startpunkt der Einzelmatrix<br />
m2 = (f) * (cols + 2) - 1; % Horizontaler Endpunkt der Einzelmatrix<br />
filename = ['F_' Sen_str '_', F_str]; % Zusammensetzen des Dateinamen<br />
matrix = Werte(n1:n2, m1:m2); % Bilden der Matrix aus den Start- und Endpunkten<br />
% Exportieren der Matrix des jweiligen Sensors <strong>mit</strong> der jeweiligen wirkenden Kraft in Excel<br />
% xlswrite(filename, matrix);<br />
% xlswrite(matrix, filename, {''}, filename, 'Tabelle1');<br />
% Erzeugt ein Diagramm <strong>mit</strong> den Summen der Sensorwerte jedes Messpunktes in<br />
% Abhängigkeit der angebrachten Kraft und erzeugt eine Ausgleichsgerade:<br />
% Kraft(Sensorwert) = m * Sensorwert + t<br />
hold off;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 75<br />
newplot;<br />
hold on; % Alle Plots werden in eine Graphik geplottet<br />
row = 1;<br />
% Plottet die Messwerte<br />
Forces_y = ForceIn(:, sensors + 4);<br />
Forces_x = ForceIn(:, sensors + 3);<br />
plot(Forces_x, Forces_y, 'y.-', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r', 'MarkerSize',10);<br />
% Erstellen einer Matrix <strong>mit</strong> der "linken Seite" <strong>mit</strong> des Gleichungssystems<br />
% Sensorwert * m + 1 * t = Kraft<br />
% in der Form "[Sensorwert, 1]"<br />
for n = 1:rows * cols * forces<br />
links(n, :) = [Forces_x(n, 1), 1];<br />
end<br />
solution = links\Forces_y; % Lösen des Gleichungssystems<br />
m = solution(1, 1);<br />
t = solution(2, 1);<br />
% Erstellen einer Wertetabelle der Geradengleichung zum Plotten der Funktion<br />
x = 0:0.1:(F_max+1);<br />
y = m * x + t;<br />
% Umwandlung des Parameters 't' in einen String<br />
if t > 0<br />
t_string = ['+ ' num2str(t)]; % Fügt ein "+" vor den String, wenn 't' positiv ist<br />
end<br />
if t < 0<br />
t_string = num2str(t); % Wandelt 't' in einen String um<br />
end<br />
if t == 0
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 76<br />
end<br />
t_string = ''; % Erzeugt einen leeren String, falls 't' 0 ist<br />
string = ['f(x) = ' num2str(m) ' * x ' t_string]; % Erzeugt einen String <strong>mit</strong> der Geradengleichung<br />
plot(x, y, 'Color', 'b', 'LineWidth',2); % Plottet die Gerade<br />
ylabel('Angebrachte Kraft [g]'); % x-Achsenbeschriftung<br />
xlabel('Summe der Sensorwerte'); % y-Achsenbeschriftung<br />
title('Angebrachte Kraft in Abhängigkeit der Summe der Sensorwerte'); % Diagrammtitel<br />
% Zeigt die Geradengleichung im Diagramm an (Poistion hängt <strong>von</strong> <strong>Messwerten</strong> ab)<br />
text(1, forces_v(length(forces_v)), string);<br />
% Legt die Begrenzung der Achsen fest (abhängig <strong>von</strong> <strong>Messwerten</strong>)<br />
axis ([0, F_max+1, 0, (forces_v(length(forces_v))+500)]);<br />
print -dpng sensorwerte_versch_kraefte; % Exportiert das Diagramm als png-Bilddatei<br />
hold off;<br />
% #########################################################################<br />
% #1: vertikal alle Sensoren<br />
% Plottet für jede Spalte (= jeden gemessenen x-Wert) ein Diagramm <strong>mit</strong><br />
% den 6 Sensorwerten in Abhängigkeit <strong>von</strong> y<br />
for col_nr = 1:(rows*forces):(rows * cols * forces) % Ein Durchlauf pro Spalte<br />
for force_nr = 1:forces % Ein Durchlauf pro Kraft<br />
hold off;<br />
newplot;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 77<br />
hold on;<br />
for sen = 1:sensors % Ein Durchlauf pro Sensor<br />
row = 1;<br />
for n = 1:forces:(forces * rows)<br />
Plot (row, 1) = ForceIn (n + force_nr + col_nr - 2, 2); % x-Werte des Diagramms (y-werte der<br />
Messung)<br />
Plot (row, 2) = ForceIn (n + force_nr + col_nr - 2, 2 + sen); % y-Werte des Diagramms (Kraftwerte der<br />
Messung)<br />
row = row + 1;<br />
end<br />
line = 1.5;<br />
marker = 15;<br />
color = char(colors(sen));<br />
style = [color, '.-'];<br />
plot(Plot(:,1), Plot(:,2), style, 'MarkerEdgeColor', color, 'MarkerFaceColor', color, 'LineWidth', line,<br />
'MarkerSize', marker);<br />
end<br />
legend_forces = [];<br />
for leg = 1:sensors<br />
legend_forces = [legend_forces; 'Force ' char(sensors_v(leg))];<br />
end<br />
legend(legend_forces, 'Location', 'EastOutside');<br />
xlabel('Ort vertikal');<br />
ylabel('Gemessene Kraft');<br />
x = num2str(ForceIn(col_nr, 1));<br />
F = num2str(forces_v(force_nr));<br />
title(['Gemessene Kraft in Abhängigkeit <strong>von</strong> y; x=' x '; F=' F]);<br />
axis ([0, y_max, F_min, F_max]);<br />
if forces_v(force_nr) < 1000<br />
F = ['0' F];<br />
end<br />
filename = ['force_vertikal_x=' x '_' F];
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 78<br />
end<br />
end<br />
print ('-dpng', filename);<br />
hold off;<br />
% #########################################################################<br />
% #2: horizontal alle Sensoren<br />
% Plottet für jede Reihe (= jeden gemessenen y-Wert) ein Diagramm <strong>mit</strong><br />
% den 6 Sensorwerten in Abhängigkeit <strong>von</strong> x<br />
clear Plot;<br />
clear string;<br />
clear data;<br />
for row_nr = 1:forces:(forces * rows) % Ein Durchlauf pro Reihe<br />
for force_nr = 1:forces % Ein Durchlauf pro Kraft<br />
hold off;<br />
newplot;<br />
hold on;<br />
for sen = 1:sensors % Ein Durchlauf pro Sensor<br />
row = 1;<br />
for n = 1:(rows*forces):(rows * cols * forces)<br />
Plot (row, 1) = ForceIn (n + force_nr + row_nr - 2, 1);<br />
Plot (row, 2) = ForceIn (n + force_nr + row_nr - 2, 2 + sen);<br />
row = row + 1;<br />
end<br />
line = 1.5;<br />
marker = 15;<br />
color = char(colors(sen));<br />
style = [color, '.-'];
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 79<br />
plot(Plot(:,1), Plot(:,2), style, 'MarkerEdgeColor', color, 'MarkerFaceColor', color, 'LineWidth', line,<br />
'MarkerSize', marker);<br />
end<br />
legend_forces = [];<br />
for leg = 1:sensors<br />
legend_forces = [legend_forces; 'Force ' char(sensors_v(leg))];<br />
end<br />
legend(legend_forces, 'Location', 'EastOutside');<br />
xlabel('Ort horizontal');<br />
ylabel('Gemessene Kraft');<br />
y = num2str(ForceIn(row_nr, 2));<br />
F = num2str(forces_v(force_nr));<br />
title(['Gemessene Kraft in Abhängigkeit <strong>von</strong> x; y=' y '; F=' F]);<br />
axis ([0, x_max, F_min, F_max]);<br />
end<br />
end<br />
if forces_v(force_nr) < 1000<br />
F = ['0' F];<br />
end<br />
filename = ['force_horizontal_y=' y '_' F];<br />
print ('-dpng', filename);<br />
hold off;<br />
% #########################################################################<br />
% #3: horizontal pro Sensor<br />
% Plottet für jeden Sensor und jede Kraft ein Diagramm <strong>mit</strong> den Sensorwerten
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 80<br />
% in Abhängigkeit <strong>von</strong> x (für alle verschieden y)<br />
% Löscht die Werte des vorhergehenden Plots (wichtig wenn: Länge(alter Plot) > Länge(neuer Plot) -> alte Werte am Ende<br />
der Matrix werden nicht durch neue ersetzt)<br />
clear Plot;<br />
clear string;<br />
clear data;<br />
for force_nr = 1:forces % Ein Durchlauf pro Kraft<br />
for sen = 1:sensors % Ein Durchlauf pro Sensor<br />
hold off; % Setzt die Grafikanzeige <strong>zur</strong>ück<br />
newplot;<br />
hold on; % Alle Plots werden in einer Grafik angezeigt, solange 'hold' aktiviert ist<br />
count = 1; % Schleifenzähler für die String-Matrix der y-Werte<br />
for row_nr = 1:forces:(forces * rows) % Ein Durchlauf pro Reihe<br />
row = 1; % Schleifenzähler für die Plot-Matrix<br />
for n = 1:(rows*forces):(rows * cols * forces)<br />
Plot (row, 1) = ForceIn (n + force_nr + row_nr - 2, 1); % Schreibt x-Werte in die Plot-Matrix<br />
Plot (row, 2) = ForceIn (n + force_nr + row_nr - 2, 2 + sen); % Schreibt Messwerte in die Plot-<br />
Matrix<br />
row = row + 1;<br />
end<br />
l_size = 1; % Setzt die Linienstärke auf "1"<br />
m_size = 15; % Setzt die Markierungsgröße auf "15"<br />
index = (row_nr/(forces * rows)); % Erstellt bei jedem Durchlauf einen Wert index = ]0; 1].<br />
% Die indizes vergrößern sich bei jedem Durchlauf um den selben Wert,<br />
% bis sie beim letzten Durchlauf den Wert 1 erreichen<br />
color = [index, 1-index, 0]; % Die Linienfarbe wird festgelegt, sie ändert sich während den<br />
Durchläfuen (=Reihen) <strong>von</strong> Grün nach Rot<br />
% Grün = [0, 1, 0], Rot = [1, 0, 0]<br />
marker = '.'; % Setzt die Markierungen auf "Punkt"<br />
line= '-'; % Setzt die Linienart auf "durchgehende Linie"<br />
plot(Plot(:,1), Plot(:,2), 'Marker', marker, 'LineStyle', line, 'Color', color, 'MarkerEdgeColor', color,<br />
'MarkerFaceColor', color, 'LineWidth', l_size, 'MarkerSize', m_size);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 81<br />
end<br />
string = ['y=' num2str(ForceIn(row_nr, 2))]; % Erzeugt einen String string "y=[aktuelles y]"<br />
data(count, 1:length(string)) = string; % Erzeugt eine Matrix <strong>mit</strong> allen y der Messung<br />
count = count + 1;<br />
legend(cellstr(data), 'Location', 'EastOutside'); % Setzt die Legende<br />
xlabel('Ort horizontal'); % Setzt die x-Achsenbeschriftung<br />
ylabel('Gemessene Kraft (für verschiedene y)'); % Setzt die x-Achsenbeschriftung<br />
F = num2str(forces_v(force_nr)); % Erzeugt einen String <strong>mit</strong> der aktuellen Kraft<br />
if forces_v(force_nr) < 1000 % Macht "0500" aus "500" (da<strong>mit</strong> die Dateien unter<br />
Windows richtig sortiert werden)<br />
F = ['0' F];<br />
end<br />
s = char(sensors_v(1, sen)); % Erzeugt einen String <strong>mit</strong> dem aktuellen Sensornamen<br />
title(['Gemessene Kraft in Abhängigkeit <strong>von</strong> x (bei verschiedenen y) an Sensor ' s '; F=' F]); % Setzt den Titel<br />
des Diagramms<br />
axis ([0, x_max, F_min, F_max]); % Setzt Minimum und Maximum der x- und y-Achse<br />
filename = ['force_horizontal_' s '_' F]; % Erzeugt einen String für den Dateinamen<br />
print ('-dpng', filename); % Exportiert eine .png-Bilddatei<br />
hold off; % Deaktiviert hold<br />
end<br />
end
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 82<br />
% #########################################################################<br />
% #4: vertikal pro Sensor<br />
% Plottet für jeden Sensor und jede Kraft ein Diagramm <strong>mit</strong> den Sensorwerten<br />
% in Abhängigkeit <strong>von</strong> y (für alle verschieden x)<br />
clear Plot; % Löscht die Werte des vorhergehenden Plots (wichtig wenn: Länge(alter Plot) > Länge(neuer Plot) -><br />
alte Werte am Ende der Matrix werden nicht durch neue ersetzt)<br />
clear string; % s.o.<br />
clear data;<br />
for force_nr = 1:forces % Ein Durchlauf pro Kraft<br />
for sen = 1:sensors % Ein Durchlauf pro Sensor<br />
hold off; % Setzt die Grafikanzeige <strong>zur</strong>ück<br />
newplot;<br />
hold on; % Alle Plots werden in einer Grafik angezeigt, solange 'hold' aktiviert ist<br />
count = 1; % Schleifenzähler für die String-Matrix der x-Werte<br />
for col_nr = 1:(rows*forces):(rows * cols * forces) % Ein Durchlauf pro Reihe<br />
row = 1; % Schleifenzähler für die Plot-Matrix<br />
for n = 1:forces:(forces * rows)<br />
Plot (row, 1) = ForceIn (n + force_nr + col_nr - 2, 2); % Schreibt y-Werte in die Plot-Matrix<br />
Plot (row, 2) = ForceIn (n + force_nr + col_nr - 2, 2 + sen); % Schreibt Messwerte in die Plot-<br />
Matrix<br />
row = row + 1;<br />
end<br />
l_size = 1; % Setzt die Linienstärke auf "1"<br />
m_size = 15; % Setzt die Markierungsgröße auf "15"<br />
index = (col_nr/(rows * cols * forces)); % Erstellt bei jedem Durchlauf einen Wert index = ]0; 1].<br />
% Die indizes vergrößern sich bei jedem Durchlauf um den selben Wert,<br />
% bis sie beim letzten Durchlauf den Wert 1 erreichen<br />
color = [index, 1-index, 0]; % Die Linienfarbe wird festgelegt, sie ändert sich während den<br />
Durchläfuen (=Reihen) <strong>von</strong> Grün nach Rot<br />
% Grün = [0, 1, 0], Rot = [1, 0, 0]<br />
marker = '.'; % Setzt die Markierungen auf "Punkt"
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 83<br />
line= '-'; % Setzt die Linienart auf "durchgehende Linie"<br />
plot(Plot(:,1), Plot(:,2), 'Marker', marker, 'LineStyle', line, 'Color', color, 'MarkerEdgeColor', color,<br />
'MarkerFaceColor', color, 'LineWidth', l_size, 'MarkerSize', m_size);<br />
end<br />
string = ['x=' num2str(ForceIn(col_nr, 1))]; % Erzeugt einen String string "x=[aktuelles x]"<br />
data(count, 1:length(string)) = string; % Erzeugt eine Matrix <strong>mit</strong> allen x der Messung<br />
count = count + 1;<br />
legend(cellstr(data), 'Location', 'EastOutside'); % Setzt die Legende<br />
xlabel('Ort vertikal'); % Setzt die x-Achsenbeschriftung<br />
ylabel('Gemessene Kraft (für verschiedene x)'); % Setzt die y-Achsenbeschriftung<br />
F = num2str(forces_v(force_nr)); % Erzeugt einen String <strong>mit</strong> der aktuellen Kraft<br />
if forces_v(force_nr) < 1000 % Macht "0500" aus "500" (da<strong>mit</strong> die Dateien unter<br />
Windows richtig sortiert werden)<br />
F = ['0' F];<br />
end<br />
s = char(sensors_v(1, sen)); % Erzeugt einen String <strong>mit</strong> dem aktuellen Sensornamen<br />
title(['Gemessene Kraft in Abhängigkeit <strong>von</strong> y (bei verschiedenen x) an Sensor ' s '; F=' F]); % Setzt den Titel<br />
des Diagramms<br />
axis ([0, y_max, F_min, F_max]); % Setzt Minimum und Maximum der x- und y-Achse<br />
filename = ['force_vertikal_' s '_' F]; % Erzeugt einen String für den Dateinamen<br />
print ('-dpng', filename); % Exportiert eine .png-Bilddatei<br />
hold off; % Deaktiviert hold<br />
end<br />
end
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 84<br />
% #########################################################################<br />
% #5: vertikal pro Sensor Funktion<br />
% Plottet für jeden Sensor und jede Kraft ein Diagramm <strong>mit</strong><br />
% Ausgleichsgeraden aus den Sensorwerten in Abhängigkeit <strong>von</strong> y (für alle verschieden x)<br />
%<br />
% Hier nicht sinnvoll, da eine lineare Näherung nicht möglich ist!<br />
%<br />
% Löscht die Werte des vorhergehenden Plots (wichtig wenn: Länge(alter Plot) > Länge(neuer Plot) -> alte Werte am Ende<br />
der Matrix werden nicht durch neue ersetzt)<br />
clear Plot;<br />
clear string;<br />
clear data;<br />
for force_nr = 1:forces % Ein Durchlauf pro Kraft<br />
for sen = 1:sensors % Ein Durchlauf pro Sensor<br />
hold off; % Setzt die Grafikanzeige <strong>zur</strong>ück<br />
newplot;<br />
hold on; % Alle Plots werden in einer Grafik angezeigt, solange 'hold' aktiviert ist<br />
count = 1; % Schleifenzähler für die String-Matrix der x-Werte<br />
for col_nr = 1:(rows*forces):(rows * cols * forces) % Ein Durchlauf pro Reihe<br />
die Plot-Matrix<br />
Plot-Matrix<br />
row = 1; % Schleifenzähler für die Plot-Matrix<br />
for n = 1:forces:(forces * rows)<br />
Plot (row, col_nr * 2 - 1) = ForceIn (n + force_nr + col_nr - 2, 2); % Schreibt y-Werte in<br />
Plot (row, col_nr * 2) = ForceIn (n + force_nr + col_nr - 2, 2 + sen); % Schreibt Messwerte in die<br />
row = row + 1;<br />
end<br />
l_size = 1; % Setzt die Linienstärke auf "1"<br />
m_size = 15; % Setzt die Markierungsgröße auf "15"<br />
index = (col_nr/(rows * cols * forces)); % Erstellt bei jedem Durchlauf einen Wert index = ]0; 1].
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 85<br />
% Die indizes vergrößern sich bei jedem Durchlauf um den selben Wert,<br />
% bis sie beim letzten Durchlauf den Wert 1 erreichen<br />
color = [index, 1-index, 0]; % Die Linienfarbe wird festgelegt, sie ändert sich während den<br />
Durchläfuen (=Reihen) <strong>von</strong> Grün nach Rot<br />
% Grün = [0, 1, 0], Rot = [1, 0, 0]<br />
for n = 1:(rows)<br />
Plot_x(n, :) = [Plot(n, 1), 1]; % Erstellt eine Matrix <strong>mit</strong> der "linken Seite" des Gleichungssystems<br />
zum lösen der Geradengleichung m * x + t = F<br />
Plot_y(n, 1) = Plot(n, col_nr * 2); % Erstellt die "rechte Seite" des Gleichungssystems<br />
end<br />
solution = Plot_x\Plot_y;<br />
m = solution(1, 1);<br />
t = solution(2, 1);<br />
if t > 0<br />
t_string = ['+ ' num2str(t)];<br />
end<br />
if t < 0<br />
t_string = num2str(t);<br />
end<br />
x = 0:10:180;<br />
y = m * x + t;<br />
marker = 'none'; % Setzt die Markierungen auf "keine Markierung"<br />
line= '-'; % Setzt die Linienart auf "durchgehende Linie"
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 86<br />
plot(x, y, 'Marker', marker, 'LineStyle', line, 'Color', color, 'MarkerEdgeColor', color,<br />
'MarkerFaceColor', color, 'LineWidth', l_size, 'MarkerSize', m_size);<br />
end<br />
% Erzeugt einen String string "x=[aktuelles x]; f(x) = [m] * x [+/-] t"<br />
string = ['x=' num2str(ForceIn(col_nr, 1)) '; f(x)=' m '* x ' t_string];<br />
data(count, 1:length(string)) = string; % Erzeugt eine Matrix <strong>mit</strong> allen x der Messung<br />
count = count + 1;<br />
for col_nr = 1:(rows*forces):(rows * cols * forces)<br />
marker = '.'; % Setzt die Markierungen auf "Punkt"<br />
line= 'none'; % Setzt die Linienart auf "keine Linie"<br />
index = (col_nr/(rows * cols * forces));<br />
color = [index, 1-index, 0];<br />
plot(Plot(:, col_nr * 2 - 1), Plot(:, col_nr * 2), 'Marker', marker, 'LineStyle', line, 'Color', color,<br />
'MarkerEdgeColor', color, 'MarkerFaceColor', color, 'LineWidth', l_size, 'MarkerSize', m_size);<br />
end<br />
legend(cellstr(data), 'Location', 'EastOutside'); % Setzt die Legende<br />
xlabel('Ort vertikal'); % Setzt die x-Achsenbeschriftung<br />
ylabel('Gemessene Kraft (für verschiedene y)'); % Setzt die y-Achsenbeschriftung<br />
F = num2str(forces_v(force_nr)); % Erzeugt einen String <strong>mit</strong> der aktuellen Kraft<br />
if forces_v(force_nr) < 1000 % Macht "0500" aus "500" (da<strong>mit</strong> die Dateien unter Windows richtig sortiert<br />
werden)<br />
F = ['0' F];<br />
end<br />
s = char(sensors_v(1, sen)); % Erzeugt einen String <strong>mit</strong> dem aktuellen Sensornamen<br />
% Setzt den Titel des Diagramms<br />
title(['Gemessene Kraft in Abhängigkeit <strong>von</strong> y (bei verschiedenen x) an Sensor ' s '; F=' F]);<br />
axis ([0, y_max, F_min, F_max]); % Setzt Minimum und Maximum der x- und y-Achse
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 87<br />
end<br />
end<br />
filename = ['force_vertikal_' s '_' F '_fx']; % Erzeugt einen String für den Dateinamen<br />
print ('-dpng', filename); % Exportiert eine .png-Bilddatei<br />
hold off; % Deaktiviert hold<br />
% #########################################################################<br />
% #6: horizontal pro Sensor Funktion<br />
% Plottet für jeden Sensor und jede Kraft ein Diagramm <strong>mit</strong><br />
% Ausgleichsgeraden aus den Sensorwerten in Abhängigkeit <strong>von</strong> x (für alle verschieden y)<br />
Plot = []; % Löscht die Werte des vorhergehenden Plots<br />
% (wichtig wenn: Länge(alter Plot) > Länge(neuer Plot)<br />
% -> alte Werte am Ende der Matrix werden nicht durch neue ersetzt)<br />
clear Plot;<br />
clear string;<br />
clear data;<br />
clear solution;<br />
clear m;<br />
clear t;<br />
clear Plot_x;<br />
clear Plot_y;<br />
for force_nr = 1:forces % Ein Durchlauf pro Kraft<br />
for sen = 1:sensors % Ein Durchlauf pro Sensor<br />
hold off; % Setzt die Grafikanzeige <strong>zur</strong>ück<br />
newplot;<br />
hold on; % Alle Plots werden in einer Grafik angezeigt, solange 'hold' aktiviert ist<br />
count = 1; % Schleifenzähler für die String-Matrix der y-Werte
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 88<br />
die Plot-Matrix<br />
Plot-Matrix<br />
for row_nr = 1:forces:(forces * rows) % Ein Durchlauf pro Reihe<br />
row = 1; % Schleifenzähler für die Plot-Matrix<br />
for n = 1:(rows*forces):(rows * cols * forces)<br />
Plot (row, row_nr * 2 - 1) = ForceIn (n + force_nr + row_nr - 2, 1); % Schreibt x-Werte in<br />
Plot (row, row_nr * 2) = ForceIn (n + force_nr + row_nr - 2, 2 + sen); % Schreibt Messwerte in die<br />
row = row + 1;<br />
end<br />
l_size = 1; % Setzt die Linienstärke auf "1"<br />
m_size = 15; % Setzt die Markierungsgröße auf "15"<br />
index = (row_nr/(forces * rows)); % Erstellt bei jedem Durchlauf einen Wert index = ]0; 1].<br />
% Die indizes vergrößern sich bei jedem Durchlauf um den selben Wert,<br />
% bis sie beim letzten Durchlauf den Wert 1 erreichen<br />
color = [index, 1-index, 0]; % Die Linienfarbe wird festgelegt, sie ändert sich während den<br />
Durchläfuen (=Reihen) <strong>von</strong> Grün nach Rot<br />
% Grün = [0, 1, 0], Rot = [1, 0, 0]<br />
for n = 1:cols<br />
Plot_x(n, :) = [Plot(n, 1), 1]; % Erstellt eine Matrix <strong>mit</strong> der "linken Seite" des Gleichungssystems<br />
zum lösen der Geradengleichung m * x + t = F<br />
Plot_y(n, 1) = Plot(n, row_nr * 2); % Erstellt die "rechte Seite" des Gleichungssystems<br />
end<br />
solution = Plot_x\Plot_y; % Löst das Gleichungssystem<br />
m = solution(1, 1);<br />
t = solution(2, 1);<br />
if t > 0<br />
t_string = ['+ ' num2str(t)];<br />
end<br />
if t < 0<br />
t_string = num2str(t);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 89<br />
end<br />
x = 0:10:y_max;<br />
y = m * x + t;<br />
marker = 'none'; % Setzt die Markierungen auf "keine Markierung"<br />
line= '-'; % Setzt die Linienart auf "durchgehende Linie"<br />
plot(x, y, 'Marker', marker, 'LineStyle', line, 'Color', color, 'MarkerEdgeColor', color,<br />
'MarkerFaceColor', color, 'LineWidth', l_size, 'MarkerSize', m_size);<br />
eine Spalte<br />
% Erzeugt einen String string "y=[aktuelles y]; f(x) = [m] * x [+/-] t"<br />
string_file = ['y=' num2str(ForceIn(row_nr, 2)) '; f(x)=' num2str(m) ' * x ' t_string];<br />
% Schreibt alle Strings der Durchläufe in eine Matrix<br />
data_file(count, 1:length(string_file)) = string_file;<br />
string = ['y=' num2str(ForceIn(row_nr, 2))];% Erzeugt einen String string "y=[aktuelles y]" = Legende für<br />
data(count, 1:length(string)) = string; % Erzeugt eine Matrix <strong>mit</strong> allen Legenden<br />
count = count + 1;<br />
end<br />
for row_nr = 1:forces:(forces * rows)<br />
marker = '.'; % Setzt die Markierungen auf "Punkt"<br />
line= 'none'; % Setzt die Linienart auf "durchgehende Linie"<br />
index = (row_nr/(forces * rows));<br />
color = [index, 1-index, 0];<br />
plot(Plot(:, row_nr * 2 - 1), Plot(:, row_nr * 2), 'Marker', marker, 'LineStyle', line, 'Color', color,<br />
'MarkerEdgeColor', color, 'MarkerFaceColor', color, 'LineWidth', l_size, 'MarkerSize', m_size);<br />
end<br />
legend(cellstr(data), 'Location', 'EastOutside'); % Setzt die Legende<br />
xlabel('Ort horizontal'); % Setzt die x-Achsenbeschriftung
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 90<br />
ylabel('Gemessene Kraft (für verschiedene y)'); % Setzt die x-Achsenbeschriftung<br />
F = num2str(forces_v(force_nr)); % Erzeugt einen String <strong>mit</strong> der aktuellen Kraft<br />
if forces_v(force_nr) < 1000 % Macht "0500" aus "500" (da<strong>mit</strong> die Dateien unter Windows<br />
richtig sortiert werden)<br />
F = ['0' F];<br />
end<br />
s = char(sensors_v(1, sen)); % Erzeugt einen String <strong>mit</strong> dem aktuellen Sensornamen<br />
title(['Gemessene Kraft in Abhängigkeit <strong>von</strong> x (bei verschiedenen y) an Sensor ' s '; F=' F]); % Setzt den Titel<br />
des Diagramms<br />
axis ([0, x_max, F_min, F_max]); % Setzt Minimum und Maximum der x- und y-Achse<br />
filename = ['force_horizontal_' s '_' F '_fx']; % Erzeugt einen String für den Dateinamen<br />
print ('-dpng', filename); % Exportiert eine .png-Bilddatei<br />
filename = [filename '.txt']; % Fügt ".txt" an den Dateinamen hinzu<br />
dlmwrite (filename, data_file, 'deli<strong>mit</strong>er', ''); % Exportiert eine Matrix <strong>mit</strong> den Geradenparameter in einer<br />
.txt-Textdatei<br />
hold off; % Deaktiviert hold<br />
end<br />
end<br />
% #########################################################################<br />
% Graphische Darstellung der oben erstellten (dreidimensionalen) Wertetabellen, Export als .jpeg-Bilddatei<br />
for sen = 1:(sensors + 1)
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 91<br />
for f = 1:forces<br />
hold off;<br />
newplot;<br />
F_str = num2str(forces_v(f)); % Die aktuelle Kraft als String<br />
if forces_v(f) < 1000<br />
F_str = ['0' F_str]; % Fügt bei dreistelligen Zahlen eine 0 vor den String<br />
end % (notwendig für richtige Sortierung der Dateien unter Windows)<br />
if sen == (sensors + 1) % Wenn der Sensorzähler um 1 größer ist als die Anzahl der Sensoren<br />
Sen_str = 'ges'; % enthält 'matrix' die Summe der Sensorwerte -> 'ges' als Sensorname<br />
else<br />
Sen_str = char(sensors_v(sen)); % Der aktuelle Sensorname als String<br />
end<br />
n1 = 1 + (sen - 1) * (rows + 2); % Vertikaler Startpunkt der Einzelmatrix<br />
n2 = (sen) * (rows + 2) - 1; % Vertikaler Endpunkt der Einzelmatrix<br />
m1 = 1 + (f - 1) * (cols + 2); % Horizontaler Startpunkt der Einzelmatrix<br />
m2 = (f) * (cols + 2) - 1; % Horizontaler Endpunkt der Einzelmatrix<br />
matrix = Werte(n1:n2, m1:m2); % Bilden der Matrix aus den Start- und Endpunkten<br />
max_x = max(ForceIn(:, 1)); % größter enthaltener x-Wert<br />
min_x = min(ForceIn(:, 1)); % kleinster enthaltener x-Wert<br />
max_y = max(ForceIn(:, 2)); % größter enthaltener y-Wert<br />
min_y = min(ForceIn(:, 2)); % kleinster enthaltener y-Wert<br />
% Generiert Matrizen für 'X' und 'Y' für den dreidimensionalen Plot<br />
[X, Y] = meshgrid(matrix(1, 2:(cols+1)), matrix(2:(rows+1), 1));<br />
Z = matrix(2:(rows+1), 2:(cols+1)); % Generiert eine Matrix <strong>mit</strong> den Z-Werten des Plots<br />
surf(X,Y,Z); % Erstellt eine Oberfläche aus 'X', 'Y', 'Z'<br />
xlabel('Ort horizontal'); % Setzt die x-Achsenbeschriftung
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 92<br />
end<br />
end<br />
ylabel('Ort vertikal'); % Setzt die y-Achsenbeschriftung<br />
zlabel(['Kraft an Sensor ' Sen_str]); % Setzt die z-Achsenbeschriftung<br />
title(['Kraft in Abhängigkeit vom Ort an Sensor ' Sen_str]); % Setzt den Diagrammtitel<br />
caxis ([F_min, F_max]); % Setzt die Achsenbeschränkungen der Farbtafel<br />
colormap(jet) % Legt das Farbschema fest<br />
colorbar; % Erzeugt eine Farbtafel<br />
axis ([min_x, max_x, min_y, max_y, F_min, F_max]); % Setzt x, y, z-Achsenbeschränkungen<br />
filename = ['sensor_' Sen_str '_' F_str]; % Erstellt den Dateinamen<br />
% Exportiert die Matrix des jweiligen Sensors und der jeweiligen Kraft als jpeg-Bilddatei<br />
print ('-djpeg100', filename);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 93<br />
7.2.3. pfaller_auswertung_statisch.m<br />
Programm <strong>zur</strong> Auswertung der DIAdem-Messdateien <strong>von</strong> statischen Messungen. Benötigt das Programm ShowData der Universität. (Hinzufügen <strong>mit</strong>:<br />
File > Set Path...)<br />
% Benötigt das Programm ShowData der Universität. (Hinzufügen <strong>mit</strong>: File ><br />
% Set Path...)<br />
clear;<br />
% function GetDataFromChannel<br />
global Header;<br />
Mess = [];<br />
amplitudesMess = [];<br />
% #########################################################################<br />
[ffiles, fpath] = ListFilesForSelect;<br />
ffile = [];<br />
fileNr = length(ffiles);<br />
if ~isempty(ffiles)<br />
detectUiPp.prompText = 'Now select your desired file.dat!';<br />
detectUiPp.boxHeaders = {' '};<br />
for i = 1:fileNr<br />
detectUiPp.boxNames(i, 1) = {[ffiles(i).name ' ' ffiles(i).comment]};<br />
detectUiPp.boxValues(i, 1) = 0;<br />
end<br />
qq = AutoDetectUIInput(detectUiPp); % local function
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 94<br />
end<br />
if ~ischar(qq)<br />
for i = 1:fileNr<br />
if qq.boxValues(i, 1)=='1';<br />
ffile = ffiles(i).name;<br />
break;<br />
end<br />
end<br />
end<br />
clear detectUiPp qq ffiles;<br />
if ~isempty(ffile),<br />
Header.FullFilename = '';<br />
fullfilename = fullfile(fpath, ffile);<br />
if strcmpi(ffile((end - 2):end), 'DAT'), % DIADEM file.<br />
hfilename = [fullfilename(1:(end - 4)), '_diaheader.mat'];<br />
if exist(hfilename),<br />
load(hfilename); % open MAT file with HEADER data.<br />
if ~strcmp(Header.FullFilename, fullfilename),<br />
Header.FullFilename = fullfilename;<br />
[fpath, dummy] = fileparts(fullfilename);<br />
Header.FilePath = fpath;<br />
save(hfilename, 'Header')<br />
end<br />
else,<br />
Header = TransformDiademToMat(fullfilename);<br />
end<br />
else<br />
dummy = ['File type ', fullfilename((end - 2):end), ...<br />
'is not supported.'];<br />
Notify(dummy, [], 'r')<br />
error([' ### ShowData: ', dummy])<br />
end
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 95<br />
for i = 1:Header.NChannels,<br />
switch Header.Channel(i).Name<br />
case 'Mess_1'<br />
[amplitude, xnew] = GetDiaData(i, 0, Header.Channel(i).Length);<br />
Mess = (find(diff(amplitude)>0.5) + 1);<br />
Mess = [Mess(1); Mess(find(diff(Mess)>1500)+1)];<br />
case 'RVor_1'<br />
[amplitude, xnew] = GetDiaData(i, 0, Header.Channel(i).Length);<br />
RVor = (find(diff(amplitude)>0.5) + 1);<br />
RVor = [RVor(1); RVor(find(diff(RVor)>1500)+1)];<br />
case 'RNach_1'<br />
[amplitude, xnew] = GetDiaData(i, 0, Header.Channel(i).Length);<br />
RNach = (find(diff(amplitude)>0.5) + 1);<br />
RNach = [RNach(1); RNach(find(diff(RNach)>1500)+1)];<br />
end<br />
end<br />
%Mittelwerte<br />
for j = 1:size(Mess, 1),<br />
for i = 1:Header.NChannels,<br />
switch Header.Channel(i).Name<br />
case 'X'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 1) = 0;<br />
amplitudesMess(j, 2) = mean(Ynew);<br />
case 'Y'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 3) = mean(Ynew);<br />
case 'ForceIn_ll'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 4) = mean(Ynew);<br />
case 'ForceIn_lr'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 5) = mean(Ynew);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 96<br />
end<br />
end<br />
end<br />
case 'ForceIn_ul'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 6) = mean(Ynew);<br />
case 'ForceIn_ur'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 7) = mean(Ynew);<br />
case 'ForceIn_ml_i(5)'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 8) = mean(Ynew);<br />
case 'ForceIn_mr_i(6)'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1), 1000);<br />
amplitudesMess(j, 9) = mean(Ynew);<br />
for j = 1:size(RVor, 1)<br />
for i = 1:Header.NChannels,<br />
switch Header.Channel(i).Name<br />
case 'X'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 1) = -1;<br />
amplitudesRVor(j, 2) = mean(Ynew);<br />
case 'Y'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 3) = mean(Ynew);<br />
case 'ForceIn_ll'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 4) = mean(Ynew);<br />
case 'ForceIn_lr'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 5) = mean(Ynew);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 97<br />
end<br />
end<br />
end<br />
j = j+1;<br />
case 'ForceIn_ul'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 6) = mean(Ynew);<br />
case 'ForceIn_ur'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 7) = mean(Ynew);<br />
case 'ForceIn_ml_i(5)'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 8) = mean(Ynew);<br />
case 'ForceIn_mr_i(6)'<br />
[Ynew, Xnew] = GetDiaData(i, RVor(j, 1), 1000);<br />
amplitudesRVor(j, 9) = mean(Ynew);<br />
for j = 1:size(RNach, 1),<br />
for i = 1:Header.NChannels,<br />
switch Header.Channel(i).Name<br />
case 'X'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 1) = 1;<br />
amplitudesRNach(j, 2) = mean(Ynew);<br />
case 'Y'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 3) = mean(Ynew);<br />
case 'ForceIn_ll'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 4) = mean(Ynew);<br />
case 'ForceIn_lr'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 5) = mean(Ynew);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 98<br />
end<br />
end<br />
end<br />
j = j+1;<br />
case 'ForceIn_ul'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 6) = mean(Ynew);<br />
case 'ForceIn_ur'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 7) = mean(Ynew);<br />
case 'ForceIn_ml_i(5)'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 8) = mean(Ynew);<br />
case 'ForceIn_mr_i(6)'<br />
[Ynew, Xnew] = GetDiaData(i, RNach(j, 1), 1000);<br />
amplitudesRNach(j, 9) = mean(Ynew);<br />
end<br />
% #########################################################################<br />
xlswrite('statisch_y72_Mess', amplitudesMess)<br />
xlswrite('statisch_y72_RVor', amplitudesRVor)<br />
xlswrite('statisch_y72_RNach', amplitudesRNach)<br />
% xlswrite(amplitudesMess, 'Statische Messung, y72', {'Typ', 'X', 'Y', 'ForceIn_ll', 'ForceIn_lr', 'ForceIn_ul',<br />
'ForceIn_ur', 'ForceIn_ml', 'ForceIn_mr'}, 'statisch_y72_Mess', 'Tabelle1')
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 99<br />
7.2.4. pfaller_flaechengleichung_2_funktionen.m<br />
Programm zum Erstellen <strong>von</strong> Flächengleichungen die aus zwei verschiedenen Gleichungen bestehen. Greift auf die Funktionen pfaller_gleichung_lin.m<br />
und pfaller_gleichung_pol.m <strong>zur</strong>ück.<br />
clear;<br />
mess_lower = xlsread('D:\PfalLer\Auswertung\excel\F_lr_4000.xls');<br />
cols = size(mess_lower, 2) - 1;<br />
rows = size(mess_lower, 1) - 1;<br />
% Linearer Anteil: 2 - grenze1<br />
grenze1 = 100;<br />
% Polynomischer Anteil: grenze1 - grenze2<br />
grenze2 = 190;<br />
% Erzeugen einer Wertetabelle (<strong>mit</strong> den oberen Grenzen) <strong>zur</strong> linearen<br />
% optimierung<br />
n = 1;<br />
for i = 2:(rows+1)<br />
if mess_lower(i, 1)
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 100<br />
data_lin = [xdata_lin; ydata_lin];<br />
a0 = zeros(1, 4); % Geratene Startwerte<br />
% Optimierung der Funktion pfaller_gleichung_lin <strong>mit</strong> den Daten aus data_lin<br />
a = lsqcurvefit(@pfaller_gleichung_lin, a0, data_lin, zdata_lin)<br />
% Erzeugen einer Wertetabelle (<strong>mit</strong> den oberen Grenzen) <strong>zur</strong> polynomischen<br />
% optimierung<br />
n = 1;<br />
for i = 2:(rows+1)<br />
if mess_lower(i, 1) >= grenze1 && mess_lower(i, 1)
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 101<br />
end<br />
end<br />
% polynomischer Teil<br />
for i = 2:(rows+1)<br />
if mess_lower(i, 1) >= grenze1 && mess_lower(i, 1) < grenze2<br />
for j = 2:(cols+1)<br />
x = mess_lower(1, j);<br />
y = mess_lower(i, 1);<br />
end<br />
end<br />
end<br />
Z(i-1, j-1) = pfaller_gleichung_pol(b, [x; y]);<br />
[rows2, cols2] = size(Z);<br />
% Plotten der Funktionen<br />
[X, Y] = meshgrid(mess_lower(1, 2:(cols2+1)), mess_lower(2:(rows2+1), 1));<br />
Z_mess = mess_lower(2:(rows2+1), 2:(cols2+1));<br />
Z_delta = Z - Z_mess;<br />
hold on;<br />
surf(X,Y,Z);<br />
% surf(X,Y,Z_mess);<br />
% surf(X,Y,Z_delta);<br />
hold off;<br />
xlabel('Ort horizontal');<br />
ylabel('Ort vertikal');<br />
zlabel('Kraft an Sensor lr');<br />
title('Kraft in Abhängigkeit vom Ort an Sensor lr');<br />
axis ([7 79 2 184 -1 10]);<br />
caxis ([-1 10]);<br />
colormap(Jet)<br />
colorbar;<br />
print -djpeg100 sensor_lr_4000_fx.jpeg;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 102<br />
7.2.5. pfaller_gleichung_lin.m<br />
Funktion für die lineare Flächenoptimierung.<br />
function F = gleichung_lin(a, data)<br />
x = data(1, :);<br />
y = data(2, :);<br />
% F (x) = (ay + b)x + cy + d<br />
F = (a(1) .* y + a(2)) .* x + a(3) .* y + a(4);<br />
7.2.6. pfaller_gleichung_pol.m<br />
Funktion für die polynomische Flächenoptimierung.<br />
function F = gleichung_pol(b, data)<br />
x = data(1, :);<br />
y = data(2, :);<br />
% quadratisch<br />
% F (x) = (ey² + fy + g) * x + hy² + iy + j<br />
F = (b(1) .* y.^2 + b(2) .* y + b(3)) .* x + b(4) .* y.^2 + b(5) .* y + b(6);<br />
% kubisch -> geratene Startwerte a0 müssen 8 statt 6 Werte enthalten<br />
% F = (b(1).*y.^3 + b(2).*y.^2 + b(3).*y + b(4)) .*x + b(5).*y.^3 + b(6).*y.^2 + b(7).*y + b(8);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 103<br />
7.2.7. pfaller_linearkombination_felder.m<br />
Programm <strong>zur</strong> Berechnung des Ortes durch vier verschiedene Linearkombinationen. In Zeile 4 bis 9 müssen die Speicherpfade der Excel-Tabellen <strong>mit</strong><br />
den dreidimensionalen Wertetabellen der drei Sensoren eingegeben werden.<br />
clear;<br />
% Messwerte einlesen<br />
ForceIn_ul = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ul.xls');<br />
ForceIn_ur = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ur.xls');<br />
ForceIn_ml = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ml.xls');<br />
ForceIn_mr = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_mr.xls');<br />
ForceIn_ll = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ll.xls');<br />
ForceIn_lr = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_lr.xls');<br />
% Finden der Koeffizienten <strong>zur</strong> <strong>Orts</strong>berechnung<br />
row = 1;<br />
row_1 = 1;<br />
row_2 = 1;<br />
row_3 = 1;<br />
row_4 = 1;<br />
for j = 2:(size(ForceIn_ul, 1))<br />
for i = 2:(size(ForceIn_ul, 2))<br />
% Unterteilung der oberen Plattenhälfte in vier Bereiche:<br />
% 1 (oben links), 2 (oben rechts), 3 (unten links), 4 (unten rechts)<br />
% 1: x > 40, y > 46<br />
% 2: x < 40, y > 46<br />
% 3: x > 40, y < 46<br />
% 4: x < 40, y < 46
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 104<br />
F_ul = ForceIn_ul(j,i);<br />
F_ur = ForceIn_ur(j,i);<br />
F_ml = ForceIn_ml(j,i);<br />
F_mr = ForceIn_mr(j,i);<br />
F_ll = ForceIn_ll(j,i);<br />
F_lr = ForceIn_lr(j,i);<br />
x_temp = ForceIn_ul(j,1);<br />
y_temp = ForceIn_ul(1,i);<br />
if y_temp > 139 % oben<br />
if x_temp > 42 % links oben: 1<br />
koeffizienten_1(row_1, 1) = F_ul;<br />
koeffizienten_1(row_1, 2) = F_ur;<br />
koeffizienten_1(row_1, 3) = F_ml;<br />
koeffizienten_1(row_1, 4) = F_mr;<br />
koeffizienten_1(row_1, 5) = F_ll;<br />
koeffizienten_1(row_1, 6) = F_lr;<br />
rechts_x_1(row_1, 1) = ForceIn_ul(j,1);<br />
rechts_y_1(row_1, 1) = ForceIn_ul(1,i);<br />
row_1 = row_1 + 1;<br />
end<br />
if x_temp < 42 % rechts oben: 2<br />
koeffizienten_2(row_2, 1) = F_ul;<br />
koeffizienten_2(row_2, 2) = F_ur;<br />
koeffizienten_2(row_2, 3) = F_ml;<br />
koeffizienten_2(row_2, 4) = F_mr;<br />
koeffizienten_2(row_2, 5) = F_ll;<br />
koeffizienten_2(row_2, 6) = F_lr;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 105<br />
rechts_x_2(row_2, 1) = ForceIn_ul(j,1);<br />
rechts_y_2(row_2, 1) = ForceIn_ul(1,i);<br />
row_2 = row_2 + 1;<br />
end<br />
end<br />
if y_temp 42 % links unten: 3<br />
koeffizienten_3(row_3, 1) = F_ul;<br />
koeffizienten_3(row_3, 2) = F_ur;<br />
koeffizienten_3(row_3, 3) = F_ml;<br />
koeffizienten_3(row_3, 4) = F_mr;<br />
koeffizienten_3(row_3, 5) = F_ll;<br />
koeffizienten_3(row_3, 6) = F_lr;<br />
end<br />
end<br />
rechts_x_3(row_3, 1) = ForceIn_ul(j,1);<br />
rechts_y_3(row_3, 1) = ForceIn_ul(1,i);<br />
row_3 = row_3 + 1;<br />
end<br />
if x_temp < 42 % rechts unten: 4<br />
koeffizienten_4(row_4, 1) = F_ul;<br />
koeffizienten_4(row_4, 2) = F_ur;<br />
koeffizienten_4(row_4, 3) = F_ml;<br />
koeffizienten_4(row_4, 4) = F_mr;<br />
koeffizienten_4(row_4, 5) = F_ll;<br />
koeffizienten_4(row_4, 6) = F_lr;<br />
rechts_x_4(row_4, 1) = ForceIn_ul(j,1);<br />
rechts_y_4(row_4, 1) = ForceIn_ul(1,i);<br />
row_4 = row_4 + 1;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 106<br />
end<br />
end<br />
% Erstellen der Matrizen zum Finden der Koeffizienten die für die gesamte obere Plattenhälfte gelten.<br />
% Mit ihnen wird später der vorläufige Ort berechnet<br />
koeffizienten(row, 1) = F_ul;<br />
koeffizienten(row, 2) = F_ur;<br />
koeffizienten(row, 3) = F_ml;<br />
koeffizienten(row, 4) = F_mr;<br />
koeffizienten(row, 5) = F_ll;<br />
koeffizienten(row, 6) = F_lr;<br />
rechts_x(row, 1) = ForceIn_ul(j,1);<br />
rechts_y(row, 1) = ForceIn_ul(1,i);<br />
row = row + 1;<br />
% Lösen der Gleichungen für die einzelnen Felder<br />
faktoren_x = koeffizienten\rechts_x;<br />
faktoren_y = koeffizienten\rechts_y;<br />
faktoren_x_1 = koeffizienten_1\rechts_x_1;<br />
faktoren_y_1 = koeffizienten_1\rechts_y_1;<br />
faktoren_x_2 = koeffizienten_2\rechts_x_2;<br />
faktoren_y_2 = koeffizienten_2\rechts_y_2;<br />
faktoren_x_3 = koeffizienten_3\rechts_x_3;<br />
faktoren_y_3 = koeffizienten_3\rechts_y_3;<br />
faktoren_x_4 = koeffizienten_4\rechts_x_4;<br />
faktoren_y_4 = koeffizienten_4\rechts_y_4;<br />
faktoren_gesamt(:, 1) = faktoren_x
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 107<br />
faktoren_gesamt(:, 2) = faktoren_x_1<br />
faktoren_gesamt(:, 3) = faktoren_x_2<br />
faktoren_gesamt(:, 4) = faktoren_x_3<br />
faktoren_gesamt(:, 5) = faktoren_x_4<br />
faktoren_gesamt(:, 7) = faktoren_y<br />
faktoren_gesamt(:, 8) = faktoren_y_1<br />
faktoren_gesamt(:, 9) = faktoren_y_2<br />
faktoren_gesamt(:, 10) = faktoren_y_3<br />
faktoren_gesamt(:, 11) = faktoren_y_4<br />
% <strong>Orts</strong>berechnung <strong>mit</strong> den oben gefundenen Koeffizienten<br />
n_ul = faktoren_x(1, 1);<br />
n_ur = faktoren_x(2, 1);<br />
n_ml = faktoren_x(3, 1);<br />
n_mr = faktoren_x(4, 1);<br />
n_ll = faktoren_x(5, 1);<br />
n_lr = faktoren_x(6, 1);<br />
m_ul = faktoren_y(1, 1);<br />
m_ur = faktoren_y(2, 1);<br />
m_ml = faktoren_y(3, 1);<br />
m_mr = faktoren_y(4, 1);<br />
m_ll = faktoren_y(5, 1);<br />
m_lr = faktoren_y(6, 1);<br />
n_ul_1 = faktoren_x_1(1, 1);<br />
n_ur_1 = faktoren_x_1(2, 1);<br />
n_ml_1 = faktoren_x_1(3, 1);<br />
n_mr_1 = faktoren_x_1(4, 1);<br />
n_ll_1 = faktoren_x_1(5, 1);<br />
n_lr_1 = faktoren_x_1(6, 1);<br />
m_ul_1 = faktoren_y_1(1, 1);<br />
m_ur_1 = faktoren_y_1(2, 1);<br />
m_ml_1 = faktoren_y_1(3, 1);<br />
m_mr_1 = faktoren_y_1(4, 1);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 108<br />
m_ll_1 = faktoren_y_1(5, 1);<br />
m_lr_1 = faktoren_y_1(6, 1);<br />
n_ul_2 = faktoren_x_2(1, 1);<br />
n_ur_2 = faktoren_x_2(2, 1);<br />
n_ml_2 = faktoren_x_2(3, 1);<br />
n_mr_2 = faktoren_x_2(4, 1);<br />
n_ll_2 = faktoren_x_2(5, 1);<br />
n_lr_2 = faktoren_x_2(6, 1);<br />
m_ul_2 = faktoren_y_2(1, 1);<br />
m_ur_2 = faktoren_y_2(2, 1);<br />
m_ml_2 = faktoren_y_2(3, 1);<br />
m_mr_2 = faktoren_y_2(4, 1);<br />
m_ll_2 = faktoren_y_2(5, 1);<br />
m_lr_2 = faktoren_y_2(6, 1);<br />
n_ul_3 = faktoren_x_3(1, 1);<br />
n_ur_3 = faktoren_x_3(2, 1);<br />
n_ml_3 = faktoren_x_3(3, 1);<br />
n_mr_3 = faktoren_x_3(4, 1);<br />
n_ll_3 = faktoren_x_3(5, 1);<br />
n_lr_3 = faktoren_x_3(6, 1);<br />
m_ul_3 = faktoren_y_3(1, 1);<br />
m_ur_3 = faktoren_y_3(2, 1);<br />
m_ml_3 = faktoren_y_3(3, 1);<br />
m_mr_3 = faktoren_y_3(4, 1);<br />
m_ll_3 = faktoren_y_3(5, 1);<br />
m_lr_3 = faktoren_y_3(6, 1);<br />
n_ul_4 = faktoren_x_4(1, 1);<br />
n_ur_4 = faktoren_x_4(2, 1);<br />
n_ml_4 = faktoren_x_4(3, 1);<br />
n_mr_4 = faktoren_x_4(4, 1);<br />
n_ll_4 = faktoren_x_4(5, 1);<br />
n_lr_4 = faktoren_x_4(6, 1);<br />
m_ul_4 = faktoren_y_4(1, 1);<br />
m_ur_4 = faktoren_y_4(2, 1);<br />
m_ml_4 = faktoren_y_4(3, 1);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 109<br />
m_mr_4 = faktoren_y_4(4, 1);<br />
m_ll_4 = faktoren_y_4(5, 1);<br />
m_lr_4 = faktoren_y_4(6, 1);<br />
row = 1;<br />
for j = 2:(size(ForceIn_ul, 1))<br />
for i = 2:(size(ForceIn_ul, 2))<br />
% Unterteilung der oberen Plattenhälfte in vier Bereiche:<br />
% 1 (oben links), 2 (oben rechts), 3 (unten links), 4 (unten rechts)<br />
% 1: x > 40, y > 46<br />
% 2: x < 40, y > 46<br />
% 3: x > 40, y < 46<br />
% 4: x < 40, y < 46<br />
F_ul = ForceIn_ul(j,i);<br />
F_ur = ForceIn_ur(j,i);<br />
F_ml = ForceIn_ml(j,i);<br />
F_mr = ForceIn_mr(j,i);<br />
F_ll = ForceIn_ll(j,i);<br />
F_lr = ForceIn_lr(j,i);<br />
x_temp = n_ul*F_ul + n_ur * F_ur + n_ml * F_ml +n_mr * F_mr + n_ll * F_ll + n_lr * F_lr;<br />
y_temp = m_ul*F_ul + m_ur * F_ur + m_ml * F_ml +m_mr * F_mr + m_ll * F_ll + m_lr * F_lr;<br />
if y_temp > 139 % oben<br />
if x_temp > 42 % links oben: 1<br />
x_calc = n_ul_1 * F_ul + n_ur_1 * F_ur + n_ml_1 * F_ml +n_mr_1 * F_mr + n_ll_1 * F_ll + n_lr_1 * F_lr;<br />
y_calc = m_ul_1 * F_ul + m_ur_1 * F_ur + m_ml_1 * F_ml +m_mr_1 * F_mr + m_ll_1 * F_ll + m_lr_1 * F_lr;<br />
end<br />
if x_temp < 42 % rechts oben: 2<br />
x_calc = n_ul_2 * F_ul + n_ur_2 * F_ur + n_ml_2 * F_ml +n_mr_2 * F_mr + n_ll_2 * F_ll + n_lr_2 * F_lr;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 110<br />
y_calc = m_ul_2 * F_ul + m_ur_2 * F_ur + m_ml_2 * F_ml +m_mr_2 * F_mr + m_ll_2 * F_ll + m_lr_2 * F_lr;<br />
end<br />
end<br />
if y_temp 42 % links unten: 3<br />
x_calc = n_ul_3 * F_ul + n_ur_3 * F_ur + n_ml_3 * F_ml +n_mr_3 * F_mr + n_ll_3 * F_ll + n_lr_3 * F_lr;<br />
y_calc = m_ul_3 * F_ul + m_ur_3 * F_ur + m_ml_3 * F_ml +m_mr_3 * F_mr + m_ll_3 * F_ll + m_lr_3 * F_lr;<br />
end<br />
if x_temp < 42 % rechts unten: 4<br />
x_calc = n_ul_4 * F_ul + n_ur_4 * F_ur + n_ml_4 * F_ml +n_mr_4 * F_mr + n_ll_4 * F_ll + n_lr_4 * F_lr;<br />
y_calc = m_ul_4 * F_ul + m_ur_4 * F_ur + m_ml_4 * F_ml +m_mr_4 * F_mr + m_ll_4 * F_ll + m_lr_4 * F_lr;<br />
end<br />
end<br />
koordinaten(row, 1) = ForceIn_ul(j,1); % x gemessen<br />
koordinaten(row, 5) = ForceIn_ul(1,i); % y gemessen<br />
koordinaten(row, 2) = x_calc; % x in dem jeweiligen Bereich berechnet<br />
koordinaten(row, 6) = y_calc; % y in dem jeweiligen Bereich berechnet<br />
koordinaten(row, 3) = abs((koordinaten(row, 1) - koordinaten(row, 2)) * 100 / koordinaten(row, 1)); % Die<br />
prozentuale Differenz zwischen gemessenem und berechnetem x im Betrag<br />
koordinaten(row, 7) = abs((koordinaten(row, 5) - koordinaten(row, 6)) * 100 / koordinaten(row, 5)); % Die<br />
prozentuale Differenz zwischen gemessenem und berechnetem y im Betrag<br />
end<br />
end<br />
row = row+1;<br />
<strong>mit</strong>telwerte = mean(koordinaten); % Berechnung der Mittelwerte für jede Spalte<br />
koordinaten(row, 3) = <strong>mit</strong>telwerte(1, 3);<br />
koordinaten(row, 7) = <strong>mit</strong>telwerte(1, 7);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 111<br />
cols = size(ForceIn_ul, 1) - 1; % Anzahl der verschiedenen horizontalen Messpunkte (bzw. Anzahl der gemessenen Spalten)<br />
rows = size(ForceIn_ul, 2) - 1; % Anzahl der verschiedenen vertikalen Messpunkte (bzw. Anzahl der gemessenen Reihen)<br />
% Umwandlung der Matrizen <strong>von</strong> Listenform in eine dreidimensionaleWertetabelle<br />
for j = 2:(rows+1) % matrix vertikal<br />
for i = 2:(cols+1) % matrix horizontal<br />
matrix_x(1, i) = koordinaten((rows * cols - (i-2) * rows), 1);<br />
matrix_x(j, 1) = koordinaten((rows * cols - (i-2) * rows - j + 2), 5);<br />
matrix_x(j ,i) = koordinaten((rows * cols - (i-2) * rows - j + 2), 3);<br />
end<br />
end<br />
for j = 2:(rows+1) % matrix vertikal<br />
for i = 2:(cols+1) % matrix horizontal<br />
matrix_y(1, i) = koordinaten((rows * cols - (i-2) * rows), 1);<br />
matrix_y(j, 1) = koordinaten((rows * cols - (i-2) * rows - j + 2), 5);<br />
matrix_y(j ,i) = koordinaten((rows * cols - (i-2) * rows - j + 2), 7);<br />
end<br />
end<br />
% Plotten der Wertetabellen der prozentualne Differenzen zwischen<br />
% gemessenen und berechneten x und y im Betrag als Oberflächen-Graph<br />
[X, Y] = meshgrid(matrix_x(1, 2:(cols+1)), matrix_x(2:(rows+1), 1));<br />
Z = matrix_x(2:(rows+1), 2:(cols+1));<br />
surf(X,Y,Z);<br />
xlabel('Ort horizontal');<br />
ylabel('Ort vertikal');<br />
zlabel('Delta x [%]');<br />
title('Abweichung Berechnung aus Linearkombination Messung X [%]');<br />
colorbar<br />
axis ([8 78 99 179 0 15])<br />
print -djpeg100 linearkombination_abweichung_x_optimiert.jpeg;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 112<br />
[X, Y] = meshgrid(matrix_y(1, 2:(cols+1)), matrix_y(2:(rows+1), 1));<br />
Z = matrix_y(2:(rows+1), 2:(cols+1));<br />
surf(X,Y,Z);<br />
xlabel('Ort horizontal');<br />
ylabel('Ort vertikal');<br />
zlabel('Delta y [%]');<br />
title('Abweichung Berechnung aus Linearkombination Messung Y [%]');<br />
colorbar<br />
axis ([8 78 99 179 0 15])<br />
print -djpeg100 linearkombination_abweichung_y_optimiert.jpeg;<br />
% Ausgabe der Matrizen in Listenform und als Wertetabelle in Excel<br />
xlswrite('linearkombination_optimiert', koordinaten);<br />
xlswrite('linearkombination_abweichungen_x_optimiert', matrix_x);<br />
xlswrite('linearkombination_abweichungen_y_optimiert', matrix_y);<br />
xlswrite('koeffizienten_optimiert', faktoren_gesamt);<br />
% xlswrite(koordinaten, 'Vergleich Ort: Messung Berechnung aus Linearkombination', {'X-Mess', 'X-Calc', '|dX|%', '',<br />
'Y-Mess', 'Y-Calc', '|dY|%'}, 'linearkombination_optimiert', 'Tabelle1');<br />
% xlswrite(matrix_x, 'Linearkombination %-Abweichungen x', {''}, 'linearkombination_abweichungen_x_optimiert',<br />
'Tabelle1');<br />
% xlswrite(matrix_y, 'Linearkombination %-Abweichungen y', {''}, 'linearkombination_abweichungen_y_optimiert',<br />
'Tabelle1');<br />
% xlswrite(faktoren_gesamt, 'Koeffizienten der Linearkombinationen',<br />
{'x','x1','x2','x3','x4','','y','y1','y2','y3','y4'}, 'koeffizienten_optimiert', 'Tabelle1');<br />
clear;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 113<br />
7.2.8. pfaller_ortberechnung_impuls.m<br />
Das komplette Programm um aus einem mechanischen Impuls auf die Platte Ort und Stärke des Impulses und Stärke der konstanten Kraft zu<br />
berechnen. Die Messdaten werden direkt aus DIAdem eingelesen. Die Speicherpfade der Dateien faktoren_x.txt, faktoren_y.txt und geraden.txt müssen<br />
in <strong>MATLAB</strong> ® eingegeben werden, weiterhin wird das Programm ShowData der Universität benötigt: File > Set Path…<br />
% Benötigt das Programm ShowData der Universität. (Hinzufügen <strong>mit</strong>: File ><br />
% Set Path...)<br />
% Die Speicherpfade der Dateien faktoren_x.txt, faktoren_y.txt und<br />
% geraden.txt müssen in <strong>MATLAB</strong>® eingegeben werden: File > Set Path...<br />
% function GetDataFromChannel<br />
clear;<br />
global Header;<br />
solution = dlmread('gerade.txt');<br />
m = solution(1, 1);<br />
t = solution(2, 1);<br />
Mess = [];<br />
row = 1;<br />
koordinaten = [];<br />
amplitudes_ll = [];<br />
amplitudes_lr = [];
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 114<br />
amplitudes_ml = [];<br />
amplitudes_mr = [];<br />
amplitudes_ul = [];<br />
amplitudes_ur = [];<br />
amplitudes_ll_mean = [];<br />
amplitudes_lr_mean = [];<br />
amplitudes_ml_mean = [];<br />
amplitudes_mr_mean = [];<br />
amplitudes_ul_mean = [];<br />
amplitudes_ur_mean = [];<br />
amplitudes_mag_f = [];<br />
amplitudes_mag_in = [];<br />
[ffiles, fpath] = ListFilesForSelect;<br />
ffile = [];<br />
fileNr = length(ffiles);<br />
if ~isempty(ffiles)<br />
detectUiPp.prompText = 'Now select your desired file.dat!';<br />
detectUiPp.boxHeaders = {' '};<br />
for i = 1:fileNr<br />
detectUiPp.boxNames(i, 1) = {[ffiles(i).name ' ' ffiles(i).comment]};<br />
detectUiPp.boxValues(i, 1) = 0;<br />
end<br />
qq = AutoDetectUIInput(detectUiPp); % local function<br />
if ~ischar(qq)<br />
for i = 1:fileNr<br />
if qq.boxValues(i, 1)=='1';<br />
ffile = ffiles(i).name;<br />
break;<br />
end<br />
end<br />
end<br />
clear detectUiPp qq ffiles;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 115<br />
end<br />
if ~isempty(ffile),<br />
Header.FullFilename = '';<br />
fullfilename = fullfile(fpath, ffile);<br />
if strcmpi(ffile((end - 2):end), 'DAT'), % DIADEM file.<br />
hfilename = [fullfilename(1:(end - 4)), '_diaheader.mat'];<br />
if exist(hfilename),<br />
load(hfilename); % open MAT file with HEADER data.<br />
if ~strcmp(Header.FullFilename, fullfilename), %---<br />
Header.FullFilename = fullfilename;<br />
[fpath, dummy] = fileparts(fullfilename);<br />
Header.FilePath = fpath;<br />
save(hfilename, 'Header')<br />
end<br />
else,<br />
Header = TransformDiademToMat(fullfilename);<br />
end<br />
else<br />
dummy = ['File type ', fullfilename((end - 2):end), ...<br />
'is not supported.'];<br />
Notify(dummy, [], 'r')<br />
error([' ### ShowData: ', dummy])<br />
end<br />
for i = 1:Header.NChannels,<br />
switch Header.Channel(i).Name<br />
case 'control'<br />
[amplitude, xnew] = GetDiaData(i, 0, Header.Channel(i).Length);<br />
Mess = (find(diff(amplitude)>0.5) + 1);<br />
Mess = [Mess(1); Mess(find(diff(Mess)>1500)+1)];<br />
end<br />
end
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 116<br />
for j = 1:size(Mess, 1),<br />
for i = 1:Header.NChannels,<br />
switch Header.Channel(i).Name<br />
case 'X'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
koordinaten(row, 1) = mean(Ynew);<br />
case 'Y'<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
koordinaten(row, 2) = mean(Ynew);<br />
case 'ForceIn_ll'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_ll(size(amplitudes_ll, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_lr'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_lr(size(amplitudes_lr, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_ul'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 117<br />
amplitudes_ul(size(amplitudes_ul, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_ur'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_ur(size(amplitudes_ur, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_ml_i(5)'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_ml(size(amplitudes_ml, 1)+1, :) = Ynew - offset;<br />
case 'ForceIn_mr_i(6)'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_mr(size(amplitudes_mr, 1)+1, :) = Ynew - offset;<br />
case 'ForceMagIn'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_mag_f(size(amplitudes_mag_f, 1)+1, :) = Ynew - offset;<br />
case 'HubMagIn'<br />
[Y_offset, X_offset] = GetDiaData(i, Mess(j, 1), 500);<br />
offset = [];<br />
offset(size(offset, 1)+1, :) = mean(Y_offset);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 118<br />
end<br />
end<br />
end<br />
end<br />
row = row + 1;<br />
[Ynew, Xnew] = GetDiaData(i, Mess(j, 1)+500, 5000);<br />
amplitudes_mag_in(size(amplitudes_mag_in, 1)+1, :) = Ynew - offset;<br />
hold on;<br />
for n = 1:size(amplitudes_ll, 1)<br />
% Suchen des Messpunktes <strong>mit</strong> der höchsten Amplitude<br />
maximum = [max(max(amplitudes_ll(n, :))), max(max(amplitudes_lr(n, :))), max(max(amplitudes_ml(n, :))),<br />
max(max(amplitudes_mr(n, :))), max(max(amplitudes_ul(n, :))), max(max(amplitudes_ur(n, :)))];<br />
nr = find(maximum == max(maximum));<br />
switch nr<br />
case 1<br />
value = amplitudes_ll(n, :);<br />
case 2<br />
value = amplitudes_lr(n, :);<br />
case 3<br />
value = amplitudes_ml(n, :);<br />
case 4<br />
value = amplitudes_mr(n, :);<br />
case 5<br />
value = amplitudes_ul(n, :);<br />
case 6<br />
value = amplitudes_ur(n, :);<br />
end<br />
% Finden des Startwerts x1 des Kraftintervalls<br />
% Position <strong>von</strong> x1 = Mitte der 1. Schwingung nach dem Kraftanstieg<br />
x1_1 = 50; % Startwert 50 [ms], kurz vor dem Kraftanstieg<br />
% Suchen des 1. HOP
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 119<br />
while value(x1_1) = value(x1_2+1)<br />
x1_2 = x1_2 + 1; % x1_1 ist die Position des TIP nach dem 1. HOP<br />
end<br />
% Von jedem Kraftert zwischen HOP und TIP in der Matrix wird der Mittelwert der beiden subtrahiert<br />
delta_1 = value(1, x1_1:x1_2) - (ones(1, x1_2 - x1_1 + 1) * (value(x1_1) + value(x1_2))/2);<br />
delta_1 = abs(delta_1); % Betrag der obigen Matrix<br />
% Findet das Minimum der Matrix (= Punkt der am nächsten am Mittelwert gelegen ist<br />
x1 = find(delta_1 == min(delta_1), 1, 'last');<br />
x1 = x1 + x1_1 - 1;<br />
% Finden des Endwerts x2 des Kraftintervalls<br />
% Position <strong>von</strong> x2 = Mitte der letzten Schwingung vor dem Kraftabfall<br />
x2_1 = find(value == min(value), 1, 'first'); % Startwert ist Minimum der gesamten Kurve<br />
% Suchen des 1. HOP vor dem Minimum<br />
while value(x2_1) = value(x2_2-1)<br />
x2_2 = x2_2 - 1; % x2_1 ist die Position des letzten TIP vor dem Kraftabfall<br />
end
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 120<br />
% Finden des Punktes x2 der dem Mittelwert aus x2_1 und x2_2 am nächsten liegt<br />
delta_2 = value(1, x2_2:x2_1) - (ones(1, x2_1 - x2_2 + 1) * (value(x2_1) + value(x2_2))/2);<br />
delta_2 = abs(delta_2);<br />
x2 = find(delta_2 == min(delta_2), 1, 'first');<br />
x2 = x2 + x2_2 - 1;<br />
clear summe;<br />
summe = (amplitudes_ll(n, :)); % Addieren der Kräfte aller Sensoren<br />
summe = summe + (amplitudes_lr(n, :)); % (<strong>zur</strong> Übersicht untereinander geschrieben)<br />
summe = summe + (amplitudes_ml(n, :));<br />
summe = summe + (amplitudes_mr(n, :));<br />
summe = summe + (amplitudes_ul(n, :));<br />
summe = summe + (amplitudes_ur(n, :));<br />
% Finden der 1. Integrationsgrenze des Impulses<br />
% Position: Stelle zwischen 1 und x1_1, die am nähesten an der<br />
% konstanten Kraft liegt<br />
delta_i1 = summe(1:x1_1) - ones(1, x1_1) * mean(summe(x1:x2));<br />
delta_i1 = abs(delta_i1);<br />
i_start = find(delta_i1 == min(delta_i1), 1, 'first');<br />
% Finden der 2. Integrationsgrenze des Impulses<br />
% Position: Stelle zwischen x1_1 und x1_2, die am nähesten an der<br />
% konstanten Kraft liegt<br />
delta_i2 = summe(x1_1:x1_2) - ones(1, x1_2 - x1_1 + 1) * mean(summe(x1:x2));<br />
delta_i2 = abs(delta_i2);<br />
i_end = find(delta_i2 == min(delta_i2), 1, 'last');
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 121<br />
i_end = i_end + x1_1 - 1;<br />
% Berehnung des Impulses<br />
impuls = sum(summe(i_start:i_end)); % Integrieren des Impulses <strong>mit</strong> den vorher gefundenen Grenzen<br />
impuls = impuls - mean(summe(x1:x2)); % Abziehen der konstanten Kraft (=Fläche unter der konstanten Kraft)<br />
impuls = impuls * (i_end - i_start + 1) / 2; % Halbieren der Fläche<br />
impuls = impuls / 1000; % Umrechnung der Millisekunden auf Sekunden<br />
impuls = impuls * m + t; % Umrechnung der Sensorspannung in g<br />
impuls = impuls / 1000; % Umrechnung der g in kg<br />
impuls = impuls * 9,81; % Umrechnung der kg in N<br />
impuls_matrix(n, 1) = impuls; % Schreiben des aktuellen Impulses in eine Matrix<br />
% Berechnen der Mittelwerte<br />
amplitudes_ll_mean(n, 1) = mean(amplitudes_ll(n, x1:x2));<br />
amplitudes_lr_mean(n, 1) = mean(amplitudes_lr(n, x1:x2));<br />
amplitudes_ml_mean(n, 1) = mean(amplitudes_ml(n, x1:x2));<br />
amplitudes_mr_mean(n, 1) = mean(amplitudes_mr(n, x1:x2));<br />
amplitudes_ul_mean(n, 1) = mean(amplitudes_ul(n, x1:x2));<br />
amplitudes_ur_mean(n, 1) = mean(amplitudes_ur(n, x1:x2));<br />
amplitudes_mag_f_mean(n, 1) = mean(amplitudes_mag_f(n, x1:x2));<br />
amplitudes_mag_in_mean(n, 1) = mean(amplitudes_mag_in(n, x1:x2));<br />
end<br />
hold off;<br />
% Schreiben der gefundenen Werte in eine Matrix<br />
ForceIn_ul = amplitudes_ul_mean;<br />
ForceIn_ur = amplitudes_ur_mean;<br />
ForceIn_ml = amplitudes_ml_mean;<br />
ForceIn_mr = amplitudes_mr_mean;<br />
ForceIn_ll = amplitudes_ll_mean;<br />
ForceIn_lr = amplitudes_lr_mean;<br />
% Einlesen der Koeffizienten der Linearkombination
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 122<br />
faktoren_x = dlmread('faktoren_x.txt');<br />
faktoren_y = dlmread('faktoren_y.txt');<br />
n_ul = faktoren_x(1, 1);<br />
n_ur = faktoren_x(2, 1);<br />
n_ml = faktoren_x(3, 1);<br />
n_mr = faktoren_x(4, 1);<br />
n_ll = faktoren_x(5, 1);<br />
n_lr = faktoren_x(6, 1);<br />
m_ul = faktoren_y(1, 1);<br />
m_ur = faktoren_y(2, 1);<br />
m_ml = faktoren_y(3, 1);<br />
m_mr = faktoren_y(4, 1);<br />
m_ll = faktoren_y(5, 1);<br />
m_lr = faktoren_y(6, 1);<br />
% Die Gleichung ist für F=4000g definiert, F_0 ist dieser Wert als<br />
% Sensorspannung<br />
F_0 = (4000 - t)/m;<br />
for row = 1:size(koordinaten, 1)<br />
F_ul = ForceIn_ul(row, 1);<br />
F_ur = ForceIn_ur(row, 1);<br />
F_ml = ForceIn_ml(row, 1);<br />
F_mr = ForceIn_mr(row, 1);<br />
F_ll = ForceIn_ll(row, 1);<br />
F_lr = ForceIn_lr(row, 1);<br />
% Berechnen der Gesamtkraft<br />
F_ges = F_ul + F_ur + F_ml + F_mr + F_ll + F_lr;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 123<br />
% Berechnen, welcher Kraft die aktuelle Kraft bei einer Gesamtkraft <strong>von</strong><br />
% F_0 entsoricht<br />
F_ul = F_ul * F_0 / F_ges;<br />
F_ur = F_ur * F_0 / F_ges;<br />
F_ml = F_ml * F_0 / F_ges;<br />
F_mr = F_mr * F_0 / F_ges;<br />
F_ll = F_ll * F_0 / F_ges;<br />
F_lr = F_lr * F_0 / F_ges;<br />
auswertung(row, 1) = koordinaten(row, 1); % x gemessen<br />
auswertung(row, 2) = m_ul*F_ul + m_ur * F_ur + m_ml * F_ml +m_mr * F_mr + m_ll * F_ll + m_lr * F_lr; % Berechnung<br />
<strong>von</strong> y<br />
auswertung(row, 3) = abs((auswertung(row, 1) - auswertung(row, 2)) * 100 / auswertung(row, 1)); % Die prozentuale<br />
Differenz zwischen gemessenem und berechnetem x im Betrag<br />
auswertung(row, 5) = koordinaten(row, 2); % y gemessen<br />
auswertung(row, 6) = n_ul*F_ul + n_ur * F_ur + n_ml * F_ml +n_mr * F_mr + n_ll * F_ll + n_lr * F_lr; % Berechnung<br />
<strong>von</strong> x<br />
auswertung(row, 7) = abs((auswertung(row, 5) - auswertung(row, 6)) * 100 / auswertung(row, 5)); % Die prozentuale<br />
Differenz zwischen gemessenem und berechnetem y im Betrag<br />
end<br />
auswertung(row, 11) = (F_ges * m + t) / 1000 * 9,81;<br />
auswertung(:, 9) = impuls_matrix;<br />
row = row + 1;<br />
<strong>mit</strong>telwerte = mean(auswertung); % Berechnung der Mittelwerte für jede Spalte<br />
auswertung(row, 3) = <strong>mit</strong>telwerte(1, 3); % Mittelwert Abweichungen x<br />
auswertung(row, 7) = <strong>mit</strong>telwerte(1, 7); % Mittelwert Abweichungen y<br />
% Ausgabe der berechneten Matrix
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 124<br />
xlswrite('linearkombination_einfach_neu', auswertung);<br />
% xlswrite(auswertung, 'Vergleich Ort: Messung Berechnung aus Linearkombination', {'X-Mess', 'X-Calc', '|dX|%', '',<br />
'Y-Mess', 'Y-Calc', '|dY|%', '', 'Impuls [Ns]', '', 'Kraft [N]'}, 'linearkombination_einfach_neu', 'Tabelle1');
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 125<br />
7.2.9. pfaller_solve_linearkombination.m<br />
Programm <strong>zur</strong> Berechnung des Ortes durch eine verschiedene Linearkombination. In Zeile 4 bis 9 müssen die Speicherpfade der Excel-Tabellen <strong>mit</strong><br />
den dreidimensionalen Wertetabellen der drei Sensoren eingegeben werden. Erzeugt die Dateien faktoren_x.txt und faktoren_y.txt <strong>mit</strong> den<br />
Koeffizienten der Linearkombination, wird <strong>von</strong> Programm pfaller_ortberechnung_impuls.m benötigt.<br />
clear;<br />
% Messwerte einlesen<br />
ForceIn_ul = xlsread('D:\Pfaller\Auswertung\excel\F_ul_4000.xls');<br />
ForceIn_ur = xlsread('D:\Pfaller\Auswertung\excel\F_ur_4000.xls');<br />
ForceIn_ml = xlsread('D:\Pfaller\Auswertung\excel\F_ml_4000.xls');<br />
ForceIn_mr = xlsread('D:\Pfaller\Auswertung\excel\F_mr_4000.xls');<br />
ForceIn_ll = xlsread('D:\Pfaller\Auswertung\excel\F_ll_4000.xls');<br />
ForceIn_lr = xlsread('D:\Pfaller\Auswertung\excel\F_lr_4000.xls');<br />
% Finden der Koeffizienten <strong>zur</strong> <strong>Orts</strong>berechnung<br />
row = 1;<br />
for j = 2:(size(ForceIn_ul, 1))<br />
for i = 2:(size(ForceIn_ul, 2))<br />
% Erzeigt pro Messpunkt eine Gleichung der Form:<br />
% x = n_ul*F_ul + n_ur * F_ur + n_ml * F_ml +n_mr * F_mr + n_ll * F_ll + n_lr * F_lr<br />
% und<br />
% y = m_ul*F_ul + m_ur * F_ur + m_ml * F_ml +m_mr * F_mr + m_ll * F_ll + m_lr * F_lr<br />
%<br />
% koeffizienten = [F_ul1, F_ur1, F_ml1, F_mr1, F_ll1, F_lr1
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 126<br />
% F_ul2, F_ur2, F_ml2, F_mr2, F_ll2, F_lr2<br />
% ... ]<br />
%<br />
% rechts_x = [x1;<br />
% x2;<br />
% ...]<br />
% rechts_y = [y1;<br />
% y2;<br />
% ...]<br />
%<br />
% Zum Lösen des linearen Gleichungssystems:<br />
% koeffizienten\rechts_x = [n_ul;<br />
% n_ur;<br />
% n_ml;<br />
% n_mr;<br />
% n_ll;<br />
% n_lr;]<br />
%<br />
% koeffizienten\rechts_y = [m_ul;<br />
% m_ur;<br />
% m_ml;<br />
% m_mr;<br />
% m_ll;<br />
% m_lr;]<br />
F_ul = ForceIn_ul(j,i);<br />
F_ur = ForceIn_ur(j,i);<br />
F_ml = ForceIn_ml(j,i);<br />
F_mr = ForceIn_mr(j,i);<br />
F_ll = ForceIn_ll(j,i);<br />
F_lr = ForceIn_lr(j,i);<br />
koeffizienten(row, 1) = F_ul;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 127<br />
end<br />
end<br />
koeffizienten(row, 2) = F_ur;<br />
koeffizienten(row, 3) = F_ml;<br />
koeffizienten(row, 4) = F_mr;<br />
koeffizienten(row, 5) = F_ll;<br />
koeffizienten(row, 6) = F_lr;<br />
rechts_x(row, 1) = ForceIn_ul(j,1);<br />
rechts_y(row, 1) = ForceIn_ul(1,i);<br />
row = row + 1;<br />
faktoren_x = koeffizienten\rechts_x;<br />
faktoren_y = koeffizienten\rechts_y;<br />
% <strong>Orts</strong>berechnung <strong>mit</strong> den oben gefundenen Koeffizienten<br />
n_ul = faktoren_x(1, 1);<br />
n_ur = faktoren_x(2, 1);<br />
n_ml = faktoren_x(3, 1);<br />
n_mr = faktoren_x(4, 1);<br />
n_ll = faktoren_x(5, 1);<br />
n_lr = faktoren_x(6, 1);<br />
m_ul = faktoren_y(1, 1);<br />
m_ur = faktoren_y(2, 1);<br />
m_ml = faktoren_y(3, 1);<br />
m_mr = faktoren_y(4, 1);<br />
m_ll = faktoren_y(5, 1);<br />
m_lr = faktoren_y(6, 1);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 128<br />
dlmwrite('faktoren_x.txt', faktoren_x);<br />
dlmwrite('faktoren_y.txt', faktoren_y);<br />
row = 1;<br />
for j = 2:(size(ForceIn_ul, 1))<br />
for i = 2:(size(ForceIn_ul, 2))<br />
F_ul = ForceIn_ul(j,i);<br />
F_ur = ForceIn_ur(j,i);<br />
F_ml = ForceIn_ml(j,i);<br />
F_mr = ForceIn_mr(j,i);<br />
F_ll = ForceIn_ll(j,i);<br />
F_lr = ForceIn_lr(j,i);<br />
koordinaten(row, 1) = ForceIn_ul(j,1); % x gemessen<br />
koordinaten(row, 2) = n_ul*F_ul + n_ur * F_ur + n_ml * F_ml +n_mr * F_mr + n_ll * F_ll + n_lr * F_lr; %<br />
Berechnung <strong>von</strong> x<br />
koordinaten(row, 3) = abs((koordinaten(row, 1) - koordinaten(row, 2)) * 100 / koordinaten(row, 1)); % Die<br />
prozentuale Differenz zwischen gemessenem und berechnetem x im Betrag<br />
koordinaten(row, 5) = ForceIn_ul(1,i); % y gemessen<br />
koordinaten(row, 6) = m_ul*F_ul + m_ur * F_ur + m_ml * F_ml +m_mr * F_mr + m_ll * F_ll + m_lr * F_lr; %<br />
Berechnung <strong>von</strong> y<br />
koordinaten(row, 7) = abs((koordinaten(row, 5) - koordinaten(row, 6)) * 100 / koordinaten(row, 5)); % Die<br />
prozentuale Differenz zwischen gemessenem und berechnetem y im Betrag<br />
end<br />
end<br />
row = row+1;<br />
<strong>mit</strong>telwerte = mean(koordinaten); % Berechnung der Mittelwerte für jede Spalte<br />
koordinaten(row, 3) = <strong>mit</strong>telwerte(1, 3);
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 129<br />
koordinaten(row, 7) = <strong>mit</strong>telwerte(1, 7);<br />
cols = size(ForceIn_ul, 1) - 1; % Anzahl der verschiedenen horizontalen Messpunkte (bzw. Anzahl der gemessenen Spalten)<br />
rows = size(ForceIn_ul, 2) - 1; % Anzahl der verschiedenen vertikalen Messpunkte (bzw. Anzahl der gemessenen Reihen)<br />
% Umwandlung der Matrizen <strong>von</strong> Listenform in eine dreidimensionaleWertetabelle<br />
for j = 2:(rows+1) % matrix vertikal<br />
for i = 2:(cols+1) % matrix horizontal<br />
matrix_x(1, i) = koordinaten((rows * cols - (i-2) * rows), 1);<br />
matrix_x(j, 1) = koordinaten((rows * cols - (i-2) * rows - j + 2), 5);<br />
matrix_x(j ,i) = koordinaten((rows * cols - (i-2) * rows - j + 2), 3);<br />
end<br />
end<br />
for j = 2:(rows+1) % matrix vertikal<br />
for i = 2:(cols+1) % matrix horizontal<br />
matrix_y(1, i) = koordinaten((rows * cols - (i-2) * rows), 1);<br />
matrix_y(j, 1) = koordinaten((rows * cols - (i-2) * rows - j + 2), 5);<br />
matrix_y(j ,i) = koordinaten((rows * cols - (i-2) * rows - j + 2), 7);<br />
end<br />
end<br />
% Plotten der Wertetabellen der prozentualne Differenzen zwischen<br />
% gemessenen und berechneten x und y im Betrag als Oberflächen-Graph<br />
[X, Y] = meshgrid(matrix_x(1, 2:(cols+1)), matrix_x(2:(rows+1), 1));<br />
Z = matrix_x(2:(rows+1), 2:(cols+1));<br />
surf(X,Y,Z);<br />
xlabel('Ort horizontal');<br />
ylabel('Ort vertikal');<br />
zlabel('Delta x [%]');
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 130<br />
title('Abweichung Berechnung aus Linearkombination Messung X [%]');<br />
colorbar<br />
% axis ([8 78 99 179 0 15])<br />
print -djpeg100 linearkombination_abweichung_x_neu.jpeg;<br />
[X, Y] = meshgrid(matrix_y(1, 2:(cols+1)), matrix_y(2:(rows+1), 1));<br />
Z = matrix_y(2:(rows+1), 2:(cols+1));<br />
surf(X,Y,Z);<br />
xlabel('Ort horizontal');<br />
ylabel('Ort vertikal');<br />
zlabel('Delta y [%]');<br />
title('Abweichung Berechnung aus Linearkombination Messung Y [%]');<br />
colorbar<br />
% axis ([8 78 99 179 0 15])<br />
print -djpeg100 linearkombination_abweichung_y_neu.jpeg;<br />
% Ausgabe der Matrizen in Listenform und als Wertetabelle in Excel<br />
xlswrite('linearkombination_einfach_neu', koordinaten);<br />
xlswrite('linearkombination_abweichungen_x_neu', matrix_x);<br />
xlswrite('linearkombination_abweichungen_y_neu', matrix_y);<br />
% xlswrite(koordinaten, 'Vergleich Ort: Messung Berechnung aus Linearkombination', {'X-Mess', 'X-Calc', '|dX|%', '',<br />
'Y-Mess', 'Y-Calc', '|dY|%'}, 'linearkombination_einfach_neu', 'Tabelle1');<br />
% xlswrite(matrix_x, 'Linearkombination %-Abweichungen x', {''}, 'linearkombination_abweichungen_x_neu', 'Tabelle1');<br />
% xlswrite(matrix_y, 'Linearkombination %-Abweichungen y', {''}, 'linearkombination_abweichungen_y_neu', 'Tabelle1');
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 131<br />
7.2.10. pfaller_solve_sensorgleichungen.m<br />
Programm zum Berechnen des Ortes über je zwei Sensorgleichungen.<br />
clear;<br />
ForceIn_mr = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_mr.xls');<br />
ForceIn_ml = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ml.xls');<br />
ForceIn_ur = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ur.xls');<br />
ForceIn_ul = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ul.xls');<br />
koordinaten_ur_ul = [];<br />
koordinaten_mr_ml = [];<br />
<strong>mit</strong>telwerte = [];<br />
a = 0.000359639212592366;<br />
b = -0.0342834501388174;<br />
c = -0.00390141447718803;<br />
d = 0.425751094384385;<br />
e = -0.000363574763629761;<br />
f = 0.0343389335868583;<br />
g = 0.0275989158973349;<br />
h = -2.5380814944847;<br />
m = 1;<br />
for j = 2:size(ForceIn_ur, 1) %ort horizontal, matrix vertikal<br />
for i = 2:size(ForceIn_ur, 2) %ort vertikal, matrix horizontal<br />
Q = ForceIn_ur(j,i);<br />
W = ForceIn_ul(j,i);<br />
koordinaten_ur_ul (m, 1) = ForceIn_ur(j,1); % X-Mess
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 132<br />
koordinaten_ur_ul (m, 2) = ForceIn_ur(1,i); % Y-Mess<br />
% X aus ul und ur<br />
koordinaten_ur_ul (m, 3) = (-a*Q+a*h-b*g+W*e-d*e+c*f+sqrt((a*Q-a*h+b*g-W*e+d*e-c*f)^2-4*(b*e-a*f)*(-W*g+c*Qc*h+d*g)))/(2*(b*e-a*f));<br />
% Y aus ul und ur<br />
koordinaten_ur_ul (m, 4) = (-e*W+e*d-b*g+Q*a-h*a+f*c+sqrt((e*W-e*d+b*g-Q*a+h*a-f*c)^2-4*(a*g-e*c)*(h*b-Q*b+f*Wf*d)))/(2*(a*g-e*c));<br />
m = m+1;<br />
end<br />
end<br />
xlswrite('berechnung-ul_ur', koordinaten_ur_ul)<br />
% xlswrite(koordinaten_ur_ul, 'Vergleich Ort: Messung Funktion', {'X-Mess','Y-Mess','X-Funktion','Y-Funktion'},<br />
'berechnung-ul_ur', 'Tabelle1')<br />
a = 0.000259735649014046;<br />
b = -0.0545167750587224;<br />
c = -0.0211168168811804;<br />
d = 4.42018275302235;<br />
e = -0.000256296316559226;<br />
f = 0.0552293477502357;<br />
g = 0.00132484860844195;<br />
h = -0.303685785851139;<br />
n = 1;<br />
for j = 2:size(ForceIn_mr, 1) %ort horizontal, matrix vertikal<br />
for i = 2:size(ForceIn_mr, 2) %ort vertikal, matrix horizontal<br />
Q = ForceIn_ml(j,i);<br />
W = ForceIn_mr(j,i);<br />
koordinaten_mr_ml (n, 1) = ForceIn_mr(j,1);<br />
koordinaten_mr_ml (n, 2) = ForceIn_mr(1,i);<br />
% X aus ml und mr
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 133<br />
koordinaten_mr_ml (n, 3) = (-a*Q+a*h-b*g+W*e-d*e+c*f+sqrt((a*Q-a*h+b*g-W*e+d*e-c*f)^2-4*(b*e-a*f)*(-W*g+c*Qc*h+d*g)))/(2*(b*e-a*f));<br />
% Y aus ml und mr<br />
koordinaten_mr_ml (n, 4) = (-e*W+e*d-b*g+Q*a-h*a+f*c+sqrt((e*W-e*d+b*g-Q*a+h*a-f*c)^2-4*(a*g-e*c)*(h*b-Q*b+f*Wf*d)))/(2*(a*g-e*c));<br />
n = n+1;<br />
end<br />
end<br />
xlswrite('berechnung-ml_mr', koordinaten_mr_ml)<br />
% xlswrite(koordinaten_mr_ml, 'Vergleich Ort: Messung Funktion', {'X-Mess','Y-Mess','X-Funktion','Y-Funktion'},<br />
'berechnung-ml_mr', 'Tabelle1')<br />
% Errechnen der Mittelwerte<br />
for j = 1:size(koordinaten_mr_ml, 1)<br />
for i = 1:size(koordinaten_mr_ml, 2)<br />
<strong>mit</strong>telwerte (j, i) = (koordinaten_ur_ul (j, i) + koordinaten_mr_ml (j, i))/2;<br />
end<br />
end<br />
xlswrite('berechnung-<strong>mit</strong>telwerte', <strong>mit</strong>telwerte)<br />
% xlswrite(<strong>mit</strong>telwerte, 'Vergleich Ort: Messung Funktion', {'X-Mess','Y-Mess','X-Funktion','Y-Funktion'},<br />
'berechnung-<strong>mit</strong>telwerte', 'Tabelle1')
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 134<br />
7.2.11. pfaller_solve_sensorgleichungen_felder.m<br />
Programm zum Berechnen des Ortes aus Sensorgleichungen, die ortsabhängig ausgewählt werden.<br />
clear;<br />
% Messwerte einlesen<br />
ForceIn_ul = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ul.xls');<br />
ForceIn_ur = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ur.xls');<br />
ForceIn_ml = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ml.xls');<br />
ForceIn_mr = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_mr.xls');<br />
ForceIn_ll = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_ll.xls');<br />
ForceIn_lr = xlsread('D:\Pfaller\Auswertung\excel\matrix-ForceIn_lr.xls');<br />
% Setzen der Parameter für die Sensorgleichungen<br />
% ForceIn_ul<br />
m1 = 0.000359639212592366;<br />
t1 = -0.0342834501388174;<br />
n1 = -0.00390141447718803;<br />
u1 = 0.425751094384385;<br />
% ForceIn_ur<br />
m2 = -0.000362039560416502;<br />
t2 = 0.0341478167581925;<br />
n2 = 0.0275886250224694;<br />
u2 = -2.53788271315461;<br />
% ForceIn_ml
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 135<br />
m3 = -0.000256296316559226;<br />
t3 = 0.0552293477502357;<br />
n3 = 0.00132484860844195;<br />
u3 = -0.303685785851139;<br />
% ForceIn_mr<br />
m4 = 0.000259735649014046;<br />
t4 = -0.0545167750587224;<br />
n4 = -0.0211168168811804;<br />
u4 = 4.42018275302235;<br />
% ForceIn_ll<br />
m5 = -0.0000295424783482509;<br />
t5 = 0.00364881555582335;<br />
n5 = -0.000106219411055925;<br />
u5 = 0.0294868232698038;<br />
% ForceIn_lr<br />
m6 = 0.0000244897192616882;<br />
t6 = -0.00303742828177236;<br />
n6 = -0.00233875288353974;<br />
u6 = 0.300506639279001;<br />
koordinaten = [];<br />
row = 1;<br />
% Finden der Anzahl der gemessenen Spalten und Reihen<br />
cols = size(ForceIn_ul, 1) - 1;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 136<br />
rows = size(ForceIn_ul, 2) - 1;<br />
for j = 2:(cols+1) %ort horizontal, matrix vertikal<br />
for i = 2:(rows+1) %ort vertikal, matrix horizontal<br />
% Bestimmung der aktuellen Sensorkräfte aus den vorher eingelesenen Matrizen<br />
F_ul = ForceIn_ul(j,i);<br />
F_ur = ForceIn_ur(j,i);<br />
F_ml = ForceIn_ml(j,i);<br />
F_mr = ForceIn_mr(j,i);<br />
F_ll = ForceIn_ll(j,i);<br />
F_lr = ForceIn_lr(j,i);<br />
% Lösen der Sensorgleichung nach x und y <strong>mit</strong> allen sechs Sensoren<br />
% <strong>zur</strong> groben <strong>Orts</strong>bestimmung<br />
F = @(V) [(m1 * V(2) + t1) * V(1) + n1 * V(2) + u1 - F_ul; (m2 * V(2) + t2) * V(1) + n2 * V(2) + u2 - F_ur; (m3 *<br />
V(2) + t3) * V(1) + n3 * V(2) + u3 - F_ml; (m4 * V(2) + t4) * V(1) + n4 * V(2) + u4 - F_mr; (m5 * V(2) + t5) * V(1) + n5<br />
* V(2) + u5 - F_ll; (m6 * V(2) + t6) * V(1) + n6 * V(2) + u6 - F_ll];<br />
solution = fsolve(F, [0 200]);<br />
F_ur];<br />
F_ul];<br />
F_mr];<br />
F_ul];<br />
% Unterteilung der Platte in vier Felder<br />
% <strong>Orts</strong>berechnung durch verschiedene Sensoren, je nach Feld<br />
if solution(1,1) > 40<br />
if solution(1,2) > 46 % links oben: ur + ul für x, ml + ul für y<br />
G = @(V) [(m1 * V(2) + t1) * V(1) + n1 * V(2) + u1 - F_ul; (m2 * V(2) + t2) * V(1) + n2 * V(2) + u2 -<br />
H = @(V) [(m3 * V(2) + t3) * V(1) + n3 * V(2) + u3 - F_ml; (m1 * V(2) + t1) * V(1) + n1 * V(2) + u1 -<br />
end<br />
if solution(1,2) < 46 % links unten: ml + mr für x, ml + ul für y<br />
G = @(V) [(m3 * V(2) + t3) * V(1) + n3 * V(2) + u3 - F_ml; (m4 * V(2) + t4) * V(1) + n4 * V(2) + u4 -<br />
end<br />
H = @(V) [(m3 * V(2) + t3) * V(1) + n3 * V(2) + u3 - F_ml; (m1 * V(2) + t1) * V(1) + n1 * V(2) + u1 -
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 137<br />
F_ur];<br />
F_ur];<br />
F_mr];<br />
F_ur];<br />
end<br />
if solution(1,1) < 40<br />
if solution(1,2) > 46 % rechts oben: ur + ul für x, mr + ur für y<br />
G = @(V) [(m1 * V(2) + t1) * V(1) + n1 * V(2) + u1 - F_ul; (m2 * V(2) + t2) * V(1) + n2 * V(2) + u2 -<br />
end<br />
H = @(V) [(m4 * V(2) + t4) * V(1) + n4 * V(2) + u4 - F_mr; (m2 * V(2) + t2) * V(1) + n2 * V(2) + u2 -<br />
end<br />
if solution(1,2) < 46 % rechts unten: ml + mr für x, mr + ur für y<br />
G = @(V) [(m3 * V(2) + t3) * V(1) + n3 * V(2) + u3 - F_ml; (m4 * V(2) + t4) * V(1) + n4 * V(2) + u4 -<br />
end<br />
H = @(V) [(m4 * V(2) + t4) * V(1) + n4 * V(2) + u4 - F_mr; (m2 * V(2) + t2) * V(1) + n2 * V(2) + u2 -<br />
options = optimset('Display','off'); % Zwischenergebnisse werden während der Optimierung nicht angezeit<br />
x0 = [0 200]; % geratene Startwerte für die Berechnung<br />
solution_x = fsolve(G, x0, options); % Lösen der Gleichung für x<br />
solution_y = fsolve(H, x0, options); % Lösen der Gleichung für y<br />
% Schreiben der Ergebnisse in eine Liste<br />
koordinaten(row, 1) = ForceIn_ul(j,1); % gemessenes x<br />
koordinaten(row, 2) = ForceIn_ul(1,i); % gemessenes y<br />
koordinaten(row, 3) = solution(1,1); % berechnetes x<br />
koordinaten(row, 4) = solution(1,2); % berechnetes y<br />
% prozentuale x-Differenz als Betrag<br />
koordinaten(row, 5) = abs((ForceIn_ul(j,1)-solution(1,1)) * 100 / ForceIn_ul(j,1));<br />
% prozentuale y-Differenz als Betrag<br />
koordinaten(row, 6) = abs((ForceIn_ul(1,i)-solution(1,2)) * 100 / ForceIn_ul(1,i));<br />
row = row + 1;
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 138<br />
end<br />
end<br />
koordinaten(row, 3) = mean(abs(koordinaten(:, 1)-koordinaten(:, 3))); % durchschnittliche Abweichung x<br />
koordinaten(row, 4) = mean(abs(koordinaten(:, 2)-koordinaten(:, 4))); % durchschnittliche Abweichung y<br />
abweichung = mean(koordinaten);<br />
koordinaten(row, 5) = abweichung(1, 5); % durchschnittliche prozentuale Abweichung x<br />
koordinaten(row, 6) = abweichung(1, 6); % durchschnittliche prozentuale Abweichung y<br />
% Umwandlung der listenförmigen Matrix in eine dreidiemsionale Wertetabelle<br />
for j = 2:(rows+1) % matrix vertikal<br />
for i = 2:(cols+1) % matrix horizontal<br />
matrix_x(1, i) = koordinaten((rows * cols - (i-2) * rows), 1);<br />
matrix_x(j, 1) = koordinaten((rows * cols - (i-2) * rows - j + 2), 2);<br />
matrix_x(j ,i) = koordinaten((rows * cols - (i-2) * rows - j + 2), 5);<br />
end<br />
end<br />
for j = 2:(rows+1) % matrix vertikal<br />
for i = 2:(cols+1) % matrix horizontal<br />
matrix_y(1, i) = koordinaten((rows * cols - (i-2) * rows), 1);<br />
matrix_y(j, 1) = koordinaten((rows * cols - (i-2) * rows - j + 2), 2);<br />
matrix_y(j ,i) = koordinaten((rows * cols - (i-2) * rows - j + 2), 6);<br />
end<br />
end<br />
% Export der Matrizen in Excel<br />
xlswrite('berechnung_ranking', koordinaten);<br />
xlswrite('abweichungen_x', matrix_x);<br />
xlswrite('abweichungen_y', matrix_y);<br />
% xlswrite(koordinaten, 'Vergleich Ort: Messung Funktion', {'X-Mess','Y-Mess','X-Funktion','Y-Funktion', '|dX|%',<br />
'|dY|%'}, 'berechnung_ranking', 'Tabelle1');<br />
% xlswrite(matrix_x, '%-Abweichungen x', {''}, 'abweichungen_x', 'Tabelle1');<br />
% xlswrite(matrix_y, '%-Abweichungen y', {''}, 'abweichungen_y', 'Tabelle1');
7.2 Anhang - Quelltext <strong>MATLAB</strong>®-Programme 139<br />
% Plotten der dreidimensionalen Wertetabellen<br />
[X, Y] = meshgrid(matrix_x(1, 2:(cols+1)), matrix_x(2:(rows+1), 1));<br />
Z = matrix_x(2:(rows+1), 2:(cols+1));<br />
surf(X,Y,Z);<br />
xlabel('Ort horizontal');<br />
ylabel('Ort vertikal');<br />
zlabel('Delta x [%]');<br />
title('Abweichung Funktion Messung X [%]');<br />
colorbar<br />
print -djpeg100 abweichung_x.jpeg;<br />
[X, Y] = meshgrid(matrix_y(1, 2:(cols+1)), matrix_y(2:(rows+1), 1));<br />
Z = matrix_y(2:(rows+1), 2:(cols+1));<br />
surf(X,Y,Z);<br />
xlabel('Ort horizontal');<br />
ylabel('Ort vertikal');<br />
zlabel('Delta y [%]');<br />
title('Abweichung Funktion Messung Y [%]');<br />
colorbar<br />
print -djpeg100 abweichung_y.jpeg;