CONTENIDOS


 


Materiales Eléctricos Industriales | Stock 4.0


PROGRAMACION LENGUAJES

LENGUAJES DE PROGRAMACION MAS USADOS, EJEMPLOS.

En la práctica, el Diagrama de Escalera (LD) sigue siendo el más predominante, especialmente en América del Norte y para aplicaciones de control discreto. Sin embargo, el Texto Estructurado (ST) y el Diagrama de Bloques de Función (FBD) están ganando terreno, especialmente en Europa y para aplicaciones más complejas, control de movimiento o integración de datos. El Gráfico de Funciones Secuenciales (SFC) se utiliza como una capa organizativa para secuencias complejas, con las acciones internas programadas en cualquiera de los otros lenguajes.

Los entornos de programación modernos (como TIA Portal de Siemens o Studio 5000 de Rockwell) a menudo permiten la programación multilingüe, lo que significa que puedes usar una combinación de estos lenguajes dentro del mismo proyecto, eligiendo el más adecuado para cada parte de la lógica del control.

¿Hay algún lenguaje en particular que te gustaría que detallara aún más o que te pusiera un ejemplo de su aplicación?

Ejemplo de Diagrama de Escalera (Ladder Diagram - LD / LAD)

El Diagrama de Escalera es el lenguaje más visual y uno de los más fundamentales en la programación de PLCs. Para entenderlo bien, lo mejor es ver algunos ejemplos de cómo se representa la lógica.

Conceptos Básicos del Diagrama de Escalera (LD/LAD)

Imagina un Diagrama de Escalera como un circuito eléctrico. Tiene dos "rieles" verticales: el riel izquierdo es la fuente de energía (L1 o línea positiva) y el riel derecho es el retorno o neutro (L2 o línea negativa). Los "peldaños" horizontales entre estos rieles contienen la lógica de control.

Los elementos principales son:

  • Contactos (Entradas):
    • Normalmente Abierto (NO): Se cierra y permite que la energía fluya cuando la condición asociada es VERDADERA (ej., un botón es presionado, un sensor detecta algo). Se representa como --| |--.
    • Normalmente Cerrado (NC): Se abre y detiene el flujo de energía cuando la condición asociada es VERDADERA (ej., un botón es presionado, un sensor detecta algo). Se representa como --|/|--.
  • Bobinas (Salidas):
    • Representan una salida que se activa (se energiza) cuando hay un flujo de energía hasta ella. Se representa como --( )--.
  • Temporizadores y Contadores: Bloques especiales que se insertan en los peldaños para funciones de tiempo o conteo.

 

Ejemplos de Lógica en Diagrama de Escalera

 

Ejemplo 1: Arranque y Parada Simple de un Motor (Lógica de Auto-Retención)

Este es el circuito de control más básico para un motor, donde un botón de arranque lo enciende y un botón de parada lo apaga.

Riel Izquierdo                                                         Riel Derecho

   |                                                                        |

   |                                                                        |

   |---[ Stop_PB]----[ Start_PB]------[ Motor_Run]------------------(Motor_Contactor) ---

   |      NC             NO               NO                                |

   |                                                                        |

   |---------------------[ Motor_Run ]--------------------------------------|

   |                       NO                                               |

Explicación:

  1. Peldaño 1:
    • Stop_PB: Es un contacto Normalmente Cerrado. Siempre que no se presione el botón de parada, permite el flujo de energía.
    • Start_PB: Es un contacto Normalmente Abierto. Cuando se presiona el botón de arranque, se cierra y permite el flujo de energía.
    • Motor_Run: Es un contacto Normalmente Abierto (asociado a la bobina Motor_Run).
    • Motor_Contactor: Es la bobina de salida que activaría el contactor real del motor.
  2. Lógica:
    • Cuando se presiona Start_PB, la energía fluye a través de Stop_PB (que está cerrado) y Start_PB (que ahora está cerrado), energizando la bobina Motor_Contactor.
    • Al mismo tiempo, la bobina Motor_Contactor energiza el contacto Motor_Run en el peldaño inferior.
    • Este contacto Motor_Run (en paralelo con Start_PB) crea una autorretención. Incluso si se suelta Start_PB, la energía sigue fluyendo a través de Motor_Run y Stop_PB, manteniendo el motor encendido.
    • Para apagar el motor, se presiona Stop_PB. Al ser Normalmente Cerrado, se abrirá, interrumpiendo el flujo de energía y des energizando Motor_Contactor, lo que a su vez abre el contacto Motor_Run y detiene el motor.

 

Ejemplo 2: Luz Indicadora con Temporizador

Queremos que una luz se encienda 5 segundos después de que se active un sensor de presencia.

Riel Izquierdo                                                         Riel Derecho

   |                                                                        |

   |                                                                        |

   |---[ Sensor Presencia ]-----------------------------------------------( TON_0 )---

   |      NO                                                                |

   |                                                                        |

   |                                                                        |

   |---[ TON_0.Q ]--------------------------------------------------------( Luz Indicadora )---

   |       NO                                                               |

Explicación:

  1. Peldaño 1:
    • Sensor Presencia: Un contacto Normalmente Abierto. Cuando el sensor detecta algo, este contacto se cierra.
    • TON_0: Es un Temporizador con Retardo a la Conexión (Timer On Delay).
      • IN (Entrada): Recibe la energía del Sensor Presencia.
      • PT (Preset Time): Aquí se configura el tiempo de retardo (ej., 5 segundos).
      • Q (Output): Un bit de salida que se activa (VERDADERO) después de que el tiempo PT ha transcurrido, siempre y cuando la entrada IN siga activada.
  2. Peldaño 2:
    • TON_0. Q: Un contacto Normalmente Abierto asociado a la salida del temporizador.
    • Luz Indicadora: La bobina de salida que enciende la luz.
  3. Lógica:
    • Cuando Sensor Presencia detecta algo, el temporizador TON_0 comienza a contar.
    • Después de 5 segundos, si el sensor sigue activo, TON_0. Q se activa.
    • Cuando TON_0. Q se activa, permite el flujo de energía a Luz Indicadora, encendiéndola.
    • Si el sensor de presencia se desactiva antes de que pasen los 5 segundos, el temporizador se reinicia y la luz no se enciende.

 

Ejemplo 3: Lógica AND y OR

  • Lógica AND (Y): Una salida se activa solo si TODAS las entradas son verdaderas.

·         Riel Izquierdo                                            Riel Derecho

·            |                                                            |

·            |---[ Sensor_1]----[ Sensor_2]-------------------------(Motor_AND)---

·            |      NO              NO                                    |

·            |                                                            |

Explicación: Motor_AND se activa solo si Sensor_1 Y Sensor_2 están activos.

  • Lógica OR (O): Una salida se activa si CUALQUIERA de las entradas es verdadera.

·         Riel Izquierdo                                            Riel Derecho

·            |                                                            |

·            |---[ Pulsador_A ]------------------------------------------|

·            |      NO                                                    |

·            |             +---------------------------------------------( Bomba_OR )---

·            |---[ Pulsador_B ]------------------------------------------|

·            |      NO                                                    |

Explicación: Bomba_OR se activa si Pulsador_A o Pulsador_B está activo (los contactos están en paralelo).

 

Ejemplo 4: Contador

Contar cajas en una cinta transportadora y detener la cinta después de 10 cajas.

Riel Izquierdo                                                         Riel Derecho

   |                                                                        |

   |                                                                        |

   |---[ Sensor Cajas]---------------------------------------------------(CONT_0) ---

   |      NO                                                                |

   |        (CU: Contar hacia arriba, Reset: Reinicio, PV: Valor preestablecido)

   |                                                                        |

   |---[ Stop_Reset ]-------------------------------------------------------|

   |      NO                                                                |

   |                                                                        |

   |---[ CONT_0. Q]-------------------------------------------------------(Cinta Motor) ---

   |       NC                                                               |

Explicación:

  1. Peldaño 1:
    • Sensor Cajas: Un contacto Normalmente Abierto. Cada vez que el sensor detecta una caja, este contacto se cierra un instante, enviando un pulso al contador.
    • CONT_0: Es un Contador Ascendente (CTU).
      • CU (Count Up): Entrada para contar pulsos.
      • PV (Preset Value): Valor al que queremos contar (ej., 10).
      • Reset: Entrada para reiniciar el contador a 0.
      • Q (Output): Se activa (VERDADERO) cuando el contador alcanza o supera el PV.
  2. Peldaño 2:
    • Stop_Reset: Un botón para reiniciar el contador a cero.
  3. Peldaño 3:
    • CONT_0. Q: Un contacto Normalmente Cerrado asociado a la salida del contador.
    • Cinta Motor: La bobina de salida que controla el motor de la cinta transportadora.
  4. Lógica:
    • Cada vez que Sensor Cajas detecta una caja, CONT_0 incrementa su conteo.
    • Cuando el conteo de CONT_0 llega a 10 (su PV), CONT_0.Q se activa.
    • Como el contacto CONT_0.Q en el peldaño 3 es Normalmente Cerrado, al activarse se abre, interrumpiendo el flujo de energía a Cinta Motor y deteniendo la cinta.
    • Para reiniciar el sistema, se presiona Stop_Reset, lo que reinicia el contador.

 

Estos ejemplos ilustran cómo el Diagrama de Escalera utiliza un enfoque visual, similar a un circuito eléctrico, para representar la lógica de control. Es su simplicidad y familiaridad para el personal técnico lo que lo mantiene como uno de los lenguajes más populares en la automatización industrial.

EJEMPLOS DE FUNCION FBD

Diagrama de Bloques de Función (FBD) es otro de los lenguajes fundamentales en la programación de PLC según la norma IEC 61131-3. A diferencia del Ladder, FBD se enfoca en el flujo de datos y funciones entre bloques predefinidos, lo que lo hace muy intuitivo para el control de procesos y algoritmos.

 

Conceptos Básicos del Diagrama de Bloques de Función (FBD)

En FBD, la lógica se construye conectando "bloques" gráficos, donde cada bloque representa una función específica (lógica booleana, temporizadores, contadores, operaciones matemáticas, etc.). Las líneas conectan las salidas de un bloque a las entradas de otro, indicando cómo los datos y las señales fluyen a través del programa.

Los elementos principales son:

  • Bloques de Función: Cajas rectangulares con entradas a la izquierda y salidas a la derecha. El nombre de la función suele estar dentro del bloque (ej., AND, ADD, TON).
  • Entradas: Puntos en el lado izquierdo del bloque que reciben valores o estados de otras partes del programa o de las entradas físicas del PLC.
  • Salidas: Puntos en el lado derecho del bloque que envían los resultados de la función a otras partes del programa o a las salidas físicas del PLC.
  • Líneas de Conexión: Unen las salidas de un bloque/variable con las entradas de otro bloque/variable, mostrando el flujo de datos.
  • Variables: Pueden aparecer como entradas o salidas sueltas, o como los nombres de las señales que conectan los bloques.

 

Ejemplos de Lógica en Diagrama de Bloques de Función

 

Ejemplo 1: Lógica AND Simple

Queremos que un motor se encienda solo si se cumplen dos condiciones (ambos sensores activos).

   +----------+

---|> Sensor_1 |

   +----------+

             \     +-----+

              +--->| AND |---> Motor_ON

             /     +-----+

   +----------+

---|> Sensor_2 |

   +----------+

Explicación:

  • Tenemos dos entradas: Sensor_1 y Sensor_2.
  • Un bloque AND toma estas dos entradas.
  • La salida del bloque AND se conecta a la variable Motor_ON.
  • Lógica: Motor_ON será VERDADERO solo si Sensor_1 es VERDADERO Y Sensor_2 es VERDADERO. Si uno o ambos son FALSOS, Motor_ON será FALSO.

Ejemplo 2: Lógica OR Simple

Queremos que una luz de alarma se active si se detecta cualquier falla (temperatura alta O presión baja).

   +----------+

---|> Temp_Alta |

   +----------+

             \     +----+

              +--->| OR |---> Alarma Activa

             /     +----+

   +----------+

---|> Pres_Baja |

   +----------+

Explicación:

  • Dos entradas: Temp_Alta y Pres_Baja.
  • Un bloque OR toma estas dos entradas.
  • La salida del bloque OR se conecta a la variable Alarma Activa.
  • Lógica: Alarma Activa será VERDADERO si Temp_Alta es VERDADERO O Pres_Baja es VERDADERO (o ambos). Solo será FALSO si ambos son FALSOS.

Ejemplo 3: Temporizador con Retardo a la Conexión (TON)

Queremos que una bomba se encienda 10 segundos después de que se presione un botón de arranque, y se apague cuando se suelte.

   +-----------+

---|> Start_PB |

   +-----------+

             \     +----------+

              +--->| TON      |

                   | IN = ... |

                   | PT = T#10s |

                   | Q          |---> Bomba_ON

                   +----------+

Explicación:

  • Start_PB: La entrada que activa el temporizador.
  • TON: Es el bloque de función para un Temporizador con Retardo a la Conexión.
    • IN (Input): La entrada que activa el temporizador. Aquí se conecta Start_PB.
    • PT (Preset Time): El tiempo de retardo que queremos (ej., T#10s para 10 segundos).
    • Q (Output): La salida del temporizador, que se vuelve VERDADERA después de que el PT ha transcurrido, siempre y cuando IN siga VERDADERO.
  • Bomba_ON: La salida que controla la bomba.
  • Lógica: Cuando Start_PB se vuelve VERDADERO, el temporizador TON empieza a contar. Después de 10 segundos, si Start_PB sigue VERDADERO, la salida Q del TON se activa, encendiendo Bomba_ON. Si Start_PB se desactiva antes de los 10 segundos, el temporizador se reinicia.

 

Ejemplo 4: Control de Nivel con un Comparador Analógico

Queremos que una válvula de llenado se cierre cuando el nivel de un tanque supere un umbral de 80 unidades, usando un sensor de nivel analógico.

   +-----------+

---|> Sensor Nivel |

   +-----------+

             \

              +--->|           |

                   | GREATER   |---> Cierra_Valvula

              +--->|           |

             /     |           |

   +-----+         | (Valor Fijo: 80)

---|> 80 |--------+-----------+

   +-----+

Explicación:

  • Sensor Nivel: Una entrada analógica (por ejemplo, 0-10V o 4-20mA) que representa el nivel del tanque.
  • GREATER: Es un bloque de función de comparación (mayor que).
    • Tiene dos entradas: la primera para el valor actual (Sensor Nivel) y la segunda para el valor de comparación (aquí, un valor fijo de 80).
    • Su salida es VERDADERA si la primera entrada es mayor que la segunda.
  • Cierra_Valvula: La salida digital que activa la válvula para que se cierre.
  • Lógica: Cuando el valor de Sensor Nivel se vuelve mayor que 80, la salida del bloque GREATER se activa, lo que a su vez activa Cierra_Valvula.

 

Ejemplo 5: Suma de Valores Analógicos

Sumar las lecturas de dos sensores de flujo y mostrar el flujo total.

   +------------+

---|> Flujo_Sensor1 |

   +------------+

             \     +-----+

              +--->| ADD |---> Flujo Total

             /     +-----+

   +------------+

---|> Flujo_Sensor2 |

   +------------+

Explicación:

  • Flujo_Sensor1, Flujo_Sensor2: Entradas analógicas que representan los valores de flujo.
  • ADD: Es un bloque de función de suma.
    • Tiene múltiples entradas numéricas.
    • Su salida es la suma de todas sus entradas.
  • Flujo Total: Una variable analógica o registro que almacena el resultado de la suma.
  • Lógica: El bloque ADD suma los valores de Flujo_Sensor1 y Flujo_Sensor2, y el resultado se asigna a Flujo Total.

 

Estos ejemplos demuestran cómo el FBD permite construir la lógica de control de una manera muy visual, enfocándose en cómo los datos fluyen a través de las diferentes funciones. Su modularidad y claridad lo hacen particularmente útil para el control de procesos y aplicaciones donde la interconexión de funciones es clave.

Ejemplos de Texto Estructurado (Structured Text - ST)

El Texto Estructurado (ST) es un lenguaje de programación de PLC que se asemeja mucho a lenguajes de programación de alto nivel como Pascal o C. Es muy potente para lógica compleja, cálculos matemáticos y manipulación de datos.

 

Conceptos Básicos del Texto Estructurado (ST)

En ST, el programa se escribe como una serie de sentencias, utilizando operadores, funciones y estructuras de control. Cada sentencia generalmente termina con un punto y coma (;).

Los elementos clave incluyen:

  • Variables: Nombres para almacenar datos (ej., Temperatura Actual, Conteo Cajas).
  • Tipos de Datos: Definen el tipo de información que una variable puede almacenar (ej., BOOL para verdadero/falso, INT para enteros, REAL para números con decimales, TIME para duraciones).
  • Operadores:
    • Aritméticos: +, -, *, /
    • Comparación: =, <>, <, >, <=, >=
    • Lógicos: AND, OR, NOT, XOR
  • Estructuras de Control:
    • Condicionales: IF...THEN...ELSIF...ELSE...END_IF;
    • Selección: CASE...OF...ELSE...END_CASE;
    • Bucles (Loops): FOR...DO...END_FOR;, WHILE...DO...END_WHILE;, REPEAT...UNTIL...END_REPEAT;
  • Funciones y Bloques de Función: Llamadas a funciones predefinidas (ej., SQRT para raíz cuadrada) o bloques de función (ej., TON para temporizador).

 

Ejemplos de Lógica en Texto Estructurado

 

Ejemplo 1: Arranque y Parada de un Motor con Auto-Retención

Este es el equivalente al ejemplo de Ladder que vimos, pero en ST.

(* Declaración de variables (generalmente en una tabla de variables global o local) *)

VAR

    Start_PB      : BOOL; (* Pulsador de arranque *)

    Stop_PB       : BOOL; (* Pulsador de parada *)

    Motor_Contactor: BOOL; (* Salida para el contactor del motor *)

END_VAR

 

(* Lógica de programa *)

IF (Start_PB AND NOT Motor_Contactor AND NOT Stop_PB) THEN

    Motor_Contactor: = TRUE; (* Si se presiona Start y el motor no está encendido y no se presiona Stop, encenderlo *)

ELSIF (Stop_PB) THEN

    Motor_Contactor: = FALSE; (* Si se presiona Stop, apagar el motor *)

END_IF;

Explicación:

  • Las primeras líneas con VAR y END_VAR son para la declaración de variables, donde se define el nombre y tipo de dato de cada señal.
  • El bloque IF evalúa la condición para encender el motor: Start_PB debe ser TRUE (presionado) Y Motor_Contactor debe ser FALSE (motor no encendido aún) Y Stop_PB debe ser FALSE (botón de parada no presionado). Si todo es TRUE, Motor_Contactor se establece en TRUE.
  • El bloque ELSIF (else if) evalúa la condición para apagar el motor: Si Stop_PB es TRUE (presionado), entonces Motor_Contactor se establece en FALSE.

 

Ejemplo 2: Luz Indicadora con Temporizador (TON - Timer On Delay)

Utilizamos el bloque de función TON para encender una luz después de un retardo de 5 segundos.

(* Declaración de variables *)

VAR

    Sensor Presencia: BOOL; (* Entrada de sensor *)

    Luz Indicadora: BOOL; (* Salida de luz *)

    Mi Temporizador : TON; (* Instancia del bloque de función TON *)

END_VAR

 

(* Lógica de programa *)

MiTemporizador (IN:= Sensor Presencia, PT:= T#5s); (* Llamada al temporizador *)

 

Luz Indicadora:= Mi Temporizador.Q; (* La luz se enciende cuando la salida del temporizador está activa *)

Explicación:

  • MiTemporizador : TON; declara una instancia de un temporizador llamado MiTemporizador.
  • MiTemporizador (IN:= Sensor Presencia, PT := T#5s); es la llamada al bloque de función TON.
    • IN := Sensor_Presencia: Conecta la entrada IN del temporizador a la variable Sensor_Presencia.
    • PT := T#5s: Establece el tiempo de retardo (Preset Time) en 5 segundos. El formato T#5s es el estándar para tiempo.
  • Luz Indicadora:= MiTemporizador.Q;: La variable Luz Indicadora tomará el valor de la salida Q del temporizador. Q es TRUE cuando el tiempo ha transcurrido y la entrada IN sigue activa.

 

Ejemplo 3: Lógica AND y OR

(* Declaración de variables *)

VAR

    Sensor_1         : BOOL;

    Sensor_2         : BOOL;

    Pulsador_A       : BOOL;

    Pulsador_B       : BOOL;

    Motor_AND        : BOOL;

    Bomba_OR         : BOOL;

END_VAR

 

(* Lógica AND *)

Motor_AND := Sensor_1 AND Sensor_2;

 

(* Lógica OR *)

Bomba_OR := Pulsador_A OR Pulsador_B;

Explicación:

  • Las operaciones lógicas (AND, OR) se escriben directamente.
  • La sentencia := es el operador de asignación. Motor_AND será TRUE si Sensor_1 y Sensor_2 son TRUE.
  • Bomba_OR será TRUE si Pulsador_A o Pulsador_B (o ambos) son TRUE.

 

Ejemplo 4: Contador Ascendente (CTU) y Condición de Parada

Contar cajas y detener la cinta después de 10.

(* Declaración de variables *)

VAR

    Sensor Cajas    : BOOL;

    Stop_Reset      : BOOL;

    Cinta Motor    : BOOL;

    Contador Cajas   : CTU; (* Instancia del contador *)

END_VAR

 

(* Lógica de programa *)

Contador Cajas (CU := Sensor_Cajas, RESET := Stop_Reset, PV := 10); (* Llamada al contador *)

 

IF Contador Cajas.Q THEN (* Si el contador alcanzó su valor preestablecido *)

    Cinta Motor := FALSE; (* Apagar la cinta *)

ELSE

    Cinta Motor := TRUE; (* Si no, mantener la cinta encendida (asumiendo que se enciende por otra lógica inicial) *)

END_IF;

Explicación:

  • Contador Cajas: CTU; declara una instancia de un contador ascendente.
  • Contador Cajas (CU := Sensor_Cajas, RESET := Stop_Reset, PV := 10); es la llamada al bloque de función CTU.
    • CU: Conectado a Sensor_Cajas para contar cada flanco.
    • RESET: Conectado a Stop_Reset para reiniciar el contador.
    • PV: El valor preestablecido es 10.
  • IF ContadorCajas.Q THEN ... END_IF;: La salida Q del contador se activa cuando el contador llega a PV. En ese momento, Cinta_Motor se establece en FALSE. De lo contrario (ELSE), se mantiene en TRUE.

 

Ejemplo 5: Cálculo y Escalamiento Analógico (usando un IF y operaciones matemáticas)

Convertir una lectura de temperatura de un sensor (0-4095) a grados Celsius (0-100).

(* Declaración de variables *)

VAR

    SensorRawTemp : INT; (* Lectura del sensor, ej. 0 a 4095 *)

    TemperaturaC: REAL; (* Temperatura en grados Celsius, ej. 0.0 a 100.0 *)

END_VAR

 

(* Lógica de programa *)

IF SensorRawTemp >= 0 AND SensorRawTemp <= 4095 THEN

    (* Escalamiento lineal: (Valor Sensor - Min_Sensor) * (Max Real - Min_Real) / (Max Sensor - Min_Sensor) + Min_Real *)

    TemperaturaC := (INT_TO_REAL(SensorRawTemp) - 0.0) * (100.0 - 0.0) / (4095.0 - 0.0) + 0.0;

ELSE

    (* Manejo de error si la lectura está fuera de rango *)

    TemperaturaC := -999.9; (* Asignar un valor de error o alarma *)

END_IF;

Explicación:

  • SensorRawTemp: La lectura cruda de un módulo de entrada analógica (típicamente un entero).
  • TemperaturaC: La variable donde se guardará la temperatura ya escalada, como un número real (con decimales).
  • El bloque IF verifica si la lectura del sensor está dentro de un rango válido.
  • INT_TO_REAL(SensorRawTemp): Es una función de conversión de tipo de dato. Es crucial convertir el entero a un real antes de realizar divisiones o multiplicaciones que resulten en decimales para asegurar precisión.
  • La fórmula realiza un escalamiento lineal.
  • El bloque ELSE es una buena práctica para manejar valores fuera de rango.

 

Como puedes ver, el Texto Estructurado es muy poderoso para lógica compleja, cálculos matemáticos y cuando necesitas la flexibilidad de un lenguaje de programación tradicional. Su sintaxis es clara y estructurada, lo que facilita la escritura de algoritmos avanzados.

Ejemplos de Gráfico de Funciones Secuenciales (Sequential Function Chart - SFC)

El Gráfico de Funciones Secuenciales (SFC) es un lenguaje gráfico que, si bien no ejecuta la lógica de control directamente como el Ladder o el Texto Estructurado, es excepcional para estructurar y visualizar el comportamiento secuencial de un proceso. Piensa en SFC como un flujograma o un diagrama de estados que coordina la ejecución de diferentes partes de tu programa PLC.

 

Conceptos Básicos del Gráfico de Funciones Secuenciales (SFC)

SFC se construye alrededor de tres elementos principales:

  1. Pasos (Steps):
    • Representan un estado o una etapa específica del proceso. Cuando un paso está activo, se ejecutan las acciones asociadas a ese paso.
    • Gráficamente se representa como un rectángulo.
  2. Transiciones (Transitions):
    • Representan las condiciones que deben cumplirse para pasar de un paso a otro. Una transición "dispara" o "habilita" el siguiente paso cuando su condición es verdadera.
    • Gráficamente se representa como una línea horizontal con un pequeño cuadro o marca. La condición de la transición se escribe junto a ella.
  3. Acciones:
    • Son la lógica de control real que se ejecuta cuando un paso está activo. Las acciones se programan utilizando otros lenguajes IEC 61131-3, como Ladder (LD), Bloques de Función (FBD) o Texto Estructurado (ST).
    • Se asocian a un paso y se ejecutan mientras el paso está activo.

Estructuras SFC Básicas:

  • Secuencia Simple: Un paso tras otro.

·         ---

·         | Inicio |

·         ---

·           |

·         ---( Condición_1 )---

·           |

·         ---

·         | Paso_1 |

·         ---

·           |

·         ---( Condición_2 )---

·           |

·         ---

·         | Paso_2 |

·         ---

  • Divergencia (Selección Alternativa): El programa toma una de varias ramas posibles según qué condición de transición se cumpla primero. Se representa con una línea horizontal doble.

·         ---

·         | Paso_A |

·         ---

·           |

·         -------

·         |     |

·         ---( Condición_1 )---  ---( Condición_2 )---

·           |                          |

·         ---                        ---

·         | Paso_B |                 | Paso_C |

·         ---                        ---

  • Divergencia (Ejecución Paralela): El programa ejecuta varias ramas simultáneamente una vez que la transición se cumple. También se representa con una línea horizontal doble.

·         ---

·         | Paso_A |

·         ---

·           |

·         =======

·         |     |

·         ---( Condición_1 )---

·           |

·         ---

·         | Paso_B |

·         ---

·         |

·         |

·         |

·         -----------------------------> Rama Paralela 1

·         |

·         |

·         ---( Condición_1 )---

·           |

·         ---

·         | Paso_C |

·         ---

·         |

·         |

·         |

·         -----------------------------> Rama Paralela 2

(Nota: La "entrada" a las ramas paralelas es la misma condición)

  • Convergencia: Varias ramas paralelas o alternativas se unen de nuevo en un solo flujo. Se representa con una línea horizontal doble (para unir paralelas) o simple (para unir alternativas).

 

Ejemplos de Lógica en Gráfico de Funciones Secuenciales

Aquí tienes algunos ejemplos que ilustran cómo SFC se utiliza para gestionar secuencias.

Ejemplo 1: Proceso de Llenado y Mezclado Simple

Imagina un tanque que debe llenarse con líquido, luego mezclarse por un tiempo y finalmente vaciarse.

---

| Inicio |  (* Paso inicial - siempre activo al inicio *)

---

  |

--( Start_Button )--- (* Transición: Presionar botón de arranque *)

  |

---

| Llenar Tanque | (* Acciones: Activar válvula de llenado *)

---

  |

--(Nivel Alto) --- (* Transición: Sensor de nivel alto detectado *)

  |

---

| Mezclar |    (* Acciones: Activar mezclador, temporizador de mezcla *)

---

  |

--(Mezcla Completa) --- (* Transición: Temporizador de mezcla ha terminado *)

  |

---

| Vaciar Tanque | (* Acciones: Activar válvula de vaciado *)

---

  |

--(Nivel Bajo) --- (* Transición: Sensor de nivel bajo detectado *)

  |

---

| Parado |     (* Acciones: Desactivar todo *)

---

  |

--( Reset_Button )--- (* Transición: Presionar botón de reinicio o ciclo completo *)

  |

---

(Bucle de vuelta a Inicio)

Explicación:

  1. Inicio: El paso inicial del proceso.
  2. Start_Button: Cuando el operario presiona el botón de arranque, el proceso avanza al paso LlenarTanque.
  3. LlenarTanque: Mientras este paso está activo, se ejecutan las acciones de "Activar válvula de llenado".
  4. Nivel Alto: Cuando el sensor de nivel alto detecta el líquido, la transición se cumple y el proceso pasa al paso Mezclar.
  5. Mezclar: Las acciones aquí incluyen "Activar mezclador" y "Iniciar temporizador de mezcla".
  6. Mezcla Completa: Una vez que el temporizador de mezcla termina, la transición se cumple y el proceso avprevancesa al paso Vaciar Tanque.
  7. Vaciar Tanque: Las acciones aquí incluyen "Activar válvula de vaciado".
  8. Nivel Bajo: Cuando el sensor de nivel bajo detecta que el tanque está vacío, la transición se cumple y el proceso va al paso Parado.
  9. Parado: Todas las acciones se desactivan. El proceso espera por una Reset_Button para volver al paso Inicio y comenzar un nuevo ciclo.

 

Ejemplo 2: Proceso con Selección Alternativa (Divergencia)

Imagina un sistema de clasificación que envía un producto a una de dos bandas transportadoras dependiendo de su tamaño.

---

| Espera Producto |

---

  |

--(Producto Detectado) ---

  |

======= (* Línea de divergencia para selección alternativa *)

|     |

---(Tamaño Grande) --- (* Transición: Si el producto es grande *)

  |

---

| Enviar Grande | (* Acciones: Activar transportador grande *)

---

  |

--(Transportador Grande Libre) --- (* Transición: La salida del grande está libre *)

  |

---

| Fin Proceso |

---

  |

---(Tamaño Pequeño) --- (* Transición: Si el producto es pequeño *)

  |

---

| Enviar Pequeño | (* Acciones: Activar transportador pequeño *)

---

  |

--(Transportador Pequeño Libre) --- (* Transición: La salida del pequeño está libre *)

  |

---

| Fin Proceso |

---

======= (* Línea de convergencia *)

  |

--( Reset_Condicion )---

  |

(Bucle de vuelta a Espera Producto)

Explicación:

  1. Espera Producto: El sistema está esperando un nuevo producto.
  2. Producto Detectado: Cuando un sensor detecta un producto, el proceso avanza a la divergencia.
  3. Divergencia de Selección:
    • Si la condición Tamaño Grande se cumple (ej., el sensor de tamaño indica grande), la rama Enviar Grande se activa.
    • Si la condición Tamaño Pequeño se cumple (ej., el sensor de tamaño indica pequeño), la rama Enviar Pequeño se activa. Solo una de las ramas se activará.
  4. Enviar Grande / Enviar Pequeño: En estos pasos, se activan los transportadores correspondientes.
  5. TransportadorGrande_Libre / TransportadorPequeno_Libre: Una vez que la salida del respectivo transportador está libre (el producto ha salido), la transición se cumple.
  6. Fin Proceso: Ambos caminos convergen en este paso, que podría ser un paso de limpieza o simplemente un punto de espera.
  7. Convergencia: Una vez que cualquiera de las ramas ha llegado al Fin Proceso, se espera la Reset_Condicion para volver al inicio.

 

Ejemplo 3: Proceso con Ejecución Paralela (Sincronización)

Imagina una máquina que tiene dos operaciones que pueden realizarse al mismo tiempo: un brazo robótico carga una pieza mientras un cabezal de soldadura se prepara. Ambas deben terminar antes de que la siguiente etapa (soldar) comience.

---

| Inicio Ciclo |

---

  |

--( Ciclo_Start )---

  |

======= (* Línea de divergencia para ejecución paralela *)

|                     |

|---(Cargar Pieza) --->| Cargar Pieza | (* Acciones: Mover brazo, tomar pieza *)

|                       ---

|                         |

|                       --(Pieza Cargada) ---

|                         |

|                       ---

|                       | Carga Completa |

|                       ---

|                                         |

|---(Preparar Soldadura) --->| Preparar Soldadura | (* Acciones: Calentar cabezal, limpiar *)

|                             ---

|                               |

|                             --(Soldadura Lista) ---

|                               |

|                             ---

|                             | Preparación Completa |

|                             ---

======= (* Línea de convergencia para sincronización *)

  |

--(Carga Completa AND Preparación Completa) --- (* Transición: Ambas ramas deben haber terminado *)

  |

---

| Soldar | (* Acciones: Activar soldadura *)

---

  |

--(Soldadura Terminada) ---

  |

---

| Fin Ciclo |

---

  |

(Bucle de vuelta a Inicio Ciclo para el próximo producto)

Explicación:

  1. Inicio Ciclo: El ciclo comienza.
  2. Ciclo_Start: Se inicia el ciclo de trabajo.
  3. Divergencia Paralela:
    • Una vez que Ciclo_Start se cumple, ambas ramas (Cargar Pieza y Preparar Soldadura) se activan y se ejecutan en paralelo.
  4. Cargar Pieza y Preparar Soldadura: Estas acciones se realizan al mismo tiempo. Cada rama tiene su propio paso de "completado" (Carga Completa, PreparacionCompleta).
  5. Convergencia: El flujo del programa solo puede pasar del paso PreparacionCompleta y Carga Completa al paso Soldar cuando ambas condiciones de transición se cumplen (es decir, Carga Completa es VERDADERO AND PreparacionCompleta es VERDADERO). Esto asegura que ninguna soldadura comience hasta que la pieza esté cargada Y el cabezal de soldadura esté listo.
  6. Soldar: Se ejecuta la acción de soldadura.
  7. Soldadura Terminada: Una vez terminada, el ciclo pasa a Fin Ciclo.

 

SFC es increíblemente potente para gestionar procesos complejos y secuenciales, haciendo que la lógica sea mucho más clara y fácil de depurar que si se intentara escribir todo en Ladder o Texto Estructurado de forma lineal. A menudo se utiliza como la capa superior de control, mientras que las acciones dentro de cada paso se implementan utilizando LD, FBD o ST.

Ejemplos de Lista de Instrucciones (IL)

La Lista de Instrucciones (IL) es el lenguaje de programación de PLC más elemental y se asemeja al lenguaje ensamblador de las computadoras. Aunque forma parte del estándar IEC 61131-3, su uso ha disminuido considerablemente en favor de lenguajes más gráficos y de alto nivel como el Diagrama de Escalera (LD), Diagrama de Bloques de Función (FBD) o Texto Estructurado (ST). Es más difícil de leer y mantener para la mayoría de los programadores, pero ofrece un control muy preciso sobre las operaciones del PLC.

En IL, el programa se escribe como una secuencia de operaciones de máquina simples. Cada línea de código generalmente consta de un operador (la instrucción a realizar) y un operando (el dato o la dirección sobre la que actúa la instrucción).

 

Conceptos Clave en IL:

  • Acumulador (o resultado): Una característica central de IL es que las operaciones se realizan típicamente en un registro interno llamado acumulador. Una instrucción a menudo carga un valor en el acumulador, y luego otras instrucciones operan con el contenido del acumulador.
  • Operadores: Son las instrucciones o comandos básicos, como LD (Load), ST (Store), AND, OR, ADD, SUB, etc.
  • Operandos: Son los datos o direcciones de memoria sobre los que actúan los operadores (ej., una variable, una constante, una dirección de entrada/salida).

 

Ejemplos de Lógica en Lista de Instrucciones

Aquí tienes algunos ejemplos que ilustran cómo se representa la lógica en IL.

Ejemplo 1: Lógica AND Simple

Queremos que una salida (Motor_ON) se active si dos entradas (Sensor_1 y Sensor_2) son verdaderas.

Fragmento de código

(* Declaración de variables (no se hace directamente en IL, sino en la tabla de símbolos del PLC) *)

(* Sensor_1    : BOOL *)

(* Sensor_2    : BOOL *)

(* Motor_ON    : BOOL *)

 

(* Lógica de programa en IL *)

LD     Sensor_1    (* Carga el valor de Sensor_1 en el acumulador *)

AND    Sensor_2    (* Realiza una operación lógica AND con el valor de Sensor_2 y el acumulador *)

ST     Motor_ON    (* Almacena el resultado (contenido del acumulador) en Motor_ON *)

Explicación:

  1. LD Sensor_1: La instrucción LD (Load) carga el estado de Sensor_1 (Verdadero/Falso) en el acumulador.
  2. AND Sensor_2: La instrucción AND realiza una operación lógica booleana "Y" entre el valor actual del acumulador (que es Sensor_1) y el valor de Sensor_2. El resultado de esta operación se guarda en el acumulador.
  3. ST Motor_ON: La instrucción ST (Store) toma el valor final del acumulador y lo guarda en la variable Motor_ON.

Así, Motor_ON será verdadero solo si Sensor_1 es verdadero Y Sensor_2 es verdadero.

 

Ejemplo 2: Lógica OR Simple

Queremos que una salida (Alarma Activa) se active si Temp_Alta O Pres_Baja son verdaderas.

Fragmento de código

(* Declaración de variables *)

(* Temp_Alta     : BOOL *)

(* Pres_Baja     : BOOL *)

(* Alarma Activa: BOOL *)

 

(* Lógica de programa en IL *)

LD     Temp_Alta     (* Carga el valor de Temp_Alta en el acumulador *)

OR     Pres_Baja     (* Realiza una operación lógica OR con el valor de Pres_Baja y el acumulador *)

ST     Alarma Activa (* Almacena el resultado en Alarma Activa *)

Explicación:

  1. LD Temp_Alta: Carga el estado de Temp_Alta en el acumulador.
  2. OR Pres_Baja: Realiza una operación lógica booleana "O" entre el acumulador y Pres_Baja. El resultado se guarda en el acumulador.
  3. ST Alarma Activa: Guarda el resultado final del acumulador en Alarma Activa.

 

Ejemplo 3: Arranque y Parada Simple de un Motor (con autorretención)

Este es un poco más complejo en IL debido a la autorretención, que implica ramificación.

Fragmento de código

(* Declaración de variables *)

(* Start_PB      : BOOL *)

(* Stop_PB       : BOOL *)

(* Motor_Contactor : BOOL *)

 

(* Lógica de programa en IL *)

LD      Start_PB           (* Carga el estado de Start_PB *)

ANDN    Stop_PB            (* AND NOT Stop_PB (Stop_PB es normalmente cerrado) *)

OR      Motor_Contactor    (* OR con el estado actual del Motor_Contactor (autorretención) *)

ANDN    Stop_PB            (* AND NOT Stop_PB de nuevo para asegurar que Stop_PB apague *)

ST      Motor_Contactor    (* Almacena el resultado en Motor_Contactor *)

Explicación:

  1. LD Start_PB: Carga el estado del pulsador de arranque.
  2. ANDN Stop_PB: Realiza un "AND NOT" con el pulsador de parada. Esto significa que si Stop_PB está pulsado (verdadero), NOT Stop_PB es falso, y la condición general será falsa. Si Stop_PB no está pulsado (falso), NOT Stop_PB es verdadero.
  3. OR Motor_Contactor: Realiza una operación "OR" con el estado actual del Motor_Contactor. Esta es la parte de la autorretención: si el motor ya está encendido (Motor_Contactor es verdadero), mantendrá la condición verdadera incluso si Start_PB se suelta.
  4. ANDN Stop_PB: Se repite el ANDN Stop_PB. Esto es crucial para asegurar que el botón de parada (Stop_PB) siempre tenga prioridad para detener el motor, rompiendo la autorretención. Si Stop_PB se presiona, esta operación forzará el acumulador a falso.
  5. ST Motor_Contactor: Guarda el resultado final en la salida del motor.

 

Ejemplo 4: Suma de dos Números Enteros

Sumar los valores de Valor_A y Valor_B y guardar el resultado en Resultado Suma.

Fragmento de código

(* Declaración de variables *)

(* Valor_A       : INT *)

(* Valor_B       : INT *)

(* Resultado Suma : INT *)

 

(* Lógica de programa en IL *)

LD     Valor_A       (* Carga Valor_A en el acumulador *)

ADD    Valor_B       (* Suma Valor_B al contenido del acumulador *)

ST     Resultado Suma (* Almacena el resultado en Resultado Suma *)

Explicación:

  1. LD Valor_A: Carga el valor entero de Valor_A en el acumulador.
  2. ADD Valor_B: Suma el valor entero de Valor_B al contenido actual del acumulador. El resultado de la suma se almacena en el acumulador.
  3. ST Resultado Suma: Guarda el valor final del acumulador en la variable Resultado Suma.

 

Ejemplo 5: Uso de un Temporizador (TON - Timer On Delay) en IL

Llamar a un temporizador MiTemporizador para encender una luz (Luz_Activada) después de que Sensor_Activacion ha estado encendido por 3 segundos.

Fragmento de código

(* Declaración de variables *)

(* Sensor_Activacion : BOOL *)

(* Luz Activada      : BOOL *)

(* MiTemporizador    : TON *) (* Instancia del bloque de función TON *)

 

(* Lógica de programa en IL *)

CAL   MiTemporizador(IN := Sensor_Activacion, PT := T#3s) (* Llama al bloque de función TON *)

LD    MiTemporizador.Q                                   (* Carga la salida Q del temporizador *)

ST    Luz Activada                                       (* Almacena el estado en Luz Activada *)

Explicación:

  1. CAL MiTemporizador(IN := Sensor_Activacion, PT := T#3s):
    • CAL (Call): Es la instrucción para llamar a un bloque de función.
    • MiTemporizador: Es la instancia del temporizador que se está utilizando.
    • IN := Sensor_Activacion: Asigna el valor de Sensor_Activacion a la entrada IN del temporizador.
    • PT := T#3s: Asigna el tiempo preestablecido de 3 segundos a la entrada PT del temporizador.
  2. LD MiTemporizador.Q: Carga el estado de la salida Q del temporizador (MiTemporizador.Q) en el acumulador. La salida Q es TRUE cuando el temporizador ha terminado de contar y su entrada IN está activa.
  3. ST Luz Activada: Almacena el valor del acumulador en Luz Activada.

Como puedes ver, IL es muy conciso, pero su legibilidad es baja para programas complejos. Cada instrucción es una operación atómica. Por esta razón, se utiliza menos directamente en la programación actual, aunque es el lenguaje en el que muchos softwares de programación de PLC finalmente compilan los lenguajes gráficos y de alto nivel.


----------------------------------------------------------------------------------------------------------------------------


ENTRADAS POPULARES

Sensores Rejillas Fotoeléctricas guía y especificaciones.

Seguridad Industrial Información Util y Detallada

Tipos de Fusibles y Clasificación

Sensores y su influencia en la Industria...

Sensores Rejillas Fotoeléctricas

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *