Bloque responsable por realizar un posicionamiento para la posición relativa programada.
Representación Ladder

Características de Ejecución
Tamaño de Memoria de Programa |
72 Bytes |
Tamaño de Memoria de Datos |
32 Bytes |
Estructura del Bloque
Tipo de Variável |
Nome |
Tipo de Dado |
Descrição |
VAR_IN_OUT |
Axis |
BYTE |
Selección de eje de la operación (0 - Eje real) (1 - Eje Virtual 1) |
VAR_INPUT |
Execute |
BOOL |
Habilitación del bloque |
ContinuousUpdate |
BYTE |
Modo de actualización automática (0 - Flanco de subida) (1 - Tiempo real) |
|
Distance |
LREAL |
Distancia de desplazamiento |
|
Velocity |
REAL |
Velocidad [rpm] |
|
Acceleration |
REAL |
Aceleración [rpm / s] |
|
Deceleration |
REAL |
Desaceleración [rpm / s] |
|
Jerk |
REAL |
Jerk [rpm/s²] |
|
BufferMode |
REAL |
Modo de inicio de ejecución (0 - Inicia bloque inmediatamente, si hay otro bloque en ejecución, éste será abortado) (1 - Si está en ejecución otro bloque, el bloque en ejecución continuará su movimiento hasta concluirlo. El nuevo bloque aguardará para entonces ser ejecutado.) (6 - Si está en ejecución algún otro bloque , este bloque entrará en error 52 y no será ejecutado. Será mostrada en la IHM la alarma A00052.) |
|
VAR_OUTPUT |
Done |
BOOL |
Habilitación de la salida |
Busy |
BOOL |
Señalizador de que el bloque aún no fue finalizado |
|
Active |
BOOL |
Señalizador de bloque con control sobre el eje |
|
CommandAborted |
BOOL |
Señalizador de comando abortado |
|
Error |
BOOL |
Señalizador de error en la ejecución |
|
ErrorID |
WORD |
Identificador del error ocurrido |
|
VAR |
MC_MOVERELATIVE_INST_0 |
MC_MOVERELATIVE |
Instancia de acceso a la estructura del bloque |
Operación
Este bloque, cuando detecta un flanco de subida en Execute, ejecutará un posicionamiento de acuerdo con la distancia relativa a la posición actual, configurada en el argumento Distance, con una velocidad máxima configurada en el argumento Velocity y una aceleración/desaceleración configurada en los argumentos Acceleration y Deceleration. Dependiendo de la distancia del posicionamiento y de los valores de aceleración y desaceleración, la velocidad del motor no alcanzará la velocidad máxima configurada.
|
¡NOTA! En caso de que el valor del argumento Jerk sea diferente de cero: 1) el valor de la desaceleración será el mismo del valor configurado en la aceleración; 2) el argumento ContinuousUpdate On-line no tendrá efecto, siendo considerado los valores de los argumentos en el instante de la transición positiva de Execute; 3) no es permitido ejecutar el posicionamiento con otro bloque activo, ocurriendo ErrorID 95. |
Al ejecutar el bloque MC_MoveRelative, el drive pasará a operar en malla de posición y permanecerá así incluso tras la conclusión del bloque. Se debe ajustar la ganancia proporcional de posición (P0159) para obtener un mejor desempeño del drive.
En la ejecución del posicionamiento, el estado del eje cambiará para Discrete Motion. Al concluir el posicionamiento, el estado del eje cambiará para Standstill.
Cuando Execute tiene valor FALSE, Done permanece FALSE. La salida Done es activada cuando el bloque termina la ejecución exitosamente, permaneciendo en nivel TRUE hasta que Execute reciba FALSE.
|
¡NOTA! La salida Done se activa tan pronto como se completa la ruta teórica cuando la referencia de posición es igual a la posición deseada. Luego, la salida Listo se puede activar antes de que la posición real alcance la posición deseada. |
En caso de que haya algún error en la ejecución, la salida Error será activada y ErrorID exhibirá el código del error según la tabla de abajo.
Código |
Descrição |
52 |
Intento de ejecutar bloque con BufferMode en Single cuando otro bloque esté activo. |
60 |
Velocidad programada menor que la mínima permitida. |
61 |
Velocidad programada mayor que la máxima permitida. |
62 |
Aceleración programada menor que la mínima permitida. |
63 |
Aceleración programada mayor que la máxima permitida. |
64 |
Desaceleración programada menor que la mínima permitida. |
65 |
Desaceleración programada mayor que la máxima permitida. |
67 |
Drive en estado "Disabled" o "ErrorStop". |
69 |
Drive en estado "Stopping". |
70 |
Intento de ejecutar bloque con BufferMode en Buffered cuando otro bloque esté activo y otro bloque esté aguardando. |
71 |
P202 diferente de 4. |
74 |
Drive en estado "Homing". |
78 |
Bloque MC no ejecutado - Falla interna |
93 |
Jerk programado menor que el mínimo permitido. |
94 |
Jerk programado mayor que el máximo permitido. |
95 |
No está permitido ejecutar posicionamiento con Jerk cuando otro bloque esté activo. |
Ejemplo en Ladder



En la transición de subida de MOVEREL1_EXECUTE, es ejecutado el primer bloque MC_MoveRelative. Con eso, las señales Busy y Active de este bloque son ajustadas y se inicia el posicionamiento de 10 vueltas positivas a partir de la posición actual.
Al terminar el posicionamiento, es concluido el primer bloque. Con eso, las señales Busy y Active de este bloque son reseteadas y la salida Done es ajustada por 1 ciclo de scan.
Con una transición de subida de MOVEREL2_EXECUTE, es ejecutado el segundo bloque MC_MoveRelative. Con eso, las señales Busy y Active de este bloque son ajustadas y se inicia el posicionamiento de 5 vueltas positivas a partir de la posición actual.
Al terminar el posicionamiento, la salida Done del segundo bloque es ajustada y las señales Busy y Active de este bloque son reseteadas. La salida Done permanece TRUE mientras la entrada Execute está ajustada.

En la transición de subida de MOVEREL1_EXECUTE, es ejecutado el primer bloque MC_MoveRelative. Con eso, las señales Busy y Active de este bloque son ajustadas y se inicia el posicionamiento de 10 vueltas positivas a partir de la posición actual.
Teniéndose la transición de subida de MOVEREL2_EXECUTE, el segundo bloque MC_MoveRelative es instantáneamente ejecutado (BufferMode - Aborting). Con eso, las señales Busy y Active de este bloque son ajustadas y se inicia el posicionamiento de 5 vueltas positivas a partir de la posición actual. Al mismo tiempo, las señales Busy y Active del primer bloque son reseteadas y la señal CommandAborted es ajustada por 1 ciclo de scan.
Al terminar el posicionamiento, la salida Done del segundo bloque es ajustada y las señales Busy y Active de este bloque son reseteadas. La salida Done permanece TRUE mientras la entrada Execute está ajustada.
Ejemplo en ST
El siguiente ejemplo muestra las instrucciones para aplicar el ejemplo anterior en el lenguaje ST.
VAR MOVEREL1_EXECUTE, MOVEREL1_DONE, MOVEREL2_EXECUTE, MOVEREL2_DONE, MOVEREL1_BUSY, MOVEREL1_ACTIVE, MOVEREL1_CMDABORTED, MOVEREL2_BUSY, MOVEREL2_ACTIVE, MOVEREL2_CMDABORTED : BOOL; MOVEREL1_INSTANCE, MOVEREL2_INSTANCE : FB_MC_MoveRelative; END_VAR
MOVEREL1_INSTANCE.Execute := MOVEREL1_EXECUTE; MOVEREL1_INSTANCE( Axis:=0, ContinuousUpdate:=0, Distance:=LREAL#10.0, Velocity:=200.0, Acceleration:=1000.0, Deceleration:=1000.0, Jerk:=0.0, BufferMode:=0); MOVEREL1_BUSY := MOVEREL1_INSTANCE.Busy; MOVEREL1_ACTIVE := MOVEREL1_INSTANCE.Active; MOVEREL1_CMDABORTED := MOVEREL1_INSTANCE.CommandAborted; MOVEREL1_DONE := MOVEREL1_INSTANCE.Done;
MOVEREL2_INSTANCE.Execute := MOVEREL2_EXECUTE; MOVEREL2_INSTANCE( Axis:=0, ContinuousUpdate:=0, Distance:=LREAL#5.0, Velocity:=100.0, Acceleration:=500.0, Deceleration:=500.0, Jerk:=0.0, BufferMode:=0); MOVEREL2_BUSY := MOVEREL2_INSTANCE.Busy; MOVEREL2_ACTIVE := MOVEREL2_INSTANCE.Active; MOVEREL2_CMDABORTED := MOVEREL2_INSTANCE.CommandAborted; MOVEREL2_DONE := MOVEREL2_INSTANCE.Done;
|
|---|