Einfaches Verfahren der Achse über die PLC

GEFAHR

Dieses Beispiel setzt Simulationsachsen voraus – Verletzungsgefahr bei Verwendung von realen Achsen!

Dieses Beispiel erzeugt eine Achsbewegung. Bei der Verwendung von realen Achsen besteht eine Verletzungsgefahr durch Bewegung von Achsen.

  • Achten Sie darauf, dass weder Sie noch andere durch die Bewegung geschädigt werden, z. B. durch die Einhaltung eines geeigneten Sicherheitsabstandes.
  • Führen Sie keine Aktion aus, deren Folgen Sie nicht abschätzen können.

Voraussetzungen

PLC Bibliothek einbinden

1. Fügen Sie die Tc3_Mc3Ptp-Bibliothek dem PLC-Projekt hinzu. Hierzu im PLC-Projekt einen Rechtsklick auf References > Add library…
2. Im Add Library-Dialog die Tc3_Mc3Ptp-Bibliothek auswählen und über OK bestätigen.
Die Tc3_Mc3Ptp-Bibliothek wurde dem PLC-Projekt hinzugefügt. Funktionsbausteine und Datentypen der Bibliothek können jetzt verwendet werden.

PLC-Programm schreiben

Alle notwendigen Datentypen und Funktionsbausteine für ein einfaches PLC-Motion-Programm mit der MC3 sind in der Bibliothek Tc3_Mc3Ptp enthalten.

AXIS_REF

Je Achse wird eine Instanz vom Datentyp AXIS_REF benötigt, welche die Schnittstelle zwischen PLC und MC3 ist. Sie enthält alle Informationen zur Achse, die den MC-Funktionsbausteinen als Referenz mitgegeben werden.

MC_Power

Über den Funktionsbaustein MC_Power erfolgt die Freigabe der Achse und deren Bewegungsrichtung.

MC_SetOverride

Über den Funktionsbaustein MC_SetOverride kann der Geschwindigkeits-Override der Achse verändert werden. Standardmäßig ist der Faktor 1 (=100 %) hinterlegt, sodass eine Veränderung des Faktors optional ist.

MC_Reset

Mit dem Funktionsbaustein MC_Reset kann ein Fehler an einer Achse zurückgesetzt werden.

MC_MoveRelative

Mit dem Funktionsbaustein MC_MoveRelative kann die Achse um die definierte Distanz verfahren werden.

Einfache Programmierung

3. Öffnen Sie im PLC-Projekt unter POUs das MAIN(PRG).
4. Fügen Sie folgende Deklarationen ins MAIN(PRG) ein.
PROGRAM MAIN
VAR
    axis           : AXIS_REF;
    power          : MC_Power;
    setOverride    : MC_SetOverride;
    moveRelative   : MC_MoveRelative;
    reset          : MC_Reset;
    stop           : MC_Stop;
    enableAxis     : BOOL;
    enableOverride : BOOL;
    executeStop    : BOOL;
    executeReset   : BOOL;
    executeMove    : BOOL;
    velFactor      : LREAL := 1; // adapt override factor if necessary(1 corresponds to 100 %)
    distance       : LREAL := ???; // ToDo: set to a reachable position
    velocity       : LREAL := ???; // ToDo: set velocity for move

END_VAR
5. Fügen Sie folgenden Programmcode ins MAIN(PRG) ein.
power(
        Axis            := axis,
        Enable          := enableAxis,
        EnablePositive  := enableAxis,
        EnableNegative  := enableAxis,
        Status          => ,
        Error           => ,
        ErrorId         => );

setOverride(
        Axis            := axis,
        Enable          := enableOverride,
        VelocityFactor  := velFactor,
        Enabled=> ,
        Error=> ,
        ErrorId=> );

stop(
        Axis            := axis,
        Execute         := executeStop, // The command is executed with a positive edge.
        Deceleration    := , // If the value is <= 0, the deceleration
                             // parameterized with the last Move command is used.
        Jerk            := , // If the value is <= 0, the jerk parameterized
                             // with the last Move command is used.
        Done            => ,
        Busy            => ,
        Active          => ,
        CommandAborted  => ,
        Error           => ,
        ErrorId         => );

reset(
        Axis            := axis,
        Execute         := executeReset, // The command is executed with a positive edge.
        Done            => ,
        Busy            => ,
        Error           => ,
        ErrorId         => );

moveRelative(
        Axis            := axis,
        Execute         := executeMove, // The command is executed with a positive edge.
        Distance        := distance,
        Velocity        := velocity,
        Acceleration    := LREAL_CONST.DEFAULT, // If the value is LREAL_CONST.DEFAULT,
                             // the standard acceleration from the axis configuration is used.
        Deceleration    := LREAL_CONST.DEFAULT, // If the value is LREAL_CONST.DEFAULT,
                             // the standard deceleration from the axis configuration is used.
        Jerk            := LREAL_CONST.DEFAULT, // If the value is LREAL_CONST.DEFAULT,
                             // the standard jerk from the axis configuration is applied.
        BufferMode      := Tc3_Mc3Base.EBufferMode.Buffered,
        Done            => ,
        Busy            => ,
        Active          => ,
        CommandAborted  => ,
        Error           => ,
        ErrorId         => );
6. Passen Sie für den Aufruf vom moveRelative die Distanz und die Dynamiken entsprechend Ihrer realen Achse an, sollten Sie keine Simulationsachse verwenden.
7. Bauen Sie das PLC-Projekt.
Die Instanz axis des AXIS_REF sollte nun unter den PLC-Instanzen im Solution Explorer angezeigt werden.
8. Verknüpfen Sie die PLC-Instanz des AXIS_REF mit dem Achsobjekt im MC-Projekt (siehe Achsobjekt verknüpfen).
9. Aktivieren Sie das TwinCAT-Projekt Einfaches Verfahren der Achse über die PLC 1:. Loggen Sie die PLC ein Einfaches Verfahren der Achse über die PLC 2: und starten Sie diese Einfaches Verfahren der Achse über die PLC 3:.
10. Prüfen Sie, dass die beim moveRelative die vorgegebene Distanz mit den vorgegebenen Dynamiken angefahren werden kann. Passen Sie diese bei Bedarf an.
11. Wenn Sie sicher sind, dass keine Gefahr durch die beim moveRelative vorgegebene Bewegung ausgeht, können Sie der Achse die Reglerfreigabe erteilen, indem Sie die Variable enableAxis online auf TRUE schreiben.
12. Prüfen Sie, ob die Reglerfreigabe erfolgreich war (power.Status = TRUE) und beachten Sie die Hinweise zur Betriebsbereitschaft der Achse. Anschließend kann mit executeMove das Bewegungskommando aktiviert werden.
Über setOverride.Enable := TRUE kann das kontinuierliche Schreiben des Overrides aktiviert werden. Über velFactor wird der Override-Faktor verändert.
Über stop.Execute = TRUE kann bei Bedarf das Bewegungskommando vorzeitig gestoppt werden.
Im Falle eines Achsfehlers kann dieser über reset.Execute := TRUE zurückgesetzt werden.