Zum Inhalt springen
MotionAby Dübon Engineering

Konzepte für Linearachsen

Was Sie über Achsen, Einheiten, Referenzfahrt, Bewegungen und Koordinatensysteme wissen müssen, um ein Achssystem mit MotionA zu programmieren.

Achsen und Achsnummern

Jede angetriebene Achse hat eine Nummer, beginnend bei 1. Alle Befehle der Python-API adressieren Achsen über diese Nummer. Im Programm aus dem Konfigurator müssen Sie die Nummern nicht kennen: axes["x"].no liefert sie zum Achsnamen.

Achsen ohne eigenen Antrieb – etwa die zweite Schiene eines Portals – sind Mitfahrer: Sie teilen den Kanal ihrer Führungsachse und tauchen in axes nicht auf.

Positionen, Hub und Einheiten

Mit der Systemdatei aus dem Konfigurator rechnen Sie in Metern: Position 0 ist der Hubanfang, axes[…].stroke das Hubende. Geschwindigkeiten, Beschleunigungen und Ruck gelten in derselben Einheit pro s, s² und s³.

Die Antriebe an der Maschine erwarten oft andere Einheiten, z. B. Motorumdrehungen. Dafür gibt es einen Skalierfaktor: Position, Geschwindigkeit, Beschleunigung und Ruck werden damit multipliziert – auch bei der Referenzfahrt. Ein Achsfaktor hat Vorrang vor dem globalen.

# Programm in Metern, Motor erwartet Umdrehungen: 1 m = 85 Umdrehungen (Beispielwert)
api.set_global_scaling(85.0)

# Achse 3 hat eine andere Steigung – ihr Faktor hat Vorrang
api.set_axis_scaling(3, 40.0)

Referenzfahrt

Nach dem Einschalten kennt eine Achse ihre Position nicht. Die Referenzfahrt (do_homing) fährt den Endschalter erst schnell, dann genau an und setzt dort den Nullpunkt. Erst danach sind Positionen verlässlich.

  • sensor_position_sign gibt die Richtung zum Endschalter an. In den Konfigurator-Beispielen sitzt er am Hubanfang: -1.
  • fast_speed und accurateSpeed bestimmen die beiden Anfahrten.
  • Mehrere Achsen referenzieren Sie nacheinander oder gleichzeitig mit asyncio.gather.

Bewegungen

Eine Bewegung beschreibt MVParams: Achse, Ziel, Dauer T und Grenzwerte. api.move() nimmt eine oder mehrere davon:

  • Gemeinsamer Start: Bei einer Liste werden alle Achsen vorbereitet und dann gleichzeitig gestartet. move() kehrt zurück, wenn alle angekommen sind.
  • Dauer: Ohne T fährt jede Achse so schnell, wie ihre Grenzwerte es erlauben. Mit gleichem T kommen alle Achsen gleichzeitig an – für Bahnen wie Diagonalen.
  • Grenzwerte: Geschwindigkeit, Beschleunigung und Ruck. Ohne Angabe gelten die globalen Werte (Standard 10, 20 und 100). Durch die Ruckbegrenzung fahren die Achsen weich an und ab.
# Beide Achsen starten gemeinsam und kommen nach 1,5 s gleichzeitig an
await api.move([
    MVParams(x.no, 0.4, T=1.5),
    MVParams(y.no, 0.1, T=1.5),
])

Wenn eine Bewegung nicht möglich ist

Passt eine Bewegung nicht zu den Grenzwerten – etwa ein zu kurzes T –, meldet die Steuerung einen Fehler für diese Achse, und move() löst MovementError mit den betroffenen Achsen aus. Abhilfe: T verlängern oder Grenzwerte erhöhen.

from multiaxes_control_motiona import MovementError, MVParams

try:
    await api.move(MVParams(x.no, 0.5, T=0.05))   # 0,5 m in 50 ms: zu schnell
except MovementError as e:
    print("Nicht ausführbar:", e)

Koordinatensysteme (FrameGraph)

MotionA beschreibt eine Maschine als Baum von Koordinatensystemen, dem FrameGraph. Jedes Koordinatensystem (Frame) hängt an einem anderen und kennt seine Lage relativ dazu. Bewegt sich ein Frame, bewegt sich alles mit, was daran hängt.

Für ein Raumportal sieht der Baum so aus:

Welt
└─ Gestell
   └─ Achse x  →  Schlitten x
      └─ Achse y  →  Schlitten y
         └─ Achse z  →  Schlitten z
            └─ Werkzeug (z. B. Greifer)

Genau diese Struktur steht in der Systemdatei aus dem Konfigurator: Jede Achse nennt ihre tragende Achse (parent), ob sie am Profil oder am Schlitten montiert ist (mount) und in welche Richtung sie fährt (dir). Daraus baut MotionA den FrameGraph für Simulation und Steuerung.

Was das für Ihr Programm heißt

  • Die Python-API arbeitet in Achskoordinaten: Sie geben je Achse eine Position auf ihrem Hub an.
  • Bei rechtwinkligen Portalen entspricht das direkt den Raumkoordinaten des Werkzeugs: x, y und z verschieben es entlang ihrer Richtung, ausgehend von der Stellung 0 aller Achsen.
  • Der Echtzeitkern kann Bewegungen auch relativ zu bewegten Frames planen, etwa zu einem Förderband. Diese Funktion ist in der Achs-API noch nicht freigegeben.