Beschreibung
Dieser Funktionsbaustein für Motion Control IRT_OB61 wird eingesetzt, um Sollwerte für eine virtuelle Leitachse zu generieren. Der Funktionsbaustein rechnet in jedem Aufrufzyklus (OB61-Task) eine Position entsprechend den Vorgaben für Geschwindigkeit und Beschleunigung ein.
Hinweis:
Die FB BM_MasterEngine Ausgangvariable kann als Eingangsvariable von BM_SyncIn
verwendet werden, es muss beachtet werden, dass Eingangsvariable von BM_SyncIn
32bit Winkel Wert ist und Ausgangvariable von BM_MasterEngine 9--31bit Wert
hat.
Parameter Eingang |
Datentyp |
Beschreibung |
Enable |
BOOL |
Leitachse starten |
CycleDuration |
USINT |
Auflösung der Leitachse, bei CPU300 umrechnen auf BYTE |
MaxVelocityPositive |
UDINT |
Maximale positive Geschwindigkeit, bei CPU300 umrechnen auf DWORD |
MaxVelocityNegative |
UDINT |
Maximale negative Geschwindigkeit (Betrag), bei CPU300 umrechnen auf DWORD |
StartPosition |
UDINT |
Startposition, bei CPU300 umrechnen auf DWORD |
Velocity |
DINT |
Sollgeschwindigkeit, Richtung über Vorzeichen |
Acceleration |
UDINT |
Betrag der Beschleunigung, bei CPU300 umrechnen auf DWORD |
Deceleration |
UDINT |
Betrag der Verzögerung, bei CPU300 umrechnen auf DWORD |
Jerk |
UDINT |
Sprung, bei CPU300 umrechnen auf DWORD |
Stop |
BOOL |
Kommando Stopp. Leitachse auf Stoppposition stoppen |
StopPosition |
UDINT |
Stoppposition für Kommando Stopp, bei CPU300 umrechnen auf DWORD |
StopVelocity |
UDINT |
Betrag der Stoppgeschwindigkeit für das Kommando Stopp, bei CPU300 umrechnen auf DWORD |
StopRapid |
BOOL |
Kommando Schnellhalt. Leitachse mit Schnellhaltverzögerung ohne Einhaltung einer Stoppposition stoppen |
StopRapidDeceleration |
UDINT |
Betrag der Schnellhaltverzögerung für das Kommando Schnellhalt, bei CPU300 umrechnen auf DWORD |
Parameter Ausgang |
Datentyp |
Beschreibung |
Done |
BOOL |
Leitachse aktiv |
StopDone |
BOOL |
Leitachse mit Kommando Stopp oder Schnellhalt gestoppt |
CyclePosition |
UDINT |
Leitachsposition, bei CPU300 is DWORD |
CycleVelocity |
DINT |
Beschleunigung der Leitachse |
CycleAcceleration |
DINT |
Beschleunigung der Leitachse |
Error |
BOOL |
Fehlerbit, Fehlerinfo ErrorID ist gültig |
ErrorID |
WORD |
ErrorID-Fehlerliste |
Der FB BM_MasterEngine rechnet in jedem zyklischen Aufruf eine Leitachsposition für die virtuelle Leitachse. Die BM_MasterEngine Ausgang Parameter CyclePosition kann mit BM_SyncIn Eingangsparameter einbinden, aber es muss Auflösung von CyclePosition auf Eingang Wert von BM_SyncIn umgerechnet werden, der Eingangswert von BM_SyncIn ist 32bit Winkel Wert und CyclePosition ist 9—31bit Winkel Wert.
Mit Enable = TRUE wird sofort im ersten Zyklus mit der Berechnung der Leitachsposition begonnen. Der Ausgang Done = TRUE bestätigt die aktive zyklische Berechnung. Der Ausgang Done = TRUE sollte mit Velocity = Null zur Aktivierung (Eingang Execute) der Funktionsbausteine BM_SyncIn genutzt werden.
In
Abhängigkeit der Eingänge Velocity, Acceleration, Deceleration und Jerk wird
eine Leitachsposition errechnet. Die Auflösung der Leitachsposition wird am
Eingang CycleDuration vorgegebenen (Auflösung 9-31 Bit).
Die gerechnete Leitachsposition wird am Ausgang CyclePosition ausgegeben.
Wenn der Eingang Stop = TRUE ist wird die Leitachse auf der StopPosition gestoppt. Dazu wird die Leitachse zuerst auf StopVelocity mit Deceleration und Jerk verzögert oder mit Acceleration und Jerk beschleunigt. Anschließend wird mit StopVelocity und Deceleration die StopPosition angefahren. Wenn die Leitachse gestoppt ist wird der Ausgang StopDone = TRUE gesetzt und der Ausgang Done = FALSE.
Wenn der Eingang StopRapid = TRUE ist, wird die Leitachse mit StopRapidDeceleration auf Geschwindigkeit null abgebremst. Es wird nicht die StopPosition angefahren. Wenn die Leitachse gestoppt ist wird der Ausgang StopDone = TRUE gesetzt und der Ausgang Done = FALSE gesetzt.
Zustandskontrolle
über BM_ReadStatus:
Aus Zustand: Alle Zustände.
Nach Zustand: -.
Empfohlene Task: Nur einsetzbar in OB61.
Ausführung
solange freigegeben:
Das Kommando wird solange ausgeführt wie Enable = TRUE ist. Mit Enable = FALSE
und einer CycleVelocity ungleich Null wird die Schnellhaltfunktion ausgelöst
und die CycleVelocity auf Null reduziert.
Eingang Enable:
Am Eingang Enable wird die Positionsberechnung freigegeben. Solange Enable =
TRUE ist wird die Leitachsposition errechnet und in die Achsvariable
eingetragen. Für eine definierte Leitachspositionierung ist daher zuvor die
Geschwindigkeit (Eingang Velocity) Null zu setzen oder ein Kommando Stopp (Eingang
Stop, StopRapid) auszuführen.
Eingang CycleDuration:
Am Eingang CycleDuration wird die Auflösung, 9-31 Bit, der Positionsberechnung
angegeben, z.B. 16-Bit = USINT#16 entspricht einem Wertebereich 0 .. 65535. Die
nachfolgenden Eingangsparameter haben einen Wertebereich entsprechend dieser
Vorgabe.
Eingang MaxVelocityPositive:
Maximale positive Eingangsgeschwindigkeit. Die Eingangsgeschwindigkeit wird auf
diesen Wert überwacht.
Einheit: [Inc/cycle] oder [Inc/Abtastung]
Eingang MaxVelocityNegative:
Maximale negative Eingangsgeschwindigkeit. Die Eingangsgeschwindigkeit wird auf
diesen Wert überwacht. Der Wert ist als Betrag vorzugeben.
Einheit: [Inc/cycle] oder [Inc/Abtastung]
Eingang StartPosition:
Startposition von der die Leitachse gestartet wird. Der Wertebereich ist die
vorgegebene Auflösung (Eingang CycleDuration).
Beispiel: CycleDuration=USINT#16 Bit, StartPosition=UDINT# 32767 entspricht
180° Winkel.
Einheit: [Inc]
Eingang Velocity:
Sollgeschwindigkeit der Leitachse in Inc/Abtastung. Die Richtung wird
entsprechend dem Vorzeichen bestimmt. Der Wert kann in jedem Zyklus geändert
werden. Der Wertebereich ist durch die vorgegebene Auflösung bestimmt (Eingang
CycleDuration).
Einheit: [Inc/cycle] oder [Inc/Abtastung]
Eingang Acceleration:
Beschleunigung der Leitachse in Inc/Abtastung² als Betrag. Der Wertebereich ist
durch die vorgegebene Auflösung bestimmt (Eingang CycleDuration) und den Betrag
des Einganges Velocity und StopVelocity.
Einheit: [Inc/cycle²] oder [Inc/Abtastung²]
Eingang Deceleration:
Verzögerung der Leitachse in Inc/Abtastung² als Betrag. Der Wertebereich ist
durch die vorgegebene Auflösung bestimmt (Eingang CycleDuration) und den Betrag
des Einganges Velocity und StopVelocity.
Einheit: [Inc/cycle²] oder [Inc/Abtastung²]
Eingang Jerk:
Sprung je Abtastung der Leitachse in Inc/Abtastung³ als Betrag. Der
Wertebereich ist durch die vorgegebene Auflösung bestimmt (Eingang
CycleDuration) und den Betrag der Eingänge Acceleration und Deceleration.
Einheit: [Inc/cycle³] oder [Inc/Abtastung³]
Eingang Stop:
Stop = TRUE startet das Kommando Stopp.
Die Leitachse wird auf der StopPosition gestoppt.
Eingang StopPosition:
Stoppposition für Kommando Stopp.
Der Wertebereich ist von der Auflösung (Eingang CycleDuration) abhängig.
Beispiel: CycleDuration=USINT#16 Bit, StopPosition=UDINT# 65535 entspricht 360°
Winkel.
Einheit: [Inc]
Eingang StopVelocity:
Stoppgeschwindigkeit für das Kommando Stopp.
Stoppgeschwindigkeit in Inc/Abtastung. Der Wertebereich ist abhängig von der
vorgegebenen Auflösung (Eingang CycleDuration).
Bei aktivem Kommando Stopp wird die Leitachse auf StopVelocity verzögert oder
beschleunigt. Ist die StopVelocity erreicht wird auf die StopPosition
positioniert. Der Eingang StopVelocity sollte sehr viel kleiner sein als die
Velocity.
Einheit: [Inc/cycle] oder [Inc/Abtastung]
Eingang StopRapid:
StopRapid = TRUE startet das Kommando Schnellhalt.
Die Leitachse wird mit StopRapidDeceleration auf Geschwindigkeit null
verzögert.
Wird anschließend StopRapid = FALSE wird sofort wieder auf die anstehende
Sollgeschwindigkeit (Eingang Velocity) beschleunigt.
Eingang StopRapidDeceleration:
Betrag der Stoppverzögerung für das Kommando Schnellhalt.
Stoppverzögerung in Inc/Abtastung². Der Wertebereich ist abhängig von der
vorgegebenen Auflösung (Eingang CycleDuration).
Einheit: [Inc/cycle²] oder [Inc/Abtastung²]
Ausgang Done:
Done = TRUE: Errechnung der Leitachsposition ist aktiv und Leitachse wurde
nicht gestoppt.
Ausgang StopDone:
StopDone = TRUE: Leitachse wurde mit Kommando Stopp (Stop) oder Kommando Schnellhalt
(StopRapid) gestoppt. Der Ausgang Done wird FALSE.
Ausgang CyclePosition:
Ausgabe der Leitachsposition mit dem Wertebereich der parametrierten Auflösung
(Eingang CycleDuration).
Einheit: [Inc]
Ausgang CycleVelocity:
Ausgabe der Leitachsgeschwindigkeit (in Inc/Abtastung) mit dem Wertebereich der
parametrierten Auflösung (Eingang CycleDuration). Der Wert wird parallel in der
Achsvariable (Eingang Master) hinterlegt und wird entsprechend der Richtung mit
Vorzeichen ausgegeben.
Einheit: [Inc/cycle] oder [Inc/Abtastung]
Ausgang CycleAcceleration:
Ausgabe der positiven oder negativen Leitachsbeschleunigung (in
Inc/Abtastung²). Der Wert wird entsprechend der Richtung mit Vorzeichen
ausgegeben.
Einheit: [Inc/cycle²] oder [Inc/Abtastung²]
Ausgang Error:
TRUE: Fehler
aktiv. Info an ErrorID gültig.
FALSE: Kein Fehler aktiv.
Ausgang ErrorID:
ErrorID |
ErrorID in Hexadez. |
Beschreibung |
0 |
16#0000 |
ungültige Fehlernummer, wenn Error = TRUE |
27 |
16#001B |
Stopposition des Virtual Masters ist größer als Cycleduration |
28 |
16#001C |
Deceleration des Virtual Master ist größer als StopVelocity |
29 |
16#001D |
Acceleration des Virtual Master ist größer als StopVelocity |
30 |
16#001E |
Jerk des Virtual Master ist größer als Deceleration |
31 |
16#001F |
Jerk des Virtual Master ist größer als Acceleration |
32 |
16#0020 |
Jerk des Virtual Master <= 0 |
33 |
16#0021 |
'Virtual Master: CycleVelocity > Maximum Velocity' |
37 |
16#0025 |
Wert muss eine 2-er Potenz sein – minimal 512 |
41 |
16#0029 |
Maximalgeschwindigkeit größer als halbe 'CycleDuration' |
108 |
16#006C |
Achstyp ist real – Funktion nicht möglich |
110 |
16#006E |
Achstyp ist virtuell – genutzt von BM_CreateMaster |
Auflösung der Geschwindigkeiten
Die Auflösung der Eingänge Velocity, StopVelocity ergeben sich aus der CycleDuration und der Abtastung (Aufrufzyklus des FBs).
Geschwindigkeit
in [U/min] =
Velocity[Inc]/Abtastung[ms] * 1[U]/2^CycleDuration[Inc] * 60000 [ms/min]
Geschwindigkeit [U/min] |
Velocity [Inc] |
CycleDuration |
Abtastung [ms] |
3000 |
3276 |
16 |
1 |
3000 |
6553 |
16 |
2 |
3000 |
13107 |
16 |
4 |
3000 |
26214 |
16 |
8 |
3000 |
107374182 |
31 |
1 |
3000 |
214748364 |
31 |
2 |
3000 |
429496729 |
31 |
4 |
3000 |
858993459 |
31 |
8 |
Auflösung der Beschleunigungen und Verzögerungen
Die Auflösung der Eingänge Acceleration, Deceleration und StopRapidDeceleration ergeben sich aus der CycleDuration und der Abtastung (Aufrufzyklus des FBs).
Beschleunigung
in [U/s²] =
Acceleration[Inc]/(Abtastung[ms])² * 1[U]/2^CycleDuration[Inc] *
1000000[ms²]/1s²
Auflösung des Rucks
Die Auflösung des Eingangs Jerk ergibt sich aus der CycleDuration und der Abtastung (Aufrufzyklus des FBs).
Ruck
in [U/s³] =
Jerk[Inc]/(Abtastung[ms])³ * 1[U]/2^CycleDuration[Inc] * (1000 [ms])³/1[s³]