Ein Projekt mit weiteren Maschinenmodulen erweitern

Beispiel 4

Fügen Sie dem Basisprogramm des Handbuchs ein zweites Förderband hinzu.

Lösung

Um ein neues Maschinenmodul hinzuzufügen, sind fünf Schritte erforderlich.

In dem Ordner POU sind alle verfügbaren Maschinenmodule enthalten. Der Code wird nicht kompiliert ("exclude from build"), außer er wurde dem Basisprogramm hinzugefügt. Das Maschinenmodul "Conveyor" wird also aus der Registerkarte POU des IEC-Editors kopiert und in der Registerkarte "Devices" unter "MachineModules" hinzugefügt.

Nachdem das Maschinenmodul unter MachineModules hinzugefügt wurde, wird empfohlen, es mit einem aufsteigenden Präfix neu zu benennen. Alle Maschinenmodule werden untereinander geordnet und entsprechend gefunden.

Der zweite Schritt ist die Definition des neuen Moduls. Die Definition findet direkt in PRG_AFW statt. Es wird empfohlen, das Muster der bereits vorhandenen Module zu verwenden und die Benennung entsprechend anzupassen.

Der dritte Schritt besteht darin, das neue Förderband zum Maschinenbaum hinzuzufügen. Dazu kann man den MachineTree aus dem PRG_AFW öffnen, den man in der Registerkarte "POUs" findet, dort das "fbConveyor_System" kopieren und dem MachineTree des PRG_AFW in der Registerkarte "Devices" hinzufügen.

Bitte beachten Sie, dass empfohlen wird, die Adressen so anzupassen, dass sie von oben nach unten aufsteigend zählen. Es ist wichtig, dass in der Ausführungsreihenfolge der Master "fbMasterStateMachine_System" zuerst ausgeführt wird. Es wird empfohlen, die Slaves in der gleichen Reihenfolge wie bei der Adressierung auszuführen.

Um die Anzeige der Ausführungsreihenfolge zu aktivieren, klicken Sie mit der rechten Maustaste auf einen Funktionsbaustein und wählen Sie "Display Execution Order", wie unten dargestellt.

Der vierte Schritt besteht darin, den Aufruf des fbConveyor in "Main" von PRG_AFW der Registerkarte "Devices" zuzuweisen. Kopieren Sie den Aufruf für das Förderband aus "Main" in der Registerkarte "POUs" und fügen Sie ihn zu "Main" in der Registerkarte "Devices" hinzu.

Der Aufruf für "FB_Conveyor_Linear" wird als neues Netz am Ende von "Main" hinzugefügt.

Das Programm ist mit diesen vier Schritten ablaufbereit. Die Schnittstellen müssen noch angepasst werden. Die Schnittstelle "interface_Axis" muss der neuen Achse zugewiesen werden, die zum MOVISUITE®-Projekt hinzugefügt werden muss. Nachdem die Achse in das MOVISUITE®-Projekt eingefügt wurde, muss das IEC-Projekt aktualisiert werden, damit die Achse im Programm verfügbar ist.

Die neuen Schnittstellen sind unter SEW_GWL und SEW_GWL_Internal zu finden:

Schließlich muss die neue Visu-Struktur zu GVL_Visu hinzugefügt werden, um die externe HMI verwenden zu können. Wenn keine HMI verwendet werden soll, kann der Eingang gelöscht werden und das Programm ohne externen Monitor laufen.

Ein nun voll funktionsfähiges Maschinenmodul ist dem Projekt hinzugefügt worden und kann verwendet werden. Für weniger komplexe Maschinenmodule wie das Förderband ist die Arbeit nun beendet. Die Maschine kann betrieben werden, eventuell müssen noch weitere Eingänge zugewiesen werden.

Beispiel 5

Fügen Sie ein zweites lineares Förderband zusätzlich zu dem in Beispiel 4 hinzugefügten Förderband ein. Erstellen Sie einen Arbeitsmonitor für das zweite lineare Förderband.

Lösung

Damit der Monitor für ein bestimmtes Förderband funktioniert, muss die Referenz auf dieses Förderband eingestellt werden. Der Monitor ist nicht notwendig, um das Maschinenmodul zu betreiben aber er vereinfacht die Diagnose und das Testen der Maschine. In Visu_Conveyer_Linear2 kann der Name unter "References" geändert werden.

Beispiel 6

Um auch den komplexeren AppType1 zu demonstrieren, wird bei dieser Übung ein Roboter zum Basisprogramm hinzugefügt.

Lösung

Das Maschinenmodul für den Roboter wird auf die gleiche Weise hinzugefügt wie das Förderband. Aus den Bausteinen wird der gesamte Ordner mit Multimotion_Gantry_XYZ kopiert und in der Registerkarte "Devices" zu den Maschinenmodulen hinzugefügt.

Der zweite Schritt ist die Definition des neuen Moduls, das in PRG_AFW deklariert werden muss. Es wird empfohlen, auch diesen Teil des Codes aus dem PRG_AFW der POE zu kopieren und in den PRG_AFW von Devices einzufügen.

Der dritte Schritt ist das Hinzufügen des fbRobotGantry_XYZ zum Maschinenbaum. Es wird empfohlen, die Struktur aus dem bestehenden MachineTree in die POEs zu kopieren und sie dem MachineTree unter "Devices" hinzuzufügen. Achten Sie auf die Ausführungsreihenfolge und stellen Sie sicher, dass die Adressen korrekt sind.

Der Roboter-FB muss in Main aufgerufen werden. Verwenden Sie den PRG_AFW unter POU als Vorlage, kopieren den FB-Aufruf und fügen ihn in "Main" in der Registerkarte "Devices" ein.

Nun ist das Maschinenmodul Robotics erfolgreich hinzugefügt worden und es muss nur noch die Schnittstelle bedient werden. Wenn das Portal mit seiner Achse zum MOVISUITE®-Projekt hinzugefügt und das IEC-Projekt aktualisiert wurde, finden sich die Schnittstellen unter SEW_GVL und SEW_GVL_Internal.

Damit ist nun auch ein Roboter Teil des Projekts. Er kann für Pick&Place-Aufgaben eingesetzt werden und folgt automatisch der gleichen Schrittfolge wie die beiden Förderbänder, die wiederum vom Mastermodul fbMasterStateMachine gesteuert werden.

Beispiel 7

Ändern Sie die Eingabe für die JogSpeed so, dass sie immer 10 % der Geschwindigkeit des Conveyor_Modulo beträgt. Fügen Sie eine Variable Dead_Hand_Grip hinzu und ändern Sie in "Main" die Logik, sodass JogPlus und JogMinus nur ausgeführt werden können, wenn die Variable Dead_Man_Grip = TRUE ist.

Lösung

In PRG_AFW wird eine neue Variable deklariert, die für den Dead_Man_Grip verwendet wird.

Mithilfe dieser Variablen und einfachen logischen Funktionen wird die Eingabe für den FB-Aufruf für das Förderband geändert. Dies hat den Vorteil, dass der Code leicht zu verstehen ist. Solange die Logik nicht zu kompliziert ist, ist es empfehlenswert, diese Art von Operationen direkt in "Main" zu verwenden.

Beispiel 8

Ändern Sie das Maschinenmodul fbMultimotion_Gantry_XYZ im Basisprogramm. Dieses Maschinenmodul prüft vor dem Entnahmeversuch des Roboters, ob sich das Produkt in der Entnahmeposition befindet. Es wird nicht geprüft, ob die Position zum Ablegen des Produkts frei ist. Erweitern Sie das bestehende Maschinenmodul so, dass mit einem Eingang angezeigt wird, ob die Ablageposition frei ist. Wenn die Ablageposition frei ist, soll der Roboter das Produkt ablegen, wenn die Position nicht frei ist, soll der Roboter in die Grundposition fahren und dort warten, bis die Position frei ist.

Lösung

Das Maschinenmodul wird dem Projekt auf die gleiche Weise hinzugefügt, wie in den vorangegangenen Übungen beschrieben. Die notwendigen Änderungen können im Modus "Production", im State "Execute" vorgenommen werden.

Zwei neue Variablen werden hinzugefügt. Eine Variable wird als Eingang verwendet, um anzuzeigen, ob die Place Position frei ist. Die zweite Variable wird als interne Flag verwendet, um zu prüfen, ob die nächste Bewegung von der Home Position zur Place Position oder zur Pick Position erfolgen soll.

Diese Variablen werden dann in der Pick-Sequenz verwendet:

Wenn das Produkt entnommen wurde, wird geprüft, ob es abgelegt werden kann. Wenn diese Prüfung erfolgt ist, wird zwischen 230 und 240 ein neuer Schritt eingefügt.

Durch diese beiden Änderungen im Programm, die beide in nur einem Modus und nur einem State vorgenommen werden können, wurde das Programm um eine Prüfung der Ortsbewegung erweitert.

In "Main" wird der Aufruf für den Roboter um eine Input-Variable erweitert.

Beispiel 9

Löschen Sie den Roboter_XYZ und ein Förderband aus dem Basisprojekt, sodass nur das Förderband und das Multimotion_Gantry_XYZ übrig bleiben. Ändern Sie den Suspend-Zweig so, dass das Förderband angehalten wird und der Roboter in die Ausgangsposition fährt, wenn die vorgeschaltete oder nachgeschaltete Maschine keine Produkte liefern oder aufnehmen kann. Wenn die Bedingungen für die Unterbrechung nicht mehr gegeben sind, soll die Maschine automatisch in die Produktionsausführung übergehen. Der Suspend-Zweig soll nur im Modus "Production" arbeiten.

Lösung

In diesem Fall sind verschiedene Ansätze möglich. Man könnte argumentieren, dass die State-Maschine durch das Master-Maschinenmodul gesteuert wird und alles bezüglich der der Schrittfolge, direkt auf dem Master geändert werden sollte. So könnte zum Beispiel ein Eingang mit dem zyklischen Stop verbunden werden, diesen Eingang "Suspend" nennen und ihn anzeigen lassen, sodass vor- oder nachgelagerte Maschinen blockiert sind. Im Folgenden werden zwei unterschiedliche Ansätze dargestellt.

Der erste Ansatz wird gewählt, um eine einfache Lösung zu erhalten. Das Maschinenmodul Multimotion_Gantry_XYZ und das Maschinenmodul Conveyer werden um einen Suspend-Eingang erweitert. Wenn dieser Eingang ausgelöst wird, fordern die Maschinenmodule ein "Suspend" vom Master an. Durch diese Programmierung werden die Gründe für den State-Wechsel sichtbar. Der Nachteil ist, dass für jedes hinzugefügte Maschinenmodul die Logik vor dem Master angepasst werden muss. Ein weiterer Nachteil ist, dass der Grund für den Suspend nicht wie beim zweiten Ansatz mit dem Event gesetzt wird.

Zunächst wird der Eingang "xSuspend" und der Ausgang "xSuspendRequest" deklariert und die Parameter für beide Maschinenmodule aktualisiert.

Auf dem Mastermodul fbMasterStateMachine wird ein neuer Eingang deklariert. Wenn dieser Eingang ausgelöst wird, wird die Maschine in den State "Suspend" versetzt.

In den einzelnen Maschinenmodulen werden ähnliche Änderungen vorgenommen. Die fbMasterStateMachine wird um drei Zustände in der Mode-Produktion erweitert, und der Zweig "Suspending" wird aktiviert. Das Robot_Gantry_XYZ_MuMo hat bereits einen Suspend-Zweig und ist nicht betroffen. Das Förderband wird mit Aktionen in den betroffenen Zuständen erweitert.

In fbMasterStateMachine Modus "Produktion", Status "Execute":

Im Conveyor Mode "Production", Status "Suspend":

Sowohl beim Roboter als auch beim Förderband wird der Eingang ausgewertet und der Ausgang in der Programm-Aktion auf "Cyclic" gesetzt:

Mit diesen Programmänderungen ist ein neuer Zweig aktiviert worden.

Der zweite Ansatz ist die Verwendung der "Events". Bei diesem Ansatz deklarieren wir die Variable Suspend in PRG_AFW erneut. Diese Variable ist nun global zugänglich. In einer realen Maschine würde diese Variable z. B. mit einem Binäreingang verbunden sein. Mit dieser Variable kann ein Event ausgelöst werden. Das Ereignis wird im FB_Conveyer unter "Events" ausgelöst.

Die entsprechenden Änderungen müssen in Robot_Gantry_XYZ_MuMo vorgenommen werden, wenn auch dort ein Suspend-Event ausgelöst werden soll.

Um aus "Suspended" herauszukommen, wenn der Auslöser nicht mehr vorhanden ist, muss der Befehl so eingestellt werden, dass er "Suspended" verlässt, wenn dies der Fall ist. Dies geschieht in MasterStateMachine im State "Suspended".

Zur besseren Lesbarkeit ist es auch möglich, lokale Variablen für xSuspend zu deklarieren, wie es im vorherigen Ansatz beschrieben wurde.

Der Vorteil dieses Ansatzes ist, dass die Reaktion auf einen Suspend-Befehl mit dem Maschinenmodul erfolgt. Wenn das Maschinenmodul in einer anderen Maschine verwendet wird, würde das gleiche Ereignis ausgelöst werden. Es ist wichtig, dass der Programmierer mit dem AFW vertraut ist, wenn Events verwendet werden. Die Events zwingen den Master in einen bestimmten State. Wenn dies bei der Erstellung des Programms nicht berücksichtigt wird, können unerwartete Reaktionen auftreten.