Bloque responsable por realizar un movimiento para la velocidad programada.
Representación Ladder

Características de Ejecución
Tamaño de Memoria de Programa |
66 Bytes |
Tamaño de Memoria de Datos |
24 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) |
|
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 |
InVelocity |
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_MOVEVELOCITY_INST_0 |
MC_MOVEVELOCITY |
Instancia de acceso a la estructura del bloque |
Operación
Este bloque, cuando detecta un flanco de subida en Execute, ejecutará un movimiento para la velocidad configurada en el argumento Velocity con una aceleración/desaceleración configurada en los argumentos Acceleration y Deceleration. La dirección del movimiento dependerá de la señal de la velocidad: si la velocidad es mayor que cero, el movimiento será en la dirección positiva (sentido horario) y si la velocidad es menor que cero, el movimiento será en la dirección negativa (sentido antihorario).
|
¡NOTA! En caso de que el valor del argumento Jerk sea diferente de cero, el argumento ContinuousUpdate On-line no tendrá efecto, siendo considerados los valores de los argumentos en el instante de la transición positiva de Execute. |
Al ejecutar el bloque MC_MoveVelocity, el drive no opera en malla de posición.
En la ejecución del movimiento, el estado del eje cambiará para Continuous Motion.
Cuando Execute tiene valor FALSE, InVelocity permanece FALSE. La salida InVelocity es activada cuando la velocidad programada es alcanzada exitosamente, permaneciendo en nivel TRUE mientras el bloque esté activo. Para finalizar el bloque, es necesaria la ejecución de otro bloque, o que el drive pase al estado Disabled o Errorstop.
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 MOVE1_EXECUTE, es ejecutado el primer bloque MC_MoveVelocity. Con eso, las señales Busy y Active de este bloque son ajustadas y se inicia el movimiento para llegar a la velocidad de 200 RPM.
En el instante en que la velocidad alcanza 200 RPM, la salida InVelocity es ajustada.
Teniéndose la transición de subida de MOVE2_EXECUTE, el segundo bloque MC_MoveVelocity es instantáneamente ejecutado (BufferMode - Aborting). Con eso, las señales Busy y Active de este bloque son ajustadas y se inicia el movimiento para la velocidad de 100 RPM (en este instante MOVE2_VELOCITY contiene el valor 100). Al mismo tiempo, las señales Busy, Active y InVelocity, del primer bloque, son reseteadas y la señal CommandAborted es ajustada por 1 ciclo de scan.
Al alcanzar la velocidad de 100 RPM, la salida InVelocity del segundo bloque es ajustada y permanece hasta la ejecución de otro bloque.
Como el argumento ContinuousUpdate está configurado como On-line, con el cambio del valor de MOVE2_VELOCITY para 80, la velocidad cambia inmediatamente para 80 RPM, sin ejecutar una rampa de aceleración/desaceleración.
Ejemplo en ST
El siguiente ejemplo muestra las instrucciones para aplicar el ejemplo anterior en el lenguaje ST.
VAR MOVE1_EXECUTE, MOVE1_INVEL, MOVE2_EXECUTE, MOVE2_INVEL, MOVE1_BUSY, MOVE1_ACTIVE, MOVE1_CMDABORTED, MOVE2_BUSY, MOVE2_ACTIVE, MOVE2_CMDABORTED : BOOL; MOVE2_VELOCITY : REAL; MOVE1_INSTANCE, MOVE2_INSTANCE : FB_MC_MoveVelocity; END_VAR
MOVE1_INSTANCE.Execute := MOVE1_EXECUTE; MOVE1_INSTANCE( Axis:=0, ContinuousUpdate:=0, Velocity:=200.0, Acceleration:=1000.0, Deceleration:=1000.0, Jerk:=0.0, BufferMode:=0); MOVE1_BUSY := MOVE1_INSTANCE.Busy; MOVE1_ACTIVE := MOVE1_INSTANCE.Active; MOVE1_CMDABORTED := MOVE1_INSTANCE.CommandAborted; MOVE1_INVEL := MOVE1_INSTANCE.InVelocity;
MOVE2_INSTANCE.Execute := MOVE2_EXECUTE; MOVE2_INSTANCE( Axis:=0, ContinuousUpdate:=0, Velocity:=MOVE2_VELOCITY, Acceleration:=500.0, Deceleration:=500.0, Jerk:=0.0, BufferMode:=0); MOVE2_BUSY := MOVE2_INSTANCE.Busy; MOVE2_ACTIVE := MOVE2_INSTANCE.Active; MOVE2_CMDABORTED := MOVE2_INSTANCE.CommandAborted; MOVE2_INVEL:= MOVE2_INSTANCE.InVelocity;
|
|---|