Beispielapplikation (Fliegende Säge)
Die Beispielapplikation mit einer einfachen fliegenden Säge wurde realisiert. Ein Messer wird während des Schnitts synchron zum Produkt laufen.
Um ein Verklemmen des Messers beim Herausfahren aus dem Material zu verhindern, wird die Synchronbewegung mit einer Offsetbewegung überlagert.
Die normale synchrone Bewegung wird über eine Kurvenfunktion an Kanal A realisiert. Anschließend wird die Offsetbewegung ebenfalls als Kurvenfunktion an Kanal B durchgeführt.
Das Beispiel beschreibt nur die synchrone Bewegung des Messers zum Produkt. Die Auf- und Abbewegung (Schneiden) des Messers ist nicht beschrieben. In diesem Beispiel wird die Auf- und Abbewegung nur in der Visualisierung simuliert.
Sollwerte aus Kanal A und B sowie Sollwert der Achse
Rote Kurve |
Sollwert aus Kanal A |
Blaue Kurve |
Sollwert aus Kanal B |
Schwarze Kurve |
Sollwert der Achse = Summe aus den Kanälen A + B |
Über das Cam Design Tool (siehe CAM Motion Editor integriert inEcoStruxure Machine Expert) werden die benötigten Kurven (Nockendiagramme) angelegt:
Kennlinie |
Beschreibung |
---|---|
1. StartCam |
Die Kurve aus der Ruheposition der Synchronphase starten. Dies wird nur beim Kaltstart ausgeführt. |
2. ContCam |
Die Kurve kontinuierlich in der Synchronphase durchlaufen. Rückfahrt zur nächsten Synchronphase oder zur Ruheposition durch einen Stopp. |
3. OffsetCam |
Die Kurve für eine Offsetbewegung des Messers überlagern. |
HINWEIS: Änderungen der Applikationsparameter werden während des Überschreibens in den Anfangswerten durchgeführt.
Die Beispielapplikation "Fliegende Säge" wird als Funktionsblock ausgeführt und in der Aktionslogik des Equipmentmoduls aufgerufen. Der Funktionsbaustein ist als Zustandsmaschine aufgebaut.
Zustandsmaschine (State Machine)
Beim Zuschalten des Eingangs iq_stApplicationItf.i_xEnable wird der Funktionsbaustein aktiviert und beim Wegschalten deaktiviert.
Nach der Initialisierung verzweigt die Zustandsmaschine in den State 10 und wartet auf den Eingang iq_stApplicationItf.i_xStart.
Bedingung |
Beschreibung |
---|---|
State 10 |
Abhängig vom Eingang iq_stApplicationItf.i_xWsSelect und der Variable iq_xWsPossible wird entweder ein Kaltstart, oder ein Warmstart ausgeführt. Der Eingang iq_stApplicationItf.i_xWsSelect wird über die Betriebsartenvorwahl des Modules gesetzt (AXM.ET_Cmd.AdditionalWs). Die Variable iq_xWsPossible setzt der Funktionsblock selbst, sobald die erste Dauerlaufkurve aktiv wird, und setzt ihn bei einem Stopp oder Funktionsbausteinfehler zurück. Zusätzlich kann iq_xWsPossible durch die Applikation zurückgesetzt werden. Kaltstart: Durch einen Kaltstart wird das Messer in die Startposition gefahren (i_lrRestPosition). Die Methode iq_fbSmgAddOn.TakePosJob() wird für die Kanäle A und B aufgerufen. Kanal A fährt in die Ruheposition und Kanal B einen eventuell vorhandenen Offset auf Null. Danach wird zu State 20 verzweigt. Warmstart: Wenn ein Warmstart angefordert wird und möglich ist, wird die Methode iq_fbSmgAddOn.DoWarmStart() aufgerufen. Dabei wird auf die unterbrochene Kurvenposition gefahren. Der Master muss zu diesem Zeitpunkt noch stehen. Danach wird zu State 100 verzweigt. |
State 20 |
Hier wird gewartet, bis der Kaltstart ausgeführt wurde. Dazu wird die Variable stRTDataTemp.xJobActive abgefragt. Dies ist eine Variable des SMG, die sich auf alle Kanäle bezieht. Ist der Kaltstart beendet, wird die Startkurve über die Methode iq_fbSmgAddOn.TakeMultiCamJob() in den Auftragspuffer geschrieben. Dieser wird auch unmittelbar gestartet, da sonst kein Auftrag in Bearbeitung ist. Danach wird zu State 30 verzweigt. |
State 30 |
Hier wird gewartet, bis die Startkurve aktiv ist (nur aktiv, nicht fertig). Dann wird die Dauerlaufkurve in den Auftragspuffer geschrieben. Über die Variable stRTDataTemp.stChannel_A.diCurrentJobId kann der gerade aktive Auftrag festgestellt werden. JobId ist ein Parameter, den der Anwender frei wählen kann. In diesem Beispiel sind folgende JobIds vergeben: oStartCam = 1 oContCam und OffsetCam Endless Mode = 2 oContCam und OffsetCam HighLimit Mode = 3 oContCam und OffsetCam RestPos anfahren = 4 Danach wird zu State 40 verzweigt. |
State 40 |
Hier wird gewartet bis die Dauerlaufkurve aktiv ist. Dann wird der Auftrag für die Offsetkurve in den Kanal B geschrieben. Danach wird zu State 50 verzweigt. |
State 50 |
Hier wird gewartet bis entweder der Eingang Start wegfällt oder sich die Abschnittlänge ändert: Start entfällt: Wenn der Start wegfällt, wird zwischen zwei Fällen unterschieden. Solange die Synchronphase andauert, sind die Dauerlaufkurve und die Stoppkurve gleich und ein direkter Wechsel zur Stoppkurve ist möglich. Ansonsten muss zuerst die aktuell laufende Dauerlaufkurve zu Ende gefahren werden und erst danach ist ein Wechsel in die Stoppkurve möglich. oSolange die Synchronphase andauert, werden die Aufträge für die Stoppkurve im Kanal A und die Offset-Stoppkurve im Kanal B abgesetzt. Wichtig ist auch, dass das Bit xTerminateCurrentJob gesetzt wird, um die aktuell laufenden Aufträge zu stoppen. Danach wird zu State 70 verzweigt. oNach der Synchronphase wird nochmals eine Dauerlaufkurve abgesetzt, aber mit aktivem HighLimit. Danach wird zu State 60 verzweigt. Abschnittlänge ändert sich: Wenn sich die Abschnittlänge ändert, wird zwischen den folgenden zwei Fällen unterschieden: oSolange die Synchronphase andauert, sind die neuen und die alten Kurven gleich und der Auftrag mit der neuen Kurve kann direkt in den Auftragspuffer geschrieben werden, mit dem Ergebnis, dass der alte abgebrochen wird. Der aktuelle Zustand verbleibt in State 50. oNach der Synchronphase wird zuerst ein Auftrag mit der alten Kurve mit aktivem HighLimit abgesetzt und danach wird zu State 90 verzweigt. |
State 60 |
Hier wird gewartet, bis die Dauerlaufkurve mit HighLimit aktiv ist und dann der Auftrag für die Stoppkurve abgesetzt. Danach wird zu State 70 verzweigt. |
State 70 |
Hier wird gewartet, bis die Stoppkurve aktiv ist. Dann wird das Stopp-Kommando quittiert (iq_stApplicationItf.iq_xActionCmdDone:= TRUE). Danach wird zu State 80 verzweigt. |
State 80 |
Hier wird gewartet, bis die Stoppkurve beendet ist. Danach wird zu State 10 verzweigt. |
State 90 |
Hier wird nach einer Abschnittlängenänderung gewartet, bis die alte Dauerlaufkurve beendet ist. Anschließend wird der Auftrag mit der neuen Abschnittlänge abgesetzt. Danach wird zu State 50 verzweigt. |
State 100 |
Hier wird gewartet, bis der Warmstart abgeschlossen ist, und danach wird der Auftrag für die Dauerlaufkurve abgesetzt. Danach wird zu State 50 verzweigt. |
Fehlerbehandlung in der Applikation
Fehler, die die Applikation feststellt, werden über die Variable stApplicationItf ebenfalls an das FB_SmgAddOnModule und von dort zum AxisModule gesendet. In der Methode CheckParameter des FB_FlyingShear wird dieser Mechanismus verwendet.
Die folgende Abbildung zeigt die Meldung, die durch eine ungültige Eingabe der Abschnittlänge erzeugt wird:
Außerdem steht eine einfache Visualisierung für die Applikation zur Verfügung:
Die Parameter CuttingLength und MasterSpeed können über die Visualisierung verändert werden. Die Variablen der Visualisierung werden in der Aktionslogik des Equipmentmoduls aktualisiert.