Programación PLC para Polipasto Eléctrico con S7-1200 (Ladder y SCL)
Programación del control por PLC para polipasto eléctrico (práctica con S7-1200) Este artículo utiliza el Siemens S7-1200 (CPU 1212C DC/DC/DC) como controlador central, con el entorno de desarrollo TIA Portal V17 y programación mixta en LAD (diagrama de escalera) + SCL (texto estructurado), para implementar el control lógico de elevación/descenso/desplazamiento lateral del polipasto eléctrico, protección contra sobrecarga, protección de final de carrera, enclavamiento de parada de emergencia, conmutación mando a distancia/pulsador, autodiagnóstico de fallos y otras funciones. El programa completo incluye 4 bloques FC, 1 bloque DB y 1 ciclo principal OB1, y puede importarse directamente a proyectos reales.
El control de los polipastos eléctricos tradicionales ha estado dominado durante mucho tiempo por el esquema «controlador de levas + relé + contactor». El esquema eléctrico se compone de decenas de relés intermedios y relés temporizadores, lo que dificulta la localización de averías e impide la integración en los sistemas de información de fábrica. Con el avance de la Industria 4.0, cada vez más plantas exigen la conexión de los equipos de elevación a sistemas MES/SCADA para disponer de monitoreo del estado de los equipos, recopilación de datos operativos y alerta temprana de fallos. Sustituir la lógica de relés por un PLC es una tendencia inevitable. Este artículo se basa en la experiencia real de un proyecto entregado por Kelude Industrias Pesadas en una fábrica de piezas de automoción (control centralizado de 68 polipastos eléctricos) y presenta de forma completa el proceso de programación del control por PLC del polipasto eléctrico, incluyendo la tabla de asignación de E/S, la lógica en diagrama de escalera, el código de tratamiento de fallos en SCL, la planificación de la pantalla de monitoreo HMI y el flujo completo de descarga y puesta en marcha del programa.
Configuración de hardware y asignación de E/S
1.1 Selección de componentes
| Equipo | Modelo | Cantidad | Observaciones |
|---|---|---|---|
| PLC CPU | S7-1200 1212C DC/DC/DC | 1 | 6ES7 212-1AE40-0XB0,8DI/6DO |
| Señal digital Módulo de Expansión | SM 1223 DI 8×24VDC / DO 8×24VDC | 1 | 6ES7 223-1BH32-0XB0 |
| Señal analógica Módulo de Expansión | SM 1231 AI 4×13bit | 1 | 6ES7 231-4HD32-0XB0,4~20mA |
| HMI Pantalla Táctil | KTP400 Basic PN | 1 | 6AV6 647-0AD11-3AX0,4.3Pulgadas |
| Relé Intermedio | RIM 24VDC 2CO | 6 | PLC DOContactor Aislamiento de bobina |
| Fuente de Alimentación Conmutada | EDR-120-24 | 1 | AC220VDC24V 5A |
1.2 Tabla de asignación de E/S
| Dirección | Símbolo | Función | Tipo | Descripción |
|---|---|---|---|---|
| %I0.0 | SB1_UP | Botón de elevación | DI | Elevación por mando, Contacto normalmente abierto (NA) |
| %I0.1 | SB2_DN | Botón de descenso | DI | Mando Descenso, Contacto normalmente abierto (NA) |
| %I0.2 | SB3_LT | Botón de desplazamiento a la izquierda | DI | Desplazamiento a la izquierda por mando, Contacto normalmente abierto (NA) |
| %I0.3 | SB4_RT | Botón de desplazamiento a la derecha | DI | Desplazamiento a la derecha por mando, Contacto normalmente abierto (NA) |
| %I0.4 | SQ1_UL | Final de carrera superior | DI | Interruptor de Posición, Contacto normalmente cerrado (NC) |
| %I0.5 | SQ2_DL | Final de carrera inferior | DI | Interruptor de Posición, Contacto normalmente cerrado (NC) |
| %I0.6 | SB0_EST | Botón de Parada de Emergencia | DI | Contacto NC,0=Disparo |
| %I0.7 | FR_OL | Relé Térmico | DI | Relé Térmico, Contacto normalmente cerrado (NC) |
| %I1.0 | OL1_OVLD | Señal de sobrecarga | DI | Limitador de Sobrecarga Salida, Contacto normalmente abierto (NA) |
| %I1.1 | RC_SEL | Mando a distancia/Conmutación de mando | DI | 0=Mando 1=Mando a distancia |
| — | Entrada analógica: sensor de sobrecarga(4~20mA0~20t) | |||
| Dirección | Símbolo | Función | Tipo | Descripción |
|---|---|---|---|---|
| %Q0.0 | KM1_UP | Elevación por mando Contactor | DO | Control del circuito principal de elevación Contactor |
| %Q0.1 | KM2_DN | Contactor de descenso | DO | Control del circuito principal de descensocipal de elevación Contactor |
| %Q0.2 | KM3_LT | Contactor de desplazamiento a la izquierdaontactor | DO | Control del circuito principal de desplazamiento a la izquierda Contactor |
| %Q0.3 | KM4_RT | Contactor de desplazamiento a la derechatactor | DO | Control del circuito principal de desplazamiento a la derecha Contactor |
| %Q0.4 | KA1_ALM | Alarma de fallo | DO | Accionamiento Alarma Acústica y Visual |
| %Q0.5 | KA2_RUN | Indicador de funcionamiento | DO | Verdeluz indicadora de funcionamiento |
2. Programación en diagrama LAD
2.1 Arquitectura del programa principal OB1
El OB1 es el bloque de organización del ciclo principal, con un tiempo de escaneo predeterminado de 10 ms. En orden de ejecución, se invocan los siguientes bloques FC:
| Orden de llamada | FCBloque | Función | Lenguaje de programación |
|---|---|---|---|
| 1 | FC100_Safety | enclavamiento de seguridad(Parada de emergencia/Final de carrera superior/Relé térmico/Sobrecarga) | LAD |
| 2 | FC200_Hoist Ctrl | Lógica de control de elevación(Elevación por mando/Descenso/Enclavamiento) | LAD |
| 3 | FC300_Travel Ctrl | Lógica de control de funcionamiento(Desplazamiento a la izquierda por mando/Desplazamiento a la derecha por mando/Enclavamiento) | LAD |
| 4 | FC400_Fault Diag | Diagnóstico de Fallas Y alarma(SCL) | SCL |
2.2 Enclavamiento de seguridad FC100 (Diagrama LAD)
// FC100: Lógica de enclavamiento de seguridad // Todas las condiciones de seguridad en serie——Si alguna condición no se cumple, se prohíbe el funcionamiento "SB0_EST" "SQ1_UL" "SQ2_DL" "FR_OL" "SafetyOK" ----|/|-------------|/|-------------|/|-------------|/|------------------------( ) // Enclavamiento por sobrecarga:Solo se permite el descenso en caso de sobrecarga "OL1_OVLD" "SB2_DN" ----| |------------| |-----------------------------------------------------------( "Overload_DN_Only" ) // Reinicio de señal de sobrecarga(Confirmación manual) "Overload_DN_Only" "SB1_UP" "Overload_Latch" ----| |-------------------| |----------------------------------------------------( )
2.3 Control de elevación FC200 (Diagrama LAD)
// FC200: Lógica de control de elevación // Elevación:SafetyOK + Final de carrera superior no activado + Sin sobrecarga + Descenso no en funcionamiento + Botón de elevación // Descenso:SafetyOK + Final de carrera inferior no activado + Elevación no en funcionamiento + Botón de descenso(En caso de sobrecarga, solo se permite el descenso) "SafetyOK" "SQ1_UL" "Overload_Latch" "KM2_DN" "SB1_UP" "KM1_UP" ----| |-------------| |-------------|/|----------------|/|-----------| |----------( ) | | "KM1_UP" | ----| |----------------------------------------------------------------------------+ "SafetyOK" "SQ2_DL" "KM1_UP" "SB2_DN" "KM2_DN" ----| |-------------| |-------------------------------|/|-----------| |----------( ) | | "KM2_DN" | ----| |----------------------------------------------------------------------------+ // enclavamiento eléctrico:KM1yKM2Nunca deben activarse simultáneamente "KM1_UP" "KM2_DN" "Interlock_OK" ----| |-----------| |--------------( ) // Para detección de fallas,No debe conducir en condiciones normales
2.4 Protección por temporización — prevención de arranques frecuentes
// Protección contra arranques frecuentes:Retardo después de cada parada500msSolo entonces se permite un nuevo arranque // Evitar la activación frecuente del contactor en intervalos muy cortos(Vibración de contactos/Arco eléctrico) "KM1_UP" ----|/|----------------------------------------------------------------------------- "KM2_DN" TON_Start_Delay ----|/|----------------[TON: #Temp_StartDelay ] PT= T#500MS Q= "Start_Allowed" // Incorporación al circuito de control principal "Start_Allowed" "SB1_UP" "KM1_UP" // Elevación ----| |----------------| |-----------( )
3. Código de diagnóstico de fallas en SCL
3.1 FC400_FaultDiag (Texto estructurado SCL)
// FC400: Diagnóstico de fallas y alarmas // Lenguaje:SCL(Texto estructurado) // Función:Monitoreo en tiempo real del estado del equipo,Detección13tipos de fallas tipo,Salida de código de falla aHMI FUNCTION FC400_FaultDiag : Void VAR_INPUT I_SafetyOK : Bool; // Estado de enclavamiento de seguridad I_KM1_UP : Bool; // Retroalimentación del contactor de elevación I_KM2_DN : Bool; // Retroalimentación del contactor de descenso I_Overload_Latch : Bool; // Bloqueo por sobrecarga I_OL1_OVLD : Bool; // Señal del sensor de sobrecarga I_RunHours : Real; // Tiempo de funcionamiento acumulado(horas) END_VAR VAR_OUTPUT Q_FaultCode : Int; // Salida de código de falla aHMI Q_FaultMsg : String[40]; // Descripción de falla Q_Alarm_Output : Bool; // Activación de alarma acústica y visual Q_TotalRunHours : Real; // Tiempo total de funcionamiento END_VAR VAR vFaultCount : Int; // Contador de fallas vPrev_KM1 : Bool; // Detección de flanco del contactor de elevación vPrev_KM2 : Bool; // Detección de flanco del contactor de descenso vOverloadTimer : Time; // Duración de la sobrecarga END_VAR // === Lista de detección de fallas === Q_FaultCode := 0; // Sin fallas por defecto Q_Alarm_Output := FALSE; vFaultCount := 0; // Sin fallas por defecto1:Parada de emergencia activada IF I_SafetyOK = FALSE AND "SB0_EST" = FALSE THEN Q_FaultCode := 1; Q_FaultMsg := 'Botón de parada de emergencia presionado'; vFaultCount := vFaultCount + 1; END_IF; // Sin fallas por defecto2:Final de carrera superior activado IF "SQ1_UL" = FALSE THEN Q_FaultCode := 2; Q_FaultMsg := 'Final de carrera superior activado(Distancia insuficiente del gancho al tambor)'; vFaultCount := vFaultCount + 1; END_IF; // Sin fallas por defecto3:Final de carrera inferior activado IF "SQ2_DL" = FALSE THEN Q_FaultCode := 3; Q_FaultMsg := 'Final de carrera inferior activado(Cable del tambor insuficiente3vueltas)'; vFaultCount := vFaultCount + 1; END_IF; // Sin fallas por defecto4:Sobrecarga del relé térmico IF "FR_OL" = FALSE THEN Q_FaultCode := 4; Q_FaultMsg := 'Protección contra sobrecarga del motor(Disparo del relé térmico)'; vFaultCount := vFaultCount + 1; END_IF; // Sin fallas por defecto5:sobrecarga IF I_Overload_Latch THEN Q_FaultCode := 5; Q_FaultMsg := 'Disparo del limitador de sobrecarga(Carga>110%)'; vFaultCount := vFaultCount + 1; END_IF; // Sin fallas por defecto6:KM1/KM2Activación simultánea(Contactores pegados) IF I_KM1_UP AND I_KM2_DN THEN Q_FaultCode := 6; Q_FaultMsg := 'Falla grave:Activación simultánea de contactores de alta y baja velocidad'; vFaultCount := vFaultCount + 1; END_IF; // Sin fallas por defecto7:Retroalimentación anormal del contactor(Discrepancia entre comando de salida y retroalimentación) IF ("KM1_UP" = TRUE AND I_KM1_UP = FALSE) OR ("KM2_DN" = TRUE AND I_KM2_DN = FALSE) THEN Q_FaultCode := 7; Q_FaultMsg := 'Respuesta anormal del contactor(Posible atasco/Bobina quemada)'; vFaultCount := vFaultCount + 1; END_IF; // Si hay cualquier falla,Activación de salida de alarma IF vFaultCount > 0 THEN Q_Alarm_Output := TRUE; END_IF; // === Acumulado durante el funcionamiento === Q_TotalRunHours := I_RunHours + (TIME_TO_REAL(TIME_NOW() - "Start_Time")) / 3600000.0; END_FUNCTION 4. Pantallas de monitoreo HMI y configuración de comunicación
4.1 Tabla de variables HMI y planificación de pantallas
| HMIPantalla | Contenido mostrado | Vinculación DBVariable |
|---|---|---|
| Pantalla principal | Estado del equipo/Actual Carga/Tiempo de funcionamiento | DB1.Status / DB1.Load / DB1.Run Hours |
| Pantalla de control | Elevación por mando/Descenso/Desplazamiento a la izquierda por mando/Botón virtual de desplazamiento a la derecha | Uso en conmutación manual/automático |
| Pantalla de fallos | Código de falla/Descripción/Hora de ocurrencia/Botón de reset | DB1.Fault Code / DB1.Fault Msg |
| Parámetro Pantalla | Valor de ajuste de sobrecarga/Puesta a cero del tiempo de funcionamiento/Cambio de contraseña | DB1.Overload_Set / DB1.Password |
4.2 Configuración de comunicación PROFINET (configuración en TIA Portal)
// Parámetros de red de configuración del dispositivo // 1. S7-1200 CPU 1212C // IP: 192.168.0.10 // Máscara de subred: 255.255.255.0 // PROFINETNombre del dispositivo: plc-hoist-01 // 2. KTP400 Basic HMI // IP: 192.168.0.20 // Máscara de subred: 255.255.255.0 // Nombre del dispositivo: hmi-hoist-01 // 3. HMIConfiguración de conexión(enHMIConfigurado en la configuración) // Tipo de conexión tipo: PROFINET (S7-1200) // HMIDispositivo: HMI_1 [192.168.0.20] // Controlador: plc-hoist-01 [192.168.0.10] // Punto de acceso: S7ONLINE // Subred: PN/IE_1 // 4. HMIEjemplo de conexión de variables(PLC tag HMI tag) // "DB1".FaultCode "FaultCode" (Int, Período de adquisición500ms) // "DB1".Load_Current "CurrentLoad"(Real, Período de adquisición200ms) // "DB1".Status_Running "IsRunning" (Bool, Período de adquisición100ms)
5. Descarga del programa y puesta en marcha
5.1 Procedimiento de descarga
// Proceso de descarga(TIA Portal V17) // 1. Compilar todo el proyecto(Project Build Rebuild All) // Asegurar"0 errors, 0 warnings" // 2. Seleccionar el dispositivo de destino(Select target device) // Acceso en línea DetectadoPLC AsignaciónIP 192.168.0.10 // 3. Descargar configuración de hardware(Download HW config) // Se reiniciará automáticamentePLC(aproximadamente15segundos) // 4. Descargar programa de software(Download SW) // Seleccionar"Download all blocks" Sobrescribir programa existente // 5. Monitoreo en línea(Go online) // Hacer clic en"gafas"Icono para ingresar al modo de monitoreo en línea // Observar si las vías verdes del diagrama de escalera conducen según lo esperado // 6. Forzar variables(Force table)—— Para puesta en marcha // Se puede forzar el cambio sin operar físicamente los botonesDIMonitoreo en tiempo real del estado del equipo // Por ejemplo, forzar%I0.0=1Simular la presión del botón de elevación // Atención:Después de la puesta en marcha, asegúrese de eliminar todos los valores forzados
5.2 Lista de verificación para la puesta en marcha
Con la parada de emergencia pulsada, todas las salidas KM son 0 y la salida de alarma Q0.4 es 1
Con la parada de emergencia reseteada y el límite superior no activado, al pulsar SB1, KM1 se activa y el motor sube
Al soltar SB1, KM1 se desactiva y el motor se detiene
Durante la subida, al activar el límite superior SQ1, KM1 se desconecta inmediatamente
Con KM1 activado, al pulsar SB2, KM2 no debe activarse (verificar enclavamiento)
Con señal de sobrecarga activa, la subida queda bloqueada; solo se permite el descenso
Si el intervalo entre arranques y paradas es inferior a 500 ms, la segunda orden no responde (protección de retardo activa)
La pantalla de fallas del HMI muestra el código de falla y la descripción correctos
La comunicación PROFINET no se interrumpe (sin ventanas emergentes de alarma en el HMI)
Preguntas frecuentes
P: ¿Cuánto aumenta el coste al sustituir el control por relés por un control por PLC?
R: En un polipasto eléctrico individual, el coste del hardware aumenta aproximadamente entre 190 € y 320 € al pasar de control por relés a control por PLC (CPU S7-1200 ≈ 100 € + módulo de expansión ≈ 75 € + HMI ≈ 150 € + materiales auxiliares ≈ 40 €). Sin embargo, en instalaciones con múltiples unidades, el coste se reparte y se reduce notablemente: en el caso de 68 unidades, el incremento por polipasto fue de solo unos 45 €. Además, la solución con PLC reduce en un 40 % el tiempo de diagnóstico de fallas, permite el monitoreo remoto y el mantenimiento preventivo, y los costes de operación y las pérdidas por paradas a largo plazo son muy inferiores a los del esquema con relés.
P: Si no domino SCL, ¿puedo programar el polipasto eléctrico solo con diagrama de contactos (LAD)?
R: Por supuesto. Las FC100/FC200/FC300 de este artículo están programadas en LAD; solo la FC400 de diagnóstico de fallas utiliza SCL. El diagnóstico de fallas también puede implementarse en LAD con palabras de estado e instrucciones de comparación, pero SCL resulta más conciso para el procesamiento de cadenas y operaciones matemáticas. Para aplicaciones puramente de ingeniería, el estilo tipo esquema eléctrico de LAD es más fácil de entender para los electricistas; se recomienda usar LAD para la lógica principal y SCL para funciones auxiliares.
P: ¿Cómo elegir entre un control por PLC y un variador de frecuencia?
R: La solución con PLC se utiliza para el control lógico (conmutación on/off), mientras que el variador de frecuencia se emplea para la regulación de velocidad. No son opciones excluyentes. La combinación más consolidada para polipastos eléctricos es "PLC + variador de frecuencia": el PLC gestiona la lógica (parada de emergencia, finales de carrera, enclavamientos, alarmas) y el variador controla el motor (arranque suave, regulación de velocidad, frenado). Para polipastos de más de 5 t se recomienda incorporar un variador para lograr un posicionamiento lento y preciso; para polipastos de menos de 5 t con una función única, la solución PLC + contactores es totalmente suficiente.
P: ¿Qué opción es mejor, S7-1200 o S7-200 SMART?
R: El S7-200 SMART tiene un coste menor (CPU ≈ 60 €) y es adecuado para el control de máquinas individuales con menos de 10 unidades. El S7-1200 admite PROFINET en tiempo real, ideal para redes con múltiples equipos y para la integración con sistemas MES/SCADA. Recomendación: para una sola unidad o series pequeñas, S7-200 SMART (económico); para supervisión centralizada de varias unidades, S7-1200 (conectividad); si se necesita comunicación PROFINET con el variador, es imprescindible el S7-1200. La lógica de programación es idéntica en ambas plataformas, por lo que la migración del programa resulta sencilla.