Skip to main content

Control de posición en el controlador con SM_Drive_PosControl

Vea el proyecto de ejemplo para esto PosControl.project en el directorio de instalación de CODESYS por debajo ..\CODESYS SoftMotion\Examples.

En la mayoría de los casos, un servocontrol asume el control de posición del variador, así como el control de potencia y el control de velocidad de rotación. Sin embargo, hay casos de uso en los que el controlador asume el control de posición del eje. Este ejemplo demuestra cómo un dispositivo con control de velocidad (por ejemplo, un convertidor de frecuencia con realimentación de posición) es controlado por posición por CODESYS SoftMotion.

El requisito es un dispositivo que esté controlado por la velocidad establecida y devuelva su posición actual. En este ejemplo, se utiliza un terminal de salida analógica de 10 V EL4031 con una señal que se utiliza como punto de ajuste de velocidad para un convertidor de frecuencia. Se utiliza un terminal de codificador EL5101 para la retroalimentación de posición.

Control de la posición del eje mediante SM_Drive_PosControl

  1. Agregar un eje de tipo controlado por posición SM_Drive_PosControl debajo Piscina SoftMotion General Axis en el árbol de dispositivos.

  2. Agregue los terminales para el terminal analógico (EL4031) y el codificador (EL5101) al árbol de dispositivos.

    Árbol de dispositivos:

    _sm_img_example_poscontrol_1.png

    Sugerencia

    Las descripciones de los dispositivos de bus de campo deben descargarse e instalarse del fabricante.

  3. Abre el SM_Drive_PosControl dispositivo en el editor y especifique el parámetro general Módulo con valor 360.0 sobre el General pestaña.

  4. Haga clic en el Escalado / Mapeo pestaña. El número de incrementos por vuelta del motor se toma de la hoja de datos del codificador. En este ejemplo, 4096 los incrementos (1) son una vuelta de motor. Como está trabajando con grados angulares en la aplicación, especifique el valor 360 (2) para unidades en aplicación.

    Ajustes:

    _sm_img_example_poscontrol_2.png
  5. Cambie al SoftMotion Drive: bucle de control de posición pestaña y especifique los siguientes parámetros:

    • D 2.0

      El tiempo muerto determina el número de ciclos en los que la posición real recibida (codificador) se desplaza de fase a la posición establecida del eje. El tiempo muerto depende de los componentes aplicados y debe determinarse mediante prueba y error.

    • Kp 0.0

      La constante de proporcionalidad es el factor por el cual se multiplica el error de posición (la desviación entre la posición establecida y la real) para agregarla más tarde a la velocidad establecida. Ahora establezca este valor en 0. Determinará el valor experimentalmente en un momento posterior.

    • Bit width: 16

      El ancho de bits del valor real se recibe en función de los componentes utilizados y se puede establecer como valores de 16, 24 o 32 bits. Establezca el valor en 16 porque los componentes usados dan la posición como UINT.

    • _cds_icon_option_deactivated.pngmax

      Deje el interruptor de control de errores de posición apagado. Puede volver a encenderlo si es necesario. Seleccione la casilla de verificación y especifique un retraso máximo permitido. Si se excede este valor durante el funcionamiento, el eje entra en un estado de error.

    • δ/δt

      El parámetro tiene el valor 1 y debe cambiarse solo en casos muy especiales. Define la relación entre la velocidad establecida y la derivación de la posición. El rango de valores es de 0 a 1:

      0: El valor de fSetVelocity se utiliza como fuente.

      1: La derivación numérica de la posición establecida se utiliza como fuente.

    Bucle de control:

    _sm_img_example_poscontrol_3.png
  6. Ahora configura los valores de velocidad que se envían al actuador. Para ello, debe conocer la velocidad máxima en unidades de aplicación y el valor bruto correspondiente de los datos transferidos. En este ejemplo, la velocidad máxima se logra mediante la salida del valor 16#7FFF, que corresponde a una velocidad de 10 vueltas por segundo. Esto también corresponde a 3600 grados por segundo según la configuración.

    Ajustes:

    _sm_img_example_poscontrol_5.png

Mapeo de variables a entradas y salidas

Asigne las variables con los datos del eje a los módulos de E / S. Los datos cíclicos disponibles del eje se encuentran en las estructuras de datos in y out. Puede establecer esta conexión en el editor de dispositivos del dispositivo de entrada y salida mediante programación o directamente.

  1. Conecte la salida (velocidad establecida) al dispositivo EL4031. Abra el dispositivo en el editor y haga clic en el Asignación de E / S EtherCAT pestaña. Asignar la variable out.iSetVelocity del eje a la salida. En el caso de una salida de 32 bits, out.diSetVelocity se utiliza.

    Cartografía:

    _sm_img_example_poscontrol_7.png
  2. Proceda de la misma forma con la entrada de posición. Abra el dispositivo EL5101 en el editor y establezca el valor de entrada de posición en in.wActPosition. Para una entrada de 32 bits, establezca el valor en in.dwActPosition. Cartografía:

    _sm_img_example_poscontrol_8.png
  3. Para que funcionen la habilitación de control, la parada rápida y el interruptor de límite, las entradas correspondientes de SMC_PosControlInput tienen que estar definidos por los valores de la unidad. Las salidas de SMC_PosControlOutput deben transmitirse al convertidor (consulte la descripción a continuación). Si la unidad no admite la parada rápida, por ejemplo, SM_Drive_PosControl.in.bDriveStartRealState := TRUE tiene que ser configurado y SM_Drive_PosControl.out.bDriveStart puede ignorarse. En este ejemplo, bDriveStartRealState y bRegulatorRealState deben configurarse en la aplicación.

SM_Drive_PosControl.in.bDriveStartRealState := TRUE;
SM_Drive_PosControl.in.bRegulatorRealState := TRUE;

Determinación del tiempo muerto del sistema

Ahora configure el modo en línea con el eje y configure los parámetros de control.

Importante

Tenga en cuenta que el eje puede moverse fuera de control. Por lo tanto, debe tomar las precauciones de seguridad correspondientes.

Luego intente operar el eje sin control de posición.fKp ya está establecido en 0.0 y la configuración de escala está verificada. Cambie el eje a MC_Power y empezar MC_MoveVelocity. El eje se mueve ahora con la velocidad programada de 1 U / s. En el caso de desviaciones, debe corregir la escala en consecuencia.

  1. Termine el movimiento, por ejemplo con MC_MoveRelativee inicie la función de seguimiento.

  2. Determine el tiempo muerto del sistema midiendo la diferencia de tiempo entre la posición establecida y la posición real.

    En MC_MoveRelative, establezca la velocidad máxima y una gran aceleración. Inicie la traza de muestreo con MC_MoveRelative. Ahora determine la diferencia de tiempo entre el movimiento inicial de la posición ajustada y la primera reacción de la posición real.

    Rastro:

    _sm_img_example_poscontrol_6.png
  3. Para determinar el tiempo muerto D, divide esta diferencia de tiempo por el tiempo del ciclo (D = diferencia horaria/tiempo del ciclo). En el SoftMotion Drive: control de posición pestaña, especifique este valor en el bucle de control en D.

  4. Ahora intenta determinar el ajuste correcto para fKp. Para ello, cambie el valor de la variable <drive>.controller.fKp en una lista de vigilancia.

    Set fKp a un número pequeño (por ejemplo, 0,0001) y aumente el valor paso a paso. Compruebe el comportamiento de cada cambio con la traza de muestreo. Tan pronto como detecte fluctuaciones, se habrá alcanzado el límite superior. Ahora disminuya el valor de fKp aproximadamente un 10% y especifíquelo en el SoftMotion Drive: control de posición pestaña en el bucle de control en Kp .

    Ahora puedes usar el eje.

Bloque de funciones: SMC_PosControlInput

Biblioteca: SM3_Drive_PosControl

tabla 2. Entradas (VAR_INPUT)

Nombre

Tipo de datos

Valor inicial

Descripción

bLimitPos

BOOL

Final de carrera en sentido positivo (solo para ejes finitos)

Desde SoftMotion la versión 4.12.0.0, la supervisión del interruptor de límite está habilitada de forma predeterminada. Para las versiones anteriores, esto debe habilitarse manualmente configurando bHWLimitEnable para TRUE. Esto se hace normalmente escribiendo el número de parámetro correspondiente 1206 por medio de MC_WriteBoolParameter.

TRUE: Final de carrera no accionado

FALSE: Interruptor de límite accionado

bLimitNeg

BOOL

Final de carrera en dirección negativa

TRUE: Final de carrera no accionado

FALSE: Interruptor de límite accionado

wActPosition

WORD

Posición actual (posición real) como valor de 16 bits

dwActPosition

DWORD

Posición actual (posición real) como valor de 32 bits

bExternalError

BOOL

Error externo

bRegulatorRealState

BOOL

TRUE: Eje siendo controlado

bDriveStartRealState

BOOL

FALSE: Eje en Quick Stop

dwEncoderCounterModulo

DWORD

0

bDelayActivation

BOOL

TRUE: Siempre y cuando bDelayActivation es TRUE, SM3_Drive_PosControl no cambia al estado de comunicación 100.

Caso de uso: el valor se mantiene en TRUE hasta que el codificador aplicado arroje valores posicionales válidos.



Bloque de funciones: SMC_PosControlOutput

Biblioteca: SM3_Drive_PosControl

tabla 3. Salidas (VAR_OUTPUT)

Nombre

Tipo de datos

Valor inicial

Descripción

bRegulatorOnIn

BOOL

TRUE: El eje debe estar controlado.

bDriveStart

BOOL

FALSE: El eje debe ejecutar una parada rápida.

diSetVelocity

DINT

Establecer velocidad

iSetVelocity

INT

Establecer velocidad



Bloque de funciones: SMC_SetPosControlParams

Biblioteca: SM3_Drive_PosControl

Cambia los parámetros de un SM3_Drive_PosControl eje

tabla 4. Entradas (VAR_INPUT)

Nombre

Tipo de datos

Valor inicial

Descripción

Axis

AXIS_REF_POSCONTROL

Referencia de eje

bExecute

BOOL

TRUE: Activa la ejecución del bloque de funciones.

fKp

LREAL

-1

Ganancia proporcional por retraso

Se ignora un valor menor que 0.

fPartVelPilotControl

LREAL

-1

Factor para el control de velocidad con fSetPosition

0: Sin control piloto de velocidad; 1: Salida directa de fSetVelocity. Se ignora un valor menor que 0.

fDeadTime

LREAL

-1

Retraso de tiempo en ciclos entre fSetPosition y fActPositioin

Este valor no debe ser 0. Se ignora un valor menor que 0.

fMaxPositionDiff

LREAL

-1

Retraso de posición máximo

0 desactiva la comprobación del retardo de posición máximo. Se ignora un valor menor que 0.



tabla 5. Salidas (VAR_OUTPUT)

Nombre

Tipo de datos

Valor inicial

Descripción

bDone

BOOL

La ejecución del bloque de funciones ha finalizado.

bError

BOOL

TRUE: Se ha producido un error en el bloque de funciones.

ErrorID

SMC_ERROR

Error de identificación



ejemplo 2. Ejemplo

Los parámetros de la unidad de eje SM_Drive_PosControl se establecen.

PROGRAM PLC_PRG
VAR
        fbSetPosControlParams : SMC_SetPosControlParams;
END_VAR

fbSetPosControlParams.fKp := 1;
fbSetPosControlParams.fPartVelPilotControl :=0;
fbSetPosControlParams.fDeadTime :=0.1;
fbSetPosControlParams.fMaxPositionDiff :=1;

fbSetPosControlParams(Axis:= SM_Drive_PosControl, bExecute:= TRUE);