B&R - Lineare bzw. nicht lineare Kopplung zweier Achsen

ManAtWork!

Level-1
Beiträge
89
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes SPS-Forum,

ich hab da mal wieder eine Aufgabenstellung, die mir ziemlich schwer fällt in die Realität umzusetzen.

Dabei geht es um das lineare bzw. nicht lineare verfahren zweier Achsen zueinander:

Die Achsen bewegen jeweils eine Linearführung (mit einem Greifer darauf) die parallel zueinander ausgerichtet sind.
Sprich wenn Achse 1 auf 100mm steht und Achse 2 auf 90mm…dann haben die beiden Greifer zueinander einen Abstand von 10mm. Beide Achsen dürfen sich nie zu nahe bzw. zu weit voneinander entfernen sonst geht die Mechanik kaputt.

Nun muss die Anlage insgesamt 3 Positionen anfahren können. Diese fährt Sie immer zyklisch vor und zurück
( Pos 1. -> Pos2. -> Pos.3 -> Pos.2 -> Pos.1 -> Pos.2 -> Pos.3 -> Pos.2 usw. )

Zwischen Position 1 und 2 muss der Abstand zwischen den Greifern immer gleich bleiben (Abstand X ). Hier habe ich die MC_GearIn Funktion gefunden für die Kopplung der Achsen. Damit dürfte das wahrscheinlich ganz leicht funktionieren.

Zwischen Position 2 und 3 muss sich der Abstand jedoch während der Fahrt von Abstand X auf Abstand Y vergrößern bzw. verkleinern.

Wie kann ich sowas umsetzen? Muss ich dazu das Getriebeverhältnis zwischen den Beiden Achsen genau ausrechnen, damit am Ende beide Achsen die richtige Endposition haben? (Geht mit MC_GearIn anscheinend)
Das Problem ist…die Positionen können von Hand am Panel eingestellt werden. Die Übersetzung müsste also immer vor der Bewegung neu berechnet werden?

Oder mach ich mir hier zu viel Stress und sollte einfach beide Achsen auf eine Position starten (ohne Kopplung) und in einem schnell Task einfach nur prüfen ob die sich eventuell zu nahe kommen und dann einen eStop ausführen müssen?

Hat jemand schon mal solche Positionieraufgaben mit Achsen gelöst ?

Grüße
Dominik
 
Ich hatte so etwas mal vor Jahren mit einer MLD und Indradrive-Antrieben von Bosch-Rexroth. Dort habe ich das mit der Kurvenscheibenfunktion gelöst.
Da folgt der Slave dem Master an Hand der Vorgaben der Kurvenscheibe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Dominik,

im ersten Ansatz hätte ich auch gesagt mach dir eine Kurvenscheibe und los gehts. Aber Kurvenscheiben werden im AS festgelegt und können zur Laufzeit nicht mehr verändert werden. Wenn du sagst, dass sich der Abstand von Hand am Panel eingestellt werden kann wird das nicht funktionieren.

Ich würde alles mit gekoppelten Bewegungen machen aber statt MC_GearIn mit MC_BR_GearIn. Da kannst du dein Getriebeverhältnis auch während der Bewegung ändern.

Ich habe irgendwann mal eine Funktion für die Synchrone Zielankunft von mehreren Achsen geschrieben. Ich glaube ich habe damals die Entfernung zum Ziel aller Achsen genommen, die am weitesten entfernte wurde der Master in der Bewegung und alle anderen haben sich mit dem Verhältnis der Abstände als Getriebefaktor auf diesen aufsynchronisiert. Das wäre so ein Ansatz für Bewegung 2 <--> 3

Grüße

Markus
 
Hallo Leute,

vielen Dank für eure Antworten. Das mit der Kurvenscheibe funktioniert leider wirklich nicht, wenn man die Positionen einstellbar lassen muss.

@Markus: Ok aber das würde nur funktionieren, wenn die Achse auf Position 2 steht und dann auf Position 3 gefahren wird. Bevor der Fahrbefehl kommt müsste ich dann die beiden Endpunkte der Achsen anschauen und damit eine Übersetzung für den MC_BR_GearIn berechnen?

Während der Bewegung dürfte die Berechnung erheblich schwerer werden oder? Da sich beide Achsen ja theoretisch unterschiedlich schnell bewegen könnten? Und die Umschaltung müsste ja genau auf einer ganz bestimmte Position auf der Strecke sein, damit schlussendlich alle Achsen wieder gleich stehen bleiben ?

@blackpeat: Diese Funktion finde ich bei B&R leider nicht.

Grüße Dominik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Markus: Ok aber das würde nur funktionieren, wenn die Achse auf Position 2 steht und dann auf Position 3 gefahren wird. Bevor der Fahrbefehl kommt müsste ich dann die beiden Endpunkte der Achsen anschauen und damit eine Übersetzung für den MC_BR_GearIn berechnen?

Ja, das ist richtig. Aber mit welchem Befehl bewegst du denn die Achse von 1 auf 2? Du fährst ja auf eine Absolute Position oder? Dann kannst du doch wenn diese Positionsfahrt erledigt ist in einem Zyklus das alles berechnen und neu übergeben.

Done -> Berechnen / Getriebefaktor übertragen -> Warten bis bestätigt -> Nächster Fahrbefehl für Master

Während der Bewegung dürfte die Berechnung erheblich schwerer werden oder? Da sich beide Achsen ja theoretisch unterschiedlich schnell bewegen könnten? Und die Umschaltung müsste ja genau auf einer ganz bestimmte Position auf der Strecke sein, damit schlussendlich alle Achsen wieder gleich stehen bleiben ?

Ja ja, theoretisch... ;) Wie schnell fahren deine Achsen wirklich und wie viel weg verlierst du in der Zeit in der du berechnest und umschaltest? ( Geschätzt 3 Zyklen incl. Übertragung zum Acopos )

Warum muss die Umschaltung auf einer ganz bestimmten Position erfolgen? Du hast doch zwei absolute voneinander unabhängige Wege zu fahren. Das Ziel ist das gleiche, nur der Startpunkt ist ein anderer. Und die Achse die länger braucht um ans Ziel zu kommen gibt das Tempo vor.
 
Aber mit welchem Befehl bewegst du denn die Achse von 1 auf 2? Du fährst ja auf eine Absolute Position oder?

Ich würde die fahrten zwischen 1 <--> 2 entweder mit dem MC_GearIn oder eben mit dem MC_BR_GearIn mit einem Getriebeverhältnis von 1:1 ansteuern.
Die Master-Achse würde dann die absolute Bewegung durchführen und die Slave-Achse synchron folgen, jap (soweit zur Theorie.....programmiert hab ich ja noch nichts :ROFLMAO:)

Mein erstes Ziel wäre so wie du das beschreibst. Erstmal auf Position 2 ankommen, dann wenn alles neu Berechnet wurde einen erneute Bewegung auf Position 3 starten.

Bei unseren Anlagen mit einer Achse haben wir jedoch die Möglichkeit eine angefahrene Position zu überspringen und die nächste anzufahren. (Spart in diesen Anlagen eben enorm viel Zeit bzw. wir bekommen des Nennstrom der Servos runter)
( Fahre auf Warteposition -> Wenn Werkzeugbereich während der Fahrt frei -> Fahre mit hoher Geschwindigkeit ins Werkzeug ).

Hier müsste ich ja aus der Bewegung von Position 1 auf Position 2 während der Fahrt bei einer beliebigen Position ( anderer Startpunkt ) die Position 3 mit dem anderen Abstand anfahren.

Ich kann mir das irgendwie nur schwer vorstellen mit dieser Berechnung während der Fahrt. :rolleyes::rolleyes:

Wenn man stehend von Position 2 auf Position 3 fährt...dann wäre das ja eigentlich nichts anderes als ein simpler 3 Satz ?

Gruß Dominik
 
Wenn ich die Aufgabenstellung richtig deute,
- hast Du es mit 6 Positionen zu tun: Positionen 1..3 von Achse A und Positionen 1..3 von Achse B
- besteht das eigentliche Problem darin, die Eingaben/Vorgaben des Bedieners zu überwachen/begrenzen/korrigieren.
Wenn beide Achsen gleichzeitig starten und stoppen sollen,
- und dabei dieselbe Distanz zurücklegen, wird für beide Achsen dieselbe VorschubGeschwindigkeit vorgegeben
oder
- und dabei unterschiedliche Distanzen zurücklegen, berechnest Du die beiden verschiedenen VorschubGeschwindigkeiten.
Für die längere Distanz Dmax nimmst Du 100% der VorschubGeschwindigkeit (Fmax) und für die kürzere Distanz Dmin entsprechend Fmin = Fmax * Dmin / Dmax.
Natürlich wird es so sein, dass sich das Beschleunigen bzw. Verzögern an Rampen, die Länge der Distanzen, die maximal mögliche Verfahrgeschwindigkeit u.s.w. dahin gehend auswirken, dass die beiden Achsen zu unterschiedlichen Zeiten ihren EndPunkt erreichen. Wenn sich dieser Effekt nicht in tolerierbaren Grenzen hält, müssen die Achsen miteinander "interpolieren" - ich denke, das ist das, was Du mit Getriebeverhältnis meinst. Wenn das Getriebeverhältnis als Quotient aus 2 ganzen Zahlen anzugeben ist, wird man einen Weg finden müssen, diese beiden Zahlen optimal aus dem gewünschten Verhältnis zu ermitteln.

Gruss, Heinileini

PS:
Musst Du wirklich während der Positionierung berechnen?
Ist nicht schon vorher festgelegt, wie es weitergehen soll?
Werden denn einige der 6 ZielPositionen während der Ausführung eines Ablaufs geändert/verschoben?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier müsste ich ja aus der Bewegung von Position 1 auf Position 2 während der Fahrt bei einer beliebigen Position ( anderer Startpunkt ) die Position 3 mit dem anderen Abstand anfahren.

Ich kann mir das irgendwie nur schwer vorstellen mit dieser Berechnung während der Fahrt.


Du musst dich von der Seriellen Programmierung trennen.


Wenn du "im Flug" umschalten willst, brauchst du einen Parallelen Prozess der überwacht ob eine Fahrt ins Werkzeug möglich ist. Dann brauchst du einen definierten Entscheidungspunkt auf deiner Verfahrstrecke, spätestens wenn du diesen Erreicht hast muss feststehen ob du weiterfahren kannst oder nicht. Im Optimalfall ist dieser Entscheidungspunkt immer derselbe. Dieser Entscheidungspunkt muss, wie @Heinileini geschrieben hat, vor dem Einflussbereich der Rampen und sonstiger begrenzender Parameter liegen um einen optimalen Bewegungsfluss zu erhalten.

Wenn du während der Fahrt den MC_MoveAbsolute.Execute ein zweites mal triggerst mit neuen Parametern, erhältst du eine Ruckfreie Bewegungsumschaltung. Ebenso verhält es sich ja mit dem MC_BR_GearIn und den Getriebefaktoren. Aber wie Heinileini gesagt hat, müssen diese Verhältnisse Ganzzahlig sein. Aber auch das ist kein Problem eine Dezimalzahl in einen Bruch umzurechnen.
 
Nochmal vielen Dank für eure Antworten:

Ich denke, ich hab das Prinzip verstanden.

Ich starte eine lineare, synchrone Bewegung beider Achsen von Position 1 auf Position 2. Wenn kurz vor Position 2 die Bedingungen für das einfahren in Position 3 schon gegeben sind. Berechne ich das neue Verhältnis vom Entscheidungspunkt aus (könnte ja direkt Position 2 sein) und starte diese erneute Bewegung mit einem neuen Trigger am MC_BR_GearIn Baustein. Diese Triggerung dann eben am Entscheidungspunkt. Da sich beide Achsen in diesem Moment synchron Bewegen fällt die Variable "Geschwindigkeit" aus der Berechnung und ich kann mich nur auf die verschiedenen Distanzen für die Berechnung konzentrieren?

Ansonsten eben einfach immer auf Position 2 stehen bleiben -> Ausrechnen und dann auf Position 3 fahren.


@Heinileini: Theoretisch sind es 6 Positionen jap. So wie von dir beschrieben. Diese können aber dann nur im Stillstand der Anlage verstellt werden. Während dem Betrieb sind diese Positionen dann Fix.


Gruß Dominik
 
Da sich beide Achsen in diesem Moment synchron Bewegen fällt die Variable "Geschwindigkeit" aus der Berechnung und ich kann mich nur auf die verschiedenen Distanzen für die Berechnung konzentrieren?

@Heinileini: Theoretisch sind es 6 Positionen jap. So wie von dir beschrieben. Diese können aber dann nur im Stillstand der Anlage verstellt werden. Während dem Betrieb sind diese Positionen dann Fix.

@Dominik
Wenn die 6 Positionen
Pos1 von Achse A, Pos2 von Achse A, Pos3 von Achse A sowie
Pos1 von Achse B, Pos2 von Achse B, Pos3 von Achse B
vor dem Beginn des Verfahrens feststehen, dann kannst Du doch schon alles weitere "auf Vorrat" berechnen!
Sogar für die beiden Varianten "mit Stopp in Pos2" und "ohne Stopp in Pos2".

Die "variable Geschwindigkeit" - also unterschiedliche Geschwindigkeiten der beiden Achsen - hast Du doch immer, wenn beide Achsen unterschiedliche Distanzen in derselben Zeit überwinden sollen!? Also immer bei Fahrten von Pos2 nach Pos3 und umgekehrt.

Häwenaissuiikend!
Gruss, Heinileini
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Heinileini,

die Positionen sind vor Beginn der Automatik fest, das stimmt.
Ich wollte zuerst das Getriebeverhältnis auch immer ab der aktuellen Achsposition dynamisch berechnen.

Durch euch bin ich jetzt erst auf die deutlich einfachere Idee mit dem definierten Startpunkt gekommen.
Dann könnte ich natürlich alles schon auf "Vorrat" berechnen. und das Getriebeverhältnis immer an diesen definierten Punkten umschalten.

Ich werde das jetzt mal so wie beschrieben versuchen umzusetzen. Bin ich ja mal gespannt wie das dann mal als Code aussieht :ROFLMAO: Irgendwann muss mans ja lernen ;)

Gruß Dominik
 
Zuletzt bearbeitet:
Hallo Dominik,

im ersten Ansatz hätte ich auch gesagt mach dir eine Kurvenscheibe und los gehts. Aber Kurvenscheiben werden im AS festgelegt und können zur Laufzeit nicht mehr verändert werden. Wenn du sagst, dass sich der Abstand von Hand am Panel eingestellt werden kann wird das nicht funktionieren.

Ich würde alles mit gekoppelten Bewegungen machen aber statt MC_GearIn mit MC_BR_GearIn. Da kannst du dein Getriebeverhältnis auch während der Bewegung ändern.

Ich habe irgendwann mal eine Funktion für die Synchrone Zielankunft von mehreren Achsen geschrieben. Ich glaube ich habe damals die Entfernung zum Ziel aller Achsen genommen, die am weitesten entfernte wurde der Master in der Bewegung und alle anderen haben sich mit dem Verhältnis der Abstände als Getriebefaktor auf diesen aufsynchronisiert. Das wäre so ein Ansatz für Bewegung 2 <--> 3

Grüße

Markus

Das ist nicht korrekt...
Kurvenscheiben können online berechnet werden und jederzeit auf den acopos runtergeladen werden
 
Hallo an alle,

ich möchte noch folgende Aussage berichtigen:
"Aber Kurvenscheiben werden im AS festgelegt und können zur Laufzeit nicht mehr verändert werden."

Man kann sehr wohl Kurvenscheiben zur Laufzeit generieren.
Stichwort: MC_BR_CalcCamFromSections und MC_BR_DownloadCamProfileData.

Liebe Grüße,
Markus
https://www.ioswitch.at/
 
Zurück
Oben