Skip to main content

Bibliothek: Mechatronics

Tipp

Die Bibliothek Mechatronics ist als Beispiel gedacht für eine einfache (und auch nicht vollständige) Implementierung einer mechatronischen Einheit mit sequentiellem Ablauf. Sie erfüllt nicht alle Anforderungen, die eine komplette mechatronische Applikation haben könnte. Sie soll vielmehr ein Einstieg oder eine Basis für eine Applikation solchen Typs sein.

Das Kernstück des vorgestellten Mechatronic-Modells basiert auf der folgenden Modulstruktur:

Abbildung 65. Application Composer Beispiel Mechatronics
Application Composer Beispiel Mechatronics


Es wird bei jeder Maschine angenommen, dass sie aus mehreren mechantronischen Unterbaugruppen, welche beispielsweise jeweils einen Greifer repräsentieren, bestehen kann. Eine Unterbaugruppe wiederum teilt sich auf in seine Aktuatoren (bestehend aus der mechatronischen Einheit selbst, aber auch aus ihrer funktionellen Implementierung oder E/A-Verwaltung) und einem Programm-Manager. Der Programm-Manager soll die verschiedenen Zustände einer mechatronischen Unterbaugruppe verwalten, wie beispielsweise seinen Idle- oder Execute-Zustand. Schlußendlich werden diese Zustände in der Bibliothek durch Programmabläufe repräsentiert, welche die Aktoren bewegen oder andere notwendige Funktionen ausführen.

An dieser Stellen sollen kurz die verschiedenen Teile im Detail beschrieben werden. Bei der Verwendung der Bibliothek wird es in vielen Fällen notwendig sein, eigene Aktoren, Ablaufschritte oder Programmsequenzen zu implementieren, was hier ebenfalls erklärt werden soll.

  1. Aktoren Alle Module, cie Aktoren sein sollen, müssen von einem Funktionsbaustein implementiert werden, der seinerseits das Interface IActuator implementiert. Dieses Interface hat keine Methoden oder Eigenschaften und wird nur aus Gründen der Modulkompatibilität verwendet (siehe dazu die Dokumentation von IActuator in der Bibliothek). Für Implementierungen von Aktoren gibt es keine Regeln oder Einschränkungen, so dass die Bewegung oder Aktivierung eines solchen Aktors separat gemacht werden muss. Dies wird normalerweise durch die Implementierung eines Ablaufschritt-Moduls realisiert, welches Aktoren in einem Referenz-Steckplatz aufnehmen kann und sie dann als Teil eines Ablaufs in der gewünschten Art bewegen kann (beispielsweise durch die Verwendung zusätzlicher Interfaces realisiert).

  2. Ablaufschritte

    Es wird dringend empfohlen, die Implementierung von Ablaufschritten als abgeleitete Klassen des Funktionsbausteins StepBase auszuführen. Dieser stellt alle notwendigen Basisimplementierungen des Interfaces IProgramSequenceStep zur Verfügung. Siehe dazu die Dokumentation von IActuator in der Bibliothek. Bei der Verwendung der Basisklasse StepBase ist es dann nur noch notwendig die Methode Execute zu implementieren. Letztere wird dann vom Programmablauf zyklisch so lange aufgerufen, bis die Variable xDone der Basisklasse auf TRUE gesetzt wird. Zusätzlich sollte, solange der jweilige Ablaufschritt aktiv ist, das Flag xActive auf TRUE gesetzt werden. Die Verbindung zu Aktoren kann dann in beliebiger Weise implementiert werden (beispielsweise durch den vorgeschlagenen Referenz-Steckplatz (siehe 1.)

  3. Programmsequenz / Programm-Manager Eine Programmsequenz ist ein Submodul eines Programm-Managers, welche einen Zustand darstellt. Diese Zustände werden in Form einer OMAC-Status-Maschine verwaltet. Ihre Implementierungen basieren wieder auf der Methode „Execute“ (für Details , siehe die Implementierung in der Bibliothek). Die Implementierung eines solchen Programmablauf durch den Anwender ist jedoch in den meisten Fällen nicht notwendig. Die Art und Weise, wie das Verhalten der Status-Maschine im Programm-Manager implementiert ist und dadurch die Programmabläufe ausführt, soll jedoch hier kurz beschrieben werden:

    Es gibt zwei Arten von Status: Ausführende Status (Endung „ing“) und wartende/duale Status (restliche). Die wartenden Status werden durch externe Befehle beendet, wohingegen die ausführenden Status nach der Ausführung beendet werden. Die verfügbaren Befehle hängen von dem Status ab, in welchem der Programm-Manager gerade steht. Das OMAC-Status-Diagramm gibt dazu einen kleinen Überblick.

    Abbildung 66. OMAC Diagramm
    OMAC Diagramm


    Abbildung 67. Modul MovableBarrier
    Modul MovableBarrier


    Das Modul MovableBarrier ist folgendermaßen implementiert: Der zugehörige Funktionsbaustein MovableBarrier implementiert das erzeugte Interface IMovableBarrier. Dieses Interface definiert Methoden zum Bewegen einer (bildlichen) Schutzhaube, wobei IMovableBarrier seinerseits das Interface IActuator implementiert, so dass das Modul MovableBarrier als Aktor im Modulbaum unterhalb einer mechatronischen Baugruppe eingesetzt werden kann:

    Abbildung 68. Implementierung des Moduls MovableBarrier
    Implementierung des Moduls MovableBarrier


    Dieser Aktuator „MovableBarrier“ wird durch das Ablaufschritt-Modul MoveBarrierForTime bewegt, welches seinerseits in der folgenden Art und Weise implementiert ist:

    Abbildung 69. Implementierung des Moduls MoveBarrierForTime
    Implementierung des Moduls MoveBarrierForTime


    Der das Modul implementierende Funktionsbaustein MoveBarrierForTime leitet einfach von dem Basisfunktionsbaustein AC_MEC.StepBase ab, welcher in der Bibliothek enthalten ist. Dadurch implementiert der Funktionsbaustein MoveBarrierForTime bereits das Interface IProgramSequenceStep. Folglich kann das Modul MoveBarrierForTime als Ablaufschritt unter einem Programmablauf eingefügt werden. Die funktionelle Implementierung des Funktionsbausteins MoveBarrierForTime geschieht folgendermaßen: Durch die Definition eines Referenz-Steckplatzes für das Modul MoveBarrierForTime, welcher einen Aktor mit implementiertem Interface IMovableBarrier aufnehmen kann, bekommt dieser eine Verbindung zu einem bestehenden „MovableBarrier“-Aktuator. Die Bewegung dieses Aktors erfolgt schließlich in der Funktion Execute des Funktionsbausteins MoveBarrierForTime, welcher einfach die Methode zum (bildlichen) Bewegen der Schutzhaube aufruft. Diese Methode wird durch den referenzierten Aktuator, welcher IMovableBarrier implementiert, zur Verfügung gestellt. Weiterhin ist die Eigenschaft Done und die Variable xActive mit einem TON gekoppelt, so dass der „Bewegungs“-Funktionsbaustein IMovableBarrier solange zyklisch aufgerufen wird, bis eine vorgegebene Zeit (TON) abgelaufen ist und danach Done auf TRUE und xActive auf FALSE gesetzt wird. Die Eigenschaft Done ist Teil des Interfaces IProgramSequenceStep und meldet deshalb dem übergeordneten Programmablauf dass der nächste Ablaufschritt ausgeführt werden soll.

    Abgesehen von eigenen Implementierungen von Ablaufschritten stellt die AC_Mechatronics.library einige vorimplementierte Schritte zur Verfügung, welche für allgemeine logische Operationen verwendet werden können. Es wird zum Beispiel ein Schritt BranchOnBool bereitgestellt, welcher zwei Unterschritte/-zweige beinhaltet. Diese Unterschritte werden abhängig vom Wert einer booleschen Variable ausgeführt. Darüberhinaus sind in der Bibliothek AC_Mechatronics.library Ablaufschritte für parallele Abläufe, bedingte Sprünge oder einfache Warteschritte und viele weitere Aufgaben vorhanden.