Bloque para alterar la rampa y la velocidad estándar de los ejes en modo de control de ejes.
Los bloques de control de eje (MW_PlcMoveAbsolute y MW_PlcMoveRelative) tienen una rampa estándar con las siguientes características:
| • | Tiempo de aceleración: 100ms; |
| • | Número de steps para aceleración: 20; |
| • | Frecuencia inicial: 0 Hz; |
| • | Frecuencia final: 10 kHz. |
Ese bloque permite alterar esos valores estándares.
Representación Ladder

Estructura del Bloque
Tipo de Variable |
Nombre |
Tipo de Dato |
Descripción |
VAR_INPUT |
EN |
BOOL |
Habilitación del bloque |
AxisNumber |
CONST |
Eje seleccionado |
|
FirstFreq |
DWORD DINT |
Frecuencia inicial de los pulsos [Hz] |
|
TargetFreq |
DWORD DINT |
Frecuencia final de los pulsos [Hz] |
|
AccelerationTime |
DWORD |
Tiempo de rampa [ms] |
|
NumberOfSteps |
BYTE USINT |
Paso de incremento de frecuencia |
|
VAR_OUTPUT |
ENO |
BOOL |
Habilitación de salida |
Busy |
BOOL |
Indica que el eje está en movimiento |
|
Error |
BOOL |
Indica que hubo un error al llamar el bloque |
|
ErrorID |
BYTE |
Indica el error generado |
|
VAR |
MW_PlcChangeRamp1_INST_0 |
MW_PlcChangeRamp1 |
Instancia de acceso a la estructura del bloque |
Funcionamiento
Cuando la entrada EN cambia de FALSE a TRUE (flanco de subida), el bloque altera la rampa estándar del eje seleccionado (axisNumber) con los valores de entrada.
El bloque sólo alterará los valores si el eje seleccionado estuviera parado, en caso contrario, la salida "Busy" será TRUE.
La rampa será alterada tanto para el control con bloques de 1 eje (MW_PlcMoveAbsolute1 y MW_PlcMoveRelative1) como para los bloques de control de dos ejes simultáneamente (MW_PlcMoveAbsolute2 y MW_PlcMoveRelative2).
La frecuencia final no puede ser 0 Hz.
La frecuencia final debe ser mayor que la frecuencia inicial.
El tiempo mínimo de rampa es de 1 ms. Si fuera pasado al bloque un valor menor, éste considerará 1 ms automáticamente.
El número mínimo de pasos es 1. Si fuera pasado al bloque un valor menor, éste considerará 1 automáticamente.
|
NOTA! El número mínimo de pasos por step es 2. Si no se cumple este requisito, la rampa no se generará.
Para verificar si se cumple el requisito, considere:
delta_t_ms = AccelerationTime / NumberOfSteps (tiempo por step en ms)
delta_t_s = delta_t_ms / 1000 (tiempo por step en segundos)
delta_f = (TargetFreq - FirstFreq) / NumberOfSteps (variación de frecuencia por step)
La menor frecuencia, lowerFrequency, utilizada en la rampa será FirstFreq si FirstFreq es diferente de 0; de lo contrario, la menor frecuencia en la rampa será el propio delta_f.
Así, si la siguiente condición es verdadera, significa que no se está cumpliendo el requisito mínimo de 2 pasos por step:
delta_t_s * lowerFrequency < 2
Es decir, el usuario debe asegurarse de que:
delta_t_s * lowerFrequency >= 2 |
En caso 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.
La figura a continuación muestra el comportamiento de la rampa de acuerdo con los valores configurados.

Si la posición deseada está muy cerca de la actual, el bloque limitará la frecuencia máxima, manteniendo la aceleración configurada, como se muestra en la figura a continuación.

Código |
Descripción |
0 |
Ejecutado con éxito |
1 |
Control de eje no habilitado |
2 |
Rampa inválida |
3 |
Error de configuración |
Ejemplo en Ladder

En el ejemplo de arriba, el contacto "change" altera el valor de las rampas estándar de dos ejes del producto (asumiendo que el control de esos dos ejes está habilitado).
La rampa del eje 1 será alterada a:
| • | Tiempo de aceleración: 200ms; |
| • | Número de steps para aceleración: 10; |
| • | Frecuencia inicial: 5 kHz. |
| • | Frecuencia final: 50 kHz. |
La rampa del eje 2 será alterada a:
| • | Tiempo de aceleración: 500ms; |
| • | Número de steps para aceleración: 50; |
| • | Frecuencia inicial: 0 Hz. |
| • | Frecuencia final: 200 kHz. |
O sea, todos los comandos de control de movimiento para esos ejes, a partir de ahora, tendrán esas rampa, de forma estándar, tanto para los bloques de control de 1 eje como para los bloques de control de 2 ejes (respetando los límites de cada uno).
Ejemplo en ST
El ejemplo de abajo, exhibe las instrucciones para aplicación del ejemplo funcional en el lenguaje ST.
VAR firstFreq_A1 : DWORD := 5000; targetFreq_A1 : DWORD := 50000; accTime_A1 : DWORD := 200; firstFreq_A2 : DWORD := 0; targetFreq_A2 : DWORD := 200000; accTime_A2 : DWORD := 500; change : BOOL := 0; done : BOOL; MW_PlcChangeRamp1_INST_0 : FB_MW_PlcChangeRamp1; MW_PlcChangeRamp1_INST_1 : FB_MW_PlcChangeRamp1; END_VAR
MW_PlcChangeRamp1_INST_0.EN := change; MW_PlcChangeRamp1_INST_0( AxisNumber:=1, FirstFreq:=firstFreq_A1, TargetFreq:=targetFreq_A1, AccelerationTime:=accTime_A1, NumberOfSteps:=10);
MW_PlcChangeRamp1_INST_1.EN := MW_PlcChangeRamp1_INST_0.ENO; MW_PlcChangeRamp1_INST_1( AxisNumber:=2, FirstFreq:=firstFreq_A2, TargetFreq:=targetFreq_A2, AccelerationTime:=accTime_A2, NumberOfSteps:=50); done := MW_PlcChangeRamp1_INST_1.ENO;
|
|---|