Este bloque de funciones activa el acoplamiento maestro-esclavo con el perfil de una leva electrónica especificada en una tabla de levas.
Esta biblioteca admite los siguientes tipos de leva (leyes de movimiento) a través de la biblioteca CommonMotionTypes (para obtener más información, consulte ST_MultiCam y ET_CamType en la guía de la biblioteca CommonMotionTypes):
Línea recta
Seno simple
Polinomio de quinto grado general
Polinomio de quinto grado estándar
ST_MultiCam es la misma estructura de datos que utiliza PacDrive3, por lo que puede crearse con el mismo editor de levas.
ADVERTENCIA | |
---|---|
En el caso de la modalidad de inicio de esclavo absoluto, la conmutación entre dos levas con determinadas combinaciones de escalado de maestro y esclavo a través de las entradas MasterScaling y SlaveScaling puede provocar saltos en la posición del esclavo si no se establece una compensación adecuada de la posición del esclavo en el punto de conmutación.
ADVERTENCIA | |
---|---|
Este bloque de funciones incluye un mecanismo de rampa de entrada. El mecanismo de rampa de entrada se activa estableciendo la entrada SlaveStartMode en RampIn y se configura con las entradas VelocityOffsetRampIn, AccelerationOffsetRampIn, DecelerationOffsetRampIn y JerkOffsetRampIn. La dirección de la rampa de entrada de un eje de tipo módulo puede establecerse con la entrada RampInDirection.
El bloque de funciones le permite implementar levas interpoladas. Hay cuatro tipos de levas interpoladas disponibles:
Interpolación lineal
Interpolación con la ley de leva Poly5
Interpolación lineal no equidistante
Interpolación cúbica
La leva se interpola a partir de una matriz de puntos de la leva. Para usar una leva interpolada, cree una matriz en su aplicación con un mínimo de 3 puntos y un máximo de 10 000 puntos.
Interpolación lineal:
La matriz describe la función de la leva (Y = f(X)). Los valores que especifica para la matriz son las coordenadas Y de los puntos de la leva. Estos valores Y se distribuyen de forma equidistante a lo largo del eje X (lo que significa que el bloque de funciones determina las coordenadas X). Los valores de la matriz se asignan en orden ascendente a los puntos individuales de izquierda a derecha, empezando con el índice más bajo de la matriz como menor valor de X.
Interpolación con la ley de leva Poly5:
La matriz describe la función de la leva en términos de la posición maestra (X), la posición esclava (Y), la velocidad en el punto de la leva (V, corresponde a la pendiente) y la aceleración en el punto de la leva (A, corresponde a la curvatura). Use valores que aumenten estrictamente de forma monótona para X.
Interpolación lineal no equidistante:
La interpolación lineal no equidistante permite definir una leva con puntos que tienen diferentes distancias de coordenadas X entre dos puntos consecutivos. Use valores que aumenten estrictamente de forma monótona para X.
Interpolación cúbica:
La modalidad de interpolación cúbica permite definir puntos de interpolación no equidistantes que se utilizan para la interpolación con splines cúbicos. Los puntos de interpolación equidistantes pueden especificarse mediante la definición explícita de los valores X e Y. Utilice valores que aumenten estrictamente de forma monótona para X. El spline cúbico natural estándar se utiliza para hasta 100 puntos de interpolación (la curvatura en los puntos límite es igual a cero). Este algoritmo precalculado proporciona una curvatura continua. En el caso de más de 100 puntos de interpolación, se utiliza la interpolación de spline cúbico de Hermite (sin curvatura continua). No es necesario realizar cálculos previos.
Para iniciar una leva interpolada, seleccione para la entrada InterpolationPoints la dirección de la matriz en la que están almacenados los puntos de la leva. Si la entrada InterpolationPoints no es igual a cero en un flanco positivo de la entrada Execute, el bloque de funciones MC_CamIn inicia una leva interpolada parametrizada con la entrada InterpolationParameter. Los datos facilitados por la entrada CamTableID se ignoran. Si la entrada InterpolationPoints es igual a cero en un flanco positivo de la entrada Execute, el bloque de funciones inicia la leva e ignora los datos facilitados por la entrada InterpolationParameter.
El tipo de datos MC_Interpolation_Parameter se usa para parametrizar la leva interpolada. Es un alias de la estructura ST_Interpolation_Parameter de la biblioteca MotionInterface. Parametrización:
udiNumCamPoints
Número de entradas de la matriz en las que hay puntos de la leva. Si la matriz es mayor que la cantidad de puntos de la leva que hay, los elementos adicionales de la matriz se ignoran.
lrMinMasterPosition y lrMaxMasterPosition
En las matrices de interpolación lineal, el rango de posiciones del maestro se establece con lrMinMasterPosition y lrMaxMasterPosition. El punto de la leva del índice más bajo de la matriz corresponde a lrMinMasterPosition. El punto de la leva del índice de la matriz establecido con udiNumCamPoints corresponde a lrMaxMasterPosition. Los demás puntos de la leva están uniformemente distribuidos entre estas posiciones maestras. lrMinMasterPosition y lrMaxMasterPosition se ignoran para la interpolación Poly5 y la interpolación cúbica.
etInterpolationMode
Esta enumeración especifica el tipo de interpolación.
YArrayLinear (la leva es una línea recta entre cada uno de los puntos de la leva)
XYVAArrayPoly5 (polinomio de quinto grado)
XYArrayLinear (la leva es una línea recta entre cada uno de los puntos de la leva; el valor de X puede ser no equidistante)
XYArrayCubic (interpolación cúbica)
ADVERTENCIA | |
---|---|
Consulte la guía de la biblioteca MotionInterface para obtener más detalles sobre la parametrización de una leva interpolada con ST_InterpolationParameter.
La entrada MasterStartPosition permite iniciar una leva en la posición especificada del maestro. Esta entrada se ignorará a menos que la modalidad de búfer esté ajustada en StartAtMasterPosition a través de MC_BufferMode.
Si se inicia MC_CamIn con la modalidad de búfer StartAtMasterPosition, el eje esclavo deberá ejecutar otra leva. En caso contrario, MC_CamIn detectará un error sin interferir en el movimiento del eje esclavo. El valor indicado a través de la entrada MasterStartPosition debe encontrarse dentro del rango de MasterAsSeenBySlave definido por la leva que se está ejecutando en estos momentos. En caso contrario, MC_CamIn detectará un error sin interferir en el movimiento del eje esclavo.
Si ya hay otro trabajo almacenado en el búfer después de la leva que se está ejecutando en estos momentos al iniciar MC_CamIn con la modalidad de búfer StartAtMasterPosition (entrada Execute ajustada en TRUE), el trabajo almacenado en el búfer se ajustará en CommandAborted como si el bloque de funciones con la modalidad de búfer StartAtMasterPosition hubiera interrumpido la leva en ejecución con la modalidad de búfer Aborting.
Si la leva que se está ejecutando finaliza su último segmento (salida EndOfProfile ajustada en TRUE) antes de alcanzarse la posición MasterStartPosition de un bloque de funciones con la modalidad de búfer StartAtMasterPosition, la leva en ejecución se comportará como si no se hubiera iniciado ningún otro comando.
Si se alcanza la posición MasterStartPosition de un bloque de funciones con la modalidad de búfer StartAtMasterPosition antes de que la leva en ejecución finalice su último segmento, dicha leva se comportará como si hubiera sido cancelada por el bloque de funciones almacenado en el búfer (CommandAborted se ajusta en TRUE y EndOfProfile permanece ajustado en FALSE).
Si se activa un bloque de funciones MC_CamIn con la modalidad de búfer StartAtMasterPosition durante la ejecución de una leva periódica en ejecución y dicha leva alcanza su EndOfProfile (fin de perfil) antes de alcanzarse la posición MasterStartPosition, la leva "dará la vuelta" y ajustará su salida EndOfProfile en TRUE durante un ciclo.
Durante el siguiente ciclo de la leva periódica en ejecución, la posición MasterStartPosition se alcanzará antes de que dicha leva alcance su EndOfProfile (fin de perfil). En ese momento es cuando se iniciará la nueva leva con la modalidad de búfer StartAtMasterPosition.
En la siguiente figura, se muestra este comportamiento:
Leyenda:
MSP = Posición MasterStartPosition
SAMP = MC_CamIn se activa con la modalidad de búfer StartAtMasterPosition
EOP = Posición de EndOfProfile
Si se activa un bloque de funciones MC_CamIn con la modalidad de búfer StartAtMasterPosition durante la ejecución de una leva única en ejecución y dicha leva alcanza su EndOfProfile (fin de perfil) antes de alcanzarse la posición MasterStartPosition, la leva ajustará su salida EndOfProfile en TRUE y permanecerá en esta posición como si no se hubiera activado ninguna otra leva.
Cuando el maestro "da la vuelta" y se alcanza la posición MasterStartPosition, se inicia el bloque de funciones MC_CamIn con la modalidad de búfer StartAtMasterPosition. CommandAborted se ajusta en TRUE y EndOfProfile permanece ajustado en FALSE.
En la siguiente figura, se muestra este comportamiento:
Leyenda:
MSP = Posición MasterStartPosition
SAMP = MC_CamIn se activa con la modalidad de búfer StartAtMasterPosition
EOP = Posición de EndOfProfile
MTA = El maestro "da la vuelta" (Master "turns around")
Input |
Tipo de datos |
Descripción |
---|---|---|
Master |
Axis_Ref |
Referencia al eje para el que se ejecutará el bloque de funciones. |
Slave |
Axis_Ref |
Referencia al eje para el que se ejecutará el bloque de funciones. |
Execute |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE. Un flanco ascendente de la entrada Execute inicia el bloque de funciones. El bloque de funciones continúa ejecutándose, y la salida Busy se establece en TRUE. Este bloque de funciones puede reiniciarse mientras se ejecuta. Los valores de destino se sobrescriben con los nuevos valores en el momento en que se produce el flanco ascendente. |
CamTableID |
MC_CAM_ID |
Identificador de la tabla de levas que se utilizará. El tipo de datos MC_CAM_ID es un alias de ST_MultiCam de la biblioteca CommonMotionTypes. Consulte la guía de la biblioteca CommonMotionTypes para obtener más detalles. |
BufferMode |
Valor predeterminado: Aborting Modalidad de búfer. Valores posibles:
Consulte MC_Buffer_Mode para obtener una descripción de los valores. |
|
Periodic |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE. Con TRUE se inicia la modalidad periódica para MC_CamIn. Esta modalidad repite la ejecución de la leva de manera continua. Con FALSE se inicia la leva en la modalidad de una sola vez. La posición del eje esclavo del flanco más próximo (primer o último punto de la leva) se congela si se encuentra fuera del rango definido, es decir, el eje esclavo se encuentra detenido (pero sigue en estado SynchronizedMotion) si la leva se encuentra fuera del rango definido.
NOTA: Independientemente de si una leva se inicia en modalidad periódica o de una sola vez, indicará EndOfProfile, y el trabajo de movimiento del búfer (si existe un trabajo de este tipo) se activará cuando se alcance el EndOfProfile (aunque la leva se haya definido como periódica).
|
MasterScaling |
LREAL |
Rango de valores: Un valor LREAL positivo Valor predeterminado: 1 El factor MasterScaling se utiliza para calcular la posición del maestro desde el punto de vista del esclavo multiplicando la posición del maestro (en el caso de la modalidad de inicio absoluto) o la compensación de posición del maestro (en el caso de la modalidad de inicio relativo). |
SlaveScaling |
LREAL |
Rango de valores: -2147483648...2147483647 Valor predeterminado: 1 El factor SlaveScaling se aplica multiplicando la posición del esclavo obtenida de la leva (en el caso de la modalidad de inicio absoluto) o la compensación de posición del esclavo (en el caso de la modalidad de inicio relativo). |
MasterStartMode |
Valor predeterminado: Absolute Valores posibles:
Consulte MC_Master_Start_Mode para obtener una descripción de los valores. |
|
SlaveStartMode |
Valor predeterminado: Relative Valores posibles:
Consulte MC_Slave Start_Mode para obtener una descripción de los valores. |
|
RampInDirection |
Dirección de la rampa de entrada para el acoplamiento si el eje esclavo es un eje de tipo módulo. La dirección corresponde a la del destino absoluto del mecanismo de rampa de entrada (donde MC_CamIn se considera InSync) desde la posición del eje esclavo, no el período Y del perfil de leva. Si el eje esclavo no es un eje de tipo módulo, los valores de esta entrada no tendrán efecto alguno. Valor predeterminado: PositiveDirection Valores posibles:
Consulte MC_Direction para obtener una descripción de los valores. |
|
VelocityOffsetRampIn |
LREAL |
Rango de valores: -2147483648...2147483647 Valor predeterminado: 0 Compensación de velocidad para el mecanismo de rampa de entrada en unidades definidas por el usuario. |
AccelerationOffsetRampIn |
LREAL |
Rango de valores: Un valor LREAL positivo Valor predeterminado: 0 Compensación de aceleración para el mecanismo de rampa de entrada en unidades definidas por el usuario. |
DecelerationOffsetRampIn |
LREAL |
Rango de valores: Un valor LREAL positivo Valor predeterminado: 0 Compensación de deceleración para el mecanismo de rampa de entrada en unidades definidas por el usuario. |
JerkOffsetRampIn |
LREAL |
Rango de valores: Un valor LREAL positivo y cero
Valor predeterminado: 0 |
InterpolationPoints |
POINTER TO BYTE |
Dirección de memoria de una matriz con un largo de 3 a 10 000. El tipo de matriz depende del valor de etInterpolationMode en la entrada InterpolationParameter, que puede ser ARRAY OF LREAL o ARRAY OF ST_InterpolationPointXYVA. Rango de valores: 0 y 3 ... 10000 Valor predeterminado: 0
NOTA: El valor debe ser el mismo que el de udiNumCamPoints de ST_InterpolationParameter usado por la entrada InterpolationParameter. Consulte la guía de la biblioteca MotionInterface para obtener más detalles.
|
InterpolationParameter |
MC_Interpolation_Parameter |
Usa MC_InterpolationParameter para la parametrización de una leva interpolada. Para obtener más información consulte el apartado MC_InterpolationParameter. |
MasterStartPosition |
LREAL |
Rango de valores: -2147483648...2147483647 Valor predeterminado: 0 Posición del maestro (según el punto de vista del esclavo) de una leva anterior cuando se activa una nueva leva. Esta entrada se ignorará a menos que se utilice StartAtMasterPosition para MC_BufferMode. |
Salida |
Tipo de datos |
Descripción |
---|---|---|
InSync |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE.
|
Busy |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE.
|
Active |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE.
|
CommandAborted |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE.
|
Error |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE.
|
ErrorID |
Esta enumeración incluye información de diagnóstico. |
|
EndOfProfile |
BOOL |
Rango de valores: FALSE, TRUE. Valor predeterminado: FALSE.
|
RampInDuration |
TIME |
Indica el tiempo que queda hasta que finalice el procedimiento de la rampa de entrada y la salida InSync se establezca en TRUE. |
A diferencia de las especificaciones de PLCopen Motion Control Part 1, Version 2.0, la biblioteca no incluye un bloque de funciones MC_CamTableSelect separado. La tabla de levas se especifica como una entrada de MC_CamIn.
La biblioteca no incluye un bloque de funciones MC_CamOut separado. Un bloque de funciones en ejecución puede sustituirse por cualquier otro bloque de funciones.
Este bloque de funciones proporciona una gran flexibilidad tanto para movimientos absolutos como relativos. Por ejemplo, no tiene por qué haber una relación entre el módulo de un eje maestro (o esclavo) y el período de aplicación de una leva en la dirección X (o Y). Por lo tanto, las correcciones de compensación pueden aplicarse al instante ajustando ligeramente el período de la aplicación del perfil de leva en la dirección X o Y. Esto no sería posible con un eje de tipo módulo, que no puede modificarse cuando el eje ejecuta un bloque de funciones.
Las funciones FC_GetCamSlaveMovementFromGivenMasterForInterpolatedCam y FC_GetCamSlaveMovementFromGivenMasterForMultiCam de la biblioteca MotionInterface le ayudan a recuperar la posición del eje después de una interrupción o una detención de un movimiento como resultado de un error detectado. Estas funciones calculan la posición de destino, la velocidad y la aceleración de un eje esclavo en el momento de ejecutar la función si este eje está acoplado al movimiento de un eje maestro a través de una leva. El eje esclavo no se mueve o se ve afectado de algún otro modo. Estas funciones solo se pueden llamar una vez para determinar las condiciones de inicio del esclavo, de modo que no se produzca una rampa de entrada. No pueden utilizarse cíclicamente para leer los valores del esclavo de forma continua.