Dieser Funktionsbaustein aktiviert die Master-Slave-Kopplung mit dem Profil für eine elektronische Kurve, die in einer Kurventabelle angegeben ist.
Die Bibliothek unterstützt die folgenden Kurventypen (Bewegungsgesetze) über die CommonMotionTypes-Bibliothek (nähere Informationen finden Sie unter ST_MultiCam und ET_CamType im CommonMotionTypes-Bibliothekshandbuch):
Gerade
Einfacher Sinus
Allgemeines Polynom fünften Grades
Standard-Polynom fünften Grades
ST_MultiCam ist die gleiche Datenstruktur, die von PacDrive3 verwendet wird, und kann daher auch mit demselben Kurveneditor (CAM-Editor) erstellt werden.
WARNUNG | |
---|---|
Bei absolutem Slave-Startmodus kann das Umschalten zwischen zwei Kurven mit bestimmten Kombinationen von Master- und Slave-Skalierung über die Eingänge MasterScaling und SlaveScaling zu Sprüngen in der Slave-Position führen, wenn zum Zeitpunkt des Umschaltens kein geeigneter Offset der Slave-Position eingestellt wird.
WARNUNG | |
---|---|
Der Funktionsbaustein stellt einen Rampenmechanismus (Ramp-in) zur Verfügung. Der Rampenmechanismus wird durch Setzen des Eingangs SlaveStartMode auf RampIn aktiviert und über die Eingänge VelocityOffsetRampIn, AccelerationOffsetRampIn, DecelerationOffsetRampIn und JerkOffsetRampIn konfiguriert. Die Richtung der Rampe (Ramp-in) einer Modulo-Achse kann über den Eingang RampInDirection festgelegt werden.
Mit dem Funktionsbaustein können Sie interpolierte Kurven implementieren. Es sind vier Typen von interpolierten Kurven verfügbar:
Lineare Interpolation
Interpolation mit Poly5-Kurvengesetz
Lineare, nicht äquidistante Interpolation
Kubische Interpolation
Die Kurve wird aus einem Array von Kurvenpunkten interpoliert. Um eine interpolierte Kurve zu verwenden, erstellen Sie in Ihrer Anwendung ein Array mit mindestens 3 und höchstens 10000 Punkten.
Lineare Interpolation:
Das Array beschreibt die Funktion der Kurve (Y = f(X)). Die Werte, die Sie für das Array angeben, sind die Y-Koordinaten der Kurvenpunkte. Diese Y-Werte werden in gleichen Abständen entlang der X-Achse verteilt. (Das bedeutet, dass die X-Koordinaten durch den Funktionsbaustein bestimmt werden). Die Array-Werte sind den einzelnen Punkten von links nach rechts in aufsteigender Reihenfolge zugeordnet, beginnend mit dem niedrigsten Array-Index als niedrigstem X-Wert.
Interpolation mit Poly5-Kurvengesetz:
Das Array beschreibt die Funktion der Kurve in Bezug auf die Master-Position (X), die Slave-Position (Y), die Geschwindigkeit am Kurvenpunkt (V, entspricht der Steigung) und die Beschleunigung am Kurvenpunkt (A, entspricht der Krümmung). Verwenden Sie für X streng monoton ansteigende Werte.
Lineare, nicht äquidistante Interpolation:
Mit der linearen, nicht äquidistanten Interpolation können Sie eine Kurve mit Punkten definieren, die unterschiedliche X-Koordinatenabstände zwischen zwei aufeinander folgenden Punkten aufweisen. Verwenden Sie für X streng monoton ansteigende Werte.
Kubische Interpolation:
Im kubischen Interpolationsmodus können Sie nicht äquidistante Interpolationspunkte definieren, die für die Interpolation mit kubischen Splines verwendet werden. Äquidistante Interpolationspunkte können durch die explizite Definition von X- und Y-Werten angegeben werden. Verwenden Sie streng monoton ansteigende Werte für X. Ein natürlicher kubischer Standard-Spline wird für bis zu 100 Interpolationspunkte verwendet (Krümmung an Grenzpunkten ist gleich null). Dieser vorberechnete Algorithmus liefert eine kontinuierliche Krümmung. Bei mehr als 100 Interpolationspunkten wird eine kubische Spline-Interpolation von Hermite verwendet (keine kontinuierliche Krümmung). Vorberechnungen sind nicht erforderlich.
Um eine interpolierte Kurve zu starten, legen Sie den Eingang InterpolationPoints auf die Adresse des Arrays fest, in dem die Kurvenpunkte gespeichert sind. Wenn der Eingang InterpolationPoints ungleich null an einer positiven Flanke des Eingangs Execute ist, startet der Funktionsbaustein MC_CamIn eine interpolierte Kurve wie über den Eingang InterpolationParameter parametriert. Über den Eingang CamTableID bereitgestellte Daten werden ignoriert. Wenn der Eingang InterpolationPoints bei einer positiven Flanke des Eingang Execute gleich null ist, startet der Funktionsbaustein die Kurve und ignoriert die über den Eingang InterpolationParameter bereitgestellten Daten.
Der Datentyp MC_Interpolation_Parameter wird zur Parametrierung der interpolierten Kurve verwendet. Es handelt sich um ein Alias der Struktur ST_Interpolation_Parameter der MotionInterface-Bibliothek. Parametrierung:
udiNumCamPoints
Anzahl der mit Kurvenpunkten gefüllten Array-Einträge. Wenn das Array größer als die Anzahl der gefüllten Kurvenpunkte ist, werden zusätzliche Array-Elemente ignoriert.
lrMinMasterPosition und lrMaxMasterPosition
Bei einem Array zur linearen Interpolation wird der Positionsbereich des Masters über lrMinMasterPosition und lrMaxMasterPosition festgelegt. Der Kurvenpunkt im niedrigsten Array-Index entspricht lrMinMasterPosition. Der Kurvenpunkt im Array-Index, der über udiNumCamPoints festlegt wird, entspricht lrMaxMasterPosition. Die übrigen Kurvenpunkte sind gleichmäßig auf diese Master-Positionen verteilt. lrMinMasterPosition undlrMaxMasterPosition werden für die Poly5-Interpolation und die kubische Interpolation ignoriert.
etInterpolationMode
Diese Enumeration gibt den Interpolationstyp an.
YArrayLinear (Die Kurve ist eine gerade Linie zwischen den einzelnen Kurvenpunkten.)
XYVAArrayPoly5 (Polynom 5. Grades)
XYArrayLinear (Die Kurve ist eine gerade Linie zwischen jedem der Kurvenpunkte, der X-Wert kann nicht äquidistant sein)
XYArrayCubic (kubische Interpolation)
WARNUNG | |
---|---|
Weitere Informationen zur Parametrierung einer interpolierten Kurve über ST_InterpolationParameter finden Sie im MotionInterface-Bibliothekshandbuch.
Der Eingang MasterStartPosition wird bereitgestellt, um eine Kurve an der festgelegten Master-Position zu starten. Dieser Eingang wird ignoriert, es sei denn, der Puffermodus wird über MC_BufferMode auf StartAtMasterPosition gesetzt.
Wenn MC_CamIn mit dem Puffermodus StartAtMasterPosition gestartet wird, dann muss die Slave-Achse eine andere Kurve ausführen. Ist dies nicht der Fall, dann stellt MC_CamIn einen Fehler fest, ohne die Bewegung der Slave-Achse zu beeinträchtigen. Der über den Eingang MasterStartPosition bereitgestellte Wert muss innerhalb des Bereichs von MasterAsSeenBySlave liegen, der durch die aktuell ausgeführte Kurve definiert wird. Ist dies nicht der Fall, dann stellt MC_CamIn einen Fehler fest, ohne die Bewegung der Slave-Achse zu beeinträchtigen.
Wenn bereits ein anderer Auftrag nach der aktuell ausgeführten Kurve gepuffert wird, sobald MC_CamIn mit dem Puffermodus StartAtMasterPosition gestartet wird (Eingang Execute auf TRUE gesetzt), dann wird der gepufferte Auftrag auf CommandAborted gesetzt, als hätte der Funktionsbaustein mit dem Puffermodus StartAtMasterPosition die ausgeführte Kurve mit dem Puffermodus Aborting unterbrochen.
Wenn die ausgeführte Kurve das letzte Segment beendet (Ausgang EndOfProfile wird auf TRUE gesetzt), bevor die Position MasterStartPosition eines Funktionsbausteins mit dem Puffermodus StartAtMasterPosition erreicht wird, dann verhält sich die ausgeführte Kurve so, als wäre kein anderer Befehl gestartet worden.
Wenn die Position MasterStartPosition eines Funktionsbausteins mit dem Puffermodus StartAtMasterPosition erreicht wird, bevor die ausgeführte Kurve das letzte Segment beendet hat, dann verhält sich die ausgeführte Kurve so, als wäre sie durch den gepufferten Funktionsbaustein abgebrochen worden (CommandAborted wird auf TRUE gesetzt, EndOfProfile bleibt FALSE).
Wenn ein Funktionsbaustein MC_CamIn mit dem Puffermodus StartAtMasterPosition während der Ausführung einer ausgeführten periodischen Kurve ausgelöst wird und die ausgeführte Kurve das EndOfProfile erreicht, bevor die Position MasterStartPosition erreicht wird, dann „wendet“ die ausgeführte Kurve und setzt den Ausgang EndOfProfile für einen Zyklus auf TRUE.
Im nächsten Zyklus der ausgeführten periodischen Kurve wird die Position MasterStartPosition erreicht, bevor die ausgeführte periodische Kurve das EndOfProfile erreicht. Zu diesem Zeitpunkt wird die neue Kurve mit dem Puffermodus StartAtMasterPosition gestartet.
Die folgende Abbildung stellt dieses Verhalten dar:
Legende:
MSP = Position MasterStartPosition
SAMP = MC_CamIn mit Puffermodus StartAtMasterPosition wird ausgelöst
EOP = Position bei EndOfProfile
Wenn ein Funktionsbaustein MC_CamIn mit dem Puffermodus StartAtMasterPosition während der Ausführung einer einmaligen Kurve ausgelöst wird und die ausgeführte Kurve das EndOfProfile erreicht, bevor die Position MasterStartPosition erreicht wird, dann setzt die ausgeführte Kurve den Ausgang EndOfProfile auf TRUE und bleibt an der Position, als würde keine andere Kurve ausgelöst werden.
Wenn der Master „wendet“ und die Position MasterStartPosition erreicht wird, dann wird der Funktionsbaustein MC_CamIn mit dem Puffermodus StartAtMasterPosition gestartet. CommandAborted wird auf TRUE gesetzt, EndOfProfile bleibt FALSE.
Die folgende Abbildung stellt dieses Verhalten dar:
Legende:
MSP = Position MasterStartPosition
SAMP = MC_CamIn mit Puffermodus StartAtMasterPosition wird ausgelöst
EOP = Position bei EndOfProfile
MTA = Master “wendet”
Eingang |
Datentyp |
Beschreibung |
---|---|---|
Master |
Axis_Ref |
Verweis auf die Achse, für die der Funktionsbaustein ausgeführt werden soll. |
Slave |
Axis_Ref |
Verweis auf die Achse, für die der Funktionsbaustein ausgeführt werden soll. |
Execute |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE. Eine steigende Flanke des Eingangs Execute startet den Funktionsbaustein. Der Funktionsbaustein setzt die Ausführung fort, und der Ausgang Busy wird auf TRUE gesetzt. Dieser Funktionsbaustein kann während seiner Ausführung neu gestartet werden. Die Zielwerte werden zum Zeitpunkt des Auftretens der steigenden Flanke durch die neuen Werte überschrieben. |
CamTableID |
MC_CAM_ID |
Der Bezeichner der zu verwendenden Kurventabelle. Der Datentyp MC_CAM_ID ist ein Alias von ST_MultiCam der CommonMotionTypes-Bibliothek. Detaillierte Informationen finden Sie im CommonMotionTypes-Bibliothekshandbuch. |
BufferMode |
Standardwert: Aborting Puffermodus. Mögliche Werte:
Eine Beschreibung der Werte finden Sie unter MC_Buffer_Mode. |
|
Periodic |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE. TRUE startet den periodischen Modus für MC_CamIn. In diesem Modus wird die Ausführung der Kurve kontinuierlich wiederholt. FALSE startet die Kurve in einem Single-Shot-Modus (einmaliges Vorkommnis). Die Slave-Achsposition der nächstgelegenen Flanke (erster oder letzter Kurvenpunkt) wird eingefroren, wenn sie außerhalb des definierten Bereichs liegt, d. h. die Slave-Achse befindet sich im Stillstand (aber immer noch im Zustand SynchronizedMotion), wenn die Kurve außerhalb des definierten Bereichs liegt.
HINWEIS: Unabhängig davon, ob eine Kurve im periodischen Modus oder im Single-Shot-Modus gestartet wird, signalisiert sie EndOfProfile, und ein gepufferter Bewegungsauftrag (sofern ein solcher Auftrag existiert) wird aktiv, wenn EndOfProfile erreicht ist (selbst wenn die Kurve als periodisch definiert ist).
|
MasterScaling |
LREAL |
Wertebereich: Ein positiver LREAL-Wert Standardwert: 1 Der MasterScaling-Faktor wird verwendet, um die Position des Masters aus der Sicht des Slaves durch Multiplikation der Master-Position (im absoluten Startmodus) oder des Offsets der Master-Position (im relativen Startmodus) zu berechnen. |
SlaveScaling |
LREAL |
Wertebereich: -2147483648 bis 2147483647 Standardwert: 1 Der SlaveScaling des Slaves wird durch Multiplikation der Slave-Position, die sich aus der Kurve ergibt (im absoluten Startmodus), oder des Offsets der Slave-Position (im relativen Startmodus) angewendet. |
MasterStartMode |
Standardwert: Absolute Mögliche Werte:
Eine Beschreibung der Werte finden Sie unter MC_Master_Start_Mode. |
|
SlaveStartMode |
Standardwert: Relative Mögliche Werte:
Eine Beschreibung der Werte finden Sie unter MC_Slave Start_Mode. |
|
RampInDirection |
Richtung der Rampe (Ramp-in) für die Kopplung, wenn die Slave-Achse eine Modulo-Achse ist. Die Richtung ist die Richtung zum absoluten Ziel des Rampenmechanismus (Ramp-in) (dabei wird MC_CamIn als InSync angesehen) von der Position der Slave-Achse aus betrachtet, nicht die Y-Periode des Kurvenprofils. Wenn die Slave-Achse keine Modulo-Achse ist, haben die Werte für diesen Eingang keine Auswirkung. Standardwert: PositiveDirection Mögliche Werte:
Eine Beschreibung der Werte finden Sie unter MC_Direction. |
|
VelocityOffsetRampIn |
LREAL |
Wertebereich: -2147483648 bis 2147483647 Standardwert: 0 Geschwindigkeits-Offset für Rampenmechanismus (Ramp-in) in Benutzereinheiten. |
AccelerationOffsetRampIn |
LREAL |
Wertebereich: Ein positiver LREAL-Wert Standardwert: 0 Beschleunigungs-Offset für Rampenmechanismus (Ramp-in) in Benutzereinheiten. |
DecelerationOffsetRampIn |
LREAL |
Wertebereich: Ein positiver LREAL-Wert Standardwert: 0 Verzögerungs-Offset für Rampenmechanismus (Ramp-in) in Benutzereinheiten. |
JerkOffsetRampIn |
LREAL |
Wertebereich: Ein positiver LREAL-Wert und null
Standardwert: 0 |
InterpolationPoints |
POINTER TO BYTE |
Speicheradresse eines Arrays mit einer Länge von 3 bis 10.000. Der Array-Typ richtet sich nach dem Wert von etInterpolationMode für den Eingang InterpolationParameter, entweder ARRAY OF LREAL oder ARRAY OF ST_InterpolationPointXYVA. Wertebereich: 0 und 3 ... 10000 Standardwert: 0
HINWEIS: Der Wert muss derselbe sein wie für udiNumCamPoints von ST_InterpolationParameter, der vom Eingang InterpolationParameter verwendet wird. Detaillierte Informationen finden Sie im MotionInterface-Bibliothekshandbuch.
|
InterpolationParameter |
MC_Interpolation_Parameter |
Verwendet MC_InterpolationParameter für die Parametrierung einer interpolierten Kurve. Weitere Informationen finden Sie unter MC_InterpolationParameter. |
MasterStartPosition |
LREAL |
Wertebereich: -2147483648 bis 2147483647 Standardwert: 0 Position des Masters (aus der Sicht des Slaves) einer vorherigen Kurve, wenn eine neue Kurve aktiv wird. Dieser Eingang wird ignoriert, es sei denn, StartAtMasterPosition wird für MC_BufferMode verwendet. |
Ausgang |
Datentyp |
Beschreibung |
---|---|---|
InSync |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE.
|
Busy |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE.
|
Active |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE.
|
CommandAborted |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE.
|
Error |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE.
|
ErrorID |
Diese Aufzählung stellt Diagnoseinformationen zur Verfügung. |
|
EndOfProfile |
BOOL |
Wertebereich: FALSE, TRUE. Standardwert: FALSE.
|
RampInDuration |
TIME |
Gibt die verbleibende Zeit an, bis das Rampenverfahren (Ramp-in) abgeschlossen ist und der Ausgang InSync auf TRUE gesetzt wurde. |
Im Gegensatz zu den Spezifikationen von PLCopen Motion Control Part 1, Version 2.0 stellt die Bibliothek keinen separaten Funktionsbaustein MC_CamTableSelect zur Verfügung. Die Kurventabelle wird als Eingang von MC_CamIn angegeben.
Die Bibliothek stellt keinen separaten Funktionsbaustein MC_CamOut zur Verfügung. Ein ausgeführter Funktionsbaustein kann durch einen anderen Funktionsbaustein ersetzt werden.
Dieser Funktionsbaustein bietet eine hohe Flexibilität für absolute und relative Bewegungen. Beispielsweise besteht nicht zwangsläufig eine Beziehung zwischen dem Modulo eine Master-Achse (oder Slaveachse) und der Anwendungsperiode einer Kurve in X-Richtung (oder Y-Richtung). Daher können Offset-Korrekturen bei laufendem Betrieb vorgenommen werden, indem die Anwendungsperiode des Kurvenprofils leicht in X- oder Y-Richtung korrigiert wird. Dies wäre mit dem Achsen-Modulo nicht möglich, das nicht geändert werden kann, während die Achse einen Funktionsbaustein ausführt.
Die Funktionen FC_GetCamSlaveMovementFromGivenMasterForInterpolatedCam und FC_GetCamSlaveMovementFromGivenMasterForMultiCam der MotionInterface-Bibliothek unterstützen Sie bei der Wiederherstellung der Achsposition nach einer Unterbrechung oder einem Stopp einer Bewegung infolge eines erkannten Fehlers. Diese Funktionen berechnen die Zielposition, Geschwindigkeit und Beschleunigung einer Slave-Achse zum Zeitpunkt der Ausführung der Funktion, wenn diese Achse mit der Bewegung einer Master-Achse durch eine Kurve gekoppelt ist. Die Slave-Achse wird nicht bewegt oder ist anderweitig betroffen. Diese Funktionen können nur einmal aufgerufen werden, um die Startbedingungen für den Slave zu ermitteln, damit dieser nicht rampenförmig wird. Sie können nicht zyklisch zum fortlaufenden Lesen der Slave-Werte verwendet werden.