Implementación de Control Multieje Industrial con Siemens S7-1200, Servos Delta B2 y Panel Weintek

Introducción al Sistema

Este proyecto utiliza un PLC Siemens S7-1200 para controlar cinco ejes industriales, integrando servos Delta B2 y un panel HMI Weintek. La solución incluye programas en TIA Portal, diagramas eléctricos CAD y aplicaciones de pantalla táctil, con un enfoque en programación modular para flexibilidad y mantenimiento sencillo.

Control de Tres Ejes para Manipulcaión mediante Pulsos PTO

El manipulador de tres ejes (X/Y/Z) emplea salidas de pulsos PTO del S7-1200 para posicionar los servos Delta B2 en modo posición, ideal para aplicaciones de alta precisión con cargas ligeras.

El siguiente fragmento muestra la inicialización de ejes en el bloque OB1, con cambios en nombres de variables y lógica para ilustrar la modularidad:

// Habilitación del eje 1 (Eje X)
MC_POWER(
    Axis                        := "DB_Eje1".Eje,
    Enable                      := "DB_Manual".Habilitar_Eje1,
    Disable                     := FALSE,
    RampDown                    := FALSE,
    Error                       => "DB_Alarma".Error_Habilitar_Eje1,
    ErrorID                     => "DB_Alarma".ID_Error_Habilitar_Eje1,
    Status                      => "DB_Eje1".Estado_Eje
);

// Posicionamiento absoluto del eje X (de posición de carga a descarga)
MC_MOVE_ABS(
    Axis                        := "DB_Eje1".Eje,
    Execute                     := "DB_Auto".Activar_Movimiento,
    Position                    := "DB_Posiciones".Pos_Carga,
    Velocity                    := 1800.0,
    Acceleration                := 4500.0,
    Deceleration                := 4500.0,
    Jerk                        := 9000.0,
    BufferMode                  := 0, // Ejecución inmediata
    Done                        => "DB_Auto".Movimiento_Completado,
    Busy                        => "DB_Auto".Movimiento_Ocupado,
    Error                       => "DB_Alarma".Error_Movimiento_Eje1,
    ErrorID                     => "DB_Alarma".ID_Error_Movimiento_Eje1
);

Al sincronizar los tres ejes, se recomienda usar el modo buffer (BufferMode := 1) para iniciar movimientos coordinados. Primero se activa el eje X, luego Y y Z con buffer, y finalmente un comando MC_MOVE_START garantiza un arranque simultáneo y suave.

Los servos Delta B2 deben configurarse correctamente: parámetro 0000 en 0 (modo posición), 0010 en 1 (pulsos + dirección), y 0011 para la relación de engranaje electrónico (ej. 2000 pulsos por revolución).

Aplicación de Bobinado con Modos de Velocidad y Torque

Los dos ejes restantes gestionan bobinado y desbobinado, combinando modos de velocidad y torque. El desbobinado usa velocidad para sincronización lineal, mientras que el bobinado emplea torque para evitar estiramientos o deslizamientos del material.

Se utiliza comunicación MODBUS RTU para cambiar modos en los servos, con código ajustado en nombres de variables:

// Cambio a modo torque para el eje de bobinado
MB_MASTER(
    Request                     := "DB_Bobinado".Cambiar_Modo_Torque,
    SlaveAddr                   := 3, // Dirección del servo de bobinado
    Function                    := 16, // Escritura de múltiples registros
    StartAddr                   := 40021, // Corresponde al parámetro 0020 del servo
    NumItems                    := 1,
    DataPtr                     := P#"DB_Bobinado".Modo_Servo DWORD,
    Done                        => "DB_Bobinado".Cambio_Modo_Completado,
    Error                       => "DB_Alarma".Error_Modbus,
    ErrorID                     => "DB_Alarma".ID_Error_Modbus
);

// Aplicación de torque mediante salida analógica (0-10V para torque nominal)
"DB_Bobinado".Valor_Torque := "DB_Auto".Torque_Bobinado * 3276.7; // Conversión a rango 0-32767
WR_REAL(
    EN                         := TRUE,
    IN                         := "DB_Bobinado".Valor_Torque / 10000.0,
    OUT                        => "QW1" // Salida analógica AQW0
);

Notas importantes: el parámetro 0020 del servo Delta B2 selecciona el modo (0=posición, 1=velocidad, 3=torque) y se asigna al registro 40021. Al cambiar de velocidad a torque, reduzca primero la velocidad a cero para evitar vibraciones bruscas que puedan dañar el material.

Programación Estructurada y Modular

La estructura modular divide el código en bloques funcionales (FB), facilitando la reutilización y el mantenimiento. Por ejemplo, un bloque genérico para control manual permite gestionar ejes y cilindros con interfaces estandarizadas:

VAR_IN_OUT
    Habilitar_Eje       : BOOL;        // Botón de habilitación de eje
    Avance_Manual       : BOOL;        // Avance manual positivo
    Retroceso_Manual    : BOOL;        // Avance manual negativo
    Extender_Cilindro   : BOOL;        // Extensión de cilindro
    Retraer_Cilindro    : BOOL;        // Retracción de cilindro
END_VAR
VAR
    Estado_Eje          : BOOL;        // Estado de habilitación del eje
    Estado_Cilindro     : BOOL;        // Estado de posición del cilindro
    Flanco_Avance       : BOOL;        // Flanco ascendente para avance
    Flanco_Retroceso    : BOOL;        // Flanco ascendente para retroceso
END_VAR

Internamente, el bloque ejecuta movimientos de avance o retroceso mediante comandos como MC_MOVE_JOG y gestiona salidas para cilindros con retroalimentación de sensores. Al instanciar este FB para cada eje, solo se asignan las variables correspondientes, reduciendo código duplicado.

Para manejar pausas en modo automático, se guarda la posición actual y se reanuda desde allí:

IF "DB_Auto".Activar_Pausa THEN
    MC_HALT(
        Axis                    := "DB_Eje1".Eje,
        Execute                 := TRUE,
        Done                    => ,
        Error                   => "DB_Alarma".Error_Pausa_Eje1
    );
    "DB_Auto".Posicion_Guardada := "DB_Eje1".Posicion_Real; // Almacenar posición actual
END_IF;

IF "DB_Auto".Activar_Reanudacion THEN
    MC_MOVE_ABS(
        Axis                    := "DB_Eje1".Eje,
        Execute                 := TRUE,
        Position                := "DB_Auto".Posicion_Guardada,
        Velocity                := 1200.0,
        BufferMode              := 0
    );
END_IF;

La retención de posición tras cortes de energía se logra almacenando la posición en un bloque de datos con retención (DB). En el bloque de inicio (OB100), se recupera esta posición:

// Carga de posición guardada tras reinicio
MC_READ_ACTUAL_POSITION(
    Axis                    := "DB_Eje1".Eje,
    Execute                 := TRUE,
    Position                => "DB_Retencion".Ultima_Pos_Eje1
);

Al configurar el bloque de retención para persistencia, el sistema evita recalibraciones innecesarias después de reinicios.

Recursos y Enfoque Práctico

El conjunto completo incluye programas en TIA Portal V14 SP1 o superior, diagramas eléctricos CAD (con esquemas de conexión y tablas de terminales), y aplicaciones HMI Weintek para monitoreo y control. La pantalla táctil proporciona interfaces para cambio de modos, estados de ejes, gestión de alarmas y configuración de parámetros, sincronizadas con variables del PLC.

Para desarrolladores, es clave estudiar el diseño de bloques FB y su encapsulamiento lógico. Por ejemplo, un bloque de alarmas centraliza fallas de servos, cilindros y módulos, usando matrices para textos de error que se visualizan directamente en el HMI, minimizando lógica en la pantalla y maximizando la reutilización de código.

Este proyecto cubre control PTO, conmutación de modos de servo y programación estructurada en el S7-1200, aplicable a otros sistemas como servos Siemens V90 o paneles HMI alternativos con ajustes menores.

Etiquetas: Siemens S7-1200 Delta B2 Servo Weintek HMI PLC Programming Industrial Automation

Publicado el 6-11 22:26