# Geschwindigkeit und Beschleunigung



## Schnick und Schnack (5 Februar 2010)

Hallo Zusammen

Kleine Frage zur Servotechnik. (In diesem Falle ELAU)

Standard Motionbefehle sind ja entsprechend definiert, dass mann die Zielposition definiert (bzw. den Vorschub) die Sollgeschwindigkeit und die Beschleunigung. 

Nun meine Applikation erfordert es, dass nicht Geschwindigkeit und Beschleunigung definiert werden, sondern die Zeit, in welcher die Position angefahren werden muss. Zudem sind Vorschub und Zeit variabel. Das heisst, dass die Aufgabe sein kann, dass der Antrieb in zwei Sekunden 54° Vorschub erreichen soll. Im nächsten Schritt soll er in 1.75 Sekunden 76° Vorschub erreichen. Da die Beschleunigung UND die Geschwindigkeit als Unbekannte aus dem Positionsoffset und der Zeitdauer berechnet werden müssen, kann keine übliche Formel verwendet werden.

Mann könnte jetzt einer von beiden Werten fest definieren, nur habe ich damit nicht über das gesamte Bewegungsspektrum ein optimales Verhalten. 

Hat jemand eine Idee, wie mann diese Thematik angehen könnte??
Oder gibts sogar Bausteine (von X-Beliebigen Herstellern) die solche Funktionen errechnen können?

Bin für jeden Hinweis Dankbar


Grüsse Anis


----------



## Larry Laffer (5 Februar 2010)

Hallo,
du mußt in dem Fall dann halt Ziel-Position und Beschleunigung übergeben. Ggf. vielleicht auch eine maximale Geschwindigkeit.
Die jeweiligen Werte lassen sich ganz bequem durch Umstellen der zuständigen Formeln errechnen :

Geschwindigkeit = Strecke / Zeit
   und
Beschleunigung = Strecke / Zeit ^2

Hierbei solltest du aber beachten, dass du die physikalischen Grenzen deines Antriebs bzw. der bewegten Hardware nicht überschreitest. Das kannst du m.E. aber ganz einfach über ein Bediengerät abfangen und eventuelle "Fehl-Eingaben" anmeckern ...

Gruß
LL


----------



## Schnick und Schnack (5 Februar 2010)

Prinzipiell möchte ich ja aber eine Trapezpositionierung.

Indem dass ich eines der Beschleunigungsdreiecke falte und über das andere lege komme ich doch auf die Formel:

s= Vmax * (tges - tb)       leider nur s und tges bekannt.

Wenn ich jetzt, um immer ein gleichmässiges Trapez zu erhalten, definiere, dass für Beschleunigungsaufgaben immer 20% der Zeit zur Verfügung stehen wäre ja auch tb aus der Formel bekannt. Nämlich 0.2 * tges.
Damit könnte ich die Formel nach Vmax umstellen und mit dv und dt entsprechende Beschleunigung rechnen. Ist doch ähnlich der Lösung von Larry oder?

Spricht da etwas dagegen?


----------



## Larry Laffer (5 Februar 2010)

... damit übergibst du definitiv dann auch die max. Geschwindigkeit- das sehe ich aber nicht als Problem.
Entscheidender ist, ob bei deiner Beschleunigungs-Annahme der regler in der Lage ist zu folgen - das solltest du auf jeden Fall wissen ...

Gruß
LL


----------



## Schnick und Schnack (5 Februar 2010)

Gut des stimmt. Wobe des könnt ich ja als Grenzwerte errechnen und eine Meldung ausgeben wenn die a_max überschritten wird. Da es sich um eine Versuchsanlage handelt, und im Labor von Fachleuten bedient wird, wäre es ja schon fast zumutbar, die Rampenzeit (im Beispiel 20%) variabel zu gestalten.


----------



## Watchdog (5 Februar 2010)

Schnick und Schnack schrieb:


> s= Vmax * (tges - tb) leider nur s und tges bekannt.
> 
> Wenn ich jetzt, um immer ein gleichmässiges Trapez zu erhalten, definiere, dass für Beschleunigungsaufgaben immer 20% der Zeit zur Verfügung stehen wäre ja auch tb aus der Formel bekannt. Nämlich 0.2 * tges.
> Damit könnte ich die Formel nach Vmax umstellen und mit dv und dt entsprechende Beschleunigung rechnen. Ist doch ähnlich der Lösung von Larry oder?
> ...


 
Je nach Weg und Zeitvorgabe kann es auch sein das die Achse kein Trapez sondern ein Dreieck fahren muß! Einfach 0.2 *tges anzunehmen wird wohl nicht für alle Fälle funktionieren.

Diese Ganze Positionierung über Zeitvorgabe wird oft unterschätzt!
Da hier aber zumindest keine ruckbegrenzte Beschleunigung mit berücksichtigt werden soll/muß ist das mathm. wohl noch recht einfach in Griff zu kriegen.

Richtig ekelhaft würde es unter zusätzlicher Berücksichtigung der ruckbergrenzten Bechleunigung werden, dann wäre dies ohne wirklich komplexe Alogrithmen nicht lösbar. 
Nicht einfach mit ein paar Formeln - auch wenn es auf den ersten Blick simple ausschaut. Aber die Anforderung hast Du ja glücklicherweise nicht.


----------



## Markus (5 Februar 2010)

ich habe mich ende letzten jahres mit dem kram auseinandergesetzt, da müsste auch noch irgendwo ein beitrag rumgeistern - ich glaube bereich "programmierstrategieen"


also ich habe einen baustein geschrieben der mir nach den vorgaben der beschleunigung, verzögerung, strecke und geschwindigkeit das trapez, bei bedarf ein dreieck oder wenn die startgeschwindigkeit zu hoch ist sogar ein trapez und ein dreieck in die andere richtung (korrekturfahrt) berechnet.

ergebniss der ganzen rechnerei sind dann zeiten für die einzelnen phasen

phase-1 - beschleunigen (integriere a in v-soll)
phase-2 - konstantfahrt (v-soll unverändert)
phase-3 - verzögern (integriere -b in v-soll)

bei korrekturfahrten kommen die phasen 4-6 analog in die die andere richtung zum einsatz...

die phasen werden solange ausgeführt wie die zeit für sie berechnet wurde.

ich gehe mal davon aus das die MC bausteine von elau auch so arbeiten.

ich schiesse damit hydraulische und elektrische achsen (mit asm) bis auf ein paar zentel ins ziel. (läuft auf s7-300)

wäre es denn denkbar dass du für beschleunigung(a) und verzögerung(b) immer die selben (maximal mit der mechanik möglichen) werte nimmst?


die strecke die du fahren willst ist bekannt.
die zeit für die strecke auch.
die beschleunigung und die verzögerung auch.


die zeit für eine strecke bei v-max und den festen rampen auszurechnen ist kein problem.

wenn du jetzt v-max in einer schleife so lange verringerst bis die gerechnete zeit deiner vorgabe entspricht, dann hast kannst du diese v-max als v-soll verwenden.

ich gehe davon aus dass es einen eleganteren mathematischen weg als die schleife gibt, aber da komm ich grad auf die schnelle nicht drauf...


----------



## Grubba (5 Februar 2010)

Will mal hoffen, dass ich mich nicht verrechnet habe:

Dann ist:

tb = (tGes/2) +/- Wurzel(  (tGes/2)² - (SGes/a) )

tb = Beschleunigungszeit (und Verzögerungszeit)
tGes = Gesamtwunschzeit
sGes = Gesamstrecke
a = Beschleunigung

Durch Vorgabe von a und Weg und Zeit kann man die Zeit errechnen, in der beschleunigt wird.

Mit dieser Zeit und der Beschleunigung wird dann noch die Zielgeschwindigkeit errechnet (v=a*t)

Dann kann man der NC die Beschleunigung und Geschwindigkeit vorgeben und, so Gott will, wird die Zielposition in der Vorgabezeit erreicht.

Durch die quadratische Gleichung kommen zwei Lösungen raus, eine Lösung ist falsch.

Die Formel betrachtet nicht den Fall, bei dem kein trapezförmiger Geschwindigkeitsverlauf erreicht wird, sondern ein dreieckiger. Das 

müsste man dann nochmal getrennt ausrechnen.


----------



## Schnick und Schnack (8 Februar 2010)

Hallo zusammen

Aus den Beiträgen von Markus und Grubba entnehme ich, dass es kaum möglich ist ohne eine konstante Beschleunigung zu arbeiten. Ist zwar nicht gerade die schönste Variante. Aber wird wohl am ehesten zum Ziel führen. Ich habe allerdings immernoch so im Gefühl, dass ich aus der erforderlichen Strecke und der Zeit ein Sinnvolles Verhältnis rechnen könnte und so die Beschleunigung zumindest einigermassen Variabel gestalten könnte.


----------



## Grubba (8 Februar 2010)

```
Ich habe allerdings immernoch so im Gefühl, dass ich aus der erforderlichen Strecke und der Zeit ein Sinnvolles Verhältnis rechnen könnte und so die Beschleunigung zumindest einigermassen Variabel gestalten könnte.
```
 
Willst du die Beschleunigung variabel während der Bewegung einstellen? 

a) warum?
b) würde das die Elau denn überhaupt unterstützen?


----------



## Schnick und Schnack (8 Februar 2010)

Ne des meine ich nicht.

Ich habe nur unterschiedliche Anforderungen an Strecke und Zeit. 
Und je nach Bewegungskommando möchte ich die Beschleunigung Variabel auf die Anforderungen berechnen. 

Beschleunigung und Geschwindigkeit weis ich ja beides nicht. Und ich möchte beide Werte je nach erwartetem Vorschub und der dafür vorgesehenen Zeit optimal errechnen.


----------



## Grubba (8 Februar 2010)

> Beschleunigung und Geschwindigkeit weis ich ja beides nicht. Und ich möchte beide Werte je nach erwartetem Vorschub und der dafür vorgesehenen Zeit optimal errechnen.


 
??

Hab ich Dir doch beschrieben. Der Gleichung gibst Du die Beschleunigung vor. Die kannst Du Dir auswählen. Die Geschwindigkeit, die dann nötig ist, um in der Zeit x im Ziel anzukommen, wird dann wie beschrieben ausgerechnet. 
Die Beschleunigung und Geschwindigkeit übergibst Du der Elau und fertig ist.

Irgendwas musst Du vorgeben. Eine Gleichung, die beides ermittelt, gibt es so nicht, weil es ja unendlich viele Lösungen, bzw. Kombinationen aus Beschleunigung und Endgeschwindigkeit gibt, die die Gleichung (also erreichen der Position x in Zeit y) erfüllen. 
Also wähle Dir eine angemessene Beschleunigung aus, den Rest errechnet die Gleichung, Elau sorgt für die Bewegung.

Wenns sein muss, kann ich die Gleichung noch so umstellen, das die Geschwindigkeit vorgegeben wird, und die Beschleunigung errechnet wird.
Wenn ich Dich immer noch nicht verstanden habe, sag Bescheid.


----------



## Schnick und Schnack (9 Februar 2010)

Doch wir verstehen uns schon, haben nur aneinader vorbei geredet

Was Du in Deinem letzten Beitrag schreibst, wollte ich im Beitrag #9 sagen.
Dass ich halt eine Beschleunigung vorgeben muss. Ich möchte diese aber nicht fest vorgeben, sondern je nach Strecke/Zeit-Angaben eine für die aktuelle Bewegung sinnvolle Beschleunigung errechne. 

Sprich wenn ich in grosser Zeit eine kleine Strecke Fahren muss, reicht eine geringe Beschleunigung
Wenn ich aber in kurzer Zeit weit fahren soll, möchte ich die Beschleunigung höher ansetzen.

Das meinte ich mit variabler Beschleunigung. Und diese kann ich ja einfach aus einem Strecke/Zeit-Verhältnis bestimmen. Zumindest grob.

Jedenfalls Danke für die Hilfe. 


liebe Grüsse


----------



## Grubba (9 Februar 2010)

> Sprich wenn ich in grosser Zeit eine kleine Strecke Fahren muss, reicht eine geringe Beschleunigung
> Wenn ich aber in kurzer Zeit weit fahren soll, möchte ich die Beschleunigung höher ansetzen.


 
Das stimmt so nicht. 

Musst Du z.B. eine kleine Strecke in grosser Zeit fahren (s.o.), kannst Du entweder stark und kurz beschleunigen oder langsam und länger beschleunigen. Das gleiche gilt auch für den anderen Fall.



> Dass ich halt eine Beschleunigung vorgeben muss. Ich möchte diese aber nicht fest vorgeben, sondern je nach Strecke/Zeit-Angaben eine für die aktuelle Bewegung sinnvolle Beschleunigung errechne.


 
Ich weiss auch nicht, warum Du die Beschleunigung variabel gestalten musst. Ich würde bei einer Anlage eine Beschleunigung vorgeben, die für die Mechanik und Motoren ordentlich tragbar ist. Trotzdem würden die Achsen in-Time ankommen, vorausgesetzt, das keine zu hohen Geschwindigkeiten herauskommen.

Und wenn Du von "sinnvoll" sprichst, dann setz doch einfach eine "sinnvolle" Beschleunigung ein, der Rest wird doch automatische ermittelt.

Ich versteh manchmal meine Frau auch nicht, vielleicht gehts mir mit Dir genauso.....;-)


----------



## Markus (9 Februar 2010)

Schnick und Schnack schrieb:


> Sprich wenn ich in grosser Zeit eine kleine Strecke Fahren muss, reicht eine geringe Beschleunigung
> Wenn ich aber in kurzer Zeit weit fahren soll, möchte ich die Beschleunigung höher ansetzen.



das verstehe ich nicht.
was spricht dagegen immer mit der gleichen beschleunigung/verzögerung zu fahren? halt so das es für jede fahrt schnell genug ist, aber so das es die hw bzw. mechanik mitmacht...

es reicht doch wenn nur deine geschwindigkeit kleiner oder größer wird.
du kannst deine vorgegebene zeit doch damit einhalten indem du je nach zeitvorgabe und strecke nur auf die errechenete geschwindigkeit beschleunigst...

darf man wissen was das werden soll?
vielleicht kann ich es mir dann besser vorstellen was du da vorhast...


----------



## Grubba (9 Februar 2010)

Markus:


> das verstehe ich nicht.
> was spricht dagegen immer mit der gleichen beschleunigung/verzögerung zu fahren? halt so das es für jede fahrt schnell genug ist, aber so das es die hw bzw. mechanik mitmacht...


 
Grubba:


> Ich weiss auch nicht, warum Du die Beschleunigung variabel gestalten musst. Ich würde bei einer Anlage eine Beschleunigung vorgeben, die für die Mechanik und Motoren ordentlich tragbar ist. Trotzdem würden die Achsen in-Time ankommen, vorausgesetzt, das keine zu hohen Geschwindigkeiten herauskommen.


 
Markus und ich verstehen uns.....


----------



## Markus (9 Februar 2010)

ups da war einer schneller...


----------



## Flo (9 Februar 2010)

servus,
also ich würde bei so einer Aufgabe in eine solche richtung gehen (ist mit sicherheit noch nicht fehlerfrei, war nur mal so runtergetippt):

Wenn du eine Strecke gegeben hast, und die Zeit, in der du die strecke abfahren musst, würd ich halt hergehen und einen % Wert als Variable angegeben. Der % Wert (als Beispiel 25%) sagt dir: die ersten 25% der gegebene Zeit kannst du beschleunigen auf V_End (die Geschwindigkeit die notwendig ist um 50% der gegeben Zeit konstant zu fahren). und die restliche 25% der Zeit hast du zum verzögern.

geg:
s:=Strecke: 200mm
t:=Zeit für Strecke:4sec.
%:=%Wert:25%

dann:
V_end:=s/(t*2*%);
V_end:=200mm/(4sec*2*0,25) =100mm/s;
Acc:=V_end/(t*%);
Acc:=100mm/s/(4sec*0,25)=100mm/s²;
Dec:=V_end/(t*%);
Dec:=100mm/s/(4sec*0,25)=100mm/s²;

Müsste doch so in etwa funktionieren (den %Wert kann man ja dann auch noch in abhängigkeit zur gegebenen Strecke und Zeit bringen oder so).

(Vergiss bitte bei der Elau den Smooth-Faktor (falls du hier mit Servoantrieben fährst)nicht. Bei einem SmoothWert von 10 erhöht sich die benötigte Beschleunigungs-/Verzögerungszeit um 10%)


----------



## M_o_t (14 Februar 2010)

Hallo,

für mich wäre das ein Fall für den Multicam Baustein. Die Zeit bestimmt wie schnell die Leitachse laufen soll. Der Vorschub legt die Slavepunkte fest. 

Gruß

M_o_t


----------



## Larry Laffer (14 Februar 2010)

@Markus & Grubba:
Ich verstehe eure Diskussion hier nicht so recht ...
Ein Fahrbefehl, so wie ich ihn kenne könnte z.B. heissen :
Fahren nach Position 1 mit Beschleunigung A und max. Geschwindigkeit Z
ein anderer Fahrbefehl könnte heissen :
Fahren nach Position 2 mit Beschleunigung B und max. Geschwindigkeit Y
usw.
So wie ich das verstanden habe ist es das, was Schnick&Schnack machen will ... und das geht so ...

Es gibt aber allerdings auch Servo-Regler denen man einen erweiterten Fahrbefehl übergeben kann, der dann eventuell bewirkt, dass ab Position 3 mit Beschleunigung C und max. Geschwindigkeit X gefahren wird.

Gruß
LL


----------



## ybbs (14 Februar 2010)

Schnick und Schnack schrieb:


> Dass ich halt eine Beschleunigung vorgeben muss. Ich möchte diese aber nicht fest vorgeben, sondern je nach Strecke/Zeit-Angaben eine für die aktuelle Bewegung sinnvolle Beschleunigung errechne.



Wenn es sonst keine weiteren Anforderung gibt, ist die sinnvollste Beschleunigung die, welche die Mechanik am wenigsten stresst.

Unter diesem Gesichtspunkt drängt sich meines Erachtens folgende Variante auf.

Du kennst Die die zur Verfügung stehende Zeit sowie die Distanz. Somit kannst Du dir die Werte für ein Dreiecksprofil errechnen.

Ist hier die erforderliche Geschwindigkeit für das Dreieck kleiner der max. möglichen Geschwindigkeit, so hast du die Fahrparameter gefunden.

Ist ein Dreieck auf Grund der Geschwindigkeit nicht möglich, so kannst Du mit den Angaben über Distanz, Zeit, max. konstante Geschwindigkeit die erforderlichen Werte für Acc und Dec berechnen.


----------



## Oberchefe (14 Februar 2010)

> ist die sinnvollste Beschleunigung die, welche die Mechanik am wenigsten stresst.



Beschleunigung an sich ist selten das Problem, eher die Veränderung derselben(Jerk). Ein Dreiecksprofil bei der Geschwindigkeit ergibt ein Rechteckprofil bei der Beschleunigung. Schonender ist da ein Dreiecksprofil bei der Beschleunigung, welches durch ein S-Kurven-Profil bei der Geschwindigkeit erreicht wird. Nachteil: primitivere Regler können das nicht und die Spitzenbeschleunigung ist höher als bei Trapez(Geschwindigkeits-)profil, sprich der Regler muß mehr Strom liefern können(also im Zweifelsfall eine Nummer größer gewählt werden).
Ein Dreieck Geschwindigkeitsprofil bedeutet daß von der Beschleunigung direkt in die Verzögerung übergegangen wird, sprich die Beschleunigungsveränderung ist an der Spitze des Profils relativ stark und sollte möglichst vermieden werden.
Soll ohne S-Kurve gefahren werden ist ein guter Kompromiss üblicherweise 1/3 der Zeit Beschleunigung, 1/3 Konstantfahrt und 1/3 Verzögerung und für den Fall daß dies mal nicht geht Dreick zu fahren.


----------



## Schnick und Schnack (18 Juni 2010)

*Themenabschluss*

Hallo zusammen.

Die Anlage läuft nun wie gewünscht.
Ich habs mit einer virtuellen Masterachse gelöst.
Der Slave Positioniert nun anhand der Masterachse im Multi-Cam-Betrieb.

Wie es damals M_o_t schon empfohlen hat.

Passt super.

Danke


----------

