# PLCopen-Programmierung

Eine Liste der PLCopen-Funktionen sind in den jeweiligen PLCopen-Beschreibungen zu finden.

- Übersicht für PLCopen Part 1
- Übersicht für PLCopen Part 4

Innerhalb der Motion Control Platform (MCP) werden für die Bewegungsaufgaben verschiedene Funktionsbausteine (FB) zur Verfügung gestellt. Diese FB wirken auf eine einzelne Achse und werden über die SPS bedient. Jede Achse ist hierbei als s.g. Single Axis Interpolator (SAI) im System angelegt.

Solche Achsen können alternativ auch über das NC-Programm angesprochen werden, da ein solcher SAI wie eine herkömmliche Spindel im System angelegt wird. Für die nachfolgenden FBs stehen dazu spezielle NC-Befehle zur Verfügung, über die eine PLCopen konforme Programmierung in NC-Syntax möglich ist:

MC_Home | Referenzpunktfahrt
MC_MoveAbsolute | Achsbewegung auf absolute Position
MC_MoveAdditive | Relative Achsbewegung zur kommandierten Position
MC_MoveRelative | Relative Achsbewegung zur aktuellen Position
MC_MoveSuperImposed | Relative Achsbewegung zu einer bereits aktiven Bewegung
MC_MoveVelocity | Endlose Achsbewegung mit einer Geschwindigkeit
MC_Stop | Anhalten einer Achsbewegung
MC_GearIn | Getriebekopplung mit Übersetzung
MC_GearOut | Lösen einer Getriebekopplung
MC_Phasing | Phasenverschiebung von Kopplungen
MC_TouchProbe | Messen von Achspositionen

Folgendes Topologiebild zeigt die grundsätzliche Anordnung der SAI-(Spindel-)Achsen im Gesamtsystem:

Abb.: SAI-Achsen in CNC-Topologie

Eine SAI-Achse wird im NC-Programm in spindelspezifischer Programmiersyntax angesprochen. Dazu muss sie analog zur Konfiguration einer Spindel in der Kanalparameterliste mit ihrem Adressbuchstaben und weiteren Daten im NC-Kanal bekannt gemacht werden. Wichtige Einträge in den Kanalparametern sind insbesondere:

- spdl_anzahl (P-CHAN-00082) – Gesamtzahl der (SAI-)Spindeln
- bezeichnung (P-CHAN-00007) – Name der (SAI-)Spindel
- log_achs_nr (P-CHAN-00036) – Logische Achsnummer der (SAI-)Spindel

Weitere Informationen können der Dokumentation [1]-Kapitel: Konfiguration der Spindeln- und dem Kapitel Parametrierung von Spindeln entnommen werden.

Die PLCopen-Funktionen

- MC_MoveSuperImposed
- MC_GearIn
- MC_GearOut
- MC_Phasing
- MC_TouchProbe

erfordern zusätzliche spezifische SAI-Eigenschaften der (Spindel-)Achse, die in den Achsparametern konfiguriert werden. Die notwendigen Einstellungen können der Dokumentation [2]-Kapitel: Einstellungen für SAI- entnommen werden.

Im Folgenden wird zum jeweiligen NC-Befehl der zugehörige FB dargestellt. Die Syntax dieser NC-Befehle sowie die Einheiten der programmierten Werte lehnen sich dabei an die entsprechenden Eingangspins (VAR_INPUT) der zugeordneten FB's an.

`Allgemeine` Syntax`eines (SAI-)NC-Befehls:`
<Spindelname>[ <FB-Name> <Eingangspin1> <Eingangspin2> <Eingangspin n...> { \ } ]

Der Achsname zu Beginn des NC-Befehls adressiert die (SAI)-Spindelachse, die über den NC-Kanal angesprochen wird.

Die Beschreibungen der Eingangspins sowie der Einheiten und Wertebereiche können auch der Dokumentation [9] entnommen werden.

## Hinweis

Alle Werte der Eingangspins werden in metrischen Einheiten programmiert. In der Grundeinstellung müssen die Werte in den spezifizierten internen Einheiten (z.B. 0.1 µm) angegeben werden. Mit P-CHAN-00182 kann auf die Angabe der Werte in Standardeinheiten (z.B. mm) umgeschaltet werden.

Der Eingangspin "Execute" wird immer implizit durch die Programmierung des NC-Befehls belegt. Es ist daher in den NC-Befehlen kein eigenes Schlüsselwort für diesen Pin vorhanden.

Für eine übersichtliche Programmierung des Befehls über mehrere Zeilen kann innerhalb der Klammerung [...] das Zeilentrennzeichen '\' verwendet werden.

Die Schlüsselworte "Id" und "WaitSyn" für die Job-Synchronisierung im NC-Programm haben in der PLC keine enstprechenden PINs. Die beiden Schlüsselworte stehen ab der CNC-Version V3.01.3100.01 zur Verfügung

Standardmäßig werden PLCopen-Funktionen unabhängig von der übrigen NC-Programmbearbeitung ausgeführt. Eine Synchronisierung zwischen PLCopen-Einzelachsaufträgen und der Bahnbewegung erfolgt nicht.

Für die Synchronisierung der PLCopen-Funktionen mit dem Programmablauf können jedoch Wartebedingungen definiert werden. Hierfür existieren zwei Möglichkeiten.

1) Synchronisierung am Satzende:

Die Angabe des Schlüsselworts "WaitSyn" veranlasst die CNC, vor dem Weiterschalten in den nächsten NC-Satz auf den Abschluss des PLCopen-Auftrags zu warten. Sind in der NC-Zeile mehrere PLCopen-Aufträge programmiert, erfolgt die Weiterschaltung erst, sobald alle Aufträge, für die das Schlüsselwort "WaitSyn" angegeben ist, fertig sind.

Syntax`:`
<Spindelname>[ <FB-Name> [WaitSyn] <Eingangspin2> <Eingangspin n...> { \ } ]

## Programmierbeispiel

N10 G01 X100 F10000

N20 S[MC_MoveAbsolute WAIT_SYN POSITION=900000 …]

;Weiterschaltung in Satz N30 erfolgt sobald die Spindel S die ;Position 90° erreicht hat

N30 G01 X200 F100

2) Späte Synchronisierung:

Über das Schlüsselwort "Id" kann einem PLCopen Auftrag eine Job-ID zugeordnet werden. Mit dem Befehl #WAIT MC_STATUS SYN [ID<JobNr>] kann zu einem späteren Zeitpunkt auf das Ende des PLCopen-Auftrags gewartet werden.

Syntax`:`
<Spindelname>[ <FB-Name> [Id=..>] <Eingangspin2> <Eingangspin n...> { \ } ]

#WAIT MC_STATUS SYN [ID=.. { ID=.. } ]

Falls mehrere PLCopen-Aufträge mit identischen Jobnummern gestartet werden, so wird die Jobnummer der zuletzt beauftragen PLCopen-Funktion zugeordnet. Eine späte Synchronisierung auf Auftragsende ist dann nur für den zuletzt gestarteten Auftrag möglich.

## Programmierbeispiel

N10 G01 X100 F10000

N20 S[MC_MoveAbsolute Id100 POSITION=900000 …]

N30 G01 X200

N40 S2[MC_MoveVelocity Id200 Velocity=10000 …}

N50 G01 X300

N60 #WAIT MC_STATUS SYN [ID100 ID200]

; Weiterschaltung in Satz N70 erfolgt, falls Spindel S die

; Position 90° und Spindel S2 die Drehzahl 10°/s erreicht hat

N70 G0 X0

## Weiterführende Informationen

- Befehl MC_Home
- Befehl MC_MoveAbsolute
- Befehl MC_MoveAdditive
- Befehl MC_MoveRelative
- Befehl MC_MoveSuperImposed
- Befehl MC_MoveVelocity
- Befehl MC_Stop
- Befehl MC_GearIn
- Befehl MC_GearOut
- Befehl MC_Phasing
- Befehl MC_TouchProbe