Echtzeitdatenverarbeitung

Aufbau des Wareneingangs

Der Wareneingang besteht aus zwölf Sensoren und fünf Aktoren die jeweils über den Modbus angesteuert bzw. ausgelesen werden können. In der Abbildung 1 ist zu erkennen, wo sich welcher Sensor bzw. Aktor befindet und welche Bezeichnung dieser trägt.

EZDV Anlage

Abbildung 1 – Anlagenaufbau

Aufgabenstellung

Für den Wareneingang soll ein Linux Kernel-Modul geschrieben werden, welches jeden Sensor und Aktor mindestens einmal anspricht. Bei der Programmierung soll eine parallele Verarbeitung implementiert werden die mindestens drei parallele Prozesse (Tasks) beinhaltet.

Aufbau des Programms

Allgemeines

Das Programm soll ein Werkstück aus einem der Magazine auswerfen welches über das Laufband in Richtung Rutsche transportiert wird. Mit dem Passagesensor und dem Höhensensor wird die Farbe des Werkstücks bestimmt. Diese kann Silber, Rot oder Schwanz sein. Der Höhensensor bestimmt, wie rum das Werkstück liegt. Liegt das Werkstück falsch rum (mit geschlossener Seite nach oben) so wird es mit dem Auswerfer in die Rutsche geschoben.

Um dieses Verhalten aufzubauen wurden insgesamt 5 parallele Prozesse erstellt.

Control-Task

Der Control-Task ist der erste gestartete Task. Zunächst wird das gesamte System in eine Ausgangsposition gebracht. Dabei wird das Laufband eine Sekunde lang aktiviert und danach alle Magazine eingefahren. Die Reihenfolge ist wichtig, denn sollten die Magazine einfahren ohne ein aktives Laufband könnten sich Werkstücke im Magazin verkanten. Wenn alle Magazine eingefahren sind, wird das Laufband noch 10 Sekunden aktiviert um alle Werkstücke zu entfernen. Die Werkstücke auf dem Laufband werden als Ausschuss behandelt und somit mit dem Auswerfer in die Rutsche gebracht. Ein Mitarbeiter kann die Werkstücke im Anschluss manuell aussortieren.

Ist die Initialisierung des Systems abgeschlossen, ist dies betriebsbereit. Der Task wartet nun bis der Einschaltknopf von einem Mitarbeiter gedrückt wird. Da in der zur Verfügung stehenden Anlage kein Kontrollpult vorhanden ist, wurde der Höhensensor als Einschaltknopf genutzt. Der Höhensensor kann erkennen, ob ein Objekt sehr nah ist. Fasst man nun mit der Hand direkt unter den Höhensensor gilt dies als Einschaltsignal. Das Einschaltsignal wurde implementiert damit die Anlage nicht selbstständig anfängt zu arbeiten, ohne dass ein Mitarbeiter anwesend ist um die Anlage zu beaufsichtigen.

Nach dem Einschaltsignal startet der Control-Task alle weiteren benötigten Tasks und begibt sich selbst in eine Warteposition. Der Task wartet auf Informationen von den anderen Tasks. Er kann zwei Informationen erhalten: Eine vom Höhensensor-Task oder Farbsensor-Task mit dem Kommando „Full“. Das befiehlt dem Control-Task das System anzuhalten und erst wieder frei zu geben wenn die Rutsche wieder Platz für neue Werkstücke hat. Das System anhalten bedeutet, dass die Magazine nichts mehr auswerfen dürfen und das Laufband deaktiviert wird. Die andere Information kommt vom Magazin-Task mit dem Kommando „Empty“. Dabei wird das System ebenfalls angehalten, jedoch wird es erst mit dem Einschaltknopf wieder freigegeben.

Höhensensor-Task

Dieser Task bestimmt die Ausrichtung eines Werkstücks. Ein Werkstück kann falsch herum oder richtig herum liegen. Ein Werkstück liegt falsch herum wenn die geschlossene Seite des Werkstücks nach oben zeigt. Ermittelt wird dies mit einer Höhenmessung. Verwendet wird der binäre Ausgang des Höhensensors. Dieser gibt immer eine eins zurück wenn die Höhe einen gewissen Wert überschreitet. Wird die erste Kante des Werkstücks erkannt, folgen immer wieder neue Messungen. Nach 15 aufeinanderfolgenden Messungen die jeweils mit einer eins ausgewertet wurden, kann das Werkstück zweifelsfrei als falsch herum erkannt werden.

Ist das Werkstück Falsch herum, so wird überprüft ob in der Rutsche noch Platz ist. Wenn kein Platz in der Rutsche ist, wird dem Control-Task ein „Full“ gemeldet. Die Überprüfung der Rutsche hat hier seine ideale Position. So kann die Rutsche voll sein und jedes weitere Werkstück das richtig herum liegt wird durch geleitet. Erst bei einem Werkstück das falsch herum liegt wird der Anlagenteil angehalten.

Da ein Werkstück, dass falsch herum liegt, in den Ausschuss gehört, wird dem Auswerfer-Task nun mitgeteilt dass dieser das nächste Werkstück auswerfen soll indem eine Message mit „False Stone“ abgeschickt wird. Sollte der Anlagenteil angehalten sein, wird diese Message erst dann gesendet wenn der Anlagenteil wieder freigegeben wurde.

Dieser Task kann ein Werkstück ignorieren wenn es ihm mittels „Ignor“, als Message, mitgeteilt wird. Dies macht Sinn, wenn ein anderer Task dieses Werkstück bereits als Ausschuss wertet und selbstständig den Auswerfer betätigt.

Auswerfer-Task

Wird die Message „False Stone“ erkannt, wird der Auswerfer aktiviert. Dieser braucht eine kurze Zeit um zu reagieren. Die Zeit die der Auswerfer braucht um zu reagieren wird absichtlich nicht hier implementiert sondern in dem Task der die Message absendet. Aufgrund der unterschiedlichen Entfernungen zwischen Sensor und Auswerfer kann so jeder Task selber die Zeit des Auswurfs ermitteln. Ist der Auswerfer aktiviert schiebt er das Werkstück in die Rutsche. Damit das Werkstück auch wirklich in der Rutsche landet, wird der Rutschensensor verwendet der normalerweise nur feststellen kann, ob die Rutsche voll ist oder nicht. Es wird gewartet bis der Rutschensensor einen Stein erkannt hat, erst dann wird der Auswerfer wieder deaktiviert. Der Rutschensensor erkennt das Werkstück etwa dann, wenn es sich zu ca. 2/3 auf der Rutsche befindet. Somit ist das Gewicht des Werkstücks zum größten Teil in der Rutsche und es kann sicher in die Rutsche gleiten. Sollte ein Mensch in den Höhensensor greifen, so wird ein falsches Werkstück erkannt welches jedoch nie in der Rutsche ankommt. Damit der Auswerfer nicht ewig geschlossen bleibt, wird einer Sicherheitszeit von vier Sekunden der Auswerfer wieder deaktiviert. Wird in der Zeit wieder ein neues Werkstück ausgeworfen, so wird dies direkt mitverarbeitet. Durch ein menschliches eingreifen, kann es jedoch passieren, dass Werkstücke die richtig herum liegen auch ausgeworfen werden. Dieses sollte bei einer Sicherheitsbelehrung der Mitarbeiter berücksichtigt werden.

Farberkennung-Task

Die Farberkennung sorgt dafür, dass der Rest der Anlage weiß, was für ein Werkstück nun die Produktion betritt. Die Farberkennung wird mit 2 Sensoren realisiert. Dazu wird der Passagesensor und der Höhensensor genutzt. Zunächst wird der Passagesensor gepollt (immer wieder abgefragt) bis ein Werkstück erkannt wird. Dann wird der Zeitstempel gespeichert und es wird der Höhensensor gepollt. Nachdem das Werkstück auch den Höhensensor erreicht hat, wird hier ebenfalls der Zeitstempel gespeichert. Die Differenz beider Zeitstempel lässt auf die Farbe des Werkstücks schließen, da der Passagesensor jede Farbe zu einem anderen Zeitpunkt erkennt. Schwarz wird sehr spät erkannt, Silber liegt im mittleren Bereich und rot wird sehr früh erkannt. Sollte die Farbe des Werkstücks nicht erkannt werden können wird es direkt ausgeworfen. Die Höhenmessung des Werkstücks wird ignoriert indem dem Höhensensor-Task ein „Ignor“ gesendet wird. Auch hier wird geprüft, ob die Rutsche voll ist und der Anlagenteil wird ggf. angehalten.

Probleme

Die Farberkennung ist oft fehlerhaft, was mit der Platzierung der Sensoren zu begründen ist. Ein Werkstück aus dem Magazin 1 (das, zum Passagesensor, am weitesten entfernte Magazin) wird sehr genau erkannt. Die Zeitdifferenzen schwanken immer ein wenig, bleiben aber in einem gewissen Rahmen den man gut voraussagen kann. Gleiches gilt für Magazin 2. Werkstücke aus Magazin 3 sind dagegen schwer zu erkennen. Wirft das Magazin 3 ein Werkstück aus, läuft das Laufband bereits und der Stein wird schon beim Auswerfen weggezogen. Dabei entsteht eine Drehung des Werkstücks und es befindet sich noch eine kurze Zeit mit dem Rand auf einer Aluminium-Schiene. Das Werkstück verlässt diese Schiene erst nach dem erkennen durch den Passagesensor. Die Schiene verlangsamt das Werkstück ein wenig und somit verändert sich auch die Zeitdifferenz. Schwarze Werkstücke werden weiterhin gut erkannt jedoch silberne werden manchmal fehlerhaft als rot erkannt.

Lösungsvorschlag

Wir konnten das Problem über das Programm ein wenig eingrenzen. Jedoch 1 von 150 (0,6 %) der silbernen Werkstücke wird als rot identifiziert. Ein Umbau der Anlage wäre ratsam. Der Passagesensor und der Höhensensor sollten 0,5 cm bis 1,0 cm nach rechts verschoben werden. Nach Möglichkeit sollte der Höhensensor nochmals um 1,0 cm nach rechts verschoben werden. Dies sorgt dafür, dass ein Werkstück nichtmehr mit beiden Sensoren gleichzeitig erkannt werden kann. Aktuell wird ein Werkstück zwischen den Sensoren rechts mit dem Höhensensor erkannt und links mit dem Passagesensor.

Magazin-Task

Der Magazin-Task verwaltet alle Magazine. Zu Anfang wird nach einer neuen Message geschaut, die dem Task sagen könnte, dass nicht gearbeitet werden darf. Sollte der Befehl eingetroffen sein, wird der Task so lange blockiert bis ein Freigabebefehl kommt. Ohne einen blockierenden Befehl wird das aktuell aktivierte Magazin auf Inhalt geprüft. Sollte das Magazin einen Inhalt haben, wird es geöffnet und wieder geschlossen. Nun ist das Werkstück auf dem Weg und der Task beginnt von vorn. Befindet sich kein Werkstück in dem aktiven Magazin so wird in das nächste Magazin gewechselt. Es wird also nach dem FiFo-Prinzip gearbeitet. Stellt man sich vor, die Werkstücke sind keine runden Plastikteile, sondern BabyBel’s dann können diese verderben. Damit dies nicht passiert, wird jedes Magazin der Reihe nach abgearbeitet. Beim letzten Magazin kann der Mitarbeiter dann die ersten wieder auffüllen. Wurde das letzte Magazin geleert überprüft das System ob in einem anderen Magazin noch Werkstücke sind und beginnt ggf. dort erneut zu arbeiten. Sind alle Magazine leer, wartet das System 10 Sekunden auf neue Werkstücke. Nach Ablauf der Zeit wird der Anlagenteil deaktiviert indem eine Message mit „Empty“ an den Control-Task gesendet wird.

Beim Auswerfen eines Werkstücks werden die Sensoren geprüft, die registrieren ob der Arm ausgefahren ist oder nicht. So fährt der Arm des Magazins aus, wartet auf den Sensor und fährt wieder ein wenn der Sensor einen ausgefahrenen Arm registriert. Danach wird gewartet, bis der Arm wieder eingefahren wurde. Damit ist der Ablauf beendet und der Task beginnt seine Arbeit erneut.

Video

SDL-Diagramme

Organgene Makierungen zeigen ein Senden von Messages an einen anderen Task. Syntax:  [Taskname]: [Befehl]

Grüne Makierungen zeigen das Empfangen von Messages. Dabei wird der Task solange blockiert bis dieser einen Befehlt erhält. Die Syntax ist Identisch.

Rote Makierungen zeigen das Empfangen von Messages. Dabei wird der Task nicht blockiert!

EZDV-SDL Control

Abbildung 2 – Control-Task

EZDV-SDL Auswerfer

Abbildung 3 – Auswerfer-Task

EZDV-SDL Farberkennung

Abbildung 4 – Farberkennung-Task

EZDV-SDL Hoehensensor

Abbildung 5 – Höhensensor-Task

EZDV-SDL Magazin

Abbildung 6 – Magazin-Task

Schreib einen Kommentar