22.01.2013 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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;

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!