Legosortiermaschine gesamte Anlage: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(107 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Dies ist ein Unterartikel von der [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine  Legoteil_Zählmaschine], welcher die Zusammenführung der einzelnen Teile zu einer Einheit beschrieben. Es werden die Schwierigkeiten und Hürden von der Kooperation der Anlagenteile dargestellt.
Dies ist ein Unterartikel von der [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine  Legoteil Zählmaschine], wo Aufgaben bezogen auf die ganze Anlage beschrieben werden.




= '''Anforderungen''' =
=Anforderungen=


{| class="wikitable"
{| class="wikitable"
Zeile 10: Zeile 10:
!Anforderungstitel
!Anforderungstitel
!Beschreibung der Spezifikation
!Beschreibung der Spezifikation
!Link
!Arbeitsergebnis
|-
|-
| 0057
| REQ10.2041
| Sicherheit/ Gefährdungsbeurteilung
| Schaltschrank verdrahten
| [http://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/22_Pruefprotokolle/Inbetriebnahmeprotokoll.docx Inbetriebnahmeprotokoll]
|-
|-
| 0010
| 0010
| REQ10.2000
| REQ10.2000
| Eigenständige Funktionsweise der Sortiermaschine
| Eigenständige Funktionsweise der Sortiermaschine
| Der Zähl- und Sortiervorgang erfolgt ohne menschlichen oder weiteren maschinellen Eingriff
| Funktionsfähig ohne Verbindung zu einem anderen System und ohne menschliche Eingriffe
| [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine#Softwareumsetzung  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/22_Pruefprotokolle/Inbetriebnahmeprotokoll.docx Inbetriebnahmeprotokoll]
|-
|-
| 0020
| 0052
| REQ10.2010
| REQ10.2040
| Antriebe
| Sicherheit / Gefährdungsbeurteilung
| Die Sortiermaschine wird elektrisch angetrieben
| Mechanische Sicherheit (Einklemmschutz)
| [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine#Aufbau_der_Maschine  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/22_Pruefprotokolle/Inbetriebnahmeprotokoll.docx Inbetriebnahmeprotokoll]
|-
| 0053
| REQ10.2040
| Sicherheit/ Gefährdungsbeurteilung
| Erstellen einer Gebrauchsanleitung im Wiki
| [http://193.175.248.52/wiki/index.php/Anleitung_Legoteilz%C3%A4hlmaschine Wiki-Artikel]
|-
|-
| 0030
| 0054
| REQ10.2020
| REQ10.2040
| Energieversorgung
| Sicherheit / Gefährdungsbeurteilung
| Die Sortieranlage wird mit 230 Volt AC Schukostecker versorgt
| Erstellen einer Schritt-für-Schritt Anleitung im Wiki
| [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine#Umbau_des_Schaltschranks  Link]
| [http://193.175.248.52/wiki/index.php/Anleitung_Legoteilz%C3%A4hlmaschine Wiki-Artikel]
|-
| 0300
| REQ10.3200
| Projektplanung
| MS Project verwenden
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/26_Projektplan/2018/Projektplan18.mpp Dokument]
|-
| 0310
| REQ10.3210
| Versionsverwaltung
| Alle Daten in SVN hinterlegen
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk SVN]
|-
| 0410
| REQ10.3250
| Modellierung der System- und Softwarearchitektur
| Geeignete Software für System- und Softwarearchitektur verwenden (zb. MS Visio)
| [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Software_Dokumentation Wiki Artikel]
|-
|-
| 0040
| 0420
| REQ10.2030
| REQ10.3260
| Abmessung
| Tools für Softwareentwicklung
| Für die Abmessung der Sortieranlage werden folgende Kriterien eingehalten: Länge: 2,5m, Breite 1,0m, Höhe: 1,5m
| Geeignete Werkzeuge für Softwareentwicklung
| [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Abmessung_der_Maschine  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/14_Software_Prozess/Tools%20f%C3%BCr%20die%20Softwareentwicklung.docx Dokument]
|-
| 0430
| REQ10.3270
| Nachhaltigkeit
| Alle wichtigen Software-Stände werden gut dokumentiert, d. h. ausführlich kommentiert und per SVN versioniert
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/08_Kommentarpr%C3%BCfung/Protokoll%20Kommentarpr%C3%BCfung.docx Dokument]
|-
| 0431
| REQ10.3271
| Nachhaltigkeit
| Softwarestände dokumentieren
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/14_Software_Prozess/Wichtige%20Softwarezwischenst%C3%A4nde/Zeitachse%20wichtige%20Softwarest%C3%A4nde.pdf Dokument]
|-
| 0432
| REQ10.3272
| Nachhaltigkeit
| Software ausführlich kommentieren
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/08_Kommentarpr%C3%BCfung/Protokoll%20Kommentarpr%C3%BCfung.docx Dokument]
|-
| 0432.1
| REQ10.3272
| Nachhaltigkeit
| SVN - Nachhaltigkeit
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/30_SVN/SVN%20Nachhaltigkeit%20Dokumentation.docx Dokument]
|-
|-
| 0045
| 0510
| REQ10.2030
| REQ10.3290
| Abmessung
| Integrationstests
| Die Maschiene steht auf einer Grundplatte von 2,0m x 0,8m
| Für die entwickelte Software bzw. die Steuer- und Regelungsalgorithmen muss ein Integrationstest durchgeführt werden.
| [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Abmessung_der_Maschine  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/22_Pruefprotokolle/Integrations_Tests Integrations_Tests]
|-
|-
| 0046
| 0500
| REQ10.2030
| REQ10.3280
| Abmessung
| Komponententests
| Die Höhe vom Förderband und den Bildverarbeitungen überschreitet nicht mehr als 1,2m
| Für die entwickelte Software bzw. die Steuer- und Regelungsalgorithmen müssen geeignete Komponententests durchgeführt und geeignet dokumentiert werden
| [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Abmessung_der_Maschine  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/22_Pruefprotokolle/Unit_Tests Unit_Tests]
|-
|-
| 0070
| 0070.2
| REQ10.2060
| REQ10.2060
| Verarbeitungszeit
| Verarbeitungszeit
| Die Anlage kann 60 Legoteile innerhalb von 10 Minuten autonom sortieren
| > 120 Legoteile in 10min
| [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Test_der_Verarbeitungszeit  Link]
|[http://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/02_Versuchsprotokolle/Protokoll%20Verarbeitungsrate.xlsx Protokoll Verarbeitungsrate]
|-
|-
| 0160
| 0320
| REQ10.3100
| REQ10.3220
| Hardware
| Ablagestruktur für Versionsverwaltung
| Als Hardware wird ein PC mit Matlab eingesetzt
| Geeignete Struktur für SVN definieren und einrichten
| [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine#Implementierung_einer_Hauptfunktion  Link]
|
|-
|-
| 0190
| 0330
| REQ10.3210
| REQ10.3231
| Versionsverwaltung
| Dokumentation
| Alle in dem Projekt anfallenden Dateien werden in dem Versionsverwaltungssystem "Subversion" abgelegt
| Projektergebnisse nachvollziehbar und nachbaubar darstellen für fachversierte Nutzer
| [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine#Dateisicherung_und_-dokumentation  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/%C3%9Cbersicht%20der%20Dokumentationen.xlsx Übersicht Dokumentationen]
|-
| 0520.1
| REQ10.3300
| Coding Guidelines
| Code Reviews
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews MATLAB] [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/10_Arduino_Software/Code_Reviews Arduino]
|-
| 0520.3
| REQ10.3300
| Coding Guidelines
| Leitfaden überarbeiten (Arduino-C, Matlab)
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Anforderungsmanagement/Programmierrichtlinien Programmierrichtlinien]
|-
|-
| 0200
| 0521
| REQ10.3220
| REQ10.3300
| Dokumentation
| Coding Guidelines
| Für die Ablage von Dateien im Versionsverwaltungssystem ist eine geeignete Ablagestruktur definiert
| Untersuchung und Überarbeitung des bisherigen Codes bezüglich Einhaltung der Coding Guidelines
| [http://193.175.248.52/wiki/index.php/Legoteil_Z%C3%A4hlmaschine#Dateisicherung_und_-dokumentation  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/28_Software_Analyse Analyse MATLAB]
|-
|-
| 0250
| 0530
| REQ10.3260
| REQ10.3310
| Tool der Softwareentwicklung
| Dokumentation von Software
| Er werden Matlab und Atmel Studio für die Softwarentwicklung eingesetzt
| Geeignete Software zur Dokumentation des Quellcodes (zb LaTeX oder Doxygen)
| [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Arduino-Kommunikation  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/Doc MATLAB mit m2html] [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/10_Arduino_Software/PAP_Dokumentation_Codeablauf.pap Arduino mit PapDesigner]
|-
|-
| 0310
| 0531
| REQ10.3295
| REQ10.3311
| Codezusammenführung
| Dokumentation von Software
| Separierung und Bildverarbeitung laufen im gleichen Programm
| Video zur Bedienung von m2html
| [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Implentierung_einer_Hauptfunktion  Link]
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/m2html_Anleitung_Video.mp4 Videoanleitung]
|}
|}
<br />
<br />


= '''Schnittstellen''' =  
=Schnittstellen=  


Die Legosortiermaschiene ist in drei Arbeitsbereiche eingeteilt. Dies hat den Vorteil, dass aus dem gesamten Team kleine Gruppen gebildet werden können, welche für ihren Maschinenteil verantwortlich sind. Dadurch wird vermieden, dass Aufgaben doppelt oder gar nicht erledigt werden. Es bringt allerdings den Nachteil mit sich, dass es Schnittstellen zwischen den Gruppen gibt. Diese müssen genau definiert werden, damit eine reibungslose Zusammenarbeit gewährleistet ist.
Die Legosortiermaschiene ist in drei Arbeitsbereiche eingeteilt. Dies hat den Vorteil, dass aus dem gesamten Team kleine Gruppen gebildet werden können, welche für ihren Maschinenteil verantwortlich sind. Dadurch wird vermieden, dass Aufgaben doppelt oder gar nicht erledigt werden. Es bringt allerdings den Nachteil mit sich, dass es Schnittstellen zwischen den Gruppen gibt. Diese müssen genau definiert werden, damit eine reibungslose Zusammenarbeit gewährleistet ist.




== '''Separierung - Bildverarbeitung''' ==
==Separierung - Bildverarbeitung==


Die Separierung vereinzelt die Legoteile, damit die Bildverarbeitung diese verarbeiten kann. Dafür sind folgende Vereinbarungen getroffen worden:
Die Separierung vereinzelt die Legoteile, damit die Bildverarbeitung diese verarbeiten kann. Dafür sind folgende Vereinbarungen getroffen worden:
Zeile 99: Zeile 166:
* Es darf immer nur ein Teil von der Separierung an die Bildverarbeitung übergeben werden
* Es darf immer nur ein Teil von der Separierung an die Bildverarbeitung übergeben werden
* Das Förderband und der Eingang der Bildverarbeitungsbox liegen auf einer Höhe, damit kein Teil vom Förderband fällt. Damit alle Teile in die Box fallen, ist diese schräg angebracht.
* Das Förderband und der Eingang der Bildverarbeitungsbox liegen auf einer Höhe, damit kein Teil vom Förderband fällt. Damit alle Teile in die Box fallen, ist diese schräg angebracht.
* Die Anlage wird über einen Schaltschrank gesteuert. Dort werden die Komponenten der Separierung und der Bildverarbeitung gesteuert. Informationen hierzu gibt es [http://193.175.248.52/wiki/index.php?title=Legosortiermaschine_gesamte_Anlage#Hardwareumsetzung hier]
* Die Anlage wird über einen Schaltschrank gesteuert. Dort werden die Komponenten der Separierung und der Bildverarbeitung gesteuert.


=== Software ===
=== Software ===


* Beide Anlagenteile können nicht gleichzeitig durch zwei getrennt Programme gesteuert werden. Deshalb muss eine Hauptfunktion die Laufzeiten steuern. Nötige Vereinbarungen:
Beide Anlagenteile können nicht gleichzeitig durch zwei getrennt Programme gesteuert werden. Deshalb muss eine Hauptfunktion die Laufzeiten steuern. Nötige Vereinbarungen:
** Sobald ein Teil in der Bildbox erkannt wird, bleibt die Separierung stehen
* Sobald ein Teil in der Bildbox erkannt wird, bleibt die Separierung stehen
** Kalibrierungen der Kameras wird in der Hauptfunktion durchgeführt
* Kalibrierungen der Kameras wird in der Hauptfunktion durchgeführt
** Die Teilprogramme dürfen keine Dauerschleifen haben
* Die Teilprogramme dürfen keine Dauerschleifen haben
** Die graphische Ausgabe für beide Funktionen ist in einer Figur
* Die graphische Ausgabe für beide Funktionen ist in einer Figur


Die Realisierung der Softwareschnittstelle ist [http://193.175.248.52/wiki/index.php/Legosortiermaschine_gesamte_Anlage#Softwareumsetzung hier] zu lesen.
==Bildverarbeitung - Sortierung==
 
== '''Bildverarbeitung - Sortierung''' ==


Das Teil aus der Bildverarbeitung muss in die Sortierung gelangen, damit es richtig einsortiert wird. Dafür sind folgende Vereinbarungen getroffen worden:
Das Teil aus der Bildverarbeitung muss in die Sortierung gelangen, damit es richtig einsortiert wird. Dafür sind folgende Vereinbarungen getroffen worden:
Zeile 119: Zeile 184:
* Die Bildverarbeitung hat den Ausgang zur Seite
* Die Bildverarbeitung hat den Ausgang zur Seite
* Das Teil wird mit einer Luftdüse herausgeschossen
* Das Teil wird mit einer Luftdüse herausgeschossen
* Die Anlage wird über einen Schaltschrank gesteuert. Informationen dazu gibt es [http://193.175.248.52/wiki/index.php?title=Legosortiermaschine_gesamte_Anlage#Hardwareumsetzung hier].
* Die Anlage wird über einen Schaltschrank gesteuert.


=== Software ===  
=== Software ===  


* Hat die Bildverarbeitung ein Teil erkannt, so steuert sie die Klappen der Sortierung. Dazu ist in der Bildverarbeitung hinterlegt, welche Klappen bei jedem Teil angesteuert werden müssen.
* Hat die Bildverarbeitung ein Teil erkannt, so wird die Fachnummer an den Mikrocontroler gesendet. Dazu fragt die Bildverarbeitung die Fachnummer aus der Datenbank ab
* Der Mikrocontroler steuert dann die die Klappen der Sortierung an


<ref name="Autor: Busemann"> Autor Nils Busemann</ref>
<ref name="Autor: Busemann"> Autor Nils Busemann</ref>


= '''Hardwareumsetzung''' =
=Neuverdrahtung des Schaltschranks=
Nach der Übernahme des Projekts wurden folgende Mängel bei der Verdrahtung im Schaltschrank festgestellt:


== Entwicklung einer Steuerplatine ==
* Fehlen von Aderendhülsen auf flexiblen Leitungen
* Aderendhülsen auf starren Leitungen
* Signalleitungen mit starren Leitungen (Leitungsbruch bei geringem Bewegen dieser Leitungen)
* Leitungen wurden vor dem Anschluss nicht auf Länge gebracht und lagen aufgerollt hinter dem Schaltschrank
* Fehlende Beschriftung von Bauteilen, Leitungen und Adern
* Dokumentation und Verdrahtung stimmen nicht überein


Aufgrund dieser Mängel wurde entschieden, den Schaltschrank komplett neu zu verdrahten und dabei eine aktuelle Dokumentation zu erstellen.


[[Datei:Steuerplatine.jpg|350px|thumb|right|Abbildung 1: Steuerplatine]]
Die nachfolgenden Bilder zeigen einen Vorher/Nachher-Vergleich der Verdrahtung im Schaltschrank.
Zur Inbetriebnahme der umgebauten Anlage war es notwendig, die Funktionen der Schaltplatine zu erweitern. Die eingebaute Steuerplatine war auf den Arduino aufgesattelt und bezog Steuersignale sowie die 5 V Versorgungsspannung direkt über die eingesteckten Pins. Mit dieser Platine ist es möglich, drei Motoren mit Strom zu versorgen bzw. durch ein PWM Signal zu steuern. Zusätzlich konnten noch zwei Servomotoren und zwei Infrarotsensoren betrieben werden.
Durch die Konzeptänderung der Separierung und der Bildverarbeitung wurde es notwendig, weitere Schaltfunktionen hinzuzufügen. Die Bildverarbeitung benötigte durch Software schaltbares Licht, um zwischen Durch- und Drauflicht in der Bildverarbeitungsbox umschalten zu können. Ebenso wie bei den Motoren sollte die Ansteuerung des Lichts über den Arduino erfolgen. Die Spannungsversorgung der Bildverarbeitungsbox war in der Vergangenheit mit einem eigenen Netzteil erfolgt, welches direkt in eine Steckdose eingesteckt wurde.


Neben der Einrichtung von schaltbaren Licht, wurde die Schaltung der Pneumatik hinzugefügt. Auch diese sollte über den Arduino gesteuert werden. Die Ventilinsel wird mit 24 V Signalen angesteuert.
<gallery widths="600" heights="600">
Datei:SchaltschrankVorher.jpg|Schaltschrank vor der Neuverdrahtung
Datei:SchaltschrankNachher.jpg|Schaltschrank nach der Neuverdrahtung
</gallery>


Die Motoransteuerung musste auch bei der neuen Steuerplatine wieder per MOSFETs umgesetzt werden, da die Geschwindigkeit hier per PWM Signal gesteuert wird. Die Lichtansteuerung der LED Streifen in den Bildverarbeitungsboxen sollte ebenfalls per MOSFET geschehen, da die Schaltfrequenz gegebenfalls recht hoch werden kann und mechanische Relais nicht für höhere Schaltfrequenzen ausgelegt sind. Außerdem benötigen diese eine 12 V Versorgungsspannung. Die Option auf ein weiteres Netzteil, um aus 230 V Netzspannung die 12 V Spannung für die LEDs herzustellen, wurde aufgrund des hohen Kaufpreises für das Netzteil sowie des hohen Aufwandes für den Umbau abgelehnt. Als Alternative wurde sich für die Verwendung von Linearspannungsreglern auf der Steuerplatine entschieden, die aus der vorhandenen Spannung von 24 V, die zur Versorgung der Motoren benötigt werden, 12 V erzeugen sollen.
Die aktuelle Verdrahtung ist durch einen [http://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/12_Schaltplaene_und_Layouts/03_Layout_Schaltplatine_inkl_Pneumatik/Verschaltung%20im%20Schaltkasten.xlsx Klemmenbelegungsplan] dokumentiert.


Bei der Ansteuerung der Ventilinsel gab es ebenfalls zwei Optionen. Die erste Möglichkeit war die Nutzung von Relais, wie z.B. Solid State Relais, durch die Arduino-Ausgänge weniger belastet werden. Die zweite Option war die Nutzung derselben MOSFETs, die schon bei der Ansteuerung der Motoren und des Lichts verwendet wurden. Hier wurde sich auf Grund von bereits vorhandenen Komponenten und der damit verbundenen Einheitlichkeit für die zweite Variante entschieden.
<ref name="Autor: Bartnick"> Autor Madlen Bartnick</ref>


Der Schaltplan der Platine wurde in Multisim erstellt, der Leiterplattenentwurf in Ultiboard. Die Platine wurde anschließend in der Hochschule gefräst und bestückt(siehe Abbildung 1).
=Richtlinien zur Codegestaltung=
Zum Anschluss an den Arduino wurde die Platine mit Schraubklemmen versehen. Der Arduino wurde eine Platine aus dem Zubehör erweitert, welche jeden Anschluss als Schraubklemme zur Verfügung stellt, um Platine und Arduino zu verbinden.


Während der Tests der Platine sind 2 MOSFETs aus unbekannten Gründen zerstört worden. Die Platine ist weiterhin für die aktuellen Funktionen einsatzfähig, für die Hinzunahme weiterer Funktionen, wie beispielsweise der Einbindung einer weiteren Druckluft-Düse, müssen die Bauteile jedoch ausgetauscht werden.
== Übersicht über die Richtlinien ==


== Umbau des Schaltschranks ==
Die Softwarekomponenten der Legoteil-Zählmaschine wurden in MATLAB und Arduino C implementiert. Um den Entwicklungsprozess zu vereinfachen mussten zunächst formalen Guidelines überarbeitet werden.
[[Datei:2016 2017 Legomaschine Schaltschrank.jpg|150px|thumb|right|Abbildung 2: Schaltschrank der Anlage]]
Diese legen die formelle und syntaktische Gestaltung des im Rahmen des Praktikums erzeugten Codes fest.


Der Schaltschrank wird über 230 Volt Wechselspannung versorgt. Für die jeweiligen Anforderungen sind ein 5 Volt DC und ein 24 Volt DC Netzteil eingebaut. Die Spannungsausgänge sind auf Verteilerklemmen gelegt, um von dort eine ordentliche Verteilung dieser zu garantieren.
Insbesondere Liegt der Fokus hier auf:
* Gestaltung von Headern
* Benennung von Funktionen und Variablen
* Umfang von Kommentaren


Aufgrund des Einsatzes der neuen Steuerplatine war es notwendig, den Schaltschrank umzubauen (siehe Abbildung 2). Hierzu wurde die alte Steuerplatine entfernt und an ihrer Stelle die neue Sattelplatine mit Schraubklemmen auf dem Arduino installiert. Auch wurde der Arduino auf einer Hutschienenhalterung installiert. Ebenso wurde die neue Steuerplatine auf einer solchen Halterung installiert. Die Anschlüsse untereinander wurden verbunden, die Anschlüsse zu den Geräten außerhalb des Schranks wurden auf Reihenklemmen gelegt.
Die Guidelines beziehen sich in erster Linie auf Code in C/C++ und Matlab, können jedoch auch leicht auf andere Sprachen übertragen werden. Sie wurden im Verlaufe des Semesters mehrfach überarbeitet und angepasst. Dies Erfolgte zuletzt in Zusammenarbeit mit Stephan Marks aus der Gruppe des [[Praktikum_SDE | Autonomen Fahrzeuges]]. Die [https://svn.hshl.de/usvn/project/MTR_SDE_Praktikum_2015/show/trunk/Anforderungsmanagement/Programmierrichtlinien entsprechenden Dokumente] liegen im SVN oder sind [[:Datei:Programmierrichtlinien_MTR.pdf | hier]] im Wiki zu finden und werden auch im weiteren Praktikumsverlauf falls nötig noch erweitert und verbessert werden.


Im Wintersemester 17/18 ist der Gekodrive und andere Komponenten für den Linearläufer aus dem Schaltschrank entfernt worden. Anstelle dessen, ist die Ansteuerung für die neue Sortierbox hinzugefügt worden. Für die ist eine Versorgungleitung auf die 5 Volt Spannungsklemmen gelegt worden. Die Steuerleitung ist an 6 Klemmen angeschlossen. Diese sind mit den jeweiligen Ausgängen an dem Ardiuno verbunden. Die Steuerleitung ist nicht direkt auf den Ardiuno gelegt worden, damit bei einer Änderung im Schaltschrank flexibel reagiert werden kann.
Konkret wurden hierbei folgende Änderungen vorgenommen:
* Die C Richtlinien wurden auf MATLAB erweitert
* Variablenbenennung soll auf Deutsch erfolgen
* Es wurden Anforderungen an Kommentare hinzugefügt, laut denen allein anhand dieser der Programmablauf klar werden muss
* Das Header Format wurde wie Folgt spezifiziert:
{| class="wikitable"
|-
! Sprache                                       
! Modul
! Funktion
|-
| C/C++   
| <syntaxhighlight lang="c">
/************************************************************\
*
* Modul           : ModulName.c
*
* Datum          : 04. Oktober 2013
*
* Beschreibung    : Zweck dieses Moduls
*
* Implementierung : Visual Studio 2012 Professional
*
* Autor          : Mustermann, Max
*
* Bemerkung      : Demo für den ersten Meilenstein
*
* Letzte Änderung : 04. Mai 2018
*
\************************************************************/
</syntaxhighlight>
| <syntaxhighlight lang="c">
/***********************************************************\
*
* Funktion          : MD_FunktionsName
*
* Datum            : 04. Oktober 2013
*
* Beschreibung      : Zweck dieser Funktion 
*
* Implementierung  : Visual Studio 2012 Professional
*
* Autor            : Mustermann, Max
*
* Bemerkung        : Code-Review noch ausstehend
*
* Letzte Änderung  : 04. Mai 2018
*
* Übergebeparameter :
* Typ      Name        Beschreibung
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* int      n          Anzahl Elemente des Arrays
* double[]  a          Array mit double-Werten
*
* Rückgabeparameter :
* Typ      Beschreibung
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* int      Rückgabe eines Fehlercodes
*
\***********************************************************/
</syntaxhighlight>
|-
| MATLAB             
| <syntaxhighlight lang="matlab">
% ***********************************************************\
%
% Modul          : ModulName.m
%
% Datum          : 04. Oktober 2013
%
% Implementierung : MATLAB R2013a
%
% Toolbox        : Example Toolbox
%
% Autor          : Mustermann, Max
%
% Bemerkung      : Code-Review noch ausstehend
%
% Letzte Änderung : 04. Mai 2018
%
%************************************************************/
</syntaxhighlight>
| <syntaxhighlight lang="matlab">
%************************************************************\
%
% Funktion          : Funktion.m
%
% Datum            : 14. Mai 2018
%
% Implementierung  : MATLAB R2017a
%
% Toolbox          : -
%
% Autor            : Marks, Stephan
%
% Bemerkung        : Beispiel eines Funktions-Headers
%
% Letzte Änderung   : 04. Mai 2018
%
% ***********************************************************/
</syntaxhighlight>
|}
*Im Falle des MATLAB Headers soll nach Möglichkeit zudem eine via <code> help Funktionsname </code> aufrufbare Hilfe eingebaut werden. Bei MATLAB wird hierfür stets der erste zusammenhängende Kommentar verwendet, daher sollte sich vor dem eigentlichen Header ein Block folgender Form befinden:
<syntaxhighlight lang="matlab">
function result = Math_Add_A2B(a, b)
% MATH_ADD_A2B addiert zwei Zahlen 
%
% Syntax:
%  ergebnis = MATH_ADD_A2B(a, b)
% Beschreibung:
%  Es werden die zwei Zahlen 'a' und 'b'
%  beliebigen Datentyps addiert.
%  result = a + b
%
% Eingangswerte:
%  a: erster Summand
%  b: zweiter Summand
%
% Rückgabewerte:
%  result: Ergebnis der Addition von 'a' und 'b'
% Beispiel:
%  ergebnis = MATH_ADD_A2B(7, 12.583)
</syntaxhighlight>


Hier ist der aktuelle [https://svn.hshl.de/usvn/project/MTR_SDE_Praktikum_2015/show/trunk/Dokumentation/12_Schaltplaene%20und%20Layouts/03_Layout_Schaltplatine_inkl_Pneumatik/Verschaltung%20im%20Schaltkasten.xlsx  Schaltplan] in dem Schaltschrank zu finden.


==Kabelkanal==
Nach der ersten Überarbeitung der Guidelines wurde dann der gesamte bisherige Matlab Code bezüglich der Konformität überprüft und entsprechend überarbeitet. Dabei wurden die Benennungen und Formatierungen in Absprache mit Professor Göbel angepasst, um einen aufgeräumten und einheitlichen Ausgangszustand zu erzeugen, auf dem im Folgesemester weiter aufgebaut werden kann. Dazu wurde jede Datei des Programms analysiert und auf Header, Kommentare, Variablen und Funktionsbenennung untersucht und die Ergebnisse in einer Tabelle festgehalten. Zudem wurde überprüft, ob die einzelnen Funktionen im aktuellsten Programm überhaupt noch Verwendung fanden. Alle nicht verwendeten Programmteile wurden anschließend entfernt.  
Seit dem Sommersemester 2016 sind die verlegten Leitungen fest verlegt werden. Hierzu wurde ein Kabelkanal zur ordentlichen Verlegung der Leitungen an den Förderbändern montiert. Er dient dem Schutz und der mechanischen Entlastung der Leitung. Es wurde ein geschlitzter Kabelkanal gewählt, da an vielen unterschiedlichen Stellen Leitungen z.B. zu den Motoren abgehen. So war es nicht nötig, einen geschlossenen Kabelkanal zu modifizieren, um die Leitungsabgänge möglich zu machen.
Ein Ausschnitt der erstellten Tabelle ist im Folgenden dargestellt:


Im Wintersemester 2017 wurd ein Kabelkanal von den Kameras zu dem Laptop hinzugefügt. Dadurch sind die Kameraleitungen und die serieelle Schnitstelle vor Beschädigung geschützt.
[[Datei:Codeedit.jpg | 1000px | thumb | zentriert| Abbildung 1: Ausschnitt aus der Analysetabelle]]


==Elektrische Sicherheit==
Eine komplette [https://svn.hshl.de/usvn/project/MTR_SDE_Praktikum_2015/show/trunk/Dokumentation/28_Software_Analyse/Analyse_MATLAB.xlsx Liste mit allen überarbeiteten und gelöschten Dateien] sowie [https://svn.hshl.de/usvn/project/MTR_SDE_Praktikum_2015/show/trunk/Dokumentation/28_Software_Analyse/Variablenumbenennung.xlsx Informationen zu den Umbenennungen] sind im SVN zu finden. Eine erneute Überarbeitung aller Header aufgrund wiederholter Anpassungen steht noch aus. Die tatsächlich bearbeiteten Dateien wurden im Verlaufe des Projektes entsprechend angepasst.


Die elektrische Sicherheit des Schaltschrankes wurde im Zuge der Umbauarbeiten sichergestellt, indem alle Leitungen gegen spannungsfestere Leitungen vom Typ H07 bzw. H05 ausgetauscht wurden. So werden nun auch die Anforderungen nach VDE 0100-600 erfüllt.
== Code Reviews ==
Eine Anlagenprüfung wurde im August 2016 vorgenommen.
[[Datei:Codereview_Beispiel_Legoteilmaschine.png | 700px | thumb | rechts | Abbildung 2: Beispiel eines Code-Reviews mit neuem Template]]
Gegen Ende des Projektzeitraums wurden für alle nennenswert veränderten Dateien des Projektes Code-Reviews durchgeführt. Dabei wurde in Anlehnung an ein vorhandenes Hella-Template ein neues, für den Umfang des Projektes besser geeignetes, neues Template erstellt. In diesem befindet sich neben den allgemeinen Projektdaten und dem Ergebnis der Analyse eine Checkliste, mit welcher Schritt für Schritt die einzelnen Dateien und Funktionen untersucht werden können.  


==Abmessung der Maschine==
Die Code Reviews wurden für folgende Quelldateien erstellt:
{| class="wikitable"
|-
!Dateiname
!Link
|-
| Anlernen.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_Anlernen.docx SVN Link]
|-
| AutomatischesZaehlen.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_AutomatischesZaehlen.docx SVN Link]
|-
| BaukastenBearbeiten.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_BaukastenBearbeiten.docx SVN Link]
|-
| Bildverarbeitung_Teach_In.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_Bildverarbeitung_Teach_In.docx SVN Link]
|-
| Datenbankabgleich.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_Datenbankabgleich.docx SVN Link]
|-
| ExcelOeffnen.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_ExcelOeffnen.docx SVN Link]
|-
| FarberkennungMaske.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_FarberkennungMaske.docx SVN Link]
|-
| Fehlteilliste.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_Fehlteilliste.docx SVN Link]
|-
| Inventurliste.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_Inventurliste.docx SVN Link]
|-
| Merkmalsberechnung.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_Merkmalsberechnung.docx SVN Link]
|-
| Separierung.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_Separierung.docx SVN Link]
|-
| StartSortiermaschine.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_StartSortiermaschine.docx SVN Link]
|-
| TeachIn2.m
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/07_Code_Reviews/Code_Review_TeachIn2.docx SVN Link]
|-
| Serielle_Steuerung.ino
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/10_Arduino_Software/Code_Reviews/Code_Review_SerielleSteuerung.docx SVN Link]
|}
 
<ref name="Autor: Wolf"> Autor Jerome Wolf</ref>
 
=SVN=
 
Die Ordnerstruktur im SVN wurde größtenteils von den Vorsemestern übernommen. In dem Bereich Dokumentation wurden einige Teilbeeiche hinzugefügt um neu entstandene Dokumente sinnvoll abzuspeichern.


Die Maschiene steht auf einer Platte von 2,2 x 0,8 Meter. Diese Platte ist flexibel verstellbar. Die Maschine ist am höchsten Punkt ungefähr 1,2 Meter hoch.
Der Computer zur Steuerung kann beliebig neben oder unter der Maschine platziert werden. In der aktuellen Anforderung steht dieser unterhalb der Bildverarbeitungsbox. Die Bildschirme für die Visualisierung befinden sich neben der Platte auf einem extra Tisch.


Die Nachhaltigkeit des SVN Ordners wurde durch verschiedene Maßnamen verbessert:
*Entfernen ungenutzter Dateien
**Im Ordner SRC wurden alte, ungenutzte Dateien entfernt
*Löschen temporärer Dateien wie Matlab .asv Dateien oder ~$ Dateien von Office Programmen
*Ignorierliste erweitert
**.asv Dateien
**Inventurliste.xls
*Umbenennungen
**FARBERKENNUNG_V2 --> Farberkennung
**createBinary_V3 --> createBinary
* Manuelle Versionierung behoben
* Doppelte Dateien gelöscht
<ref name="Autor: Müller"> Autor Torben Müller</ref>
=Verlauf der Verarbeitungsrate=
Die Verarbeitungsrate der Maschine ist ein gutes Maß, um den Fortschritt des Projekts sichtbar zu machen oder den Erfolg einzelner Maßnahmen zu überprüfen. Dazu wird nach jeder großen Änderung und zu jedem Meilenstein ein Sortierprozess gestartet und für eine gewisse Zeit beobachtet. Anschließend wird aus der Anzahl der erfolgreich sortierten Teile und der dabei benötigten Zeit die Verarbeitungsrate in Teile pro 10 Minuten ermittelt. Zusätzlich wird über die Differenz der zugeführten und im ersten Durchlauf richtig sortierten Teile die Sortierung in Prozent berechnet. Dabei ist zu beachten, dass seit dem 11.01.2019 zum Zweck der Vereinzelung Teile aus dem Prozess genommen werden, bevor sie die Bildverarbeitung erreichen. Die Sortierung in Prozent ist daher kein Gütekriterium der Bildverarbeitung.
Die folgende Tabelle zeigt eine Auswahl von ermittelten Verarbeitungsraten, um den Verlauf des Projekts zu verdeutlichen.
{| class="wikitable"
|-
!Datum
!Anzahl zugeführte Teile
!Anzahl erfolgreich sortierte Teile
!Dauer
!Verarbeitungsrate Teile/10min
!Sortierung in %
!Kommentar
|-
| 23.04.18
| 50
| 13
| 10 Minuten
| 13,0
| 26
| Ausgangssituation nach Übernahme des Projekts
|-
| 25.06.18
| 81
| 54
| 9,5 Minuten
| 56,84
| 66,67
| Ergebnis des SS18
|-
| 11.01.19
| 326
| 270
| 23,3 Minuten
| 115,88
| 82,82209
| Umbau der Separierung und Integration der Sortiereinheit
|-
| 17.01.19
| 175
|122
| 10 Minuten
| 122,00
|  69,71429 
| Programmtechnische Optimierung
|-
|}


 
Wie der Tabelle zu entnehmen ist, konnte die Verarbeitungsrate seit Übernahme des Projekts signifikant gesteigert werden. Der im Pflichtenheft vereinbarte Mindestwert der Verarbeitungsrate von 120 Teilen in 10 Minuten ist zu Meilenstein 4 erreicht worden. Das Projekt kann also als erfolgreich bearbeitet angesehen werden.
<br />
<ref name="Autor: Bartnick"> Autor Madlen Bartnick</ref>


<ref name="Autor: Schmotz"> Autor Maik Schmotz</ref>
=Inbetriebnahmeprotokoll=
<ref name="Autor: Busemann"> Autor Nils Busemann</ref>
<ref name="Autor: Fankhauser"> in Anlehnung an Autor Adam Fankhauser</ref>
<ref name="Autor: Lingenauber"> in Anlehnung an Autor Niklas Lingenauber</ref>


= '''Softwareumsetzung''' =
In einem Inbetriebnahmeprotokoll wurde die Legosortiermaschine im Juni 2018 in Betrieb genommen.
Folgende Requirements wurden in diesem Protokoll bearbeitet und als Ergebnis in SVN festgehalten:


{| class="wikitable"
|-
!Spezifikations-ID
!Anforderungs-ID
!Anforderungstitel
!Beschreibung der Spezifikation
|-
| 0020
| REQ10.2010
| Antriebe
| Elektrischer Antrieb muss vorhanden sein
|-
| 0030
| REQ10.2020
| Energieversorgung
| Per 230V AC Schukostecker
|-
| 0040
| REQ10.2030
| Abmessung
| 2,5m x 1m x 1,5m Grundplattenmontage
|-
| 0056
| REQ10.2040
| Sicherheit/ Gefährdungsbeurteilung
| Drucken und Anbringen von Warnhinweisen
|}


Das Inbetriebnahmeprotokoll ist unter folgendem Link zu finden:
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/22_Pruefprotokolle/Inbetriebnahmeprotokoll.docx Inbetriebnahmeprotokoll]


== Implementierung einer Hauptfunktion ==
Der Systemtest der elektrischen Antriebe wurde zudem in einem Protokoll festgehalten und ist unter folgendem Link zu finden:
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/25_Systemtests/Systemtest_elektrischer_Antrieb.docx Systemtest elektrische Antriebe]


[[Datei:Programablauf_Legomaschine_main.png|450px|thumb|right|Abbildung 3: Entwurf des Programmablaufes]]
<ref name="Autor: Eidhoff"> Autor Marc Eidhoff</ref>
[[Datei:StartSortiermaschine().png|200px|thumb|right|Abbildung 4: Entwurf der Sortierhauptfunktion]]
<ref name="Autor: Brandt"> Autor Tobias Brandt</ref>


Bis zum Sommersemster 2017 wurden die Legosortiermaschine durch zwei Programme in Matlab gesteuert. Ein Programm, welches die Separierung steuert, und ein Programm, welches die Bildverarbeitung und Sortierung steuert. Da immer nur ein Programm in Matlab ausgeführt werden kann, werden beide Programme so geändert, dass eine Hauptfunktion die Laufzeiten dieser steuert.
=Gefährdungsbeurteilung=
Probleme bei der Zusammenführung waren:


* Die Kameras sollen nur ein mal kalibriert werden
Eine Gefährdungsbeurteilung wurde im Juni 2018 erstellt.
:&rarr; Die Kalibrierungen werden am Anfang des Hauptprogramms durchgeführt und nicht mehr in den Unterfunktionen.


* Die Schnittstelle zum Arduino kann nur ein mal erzeugt werden
Die Gefährdungsbeurteilung wurde in tabellarischer Form angelegt und listet mögliche Gefahren der Legosortiermaschine auf.  
:&rarr; Die Schnittstelle wird in der Hauptfunktion erzeugt. Da die Unterfunktionen die Schnittstelle brauchen, um Befehle an den Arduino zu senden, muss diese beim Funktionsaufruf übergeben werden.
Von der Grundausstattung über elektrische und mechanische Gefährdungen, wurden auch Gefahrstoffe und Brandgefährdungen kontrolliert.


* Es soll eine Auswahl zwischen Teach-In und Sortierung geben
Mögliche Gefahren wurden dabei in folgende Risikostufen eingeteilt:
:&rarr; Die Gui, über welche diese Abfrage läuft, wird als erstes aufgerufen. Bei Auswahl von Teach-In wird in dieses Unterprogramm gesprungen.
* Kein Risiko
* Geringes Risiko
* Großes Risiko


* Wann ist welcher Programmteil dran, damit keine Teile übersehen werden?
Anhand der Risikostufe werden desweiteren Lösungsmaßnahmen sowie Termine zur Fehlerbehebung festgelegt.  
:&rarr; Die [http://193.175.248.52/wiki/index.php/Legosortiermaschine_Separierung Separierung] und [http://193.175.248.52/wiki/index.php/Legosortiermaschine_Bildverarbeitung Bildverarbeitung] laufen immer abwechselnd. Zunächst erzeugt sich die Bildverarbeitung ein Bild. Erkennt sie kein Teil, so wird die Funktion beendet und die Separierung erzeugt sich ein Bild. Diese ermittelt die Anzahl der Teile auf dem Band und pustet diese nach Bedarf auseinander. Danach ermittelt die Bildverarbeitung erneut, ob ein Teil in der Box liegt. Dieser Ablauf wiederholt sich immer wieder.
:Um dies umzusetzten, wird in der Separierung die Dauerschleife entfernt und in der Bildverarbeitung wird ein break implementiert, um aus der Schleife zu springen.


* Was passiert wenn ein Teil in der Bildbox liegt?
Es wurden die folgenden drei Risiken erkannt:
:&rarr; Erkennt die Bildverarbeitung ein Teil in der Box, so wird das Förderband gestoppt. Die Funktion der Bildverarbeitung wird weiter ausgeführt und das Teil wird mit Hilfe der Merkmale erkannt. Dann wird die [http://193.175.248.52/wiki/index.php/Legosortiermaschine_Sortierung Sortierung] angesteuert und das Teil wird aus der Box gepustet. Erst jetzt wird die Separierung wieder ausgeführt.


* Durch das Abwechseln der Funktionen überlagern sich die graphischen Ausgaben der Kamerabilder
1.) Eine Betriebsanweisung ist erstellt worden?
:&rarr; Die Bilder werden in einer Figur über Subplots angezeigt.


* Das Programm muss beendbar sein, egal in welchem Programmteil es sich befindet
Das Risiko wurde als gering eingeschätzt und es wurde die Pflicht aufgenommen, eine Betriebsanweisung zum Meilenstein 4 zu erstellen.
:&rarr; Wird die ESC-Taste gedrückt, so wird dies von dem durchgeführten Programmteil erkannt. Die globale Variabel ''abbruch'' wird auf eins gesetzt und der Programmteil wird verlassen. Die Variabel verhindert nun, dass der andere Programmteil ausgeführt wird und beendet die Schleife um die Unterfunktionen. Wird die ESC-Taste gedrückt, während die Bildverarbeitung ein Teil erkennt, so wird das Programm bis zur Einsortierung weiter durchlaufen. So wird gewährleistet, dass kein Teil in der Bildbox liegen bleibt.  


* Die Datenbank speichert die leere Box bei jedem Programmaufruf als ein Teil
2.) Bewegte Transportmittel, bewegte Arbeitsmittel
:&rarr; Der Wert des erzeugten Teils, wird nach Beendigung des Programms gelöscht


* Die benötigten Daten sind in vielen verschiedenen Ordnern angeordnet und teilweise schwer zu finden. Außerdem sind dort viele alte nicht verwendete Funktionen
Für das Förderband gibt es momentan lediglich einen Warnhinweis und keinen materiellen Einklemmschutz. Dieses Risiko wurde als gering eingeschätzt und zum Meilenstein 3 wird ein Schutz angebracht werden.
:&rarr; Nur die verwendeten Dateien werden in einen neuen Ordner in SVN unter ./SRC/Matlab angeordnet. Dort wird eine neue übersichtliche Ordnerstruktur erzeugt 


3.) Unkontrollierte bewegte Teile


In Abbildung 3 und 4 sieht man den Programmablauf der Hauptfunktion.
Nach der Bildverarbeitung werden die Legoteile "ausgeschossen". Dieses Risiko wurde ebenfalls als gering eingestuft. Als Maßnahme gilt der Zusammenbau der Sortiereinheit, welcher anschließend vor der Bildverarbeitung positioniert wird.


Die gesamte Gefährdungsbeurteilung wurde in SVN abgelegt und ist unter folgendem Link zu finden: [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/13_Gefaehrdungsbeurteilung/SS18/Gefährdungsbeurteilung.docx Gefährdungsbeurteilung]


<ref name="Autor: Busemann"> Autor Nils Busemann</ref>
<br />
<br />
<br />


== Arduino-Kommunikation ==


Zum Ansteuern der Aktoren mithilfe des Arduino Mega, wurde ein Kommunikationsprogramm geschrieben. Dieses ermöglicht dem Nutzer über den PC einen seriellen Befehl an den Arduino zu schicken, der daraufhin den Befehl ausführt. Zu den Befehlen gehören:
<ref name="Autor: Eidhoff"> Autor Marc Eidhoff</ref>
*Ansteuern der LED's in den Kameraboxen für die Erkennung bzw. Separierung
<ref name="Autor: Brandt"> Autor Tobias Brandt</ref>
*Ventilsteuerung für die Druckluftdüsen für die Erkennung bzw. Separierung
*Einstellung der Servomotoren für die Sortierung
*Ansteuern der Förderbandmotoren


Für die Botschaften wurde ein einheitliches Framework herausgearbeitet. So besitzt jede serielle Botschaft folgende kodierte Inhalte:
=Software Dokumentation=
*Am Anfang jeder Botschaft steht ein '''B'''
== Allgemeine Informationen ==
*Eine 1-stellige ID, welche die oben aufgeführten Aufgaben repräsentiert
<br>
*Eine 2-stellige Nummer (NR), welche einen bestimmten Aktor beinhaltet
[[Datei:PAP-Beispiel.JPG|250px|thumb|rechts|Abbildung 3: Beispiel PAP]]
*Eine 3-stellige Zusatzzahl, welche z.B. den Motoren eine relative Geschwindigkeit vorgibt, den LEDs bzw. Ventilen an/auf und aus/zu vorgibt
*Die Botschaft wird mit einem '''E''' beendet
Eine detalierte Beschreibung der Kommunikation findet sich in folgender Tabelle:
{| class="wikitable"
{| class="wikitable"
|-
|-
!Beschreibung
!Spezifikations-ID
!ID
!Anforderungs-ID
!NR
!Anforderungstitel
!ZUSATZ
!Beschreibung der Spezifikation
!Gesamtstring
!Beispielstring<br />(ohne Leerzeichen)
|-
|-
| '''Servoansteuerung der Fächer'''
| 410
| F
| REQ10.2320
| 00 - 18: für die Fachnummern
| Modellierung der System- und Softwarearchitektur
| Z: 000
| Geeignete Software für System- und Softwarearchitektur verwenden (zb. MS Visio)
| B ID NR Z E
|}
| B F 01 055  E (Servo 1 auf 55°)
 
Eine Softwarearchitektur beschreibt die grundlegenden Komponenten und deren Zusammenspiel innerhalb eines Softwaresystems.
 
Eine Systemarchitektur wird nach dem V-Modell XT im Rahmen des Systementwurfs erstellt und umfasst die Dekomposition des Systems, die Schnittstellenübersicht und den übergreifenden Datenkatalog (Daten, die Systeme und Systemelemente austauschen).
 
Zu Beginn der Systemarchitekturarbeiten werden, durch Analyse der Gesamtsystemspezifikation und weiterer vorhandener Informationen, Architekturtreiber identifiziert und Bewertungskriterien festgelegt. Funktionale und nicht-funktionale Anforderungen beeinflussen den Entwurf der Systemarchitektur, die in Architektursichten dokumentiert wird.
 
Für die System- und Softwarearchitektur müssen Programme verwendet werden die kostenfrei sind oder durch die Hochschule zur Verfügung gestellt werden.
 
Beipielhaft können folgende Programme verwendet werden:
*PapDesigner
*MS Visio
*Clickcharts
*Dia
*XMind
*FreeeMind
 
 
Für den Ablauf der Legosortiermaschine wurde mit der Software PAP-Designer ein Ablaufplan erstellt. In der neben stehenden Abbildung 3 ist ein Auszug zu sehen.
 
Das Dokument ist unter folgendem Link abrufbar:
 
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/10_Arduino_Software/PAP_Dokumentation_Codeablauf.pap Ablaufplan]
 
 
Dateien sollten nicht als PDF oder Bilder gespeichert werden um nachfolgenden Gruppen die Weiterbearbeitung und Ergänzung zu ermöglichen.
 
 
== MATLAB Dokumentation ==
{| class="wikitable"
|-
|-
| '''LED's'''
!Spezifikations-ID
| L
!Anforderungs-ID
| 00: Erkennung oben<br />1: Erkennung unten<br />2: Sortierung
!Anforderungstitel
| Z: Status (0=aus; 1 = an)
!Beschreibung der Spezifikation
| B ID NR Z E
!Arbeitsergebnis
| B L 01 001 E (Erkennung unten an)
|-
|-
| '''Förderbandmotoren'''
| 0530
| M
| REQ10.3310
| 00: Bunker<br />01: Förderband
| Dokumentation von Software
| Z: Power in %
| Geeignete Software zur Dokumentation des Quellcodes (zb LaTeX oder Doxygen)
| B ID NR Z E
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/Doc MATLAB mit m2html]
| B M 01 080 E (Förderband mit 80%)
|-
|-
| '''Initalisierungsstellung der Servomotoren'''
| 0531
| I
| REQ10.3311
| 00
| Dokumentation von Software
| Z: 0 (kein Zusatz)
| Video zur Bedienung von m2html
| B ID NR Z E
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/m2html_Anleitung_Video.mp4 Videoanleitung]
| B I 00 000 E (alle Servomotoren auf Initalstellung)
|-
| '''Ventile'''
| V
| 00: Erkennung pusten <br />01: nicht belegt<br />02: Vereinzelung pusten (1)<br />03: Vereinzelung pusten (2)
| Z: Status (0=aus; 1 = an)
| B ID NR Z E
| B V 00 001 E (Erkennung pusten)
|}
|}
<br />
Das Programm auf dem Arduino beobachtet dauerhaft den seriellen Eingang und reagiert bei einem Eintreffen einer Botschaft mit einem jeweiligen Ansteuern der digitalen Ausgänge. Das Programm befindet sich im folgenden Ordner:
[https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/SRC/Arduino/Arduino_Kommunikation\Serielle_Kommunikation_Arduino_Matlab.ino  Serielle_Kommunikation_Arduino_Matlab].
<br /><br />
<ref name="Autor: Busemann"> Autor Nils Busemann</ref>
<ref name="Autor: Schmotz"> Autor Maik Schmotz</ref>


= '''Tests''' =


== Test der Verarbeitungszeit ==
[[Datei:M2html_Index.png  | thumb | left | Abbildung 4: m2html Übersicht]]
[[Datei:M2html_Funktionsbeispiel.png | right | thumb | Abbildung 5: m2html Funktionsbeispiel]]
Die MATLAB Dokumentation wurde mit [https://www.artefact.tk/software/matlab/m2html/ m2html] erstellt. Es handelt sich dabei um ein doxygen-ähnliches Werkzeug, welches die Quelldateien eines Projektes automatisch analysiert und eine im Webbrowser benutzbare Dokumentation erstellt. Hierbei werden für jede Quelldatei Funktionsname, Kopf, Eingabe- und Ausgabeparameter, sowie Zugriffe von und auf andere Funktionen im Projekt untersucht und übersichtlich dargestellt. Zu den Funktionszugriffen wird optional auch ein Graph erstellt, wie in ABB gezeigt. Da das Tool für eine sehr alte MATLAB-Version geschrieben wurde, sind einige Funktionen, unter anderem die Benutzeroberfläche zur einfachen Bedienung nicht mehr vollständig benutzbar. Zudem musste der Algorithmus zur Code-Analyse an einigen Stellen leicht abgeändert werden, um mit den neu erstellten [[#Richtlinien zur Codegestaltung | Richtlinien zur Codegestaltung]] zu funktionieren. Weitere Änderungen können falls nötig in [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/m2html/private/mfileparse.m mfileparse.m] vorgenommen werden. Die [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/m2html_Anleitung.txt Anleitung] sowie ein kurzes [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/m2html_Anleitung_Video.mp4 Bedienungs- und Demovideo] sind im SVN zu finden.
 
Nach der Erstellung der Dokumentation kann diese mit dem öffnen der [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/Doc/index.html index.html] im [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/06_MATLAB/06_Dokumentation_mit_m2html/Doc Dokumentationsordner] eingesehen werden. Die Übersicht sowie eine beispielhafte Funktionsinformation sind im folgenden in Abbildung 4 bzw. 5 dargestellt.
 
== Arduino Dokumentation ==


Um die Dauer der Verarbeitungszeit der Maschine aus Spezifikation 0070 zu überprüfen, wird eine Auswahl von Legoteilen in die Maschine eingeworfen. Am Ende wird entschieden, ob die Teile erkannt wurden oder nicht. Die Sortierung wird nicht getestet.
[[Datei:Serielle_Steuerung_PAP.jpg | thumb | right | Abbildung 6: PAP der Seriellen Steuerung]]


{| class="wikitable"
{| class="wikitable"
|-
|-
!Anzahl Teile
!Spezifikations-ID
!Dauer
!Anforderungs-ID
!erkannte Teile
!Anforderungstitel
!Bemerkung
!Beschreibung der Spezifikation
!Erkenntnis
!Arbeitsergebnis
|-
|-
| 60
| 0530
| 5:34 Minuten
| REQ10.3310
| 21
| Dokumentation von Software
| Eingelernte Teile werden nicht erkannt
| Geeignete Software zur Dokumentation des Quellcodes (zb LaTeX oder Doxygen)
| Teile müssen erneut eingelernt werden
| [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/10_Arduino_Software/PAP_Dokumentation_Codeablauf.pap Arduino mit PapDesigner]
|-
| 60
| 8:56 Minuten
| 39
| zwei lange Teile blockieren sich gegenseitig in der Vereinzelung
| der Druck für die Luftdüsen in der Vereinzelung muss erhöht werden
|-
| 60
| 6:20 Minuten
| 45
| Fehler durch: zusammenliegende Teile, nicht erkannte Teile
| Farberkennung in der Vereinzellung wird angepasst, Teile werden neu eingelernt
|-
| 100
| 10:36 Minuten
| 73
| Vereinzellung und Bildverarbeitung machen kleine Fehler
| Beide Funktionsteile müssen im nächsten Semester verbessert werden
|}
|}


Ohne die Sortierung ist das Requirement 10.2060 erfüllt.
Die Arduino Dokumentation beschränkt sich auf eine einzelne Datei, welche die via USB empfangenen seriellen Daten auswertet und die jeweiligen Elemente der Maschine entsprechend ansteuert. Da sich somit keine komplexen Zusammenhänge zwischen verschiedenen Dateien im Programm ergeben, wurde für den Code mithilfe von PapDesigner ein genauer Ablaufplan in PapDesigner erstellt. Das Ergebnis ist in Abbildung 6 zu sehen.
<ref name="Autor: Busemann"> Autor Nils Busemann</ref>
 
<ref name="Autor: Schmotz"> Autor Maik Schmotz</ref>
<ref name="Autor: Wolf"> Autor Jerome Wolf</ref>
<ref name="Autor: Eidhoff"> Autor Marc Eidhoff</ref>
<ref name="Autor: Brandt"> Autor Tobias Brandt</ref>
 
=Dokumentation=
 
 
Die Ergebnisse des Projektes wurden, wie in Spezifikation 0330 gefordert, nachvollziehbar und nachbaubar dokumentiert. Die gesamten Dateien und Unterlagen zur Dokumentation sind strukturiert in [https://svn.hshl.de/usvn/project/MTR_SDE_Praktikum_2015/browser    SVN] gesichert und versioniert. Abbildung 7 zeigt eine [https://svn.hshl.de/svn/MTR_SDE_Praktikum_2015/trunk/Dokumentation/%C3%9Cbersicht%20der%20Dokumentationen.xlsx Übersicht der Dokumentationen], die im WS18/19 anzufertigen waren. Mit Hilfe der dort dargestellten Tabelle wurde die Vollständigkeit sowie der Fortschritt der Dokumentation überprüft.
<br/>
<br/>
[[Datei: Übersicht der Dokumentationen.jpg | 750px | thumb | zentriert| Abbildung 7: Übersicht der Dokumentationen]]
 
 
 
<ref name="Autor: Bartnick"> Autor Madlen Bartnick</ref>
 
=Zusammenfassung=
 
Dieser Artikel beschreibt Punkte zur Hardware und Software, die auf die gesamte Anlage bezogen sind. Umgesetzte Punkte sind die folgenden:
 
 


= Zusammenfassung =
=Liste offener Punkte (LoP)=
* Separate Absicherung der 5V und 24V Stromkreise (Benötigte Materialien bereits in BOM eingetragen, Bestellung war zum Jahresende nicht mehr möglich)
* Provisorischen Vorwiderstand der Vibrationsförderrinne durch Potentiometer ersetzen (Benötigte Materialien bereits in BOM eingetragen, Bestellung war zum Jahresende nicht mehr möglich)


Umgesetze Punkte:
* Hardwarezusammenführung der einzelnen Komponenten
** Schaltschrank
** Steuerplatine
** elektrischer Anschluss
* Softwarezusammenführung
** Ein Hauptprogramm
** Unterprogramme für Systemteile
** Kommunikation zwische Arduino und Matlab
* Gesamtanlagentest


= Autoren =
= Autoren =

Aktuelle Version vom 30. Januar 2019, 12:46 Uhr

Dies ist ein Unterartikel von der Legoteil Zählmaschine, wo Aufgaben bezogen auf die ganze Anlage beschrieben werden.


Anforderungen

Spezifikations-ID Anforderungs-ID Anforderungstitel Beschreibung der Spezifikation Arbeitsergebnis
0057 REQ10.2041 Sicherheit/ Gefährdungsbeurteilung Schaltschrank verdrahten Inbetriebnahmeprotokoll
0010 REQ10.2000 Eigenständige Funktionsweise der Sortiermaschine Funktionsfähig ohne Verbindung zu einem anderen System und ohne menschliche Eingriffe Inbetriebnahmeprotokoll
0052 REQ10.2040 Sicherheit / Gefährdungsbeurteilung Mechanische Sicherheit (Einklemmschutz) Inbetriebnahmeprotokoll
0053 REQ10.2040 Sicherheit/ Gefährdungsbeurteilung Erstellen einer Gebrauchsanleitung im Wiki Wiki-Artikel
0054 REQ10.2040 Sicherheit / Gefährdungsbeurteilung Erstellen einer Schritt-für-Schritt Anleitung im Wiki Wiki-Artikel
0300 REQ10.3200 Projektplanung MS Project verwenden Dokument
0310 REQ10.3210 Versionsverwaltung Alle Daten in SVN hinterlegen SVN
0410 REQ10.3250 Modellierung der System- und Softwarearchitektur Geeignete Software für System- und Softwarearchitektur verwenden (zb. MS Visio) Wiki Artikel
0420 REQ10.3260 Tools für Softwareentwicklung Geeignete Werkzeuge für Softwareentwicklung Dokument
0430 REQ10.3270 Nachhaltigkeit Alle wichtigen Software-Stände werden gut dokumentiert, d. h. ausführlich kommentiert und per SVN versioniert Dokument
0431 REQ10.3271 Nachhaltigkeit Softwarestände dokumentieren Dokument
0432 REQ10.3272 Nachhaltigkeit Software ausführlich kommentieren Dokument
0432.1 REQ10.3272 Nachhaltigkeit SVN - Nachhaltigkeit Dokument
0510 REQ10.3290 Integrationstests Für die entwickelte Software bzw. die Steuer- und Regelungsalgorithmen muss ein Integrationstest durchgeführt werden. Integrations_Tests
0500 REQ10.3280 Komponententests Für die entwickelte Software bzw. die Steuer- und Regelungsalgorithmen müssen geeignete Komponententests durchgeführt und geeignet dokumentiert werden Unit_Tests
0070.2 REQ10.2060 Verarbeitungszeit > 120 Legoteile in 10min Protokoll Verarbeitungsrate
0320 REQ10.3220 Ablagestruktur für Versionsverwaltung Geeignete Struktur für SVN definieren und einrichten
0330 REQ10.3231 Dokumentation Projektergebnisse nachvollziehbar und nachbaubar darstellen für fachversierte Nutzer Übersicht Dokumentationen
0520.1 REQ10.3300 Coding Guidelines Code Reviews MATLAB Arduino
0520.3 REQ10.3300 Coding Guidelines Leitfaden überarbeiten (Arduino-C, Matlab) Programmierrichtlinien
0521 REQ10.3300 Coding Guidelines Untersuchung und Überarbeitung des bisherigen Codes bezüglich Einhaltung der Coding Guidelines Analyse MATLAB
0530 REQ10.3310 Dokumentation von Software Geeignete Software zur Dokumentation des Quellcodes (zb LaTeX oder Doxygen) MATLAB mit m2html Arduino mit PapDesigner
0531 REQ10.3311 Dokumentation von Software Video zur Bedienung von m2html Videoanleitung


Schnittstellen

Die Legosortiermaschiene ist in drei Arbeitsbereiche eingeteilt. Dies hat den Vorteil, dass aus dem gesamten Team kleine Gruppen gebildet werden können, welche für ihren Maschinenteil verantwortlich sind. Dadurch wird vermieden, dass Aufgaben doppelt oder gar nicht erledigt werden. Es bringt allerdings den Nachteil mit sich, dass es Schnittstellen zwischen den Gruppen gibt. Diese müssen genau definiert werden, damit eine reibungslose Zusammenarbeit gewährleistet ist.


Separierung - Bildverarbeitung

Die Separierung vereinzelt die Legoteile, damit die Bildverarbeitung diese verarbeiten kann. Dafür sind folgende Vereinbarungen getroffen worden:

Hardware

  • Es darf immer nur ein Teil von der Separierung an die Bildverarbeitung übergeben werden
  • Das Förderband und der Eingang der Bildverarbeitungsbox liegen auf einer Höhe, damit kein Teil vom Förderband fällt. Damit alle Teile in die Box fallen, ist diese schräg angebracht.
  • Die Anlage wird über einen Schaltschrank gesteuert. Dort werden die Komponenten der Separierung und der Bildverarbeitung gesteuert.

Software

Beide Anlagenteile können nicht gleichzeitig durch zwei getrennt Programme gesteuert werden. Deshalb muss eine Hauptfunktion die Laufzeiten steuern. Nötige Vereinbarungen:

  • Sobald ein Teil in der Bildbox erkannt wird, bleibt die Separierung stehen
  • Kalibrierungen der Kameras wird in der Hauptfunktion durchgeführt
  • Die Teilprogramme dürfen keine Dauerschleifen haben
  • Die graphische Ausgabe für beide Funktionen ist in einer Figur

Bildverarbeitung - Sortierung

Das Teil aus der Bildverarbeitung muss in die Sortierung gelangen, damit es richtig einsortiert wird. Dafür sind folgende Vereinbarungen getroffen worden:

Hardware

  • Die Bildverarbeitung hat den Ausgang zur Seite
  • Das Teil wird mit einer Luftdüse herausgeschossen
  • Die Anlage wird über einen Schaltschrank gesteuert.

Software

  • Hat die Bildverarbeitung ein Teil erkannt, so wird die Fachnummer an den Mikrocontroler gesendet. Dazu fragt die Bildverarbeitung die Fachnummer aus der Datenbank ab
  • Der Mikrocontroler steuert dann die die Klappen der Sortierung an

[1]

Neuverdrahtung des Schaltschranks

Nach der Übernahme des Projekts wurden folgende Mängel bei der Verdrahtung im Schaltschrank festgestellt:

  • Fehlen von Aderendhülsen auf flexiblen Leitungen
  • Aderendhülsen auf starren Leitungen
  • Signalleitungen mit starren Leitungen (Leitungsbruch bei geringem Bewegen dieser Leitungen)
  • Leitungen wurden vor dem Anschluss nicht auf Länge gebracht und lagen aufgerollt hinter dem Schaltschrank
  • Fehlende Beschriftung von Bauteilen, Leitungen und Adern
  • Dokumentation und Verdrahtung stimmen nicht überein

Aufgrund dieser Mängel wurde entschieden, den Schaltschrank komplett neu zu verdrahten und dabei eine aktuelle Dokumentation zu erstellen.

Die nachfolgenden Bilder zeigen einen Vorher/Nachher-Vergleich der Verdrahtung im Schaltschrank.

Die aktuelle Verdrahtung ist durch einen Klemmenbelegungsplan dokumentiert.

[2]

Richtlinien zur Codegestaltung

Übersicht über die Richtlinien

Die Softwarekomponenten der Legoteil-Zählmaschine wurden in MATLAB und Arduino C implementiert. Um den Entwicklungsprozess zu vereinfachen mussten zunächst formalen Guidelines überarbeitet werden. Diese legen die formelle und syntaktische Gestaltung des im Rahmen des Praktikums erzeugten Codes fest.

Insbesondere Liegt der Fokus hier auf:

  • Gestaltung von Headern
  • Benennung von Funktionen und Variablen
  • Umfang von Kommentaren

Die Guidelines beziehen sich in erster Linie auf Code in C/C++ und Matlab, können jedoch auch leicht auf andere Sprachen übertragen werden. Sie wurden im Verlaufe des Semesters mehrfach überarbeitet und angepasst. Dies Erfolgte zuletzt in Zusammenarbeit mit Stephan Marks aus der Gruppe des Autonomen Fahrzeuges. Die entsprechenden Dokumente liegen im SVN oder sind hier im Wiki zu finden und werden auch im weiteren Praktikumsverlauf falls nötig noch erweitert und verbessert werden.

Konkret wurden hierbei folgende Änderungen vorgenommen:

  • Die C Richtlinien wurden auf MATLAB erweitert
  • Variablenbenennung soll auf Deutsch erfolgen
  • Es wurden Anforderungen an Kommentare hinzugefügt, laut denen allein anhand dieser der Programmablauf klar werden muss
  • Das Header Format wurde wie Folgt spezifiziert:
Sprache Modul Funktion
C/C++
/************************************************************\
* 
* Modul	          : ModulName.c
*
* Datum           : 04. Oktober 2013
*
* Beschreibung    : Zweck dieses Moduls
*
* Implementierung : Visual Studio 2012 Professional
*
* Autor           : Mustermann, Max
*
* Bemerkung       : Demo für den ersten Meilenstein
*
* Letzte Änderung : 04. Mai 2018
*
\************************************************************/
/***********************************************************\
* 
* Funktion          : MD_FunktionsName
*
* Datum             : 04. Oktober 2013
*
* Beschreibung      : Zweck dieser Funktion  
*
* Implementierung   : Visual Studio 2012 Professional
*
* Autor             : Mustermann, Max
*
* Bemerkung         : Code-Review noch ausstehend
*
* Letzte Änderung   : 04. Mai 2018
*
* Übergebeparameter :
* Typ       Name        Beschreibung
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* int       n           Anzahl Elemente des Arrays
* double[]  a           Array mit double-Werten
*
* Rückgabeparameter :
* Typ       Beschreibung
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* int       Rückgabe eines Fehlercodes
*
\***********************************************************/
MATLAB
% ***********************************************************\
%
% Modul           : ModulName.m
%
% Datum           : 04. Oktober 2013
%
% Implementierung : MATLAB R2013a
%
% Toolbox         : Example Toolbox
%
% Autor           : Mustermann, Max
%
% Bemerkung       : Code-Review noch ausstehend
%
% Letzte Änderung : 04. Mai 2018
%
%************************************************************/
%************************************************************\
%
% Funktion          : Funktion.m
%
% Datum             : 14. Mai 2018
%
% Implementierung   : MATLAB R2017a
%
% Toolbox           : -
%
% Autor             : Marks, Stephan
%
% Bemerkung         : Beispiel eines Funktions-Headers
%
% Letzte Änderung   : 04. Mai 2018
%
% ***********************************************************/
  • Im Falle des MATLAB Headers soll nach Möglichkeit zudem eine via help Funktionsname aufrufbare Hilfe eingebaut werden. Bei MATLAB wird hierfür stets der erste zusammenhängende Kommentar verwendet, daher sollte sich vor dem eigentlichen Header ein Block folgender Form befinden:
function result = Math_Add_A2B(a, b)
% MATH_ADD_A2B addiert zwei Zahlen   
%
% Syntax:
%   ergebnis = MATH_ADD_A2B(a, b)
%  
% Beschreibung:
%   Es werden die zwei Zahlen 'a' und 'b' 
%   beliebigen Datentyps addiert.
%   result = a + b
%
% Eingangswerte:
%   a: erster Summand
%   b: zweiter Summand
%
% Rückgabewerte:
%   result: Ergebnis der Addition von 'a' und 'b'
%  
% Beispiel:
%   ergebnis = MATH_ADD_A2B(7, 12.583)


Nach der ersten Überarbeitung der Guidelines wurde dann der gesamte bisherige Matlab Code bezüglich der Konformität überprüft und entsprechend überarbeitet. Dabei wurden die Benennungen und Formatierungen in Absprache mit Professor Göbel angepasst, um einen aufgeräumten und einheitlichen Ausgangszustand zu erzeugen, auf dem im Folgesemester weiter aufgebaut werden kann. Dazu wurde jede Datei des Programms analysiert und auf Header, Kommentare, Variablen und Funktionsbenennung untersucht und die Ergebnisse in einer Tabelle festgehalten. Zudem wurde überprüft, ob die einzelnen Funktionen im aktuellsten Programm überhaupt noch Verwendung fanden. Alle nicht verwendeten Programmteile wurden anschließend entfernt. Ein Ausschnitt der erstellten Tabelle ist im Folgenden dargestellt:

Abbildung 1: Ausschnitt aus der Analysetabelle

Eine komplette Liste mit allen überarbeiteten und gelöschten Dateien sowie Informationen zu den Umbenennungen sind im SVN zu finden. Eine erneute Überarbeitung aller Header aufgrund wiederholter Anpassungen steht noch aus. Die tatsächlich bearbeiteten Dateien wurden im Verlaufe des Projektes entsprechend angepasst.

Code Reviews

Abbildung 2: Beispiel eines Code-Reviews mit neuem Template

Gegen Ende des Projektzeitraums wurden für alle nennenswert veränderten Dateien des Projektes Code-Reviews durchgeführt. Dabei wurde in Anlehnung an ein vorhandenes Hella-Template ein neues, für den Umfang des Projektes besser geeignetes, neues Template erstellt. In diesem befindet sich neben den allgemeinen Projektdaten und dem Ergebnis der Analyse eine Checkliste, mit welcher Schritt für Schritt die einzelnen Dateien und Funktionen untersucht werden können.

Die Code Reviews wurden für folgende Quelldateien erstellt:

Dateiname Link
Anlernen.m SVN Link
AutomatischesZaehlen.m SVN Link
BaukastenBearbeiten.m SVN Link
Bildverarbeitung_Teach_In.m SVN Link
Datenbankabgleich.m SVN Link
ExcelOeffnen.m SVN Link
FarberkennungMaske.m SVN Link
Fehlteilliste.m SVN Link
Inventurliste.m SVN Link
Merkmalsberechnung.m SVN Link
Separierung.m SVN Link
StartSortiermaschine.m SVN Link
TeachIn2.m SVN Link
Serielle_Steuerung.ino SVN Link

[3]

SVN

Die Ordnerstruktur im SVN wurde größtenteils von den Vorsemestern übernommen. In dem Bereich Dokumentation wurden einige Teilbeeiche hinzugefügt um neu entstandene Dokumente sinnvoll abzuspeichern.


Die Nachhaltigkeit des SVN Ordners wurde durch verschiedene Maßnamen verbessert:

  • Entfernen ungenutzter Dateien
    • Im Ordner SRC wurden alte, ungenutzte Dateien entfernt
  • Löschen temporärer Dateien wie Matlab .asv Dateien oder ~$ Dateien von Office Programmen
  • Ignorierliste erweitert
    • .asv Dateien
    • Inventurliste.xls
  • Umbenennungen
    • FARBERKENNUNG_V2 --> Farberkennung
    • createBinary_V3 --> createBinary
  • Manuelle Versionierung behoben
  • Doppelte Dateien gelöscht

[4]

Verlauf der Verarbeitungsrate

Die Verarbeitungsrate der Maschine ist ein gutes Maß, um den Fortschritt des Projekts sichtbar zu machen oder den Erfolg einzelner Maßnahmen zu überprüfen. Dazu wird nach jeder großen Änderung und zu jedem Meilenstein ein Sortierprozess gestartet und für eine gewisse Zeit beobachtet. Anschließend wird aus der Anzahl der erfolgreich sortierten Teile und der dabei benötigten Zeit die Verarbeitungsrate in Teile pro 10 Minuten ermittelt. Zusätzlich wird über die Differenz der zugeführten und im ersten Durchlauf richtig sortierten Teile die Sortierung in Prozent berechnet. Dabei ist zu beachten, dass seit dem 11.01.2019 zum Zweck der Vereinzelung Teile aus dem Prozess genommen werden, bevor sie die Bildverarbeitung erreichen. Die Sortierung in Prozent ist daher kein Gütekriterium der Bildverarbeitung.

Die folgende Tabelle zeigt eine Auswahl von ermittelten Verarbeitungsraten, um den Verlauf des Projekts zu verdeutlichen.

Datum Anzahl zugeführte Teile Anzahl erfolgreich sortierte Teile Dauer Verarbeitungsrate Teile/10min Sortierung in % Kommentar
23.04.18 50 13 10 Minuten 13,0 26 Ausgangssituation nach Übernahme des Projekts
25.06.18 81 54 9,5 Minuten 56,84 66,67 Ergebnis des SS18
11.01.19 326 270 23,3 Minuten 115,88 82,82209 Umbau der Separierung und Integration der Sortiereinheit
17.01.19 175 122 10 Minuten 122,00 69,71429 Programmtechnische Optimierung


Wie der Tabelle zu entnehmen ist, konnte die Verarbeitungsrate seit Übernahme des Projekts signifikant gesteigert werden. Der im Pflichtenheft vereinbarte Mindestwert der Verarbeitungsrate von 120 Teilen in 10 Minuten ist zu Meilenstein 4 erreicht worden. Das Projekt kann also als erfolgreich bearbeitet angesehen werden.
[2]

Inbetriebnahmeprotokoll

In einem Inbetriebnahmeprotokoll wurde die Legosortiermaschine im Juni 2018 in Betrieb genommen. Folgende Requirements wurden in diesem Protokoll bearbeitet und als Ergebnis in SVN festgehalten:

Spezifikations-ID Anforderungs-ID Anforderungstitel Beschreibung der Spezifikation
0020 REQ10.2010 Antriebe Elektrischer Antrieb muss vorhanden sein
0030 REQ10.2020 Energieversorgung Per 230V AC Schukostecker
0040 REQ10.2030 Abmessung 2,5m x 1m x 1,5m Grundplattenmontage
0056 REQ10.2040 Sicherheit/ Gefährdungsbeurteilung Drucken und Anbringen von Warnhinweisen

Das Inbetriebnahmeprotokoll ist unter folgendem Link zu finden: Inbetriebnahmeprotokoll

Der Systemtest der elektrischen Antriebe wurde zudem in einem Protokoll festgehalten und ist unter folgendem Link zu finden: Systemtest elektrische Antriebe

[5] [6]

Gefährdungsbeurteilung

Eine Gefährdungsbeurteilung wurde im Juni 2018 erstellt.

Die Gefährdungsbeurteilung wurde in tabellarischer Form angelegt und listet mögliche Gefahren der Legosortiermaschine auf. Von der Grundausstattung über elektrische und mechanische Gefährdungen, wurden auch Gefahrstoffe und Brandgefährdungen kontrolliert.

Mögliche Gefahren wurden dabei in folgende Risikostufen eingeteilt:

  • Kein Risiko
  • Geringes Risiko
  • Großes Risiko

Anhand der Risikostufe werden desweiteren Lösungsmaßnahmen sowie Termine zur Fehlerbehebung festgelegt.

Es wurden die folgenden drei Risiken erkannt:

1.) Eine Betriebsanweisung ist erstellt worden?

Das Risiko wurde als gering eingeschätzt und es wurde die Pflicht aufgenommen, eine Betriebsanweisung zum Meilenstein 4 zu erstellen.

2.) Bewegte Transportmittel, bewegte Arbeitsmittel

Für das Förderband gibt es momentan lediglich einen Warnhinweis und keinen materiellen Einklemmschutz. Dieses Risiko wurde als gering eingeschätzt und zum Meilenstein 3 wird ein Schutz angebracht werden.

3.) Unkontrollierte bewegte Teile

Nach der Bildverarbeitung werden die Legoteile "ausgeschossen". Dieses Risiko wurde ebenfalls als gering eingestuft. Als Maßnahme gilt der Zusammenbau der Sortiereinheit, welcher anschließend vor der Bildverarbeitung positioniert wird.

Die gesamte Gefährdungsbeurteilung wurde in SVN abgelegt und ist unter folgendem Link zu finden: Gefährdungsbeurteilung


[5] [6]

Software Dokumentation

Allgemeine Informationen


Abbildung 3: Beispiel PAP
Spezifikations-ID Anforderungs-ID Anforderungstitel Beschreibung der Spezifikation
410 REQ10.2320 Modellierung der System- und Softwarearchitektur Geeignete Software für System- und Softwarearchitektur verwenden (zb. MS Visio)

Eine Softwarearchitektur beschreibt die grundlegenden Komponenten und deren Zusammenspiel innerhalb eines Softwaresystems.

Eine Systemarchitektur wird nach dem V-Modell XT im Rahmen des Systementwurfs erstellt und umfasst die Dekomposition des Systems, die Schnittstellenübersicht und den übergreifenden Datenkatalog (Daten, die Systeme und Systemelemente austauschen).

Zu Beginn der Systemarchitekturarbeiten werden, durch Analyse der Gesamtsystemspezifikation und weiterer vorhandener Informationen, Architekturtreiber identifiziert und Bewertungskriterien festgelegt. Funktionale und nicht-funktionale Anforderungen beeinflussen den Entwurf der Systemarchitektur, die in Architektursichten dokumentiert wird.

Für die System- und Softwarearchitektur müssen Programme verwendet werden die kostenfrei sind oder durch die Hochschule zur Verfügung gestellt werden.

Beipielhaft können folgende Programme verwendet werden:

  • PapDesigner
  • MS Visio
  • Clickcharts
  • Dia
  • XMind
  • FreeeMind


Für den Ablauf der Legosortiermaschine wurde mit der Software PAP-Designer ein Ablaufplan erstellt. In der neben stehenden Abbildung 3 ist ein Auszug zu sehen.

Das Dokument ist unter folgendem Link abrufbar:

Ablaufplan


Dateien sollten nicht als PDF oder Bilder gespeichert werden um nachfolgenden Gruppen die Weiterbearbeitung und Ergänzung zu ermöglichen.


MATLAB Dokumentation

Spezifikations-ID Anforderungs-ID Anforderungstitel Beschreibung der Spezifikation Arbeitsergebnis
0530 REQ10.3310 Dokumentation von Software Geeignete Software zur Dokumentation des Quellcodes (zb LaTeX oder Doxygen) MATLAB mit m2html
0531 REQ10.3311 Dokumentation von Software Video zur Bedienung von m2html Videoanleitung


Abbildung 4: m2html Übersicht
Abbildung 5: m2html Funktionsbeispiel

Die MATLAB Dokumentation wurde mit m2html erstellt. Es handelt sich dabei um ein doxygen-ähnliches Werkzeug, welches die Quelldateien eines Projektes automatisch analysiert und eine im Webbrowser benutzbare Dokumentation erstellt. Hierbei werden für jede Quelldatei Funktionsname, Kopf, Eingabe- und Ausgabeparameter, sowie Zugriffe von und auf andere Funktionen im Projekt untersucht und übersichtlich dargestellt. Zu den Funktionszugriffen wird optional auch ein Graph erstellt, wie in ABB gezeigt. Da das Tool für eine sehr alte MATLAB-Version geschrieben wurde, sind einige Funktionen, unter anderem die Benutzeroberfläche zur einfachen Bedienung nicht mehr vollständig benutzbar. Zudem musste der Algorithmus zur Code-Analyse an einigen Stellen leicht abgeändert werden, um mit den neu erstellten Richtlinien zur Codegestaltung zu funktionieren. Weitere Änderungen können falls nötig in mfileparse.m vorgenommen werden. Die Anleitung sowie ein kurzes Bedienungs- und Demovideo sind im SVN zu finden.

Nach der Erstellung der Dokumentation kann diese mit dem öffnen der index.html im Dokumentationsordner eingesehen werden. Die Übersicht sowie eine beispielhafte Funktionsinformation sind im folgenden in Abbildung 4 bzw. 5 dargestellt.

Arduino Dokumentation

Abbildung 6: PAP der Seriellen Steuerung
Spezifikations-ID Anforderungs-ID Anforderungstitel Beschreibung der Spezifikation Arbeitsergebnis
0530 REQ10.3310 Dokumentation von Software Geeignete Software zur Dokumentation des Quellcodes (zb LaTeX oder Doxygen) Arduino mit PapDesigner

Die Arduino Dokumentation beschränkt sich auf eine einzelne Datei, welche die via USB empfangenen seriellen Daten auswertet und die jeweiligen Elemente der Maschine entsprechend ansteuert. Da sich somit keine komplexen Zusammenhänge zwischen verschiedenen Dateien im Programm ergeben, wurde für den Code mithilfe von PapDesigner ein genauer Ablaufplan in PapDesigner erstellt. Das Ergebnis ist in Abbildung 6 zu sehen.


[3] [5] [6]

Dokumentation

Die Ergebnisse des Projektes wurden, wie in Spezifikation 0330 gefordert, nachvollziehbar und nachbaubar dokumentiert. Die gesamten Dateien und Unterlagen zur Dokumentation sind strukturiert in SVN gesichert und versioniert. Abbildung 7 zeigt eine Übersicht der Dokumentationen, die im WS18/19 anzufertigen waren. Mit Hilfe der dort dargestellten Tabelle wurde die Vollständigkeit sowie der Fortschritt der Dokumentation überprüft.

Abbildung 7: Übersicht der Dokumentationen


[2]

Zusammenfassung

Dieser Artikel beschreibt Punkte zur Hardware und Software, die auf die gesamte Anlage bezogen sind. Umgesetzte Punkte sind die folgenden:


Liste offener Punkte (LoP)

  • Separate Absicherung der 5V und 24V Stromkreise (Benötigte Materialien bereits in BOM eingetragen, Bestellung war zum Jahresende nicht mehr möglich)
  • Provisorischen Vorwiderstand der Vibrationsförderrinne durch Potentiometer ersetzen (Benötigte Materialien bereits in BOM eingetragen, Bestellung war zum Jahresende nicht mehr möglich)


Autoren

  1. Autor Nils Busemann
  2. 2,0 2,1 2,2 Autor Madlen Bartnick
  3. 3,0 3,1 Autor Jerome Wolf
  4. Autor Torben Müller
  5. 5,0 5,1 5,2 Autor Marc Eidhoff
  6. 6,0 6,1 6,2 Autor Tobias Brandt

Dies ist ein Unterartikel von der Legoteil_Zählmaschine, welcher die Zusammenführung der einzelnen Teile zu einer Einheit beschrieben.