Download PLC Topico 7 - IEC 1131

Document related concepts
no text concepts found
Transcript
Estándar de Lenguajes de
Programación IEC 1131
Estándar de Lenguajes de Programación IEC 1131
La programación de controladores puede llegar a ser una tarea difícil, debido al incremento
en los requerimientos de permisivos en un programa, a medida que el proceso se hace más
complejo. Adicionalmente, cada fabricante ofrece conjuntos diferentes de instrucciones
dentro de su familia de controladores. Algunas de esas instrucciones pueden no ser
aplicables a otros controladores, y no existe una manera fácil de traducir un programa
existente para un controlador de otra marca.
En esta sección se aborda el estándar IEC 1131 que intenta simplificar y estandarizar los
lenguajes de programación.
Introducción al Estándar IEC 1131
El comité SC65B-WG7 de la Comisión Electrotécnica Internacional (International
Electrotechnical Commission - IEC) desarrolló el estándar IEC 1131en un esfuerzo para
estandarizar los controladores programables. Uno de los objetivos del comité fue crear un
conjunto común de instrucciones que pudieran ser utilizados en todos los controladores.
Aunque el estándar IEC 113 alcanzó el estatus de internacional en 1992, el esfuerzo por crear
un estándar global en cuanto a los controladores, ha sido una tarea muy difícil de conseguir,
debido a la gran diversidad de fabricantes y el problema de incompatibilidad entre las
diferentes marcas.
El estándar IEC 1131 para controladores programables consta de cinco partes:
• Información general
• Requerimientos de equipos y pruebas
• Lenguajes de programación
• Lineamientos para el usuario
• Servicios de mensajería (comunicación)
Aunque existen cinco partes en el estándar IEC 1131, la tercera de ellas - lenguajes de
programación - proporciona toda la información acerca de los estándares de programación.
Las otras secciones describen los lineamientos para pruebas y comunicaciones de las
instrucciones, así como la metodología que debe ser empleada por el usuario del controlador
programable.
El estándar sobre lenguajes de programación IEC 1131 es referido como IEC 1131-3
programming standard, ya que es la tercera parte la que aborda este tópico.
Controladores
Programables
Ramón
Medina
Página 2
de 53
Estándar de Lenguajes de Programación IEC 1131
Lenguajes e Instrucciones
El estándar IEC 1131-3 define dos lenguajes gráficos y dos basados en texto para su uso en la
programación de controladores. Los lenguajes gráficos usan símbolos para programar las
instrucciones de control, mientras que los basados en texto usan cadenas de caracteres. Los
lenguajes gráficos incluyen:
• Diagrama de escalera (LD)
• Diagrama de bloques de función (FBD)
• Los basados en texto comprenden:
• Lista de instrucciones (IL)
• Texto estructurado (ST)
Adicionalmente, el estándar IEC 1131-3 incluye un entorno orientado a objetos llamado
diagrama de funciones secuenciales (SFC). Aunque es algunas veces categorizado como un
lenguaje IEC 1131-3, en realidad es una estructura organizacional que coordina los cuatro
verdaderos lenguajes de programación. La estructura SFC es parecida a la de un diagrama de
flujo, que utiliza diferentes lenguajes para distintas tareas de control, enrutando además las
acciones del programa. La estructura del SFC tiene sus orígenes en el Grafcet (IEC 848).
El estándar IEC 1131-3 es un método de programación por bloques, gráfico y orientado a
objetos, que incrementa la flexibilidad en la programación y diagnóstico de los controladores
programables. Permite que secciones de un programa sean agrupadas en tareas, que pueden
ser entrelazadas con el resto del programa. De esta manera, un programa IEC 1131-3 puede
estar formado por pequeñas tareas representadas dentro de un bloque gráfico SFC. La
combinación de lenguajes disponibles en el estándar IEC 1131-3 mejora la programación y
depuración proporcionando no sólo un mejor lenguaje, sin también un mejor método para
implementar soluciones de control.
El IEC 1131-3 usa una amplia variedad de funciones de datos y bloques de función estándar,
que operan sobre un gran número de tipos de variables. La tabla a continuación muestra
algunos ejemplos de esos tipos de datos y funciones de datos, así como algunos bloques de
función típicos. El tipo de variable se refiere a la información recibida por el controlador
(binario, número real, hora, entre otros), mientras que las funciones de datos son las
operaciones ejecutadas sobre la información (comparación, inversión, suma, entre otros).
Los bloques de función son conjuntos de instrucciones que operan sobre bloques de datos.
Adicionalmente, el alcance de la variable se refiere al ámbito en el que puede ser utilizada la
variable dentro de la aplicación. Por ejemplo, las variables globales pueden ser por cualquier
programa en la aplicación, mientras que las locales sólo pueden ser usadas por un programa
en particular. En adición a los tipos de variables, funciones y bloques estándar, el IEC 1131-3
Controladores
Programables
Ramón
Medina
Página 3
de 53
Estándar de Lenguajes de Programación IEC 1131
permite otros tipos de elementos definidos por fabricantes y usuarios. El estándar IEC 1131-3
no limita la funcionalidad de los controladores, sino que establece una base común para
funciones estándar y adicionales.
Tipos de datos, funciones y
bloques
La flexibilidad de los tipos y función de datos del IEC 1131 permite que los fabricantes de
controladores programables proporciones instrucciones que consideren necesarias, que no
estén definidas dentro del estándar. Dichas instrucciones pueden incluir funciones para
aplicaciones específicas tales como el posicionamiento de un servo motor, utilizado por
módulos inteligentes de control. Aunque esta instrucción puede estar conforme con los
parámetros de programabilidad del estándar, puede que no esté disponible en otros
controladores que cumplan también con el estándar. El estándar IEC 1131 permite que los
fabricantes amplíen su conjunto de instrucciones IEC 1131-3 añadiendo instrucciones más
poderosas y a la medida. También permite que los usuarios creen sus propias instrucciones,
en forma de bloques, para ejecutar tareas específicas.
Declaración de Variables
Al implementar un sistema de control, el usuario declarará las variables a ser usadas. Esta
declaración de variables no es más que 'mapear' direcciones de E/S, indicando que
dispositivos de campo están cableados a cada módulo. La figura a continuación muestra un
interruptor de fin de carrera (LS1) implementado en un ambiente de programación
convencional. En esta configuración, el dispositivo es declarado en el programa de control
por su dirección (10).
Controladores
Programables
Ramón
Medina
Página 4
de 53
Estándar de Lenguajes de Programación IEC 1131
Interruptor de fin de carrera,
diseccionado en un ambiente
estándar
En un ambiente IEC 1131-3, sin embargo, el dispositivo puede ser descrito con un nombre
alfanumérico. Por lo tanto, el dispositivo puede ser declarado como Limit_Switch_1,
Clamp_limit_Switch o cualquier otro nombre apropiado.
Interruptor de fin de carrera,
diseccionado en un ambiente
IEC 1131-3
Desde el momento que la variable es declarada, será conocida por el nombre asignado, a lo
largo de todo del programa de control, sin importar qué lenguaje de programación se esté
usando. El nombre asignado no hace diferencia entre mayúsculas y minúsculas.
Cuando se declara una variable, el usuario puede especificar el tipo en adición al nombre.
Esto permite que el controlador sepa qué tipo de dato transmite el dispositivo asociado a la
variable. El IEC 1131-3 soporta varios tipos de variables globales y locales; sin embargo, las
más comunes son:
• Booleano
• Entero
• Real
Controladores
Programables
Ramón
Medina
Página 5
de 53
Estándar de Lenguajes de Programación IEC 1131
Tipos de Datos
Las variables booleanas tienen un bit de longitud, lo que significa que adoptan valores en la
forma de unos y ceros. Las variables de E/S discretas están incluidas en esta categoría, y por
lo tanto son especificadas como 'Bool' (contracción de booleana) en el programa de control.
Muchas variables no discretas, como por ejemplo las señales analógicas de entrada, son
variables enteras, porque envían información en forma de números. Estas son especificadas
en el programa de control como variables enteras. Las variables internas que contienen
información en forma de fracciones y punto flotante (por ejemplo, el resultado de una
multiplicación) son variables reales que deben ser clasificadas como tal.
Ejemplo 1
Implemente la declaración de una variable booleana (nombre y tipo de la variable) para el
dispositivo de entrada que se muestra en la figura a continuación. Asuma que el controlador
usado utiliza una configuración de direcciones basada en chasis-ranura-terminal (por
ejemplo, chasis 0, ranura 0, terminal 3 es la dirección 003)
Controladores
Programables
Ramón
Medina
Página 6
de 53
Estándar de Lenguajes de Programación IEC 1131
Solución
La siguiente figura muestra una sencilla declaración para la variable de este ejemplo. Todos
los dispositivos de entrada son discretos; por lo tanto, son especificados como variables
booleanas. PB es identificado como MAN_START_PB, LS1 es declarado como
AUTO_PART_Detect y LS2 es llamado NO_JAM_Detect.
Controladores
Programables
Ramón
Medina
Página 7
de 53
Estándar de Lenguajes de Programación IEC 1131
Lenguajes de Programación IEC 1131-3
Aunque el estándar de programación IEC 1131-3 proporciona un enorme potencial para los
usuarios de controladores programables, está basado en el lenguaje de escalera, que ha sido
inherente a estos equipos desde sus inicios. El IEC 1131-3 está basado en la lógica de escalera
utilizada en controladores (incluyendo bloques funcionales) por su simplicidad,
representación y programabilidad. Sin embargo, el IEC 1131-3 disminuye la necesidad de usar
circuitos con complejos entrecruzamientos, típicos en diagramas de escalera. Mejora los
lenguajes usados anteriormente e incorpora un poderoso entorno - diagrama de funciones
secuenciales - haciendo mucho más fácil el entrecruzamiento de variables, la interpretación
del programa de control y la implementación del sistema de control, tanto para el
programador como para el usuario final.
Diagrama de Escalera
El diagrama de escalera (LD) usa un conjunto estandarizado de símbolos de programación en
escalera, para implementar funciones de control. Este tipo de lenguaje es esencialmente el
mismo que ha estado siempre disponible en los controladores. Los usuarios que ya están
familiarizados con los diagramas de escalera, pueden usar las mismas técnicas de
programación al usarlo en un ambiente IEC 1131-3. Sin embargo, en el entrecruzamiento de
variables es más fácil en el formato IEC 1131-3, debido a la disponibilidad de los diagramas
de funciones secuenciales.
Controladores
Programables
Ramón
Medina
Página 8
de 53
Estándar de Lenguajes de Programación IEC 1131
Representación en diagrama
de escalera
Diagrama de Bloques Funcionales
Los diagramas de bloques funciones (FBD) constituyen un lenguaje gráfico que permite que
el usuario programe elementos (por ejemplo, bloques de función de un controlador) de una
forma tal que parecen estar cableados como en un circuito eléctrico. Algunos sistemas IEC
1131-3 usan símbolos lógicos para representar los bloques de función. No se requiere la
representación de 'bobinas' de salida, ya que dicha salida es representada por la variable
asignada al bloque.
Diagrama de bloques
funcionales
Esta variable puede ser usada en otras instrucciones a lo largo del programa. El usuario
puede sin embargo usar una representación de bobina, si así lo desea; no obstante estará
limitado al bloque de más a la derecha. El lenguaje FBD usa bloques de función estándar y
específicos del fabricante.
En adición a los bloques de función específicos de cada fabricante, el IEC 1131- 3 permite la
'construcción' de funciones por parte del usuario, de acuerdo a los requerimientos del
programa de control. Esto es llamado encapsulamiento. La ventaja de crear bloques de
función definidos por el usuario es que pueden contener otros bloques de función, listas de
instrucciones o texto estructurado con o sin instrucciones en diagrama de escalera. Esto le da
una gran flexibilidad a la programación con bloques funcionales. El encapsulamiento permite
Controladores
Programables
Ramón
Medina
Página 9
de 53
Estándar de Lenguajes de Programación IEC 1131
que el usuario almacene los bloques que haya creado en una librería que le permitirá usarlo
tantas veces como lo necesite en el programa, de la misma manera en que lo haría con
cualquier otro bloque de función.
Ejemplo 2
Ilustre cómo el circuito mostrado en la siguiente figura puede ser implementado usando
diagrama de escalera con un bloque de función definido por el usuario que encienda el
motor M1 y la lámpara piloto PL1.
Solución
La siguiente figura muestra el diagrama de escalera equivalente al circuito cableado
mostrado anteriormente. Nótese que existen dos peldaños para las dos salidas y que las
variables de entrada y salida están especificadas con los mismos nombres que tienen en el
circuito cableado.
Para implementar este sencillo diagrama de escalera como bloque de función, debe ser
programado (o almacenado) en un bloque encapsulado. El bloque de función final lucirá
como el diagrama mostrado. Nótese que las entradas del bloque de arranque y parada
actuarán de acuerdo con la lógica usada para programar el bloque. Si la entrada de arranque
esté encendida, se encenderán a su vez el motor y la lámpara piloto. Si el botón de parada
está activado, se apagarán el motor y la lámpara piloto. Las dos variables de entrada
(comandos START y STOP), al igual que las de salida (MOTOR y PILOT_LIGHT) son variables
booleanas.
Controladores
Programables
Ramón
Medina
Página 10
de 53
Estándar de Lenguajes de Programación IEC 1131
La flexibilidad en la creación de bloques de función definidos por el usuario se ve mejorada
por el hecho de que es posible usar diagrama de escalera y cualquier otro lenguaje IEC 11313 para su construcción. Además, los bloques a la medida pueden ser usados en conjunto con
otros bloques estándar o específicos de un fabricante. Esto permite que el programador
construya poderosos bloques de función, que puedan ser integrados a cualquier diagrama de
escalera o de bloques de función.
Lista de Instrucciones
La lista de instrucciones (IL) es un lenguaje de bajo nivel parecido al lenguaje ensamblador.
Ejemplo de lenguaje de
máquina usado en
controladores
Este tipo de lenguaje es útil para aplicaciones pequeñas, así como para casos en los que se
requiera optimizar la velocidad de una rutina específica. También puede ser usada para
Controladores
Programables
Ramón
Medina
Página 11
de 53
Estándar de Lenguajes de Programación IEC 1131
construir bloques de función a la medida. Una aplicación típica de la IL puede involucrar la
inicialización a cero de registros acumuladores de todos los temporizadores en un programa
de control.
Bloque funcional a la medida
que utiliza lista de
instrucciones para
reinicializar el temporizadores
a cero
En la figura anterior, TMR1 AR es la dirección del registro acumulador del primer
temporizador. En el FBD, la dirección es conocida como Timer_AR_1 de tal manera que el
programa IL pueda interpretarlo. El programa IL produce como resultado, que los registros
acumuladores sean inicializados a cero. La variable Reset_Timer dispara el bloque y comienza
la ejecución de las instrucciones IL. La rutina IL estará continuamente reiniciándose mientras
el bloque esté habilitado por la variable Reset_Timer. Existe también la manera de enviar
sólo un pulso al bloque de función, de tal manera que las instrucciones sean ejecutadas sólo
una vez.
Texto Estructurado
El texto estructurado (ST) es un lenguaje de alto nivel que permite el uso de técnicas de
programación estructurada. El ST se parece al BASIC, PASCAL o C, los cuales usan subrutinas
para ejecutar diferentes funciones de control y pasan parámetros y valores entre las
diferentes secciones del programa. Al igual que en los casos del diagrama de escalera,
diagrama de bloques de función y lista de instrucciones, el texto estructurado usa definición
de variables para identificar los dispositivos de campo de E/S, así como cualquier otra
variable interna usada en el programa. El ST soporta lazos de control tales como WHILE...DO
y REPEAT...UNTIL, así como estructuras condicionales tales como IF...THEN...ELSE. Más aún,
el texto estructurado soporta el uso de operaciones booleanas (AND, OR, entre otros) y una
variedad de datos específicos, tales como información de fecha y hora.
Controladores
Programables
Ramón
Medina
Página 12
de 53
Estándar de Lenguajes de Programación IEC 1131
Ejemplo de un programa al
estilo BASIC
El texto estructurado es extremadamente útil para la escritura de rutinas relacionadas con
generación de reportes, El ST puede ser usado para encapsular o crear un bloque de función
que ejecuten ciertas acciones cuando sean activados por la lógica de control. Las rutinas
incluidas en bloques de función pueden ser usadas varias veces a lo largo de todo el
programa de control.
Algunos fabricantes mejoran las características estándar del texto estructurado utilizándolo
para integrar 'forzamiento' en tiempo real y monitoreo de las E/S (analógicas y digitales) de la
misma manera en que un controlador estándar lo haría con diagrama de escalera. Por
ejemplo, una instrucción ST como FORCE Variable_One hará que Variable_One se encienda
sin importar las condiciones de entrada, siempre que dicha variable sea booleana. Si la
variable es analógica, la instrucción podría ser Variable_One= 5000 en cuyo caso, la variable
será asignada con el valor 5000 durante el 'forzamiento'.
Bloque de función para
generación de reportes,
implementado usando texto
estructurado
El texto estructurado es particularmente adecuado para aplicaciones que involucran
manipulación de datos, ordenamiento y manejo intensivo de operaciones matemáticas en
Controladores
Programables
Ramón
Medina
Página 13
de 53
Estándar de Lenguajes de Programación IEC 1131
punto flotante. ST es también el mejor lenguaje para implementar inteligencia artificial,
lógica difusa y toma de decisiones.
Diagrama de Funciones Secuenciales
Es un lenguaje gráfico que proporciona una representación diagramática de una secuencia de
control. En esencia, el diagrama de funciones secuenciales es una entorno parecido a una
diagrama de flujo, que organiza los subprogramas y subrutinas (programadas en lenguaje de
escalera, bloques de función, lista de instrucciones y texto estructurado) que constituyen un
programa de control. El SFC es particularmente útil para operaciones de control secuencia,
donde el programa fluye de un paso a otro una vez se verifica una determinada condición.
El entorno de programación SFC contiene tres elementos principales que organizan el
programa de control:
• Pasos
• Transiciones
• Acciones
Un paso es una etapa en el proceso. Por ejemplo, la aplicación de mezclado que se muestra
en la siguiente figura, tiene tres pasos: el paso inicial, la etapa de mezclado y la etapa de
vaciado. Cuando el programa de control recibe una entrada, ejecuta cada uno de los pasos
iniciando con el primero. Cada etapa puede o no tener una acción asociada. Una acción es un
conjunto de instrucciones de control que indican al controlador, que funciones ejecutar
durante dicha etapa.
Controladores
Programables
Ramón
Medina
Página 14
de 53
Estándar de Lenguajes de Programación IEC 1131
Diagrama de funciones
secuenciales para un proceso
de mezclado
Una acción puede ser programa utilizando cualquiera de los lenguajes IEC 1131-3. Luego que
el controlador ejecuta las acciones, debe recibir una transición antes de proceder con el
siguiente paso. Una transición puede tomar la forma de una variable de entrada, el resultado
de una acción previa o una sentencia condicional (IF). Para la aplicación que se muestra en la
siguiente figura, el controlador ejecuta la acción 2 sólo luego de que el paso 1 recibe una
entrada válida y la transición 1 ocurre.
Controladores
Programables
Ramón
Medina
Página 15
de 53
Estándar de Lenguajes de Programación IEC 1131
Transiciones en una diagrama
de funciones secuenciales
Luego de que el controlador finaliza la acción 2, espera por la transición 2 antes de 'moverse'
al paso 3.
El diagrama de funciones secuenciales tiene sus orígenes en el estándar francés Grafcet, un
lenguaje de programación similar a los diagramas de flujo. El lenguaje Grafcet también usa
pasos, transiciones y acciones que operan de manera similar a como lo hace el SFC. En
Grafcet, cuando un paso está activo, el procesador monitorea las E/S y líneas de programa
pertinentes a las acciones del paso, así como la lógica que define la transición.
Al igual que el Grafcet, el SFC es similar a un diagrama de flujo en la manera en que el control
es transferido de un paso a otro. Además, también al igual que el Grafcet, el SFC puede ser
programado directamente relacionado con diagramas de eventos y tiempos.
Controladores
Programables
Ramón
Medina
Página 16
de 53
Estándar de Lenguajes de Programación IEC 1131
Comparación entre un
diagrama SFC y un diagrama
de flujo
Como se muestra en la figura a continuación, si la condición Part_Present_LS es satisfecha (el
interruptor está cerrado), la salida Advance_Solenoid se encenderá. Una vez que
Part_In_Position_LS esté activada, la salida Clamp_Solenoid se encenderá. Luego, cuando la
condición At_Depth_LS se haga verdadera, la salida Drill_Motor se encenderá por 10
segundos. Nótese que la salida Clamp_Solenoid es también activada durante la acción de
Drill_Motor. Una vez que el tiempo expira, el diagrama de tiempo indica que las salidas
Clamp_Solenoid y Drill_Motor son apagadas, mientras que Return_Solenoid se enciende.
Controladores
Programables
Ramón
Medina
Página 17
de 53
Estándar de Lenguajes de Programación IEC 1131
Comparación entre un
diagrama de tiempo y sus
programas Grafcet y SFC
correspondientes
No se ejecutan nuevas acciones hasta que el comando At_Top_LS es satisfecho, momento en
que el proceso se detendrá y la salida Return_Solenoid se reiniciará para otra secuencia. La
figura anterior muestra el diagrama de secuencia en Grafcet y SFC respectivamente. Ambos
lenguajes de programación representan gráficamente la implementación del diagrama de
tiempo usando pasos, acciones y transiciones. Las acciones representan la activación de
solenoides y del motor, mientras que las transiciones representan las entradas de
interruptores y el estatus del temporizador.
La mayor diferencia entre Grafcet y SFC está en que Grafcet sólo emplea acciones escritas,
tales como Open_Variable para implementar los bloques de acción que encienden y apagan
dispositivos. En SFC, las acciones pueden ser implementadas usando diagrama de escalera,
lista de instrucciones, texto estructurado y bloques de función solos o combinados,
incluyendo el uso de bloques definidos por el usuario. Por ejemplo, en la acción 2 del
programa en Grafcet, la sentencia Advance_Solenoid indica el encendido del dispositivo de
campo asociado con la variable de salida asignada a Advance_Solenoid. En otras palabras, si
la variable de salida está definida en una acción Grafcet, esta se encenderá. En el programa
equivalente en SFC, la instrucción del paso 2 indica que Advance_Solenoid se encenderá. SFC
Controladores
Programables
Ramón
Medina
Página 18
de 53
Estándar de Lenguajes de Programación IEC 1131
no contiene una sentencia asociada a la variable de salida, sino más bien una instrucción que
enciende o apaga el dispositivo durante la acción.
Los diagramas de funciones secuenciales pueden ser concebidos como bloques de
construcción usados para crear programas de control, usando los otros lenguajes para
resolver los detalles. De hecho, el SFC puede tener macro pasos, los cuales permiten que un
diagrama de funciones secuenciales maestro, tenga otros diagramas de funciones
secuenciales en sus acciones.
Macro pasos (macrosteps)
dentro de una diagrama SFC
Estos diagramas menores, los cuales constan de pasos, transiciones y acciones, son
equivalentes a subrutinas en un programa.
Una de las grandes ventajas de los diagramas de funciones secuenciales es que son más
fáciles de diagnosticar que el diagrama de escalera. Por ejemplo, en el diagrama de funciones
secuenciales mostrado anteriormente, si la acción Clamp_Solenoid en el paso 3 no hace la
transición al paso 4, es fácil reconocer que el problema ocurrió en la transición luego del paso
3, que corresponde a la activación de la transición At_Depth. El SFC resalta el paso o
transición donde haya ocurrido el problema.
Notación de Lenguajes de Programación
Los diagramas de funciones secuenciales proporcionan la infraestructura para un programa
de control, que es luego construido utilizando uno o más de los lenguajes definidos en la
Controladores
Programables
Ramón
Medina
Página 19
de 53
Estándar de Lenguajes de Programación IEC 1131
norma IEC 1131-3. Por esta razón, conviene verificar las similitudes entre las notaciones
utilizadas para el diagrama de escalera, bloques funcionales, texto estructurado y lista de
instrucciones.
Las figuras a continuación muestran un sencillo diagrama de escalera y sus equivalentes en
bloques secuenciales, texto estructurado y lista de instrucciones.
Diagrama de escalera
Bloques funcionales
En el texto estructurado se usan dos operadores, AND y & para denotar la función AND. El
símbolo:= es utilizado para asignar una variable de salida a una expresión lógica.
Texto estructurado
En la lista de instrucciones, la primera instrucción (LD) carga el estado de la variable
Limit_S_1 en el registro acumulador, el cual es llamado registro de resultado. La segunda
instrucción (AND) obtiene el resultado de aplicar la operación AND entre los contenidos de
las variables Limit_S_1 y la variable Start_Cycle; el resultado queda almacenado en el registro
de resultado. La tercera instrucción (ST) almacena el contenido del registro de resultado en la
variable de salida Valve_3. Este proceso es similar al lenguaje booleano.
Controladores
Programables
Ramón
Medina
Página 20
de 53
Estándar de Lenguajes de Programación IEC 1131
Lista de instrucciones
Como es posible constatar, las instrucciones utilizadas para implementar las secuencias de
control en cada lenguaje son similares en su construcción así como en su representación
visual. Dependiendo de la aplicación, el SFC puede usar uno o más de esos lenguajes para
programas las instrucciones dentro de las acciones. Para diferenciar los lenguajes, algunos
fabricantes incluyen comandos de inicio y finalización que definen el lenguaje que está
siendo usado. Otros fabricantes permiten la mezcla de lenguajes sin separación entre ellos.
La figura a continuación ilustra un grupo de instrucciones que han sido etiquetadas con
diferenciación de mnemotécnicos. El término #Language=name indica el inicio de un
lenguaje y #ENDlanguage name señaliza la finalización.
Controladores
Programables
Ramón
Medina
Página 21
de 53
Estándar de Lenguajes de Programación IEC 1131
Diferentes lenguajes dentro
de un SFC, separados por sus
etiquetas de inicio y
terminación
Ejemplo 3
En aplicaciones con PLC, muchos interruptores de final de carrera exhiben un
comportamiento llamado 'rebote', el cual consiste en que el interruptor se abre y cierra
Controladores
Programables
Ramón
Medina
Página 22
de 53
Estándar de Lenguajes de Programación IEC 1131
varias veces antes de finalmente activarse o desactivarse. Se pide desarrollar un bloque de
función a la medida que proporcione un retardo de 50 milisegundos para eliminar dicho
rebote, que pueda ser almacenado en una librería y utilizado para programar todas las
entradas asociadas a interruptores de fin de carrera. Nótese que la corrección del rebote
debe ser hecha para ambas transiciones APAGADO-ENCENDIDO y ENCENDIDO-APAGADO.
Solución
La figura a continuación muestra el diagrama de tiempo de la entrada asociada al interruptor
de fin de carrera. Muestra cómo un retardo de 50 milisegundos (en azul) debe existir en las
transiciones del interruptor para filtrar las señales de rebote. Se pueden utilizar
temporizadores para resolver el problema.
Controladores
Programables
Ramón
Medina
Página 23
de 53
Estándar de Lenguajes de Programación IEC 1131
Las figuras a continuación muestran la implementación del circuito de eliminación de rebote
utilizando diagrama de escalera y el diagrama de tiempo correspondiente.
Controladores
Programables
Ramón
Medina
Página 24
de 53
Estándar de Lenguajes de Programación IEC 1131
La siguiente figura muestra el mismo tipo de solución, implementado usando bloques
funcionales.
Formato SFC
Los diagramas de funciones secuenciales representan el orden de los eventos en un proceso
secuencial. Un SFC divide el proceso en muchos pasos, que son representados por varios
componentes gráficos. Todos esos componentes son usados para formar una o más cartas
que conforman el programa de control completo.
Controladores
Programables
Ramón
Medina
Página 25
de 53
Estándar de Lenguajes de Programación IEC 1131
Símbolos gráficos usados en
SFC
La siguiente figura ilustra un pequeño programa de control compuesto de tres SFCs, cada uno
con su paso inicial independiente. Al tener pasos independientes, el programa de control
inicia el barrido de los diagramas cuando inicia la ejecución del programa, proporcionando un
inicio en paralelo.
Tres SFC representando
control de procesos
El tercer diagrama (CHART 3) a su vez contiene un macro paso, que puede ser considerado
como una subrutina, cuyo paso inicial no es independiente. EL segundo diagrama (CHART 2)
tiene un enlace representado de manera diferente a como lo es en los otros dos diagramas,
significando que en lugar de usar un enlace tipo flecha, se emplea una instrucción de salto. La
instrucción de 'salto a' programada luego del último paso usa una X seguida del número del
paso, para especificar a donde ir, en este caso, el paso 10. La instrucción 'salto desde'
programada antes de la primera instrucción, usa una Y, y el número de la transición (Y12)
para indicar desde dónde ha ocurre el salto. Esta notación X número de paso y Y número de
transición es usada en los FCSs para distinguir entre variables de pasos y transiciones.
Algunos sistemas 1131-3 usan las letras S y T para denotar pasos y transiciones, en lugar de X
e Y.
Los diagramas de funciones secuenciales son clasificados por niveles, dependiendo de cuánto
detalle muestran. Las representaciones SFC en la figura anterior son de nivel cero, porque no
Controladores
Programables
Ramón
Medina
Página 26
de 53
Estándar de Lenguajes de Programación IEC 1131
especifican ninguna de las acciones en sus pasos y no definen sus transiciones. Los diagramas
de nivel 1 y 2 muestran las acciones asociadas a los pasos. Los diagramas de nivel 1
representan sus acciones con nombres, comentarios o descripciones de la acción de control
ejecutada en cada paso. Puede también describir qué ocurre en cada transición o puede
mostrar las condiciones de transición en texto estructurado, junto con las variables que la
disparan.
Diagrama SFC de nivel 1
Un diagrama de nivel 2 muestra las instrucciones (diagrama de escalera, bloque de función,
texto estructura o lista de instrucciones) que implementa la acción de control.
Adicionalmente puede especificar la descripción de la acción con nombres como los usados
en nivel 1; sin embargo, este nombre es mostrado entre paréntesis para evitar confusión con
las instrucciones de programación.
Diagrama SFC de nivel 2
Cada paso y transición en un SFC tiene una estatus encendido o condición cuando está activo
o apagado cuando está inactivo. Un punto indica el estatus del paso o transición.
Controladores
Programables
Ramón
Medina
Página 27
de 53
Estándar de Lenguajes de Programación IEC 1131
El punto en el paso 11, indica
que está activo
Las figuras a continuación muestran un paso siendo activado por una transición y un paso
siendo desactivado por una transición. Como se muestra en el diagrama de tiempo, Y9 y X10
son falsos durante el tiempo a1 porque la transición Y9 no ha ocurrido y por lo tanto, no ha
pasado el turno al paso 10. Una vez que la condición o variable dispara la transición Y9, el
paso 10 se activa y la condición X10 se hace verdadera. En el segundo caso, el diagrama de
tiempo muestra que el paso 12 está activo durante el tiempo b1 y se desactiva al momento
que la transición Y12 se enciende en el tiempo b2.
Un paso inactivo, siendo
activado por una transición y
uno activo, siendo
desactivado
Ejemplo 4
La figura a continuación muestra un SFC en tres etapas diferentes: (a) paso 3 activo, (b) paso
4 activo luego de haber sido activada la transición IN_1 y (c) paso 4 apagado por activación
de la transición IN_2. Usando el diagrama de tiempo, ilustre gráficamente el estatus de los
pasos y las transiciones en cada una de las tres fases.
Controladores
Programables
Ramón
Medina
Página 28
de 53
Estándar de Lenguajes de Programación IEC 1131
Solución
La siguiente figura muestra los diagramas de tiempo para cada una de las tres etapas.
Cuando el paso 3 está activo, X3 está encendido y su acción es ejecutada. Una vez que la
transición IN_1 ocurre, el turno pasa al paso 4 para ejecución de sus acciones; de esta
manera se enciende X4. El paso 4 se mantiene activo hasta que la transición IN_2 se hace
verdad, momento en el que turno se transfiere al siguiente paso. Nótese que la transición no
necesita permanecer activa una vez que la acción es transferida de un paso al otro.
Transiciones
Como se ha descrito anteriormente, la condición que activa una transición puede ser un
pulso momentáneo. La figura a continuación muestra una transición de dos pulsos, Y9 y Y10,
que activan y desactivan el paso 10. Esas transiciones pueden ser programadas de tal forma
que el flanco de subida o el de bajada, activa la transición al siguiente paso.
Controladores
Programables
Ramón
Medina
Página 29
de 53
Estándar de Lenguajes de Programación IEC 1131
Ejemplo de pulsos de
transición momentáneos
En la siguiente figura, la transición 9 es programada para ser activada por un flanco de subida
utilizando una condición AND. En esta configuración, el encendido de la señal A iniciará la
transición al paso 10 siempre que la señal B esté encendida. La transición 10 está también
programada usando una condición AND; sin embargo, en este caso es una transición de
bajada. Esto significa que, mientras esté activa la señal D, el desactivado de la señal C
apagará el paso 10.
Pulsos de transición de pulso
ascendente y descendente
Es posible incluir un temporizador para determinar por cuánto tiempo estará activo el paso.
Por ejemplo, en el paso 11 en la figura a continuación, es ejecutado por un período de 100
segundos, ya que la transición Y11 incluye un temporizador. La instrucción de temporizado
puede ser también combinada con operaciones lógicas (AND, OR, NOT) y con instrucciones
IF...THEN.
Controladores
Programables
Ramón
Medina
Página 30
de 53
Estándar de Lenguajes de Programación IEC 1131
Transición temporizada
Programación en Diagrama de Funciones Secuenciales
La señal que activa una transición puede ser el resultado de una variable externa o la salida
de un paso. Por ejemplo, en la siguiente figura, las instrucciones de acción del paso 10 (en
este caso un secuencia de control en diagrama de escalera, texto estructurado y bloques
funcionales) controlan el estado de la transición Time_Up, la cual transfiere la ejecución al
siguiente paso. Cuando se activa el paso 10, la acción Mix_Start inicia y el procesador
monitorea las E/S en la acción y ejecuta el programa como se describe en las instrucciones de
acción. Si Mix_Rdy es VERDAD (en la porción de diagrama de escalera de la acción), el motor
es encendido por 30 segundos como lo especifica el temporizador. Una vez transcurridos los
30 segundos, la salida booleana del temporizador (Time_Up) se hará VERDAD, iniciando la
transición al siguiente paso.
Salida de una acción, usada
como señal de disparo de una
transición
Las transiciones también pueden estar lógicamente combinadas con otras instrucciones, la
mayor parte de las veces, con texto estructurado. Por ejemplo, en la figura 10-39, la
transición del paso 12 al 13 ocurrirá si el comando Set_OK dentro de la acción del paso 12
(etiquetada como Action_1) es VERDAD y la señal Level_Switch es VERDAD. Set_OK es una
entrada interna, mientras que Level_Switch es un señal directa de entrada conectada a un
módulo de entrada del controlador.
Controladores
Programables
Ramón
Medina
Página 31
de 53
Estándar de Lenguajes de Programación IEC 1131
Combinación de una salida
interna y una variable externa
como transición
Programando Transiciones Normalmente Cerradas
Como se ha dicho anteriormente, un dispositivo de entrada normalmente cerrado, debe ser
programado como normalmente abierto en el controlador, para que opere como dispositivo
normalmente cerrado. La razón es seguridad. Cuando se programa como normalmente
abierto, si el dispositivo perdiera continuidad, apagaría su conexión al módulo de entrada;
esto proporciona una operación a prueba de fallas. El mismo criterio aplica para un
dispositivo normalmente cerrado conectado a un controlador que sea programado utilizando
el estándar IEC 1131-3: todos los dispositivos normalmente cerrados deben ser programados
como normalmente abiertos, cualquiera que sea el lenguaje que se use.
Los dispositivos normalmente cerrados deben ser programados con cuidado, cuando son
usados como variables de disparo en una transición SFC. Si el dispositivo normalmente
cerrado no es accionado, la transición de un paso al otro será en un ciclo de ejecución. La
siguiente figura ilustra una parte de un diagrama sencillo, en el cual el interruptor de fin de
carrera normalmente cerrado LS_1 es usado para activar la transición del paso 10 al paso 11.
Nótese que el diagrama de tiempo, que representa la actividad booleana, indica que LS_1 es
ENCENDIDO cuando no está activado. De esta manera, la transición del paso 10 al 11 ocurre
tan pronto como se activa el paso 10. Para activar la transición del paso 10 al 11 luego de la
activación de LS_1 (LS_1 normalmente cerrado abriéndose), la transición debe ser
programada como NOT LS_1. De esta manera, si LS_1 se abre, la instrucción NOT LS_1
disparará la transición.
Controladores
Programables
Ramón
Medina
Página 32
de 53
Estándar de Lenguajes de Programación IEC 1131
La transición del paso 10 al 11
ocurre en un ciclo de
ejecución …
Nótese en la siguiente figura, que el interruptor se abre momentáneamente para activar la
transición al paso 11. Es buena idea estudiar los diagramas de tiempo cuando se programe
un dispositivo normalmente cerrado, para observar el comportamiento deseado de la
transición.
… a menos que la transición
10 sea programada como
NOT LS_1
La figura a continuación ilustra un circuito arranque-parada sencillo y su diagrama de tiempo.
Cuando el pulsador de arranque (momentáneo) normalmente abierto es presionado, y el
pulsador de parada normalmente cerrado no es presionado, el motor se encenderá y su
contacto auxiliar M1-1 'engancha' el arranque, de tal manera que el motor se mantendrá
encendido hasta que sea presionado el pulsador de parada. Cuando se presiona el pulsador
de parada, el circuito pierde continuidad y el motor se apaga. Lógicamente hablando, como
se muestra en el diagrama de tiempo, el motor se encenderá si ambos el pulsador de
arranque y el de parada, están encendidos; en otras palabras, la expresión lógica que
enciende M1 es M1= Start AND Stop.
Circuito cableado de
arranque-parada de un motor
y su diagrama de tiempo
La expresión lógica indica que M1 se encenderá si el pulsador de arranque es presionado y el
de parada no. Sin embargo, la expresión lógica no proporciona la funcionalidad de enganche,
lo cual significa que si el pulsador es presionado y luego liberado, el motor M1 no se
Controladores
Programables
Ramón
Medina
Página 33
de 53
Estándar de Lenguajes de Programación IEC 1131
mantendrá encendido. Posteriormente se verá, que al utilizar SFC, esta función de enganche
no es necesaria.
La siguiente figura ilustra la implementación SFC del circuito mostrado en la figura anterior,
junto con su diagrama de tiempo. En el SFC, la expresión lógica que dispara la transición 1
(Start AND Stop) es la misma que enciende el motor M1 en el diagrama de escalera, sin el
enganche. El programa no requiere el enganche, porque no requiere memorizar que el
pulsador de arranque fue presionado para mantener encendido el motor. Una vez que el
pulsador de arranque es presionado, la acción es transferida del paso 1 al 2 donde se
enciende el motor y se mantiene en dicho estado. El programa apagará el motor, cuando se
active la transición Y2, significando que la condición NOT Stop ha ocurrido. Tan pronto como
es presionado el botón de parada, se satisface la condición de transición Y2 y el control es
transferido del paso X2 (motor encendido) al paso X1, apagando la acción en X2 y, en
consecuencia, apagando el motor M1.
Implementación SFC del
circuito cableado de la figura
anterior
Ejemplo 5
La siguiente figura ilustra un diagrama de bloque de los dispositivos de entrada conectados al
controlador, usado para controlar el estado de dos motores, Motor_1 y Motor_2. Asuma que
el par de botones arranque/parada usados para el Motor_1, tienen un arranque
normalmente abierto y una parada normalmente cerrada, mientras que los usados para el
Motor_2 son ambos normalmente abiertos. Usando SFC, implemente dos programas
independientes que controlen las secuencias de arranque y parada de los dos motores.
Controladores
Programables
Ramón
Medina
Página 34
de 53
Estándar de Lenguajes de Programación IEC 1131
Solución
La siguiente figura muestra los diagramas SFC y de tiempo, para las estaciones de pulsadores.
Nótese que las lógicas para las transiciones que encenderán los motores son diferentes. Para
el Motor_1, la lógica toma en consideración que el botón de parada es normalmente abierto.
Para el Motor_2, la lógica muestra que el botón de parada es normalmente abierto.
Controladores
Programables
Ramón
Medina
Página 35
de 53
Estándar de Lenguajes de Programación IEC 1131
Divergencias y Convergencias
Hasta los momentos se han explicado diagramas de funciones secuenciales que tienen un
único enlace entre cada dos pasos y sus transiciones. Sin embargo, los SFC pueden tener
múltiples enlaces entre los elementos. Estos múltiples enlaces pueden ser de dos tipos:
divergencias y convergencias.
Un SFC con un enlace entre
pasos y transiciones y con
múltiples enlaces entre pasos
y transiciones
Una divergencia se presenta cuando un elemento SFC tiene varios enlaces que salen de él,
mientras que una convergencia en cuando un elemento tiene varios enlaces que llegan a él.
Ambas divergencias y convergencias pueden tener configuraciones OR o AND, relacionados
con los operadores booleanos de igual nombre.
Convergencias y Divergencias tipo OR
Una divergencia tipo OR permite que un paso transfiera el turno de ejecución a uno o varios
pasos a través de sus transiciones; de esta manera, diverge un paso en varias transiciones.
Aunque una divergencia OR conecta un paso con varias transiciones, el paso sólo puede
activar una de las transiciones a la vez. En otras palabras, las transiciones son mutuamente
exclusivas. Dependiendo de la implementación IEE 1131-3, una divergencia OR puede
también tener señales de disparo mutuamente exclusivas, o lógica programada que permite
Controladores
Programables
Ramón
Medina
Página 36
de 53
Estándar de Lenguajes de Programación IEC 1131
seleccionar entre la divergencia más a la izquierda o la de más a la derecha, en el caso de que
ocurran varias señales de disparo simultáneamente, permitiendo establecer prioridad.
Divergencia OR
La figura a continuación muestra un SFC con una divergencia OR luego del paso 1. Una vez
que es activado el paso uno, los pasos 10 o 20 pueden ser activados a través de las
transiciones 1 o 2. Esas dos condiciones tienen condiciones de disparo mutuamente
exclusivas, de tal manera que la transferencia sólo puede ir a uno de los pasos.
Ejemplo de una divergencia y
una convergencia OR
Si se activa la transición 1, se hace activo el paso 10; si se activa el paso 2, se hace activo el
paso 20.
Un convergencia OR, también llamada convergencia sencilla, es usada para conectar varias
transiciones al mismo paso. Una convergencia OR es lo opuesto a una divergencia OR;
converge varias transiciones en un único paso. En la figura anterior, la convergencia OR
presente indica que el paso 12 será activado a través de la transición 11 o la 30
Controladores
Programables
Ramón
Medina
Página 37
de 53
Estándar de Lenguajes de Programación IEC 1131
Convergencia OR
Circuito de alarma con una
divergencia y una
convergencia OR
Convergencias y Divergencias tipo AND
Una divergencia tipo AND, también llamada doble divergencia, proporciona un enlace de una
transición a varios pasos en forma paralela.
Controladores
Programables
Ramón
Medina
Página 38
de 53
Estándar de Lenguajes de Programación IEC 1131
Divergencia AND
A diferencia de la divergencia OR, una divergencia AND puede pasar el turno de ejecución a
varias ramas a la vez. En la figura a continuación, si la transición 1 es activada, el programa
transfiere el control a los pasos 40 y 50 al mismo tiempo. Las líneas paralelas que
representan la divergencia AND indican que transfiere el control a todos los pasos por
debajo, en paralelo.
Ejemplo de una divergencia y
una convergencia AND
Una convergencia AND, referida también como doble convergencia, enlaza varios pasos a
una transición sencilla. Es comúnmente usada para agrupar ramas SFC que fueron separadas
por una divergencia AND. En la figura anterior, una vez que son ejecutados los pasos 41 y 51,
el programa espera por la transición 2 para transferir el control al paso 10. SI más de dos
enlaces convergen en la transición, todos los pasos que preceden la convergencia deben
estar activos antes de que ocurra la transición. Por ejemplo, si sólo se ha ejecutado el paso
51, aunque se active la transición 2, no ocurre la transferencia de control al paso 10.
Controladores
Programables
Ramón
Medina
Página 39
de 53
Estándar de Lenguajes de Programación IEC 1131
Convergencia AND
Subprogramas
Como se ilustra en la figura a continuación, un proceso puede tener varios diagramas
principales, ejecutando varias tareas principales.
Proceso con varias programas
SFC
Dependiendo del sistema IEC 1131-3, es múltiples programas principales puede utilizar uno o
más subprogramas para implementar secuencias de control especializadas.
Controladores
Programables
Ramón
Medina
Página 40
de 53
Estándar de Lenguajes de Programación IEC 1131
Ejecución de un subprograma
dentro del programa
principal. El programa
principal es suspendido hasta
tanto no finalice el
subprograma
Existes aplicaciones informáticas compatibles con IEC 1131 que proporciona al usuario la
posibilidad de tener un programa principal con uno o más subprogramas, organizados de
acuerdo con una relación 'padre-hijo´.
Los subprogramas son
organizados en una relación
padre-hijo
Los subprograma son similares en operación a los macro pasos (macrosteps), excepto por el
hecho de los macro pasos son considerados un tipo de subrutina SFC. Son también parecidos
a los bloques de función en el sentido de que pueden ser reutilizados cuantas veces se
requiera, para implementar una función de control. Los subprogramas pueden ser escritos en
cualquiera de los lenguajes IEC 1131-3, y pueden ser invocados desde las acciones de un SFC
usando también cualquiera de los cuatro lenguajes. En contraste, un macro paso sólo puede
ser invocado desde la acción que lo contiene. Por otra parte, los bloques de función a la
medida, pueden ser invocados desde cualquier acción, una vez que hayan sido incluidos en la
librería de programas SFC. Sin embargo, los bloques de función no pueden no pueden
suministrar al programa principal la misma cantidad de información que si puede un
subprograma.
Los subprogramas difieren de los bloques de función a la medida y de los macro pasos en el
hecho de que pueden suministrar y recibir variables y valores, de la misma manera en que lo
Controladores
Programables
Ramón
Medina
Página 41
de 53
Estándar de Lenguajes de Programación IEC 1131
hace un programa escrito para un computador convencional. Por ejemplo, la siguiente
sentencia en texto estructurado:
Actual_Weight:= SP_Weighing (Max_Wt,Tare_Wt)
indica que a la variable Actual_Weight se le asignará el valor resultante de la ejecución del
subprograma SP_Weighing, el cual a su vez recibe como parámetros (del programa principal)
a las variables Max_Wt y Tare_Wt. Cuando un programa invoca un subprograma, el pide un
valor de retorno como resultado de la ejecución del subprograma. Dicho valor puede ser
booleano, real o entero. En el ejemplo anterior, el programa obtiene o calcula las variables
Max_Wt y Tare_Wt, las cuales son enviadas al subprograma. El subprograma SP_Weighing
usa dichos datos para calcular un valor que será asignado a la variables Actual_Weight. Esta
variable puede luego ser usada dentro del programa principal. La naturaleza propia de los
subprogramas (miniprogramas dentro de un programa de control de mayor tamaño) afecta
de manera importante el ciclo de ejecución.
La sintaxis para invocar un subprograma puede que difiere ligeramente de un sistema a otro.
Sin embargo, todos los subprogramas ejecutan una pequeña rutina y luego retornan el valor
requerido al programa principal. En la siguiente figura se ilustra cómo una programa SFC
invoca un subprograma desde una instrucción en una de sus acciones. En este ejemplo, la
acción del paso 11 tiene varias instrucciones en texto estructurado, con la instrucción
Init_Value:= SP_Check_Start iniciando un subprograma llamado SP_Check_Start. Este
subprograma calcula el valor de la variable Init_Value y envía su resultado de regreso al
programa principal, de tal manera que el programa principal pueda usar el valor de la
variable en el control del proceso.
Un subprograma invocado
por una instrucción dentro de
una acción
La figura a continuación ilustra varios ejemplos de subprogramas, utilizando otros lenguajes.
El subprograma SUBPROG_1 será ejecutado una vez que es encontrado directamente en el
programa (IL y ST), o una vez que se hayan satisfecho las condiciones (LD y FBD). Como se
dijo anteriormente, los subprogramas pueden ser escritos en cualquier lenguaje, sin importar
en cual fueron invocados. Los fabricantes de controladores proporcionan las especificaciones
para la transferencia de parámetros y valores de retorno entre subprogramas.
Controladores
Programables
Ramón
Medina
Página 42
de 53
Estándar de Lenguajes de Programación IEC 1131
Invocaciones de un
subprograma en lista de
instrucciones, texto
estructurado, diagrama de
escalera y bloques
funcionales
Una transición SFC puede también llamar a un subprograma, como se muestra en la siguiente
figura. En el ejemplo, las transiciones 1 y 2 llaman a los subprogramas ErrEval y EvalCond, los
cuales son mutuamente exclusivos. La invocación de los subprogramas sigue la siguiente
sintaxis:
Subprogram_Nombre ();
La sintaxis especifica el nombre del subprograma y la condición de retorno, que es una
condición booleana que dispara la transición. El valor retornado por el subprograma puede
ser igual a cero (condición falsa) o diferente de cero (condición verdadera).
Invocación de un
subprograma desde una
transición
Una acción puede también llamar a un subprograma directamente, usando una sintaxis
similar a la de la transición. Por ejemplo, la siguiente instrucción:
Action:
Result_Variable:= Sub_Program();
End_Action;
Controladores
Programables
Ramón
Medina
Página 43
de 53
Estándar de Lenguajes de Programación IEC 1131
puede ser usada para invocar a un subprograma que asignará su valor resultante a la variable
Result_Variable, la cual puede ser usada para activar una transición. La figura a continuación
muestra un subprograma de ejemplo llamado desde una acción SFC. En este ejemplo, cuando
se activa la acción del paso 1, se inicia un subprograma que determina en valor de la variable
Init. El valor de dicha variable (expresado en booleano), es luego retornada al programa
principal, donde es luego usada para activar el inicio de un proceso macro paso o emitir una
alarma. Las variables etiquetadas Error y OK deben ser declaradas como booleanas durante
la programación, para que ocurra apropiadamente la transición. La (P) en el nombre de la
acción del paso 1, indica que dicha acción es de tipo pulso (momentánea).
Invocación de un
subprograma desde una
acción SFC
Tipos de Acciones
Una acción es una diagrama de funciones secuenciales es ejecutada, cuando su paso
correspondiente es activado. Cuando se activa el paso, las instrucciones de control
contenidas en la acción son ejecutadas continuamente, hasta que la activación es transferida
al siguiente paso en el diagrama. Las acciones pueden tomar diversas formas, dependiendo
de la operación y resultados deseados. Los tipos de acciones son:
• Booleanas
• Tipo pulso
• Normales
• SFC
Controladores
Programables
Ramón
Medina
Página 44
de 53
Estándar de Lenguajes de Programación IEC 1131
Acciones Booleanas
Una acción booleana asigna un valor booleano (verdadero/falso) a una variable durante la
ejecución de la acción. La variable booleana puede estar asociada a un estado interno a una
salida física. La instrucción simplemente refleja el estado (encendido/apagado) de la variable
correspondiente, con respecto al estado de la acción. En la figura a continuación, una vez que
se activa el paso 20 (X20 está encendido), la variable Bool_Var_1 se enciende mientras el
paso esté activo. La variable /Bool_Var_2 (/ significa negado) es el valor negado del paso X20
(variable Bool_Var_2). Las variables Bool_Var_3 y Bool_Var_4 seguidas de (S) y (R)
respectivamente, indican instrucciones set y reset de la variable. El parámetro (S) se activa
cuando lo hace el paso, colocando la variable en 1 (verdad). La variable permanece en 1,
hasta que se ejecuta una instrucción reset, aún cuando el paso en el que se encuentra se
desactive. El parámetro (R), coloca la variables en 0 (falso).
Ejemplo de una acción
booleana
Ejemplo 6
Usando acciones booleanas SFC, implemente un diagrama que encienda y apague dos
lámparas piloto, de acuerdo al diagrama de tiempo que se muestra en la siguiente figura.
De acuerdo al diagrama, PLight_1 está encendida durante un segundo, mientras que PLight_2
está apagada, luego PLight_1 se apaga por un segundo, mientras que PLight_2 está
encendida. Asuma que el pulsador de arranque (Start) es normalmente abierto se usa para
iniciar la secuencia, y que el pulsador de parada (Reset), también normalmente abierto, se
Controladores
Programables
Ramón
Medina
Página 45
de 53
Estándar de Lenguajes de Programación IEC 1131
usa para reiniciar el sistema, apagando ambas luces piloto. Incluya una lámpara adicional que
se encienda cuando se de inicio a la operación, y que se apague cuando el sistema haya sido
reinicializado.
Solución
La figura a continuación ilustra el diagrama de tiempo deseado de las dos entradas (Start y
reset), y de las tres lámparas piloto (PLight_1, PLight_2 y Light_EN).
La siguiente figura muestra la implementación SFC del diagrama de tiempo, donde en el paso
inicial las lámparas PLight_1 y PLight_2, están apagadas. Una vez que el botón de arranque es
presionado, pasa el turno al paso 2, el cual no contiene acciones, y continúa a una
divergencia OR.
Controladores
Programables
Ramón
Medina
Página 46
de 53
Estándar de Lenguajes de Programación IEC 1131
En la divergencia OR, el control va al paso 10 (ON1_OFF2) y el botón Reset no es presionado,
encendiendo PLight_1 y manteniendo PLight_2 apagada, enciendo adicionalmente la
lámpara Light_EN, usando su parámetro (S). La transición temporizada Y10 es disparada un
segundo después de que el paso 10 es activado, pasando el control al paso X11, el cual
revierte el estado de las lámparas piloto usando acciones booleanas. Al igual que en la
transición Y10, la transición Y11 permite un segundo de activación antes de que el turno sea
transferido al paso 2, donde la secuencia es repetida.
Cuando es presionado el pulsador Reset, el programa activa el paso 3, el establece las
condiciones de las lámparas a las existentes en el paso 1, donde el programa permanecerá
esperando hasta que sea presionado el botón de arranque (Start). Nótese que este programa
SFC requiere que el operador presione el pulsador Reset durante al menos 2 segundos,
cuando desee apagar las luces. La razón para esto, es que el programa podría estar ubicado
en la rama opuesta de la divergencia OR (transición 4), la cual demora al menos dos
segundos antes de que la señal de Reset pueda ser monitoreada.
Si se desea que la acción del pulsador de Reset sea inmediata, la solución es programar una
acción independiente; una acción de este tipo puede ser programada para detectar la
función de reinicialización y enviar el programa de regreso al paso 1 del diagrama principal.
La figura a continuación muestra la configuración de la acción independiente, junto con una
nueva alternativa de acciones booleanas para el programa.
Controladores
Programables
Ramón
Medina
Página 47
de 53
Estándar de Lenguajes de Programación IEC 1131
Aunque la acción independiente no está enlazada con el programa, dirigirá una transición si
sus condiciones son satisfechas. Una acción independiente actúa básicamente como una
interrupción, especificando a que paso se transfiere el turno del programa de control. Nótese
que la acción independiente está constantemente activa, lista para forzar al programa a ir a
un paso en particular. Si el pulsador Reset es presionado, la acción independiente forzará al
programa a regresar al paso 1, independientemente del lugar dentro del diagrama en el que
se encontrara la ejecución del programa de control. En este caso, el pulsador Reset puede ser
presionado momentáneamente y aún así, ser atendido.
Acciones de Pulso
Las acciones de pulso permiten la ejecución de una o más instrucciones en la acción de un
paso, sólo una vez luego de la activación del paso. Esto es, una vez que el paso es activado, la
acción tipo pulso ocurrirá sólo una vez antes de que el paso sea desactivado. Dependiendo
de la implementación IEC 131, las instrucciones en la acción, pueden estar en uno o más de
los lenguajes disponibles. La figura a continuación muestra la sintaxis típica de una acción
tipo pulso.
Controladores
Programables
Ramón
Medina
Página 48
de 53
Estándar de Lenguajes de Programación IEC 1131
Sintaxis de una acción tipo
pulso
La notación (P) indica que es una acción tipo pulso. Una acción tipo pulso puede ser
representada en un diagrama de tiempo como se muestra a continuación.
Ejecución de una acción tipo
pulso
La siguiente figura muestra un SFC típico con una acción de pulso implementando una
instrucción de conteo ascendente, usando instrucciones en texto estructurado. Las acciones
de pulso son especialmente apropiadas para aplicaciones que requieren acciones que deben
ocurrir sólo una vez, por ejemplo, la inicialización de variables.
Controladores
Programables
Ramón
Medina
Página 49
de 53
Estándar de Lenguajes de Programación IEC 1131
Instrucción de conteo
ascendente, implementada
como acción tipo pulso
Acciones Normales
Las acciones normales incorporan instrucciones IEC 1131-3 que son ejecutadas
continuamente durante la actividad del paso. En otras palabras, las instrucciones dentro de
una acción normal serán monitoreadas y actualizadas indefinidamente, hasta que el paso sea
desactivado.
Ejecución de una acción
normal
La figura a continuación muestra la sintaxis básica de una instrucción normal, donde la (N)
indica normal. Las acciones normales pueden omitir el parámetro (N) en su definición.
Controladores
Programables
Ramón
Medina
Página 50
de 53
Estándar de Lenguajes de Programación IEC 1131
Sintaxis de una acción normal
La siguiente figura muestra un ejemplo de un programa de conteo que usa acciones
normales en el paso 2. Nótese que el paso 1 usa una acción de pulso, para inicializar el
contenido de la variable R_Count a cero. Como lo ilustra el siguiente ejemplo, la acción
normal en el paso 2 (programada usando texto estructurado), ejecuta la acción de conteo en
el flanco de subida de la señal Cmd (comando) y almacena el conteo total en la variable
R_Count. Este procedimiento de conteo es ejecutado mientras el paso 2 continúe activo.
Ejemplo de un programa de
conteo usando una acción
normal
Ejemplo 7
Basado en la figura anterior, explique la operación del paso 2. Adicionalmente, dibuje el
diagrama de tiempo de la señal que activa la variable R_Count.
Controladores
Programables
Ramón
Medina
Página 51
de 53
Estándar de Lenguajes de Programación IEC 1131
Solución
La figura a continuación muestra el diagrama de tiempo para el paso 2.
La variable R_Count incrementa su valor cada vez que la señal Cmd_Cnt va de 0 a 1. La
condición IF en el paso 2 se asegura de que la señal se ha apagado luego de la transición de 0
a 1. La instrucción Last_Cmd:= Cmd_Cnt atrapa el último valor de Cmd_Cnt, de tal manera
que el conteo no sea ejecutado nuevamente sin que Cmd_Cnt haya regresado a 0 primero.
Cuando la acción es desactivada por la variable de transición Stop_Counting, el estado de
Cmd_Cnt y Last_Cmd es puesto a cero. Nótese que el valor R_Count es reinicializado a cero
en el paso 1. Sin embargo, el valor de R_Count será almacenado como un valor entero
normal en el programa, hasta que sea cambiado, por ejemplo, en el paso 1.
Acciones SFC
Una acción SFC es una secuencia de programa SFC tipo hijo que puede ser activada (iniciada)
o desactivada (terminada) cuando un paso está activo. Recuerde que un programa hijo
pertenece al programa padre (o principal). Las acciones SFC pueden tener parámetros
normales, set o reset que influencian la operación de la acción SFC:
Normal: una acción SFC con un parámetro normal (N) se inicia cuando se activa el paso y es
terminada cuando el paso es desactivado. El uso del parámetro (N) es opcional.
Set: una acción SFC con el parámetro (S) es iniciada cuando se activa el paso, pero
permanece activada aún después de haber sido desactivado el paso.
Controladores
Programables
Ramón
Medina
Página 52
de 53
Estándar de Lenguajes de Programación IEC 1131
Reset: una acción SFC con el parámetro (R) es destruida cuando se activa el paso. Sirve para
apagar una acción SFC tipo Set.
La figura a continuación muestra un proceso por lotes usando acciones SFC. El programa
principal tiene dos programas hijos, Batch_Mix y Batch_Pump, los cuales son activados por el
programa principal. El programa principal usa operandos normales, ser y reset.
Proceso por lotes,
implementado usando
acciones SFC
Una vez que es disparada Start, el SFC activa ambos programas hijos. El programa Batch_Mix
tiene un parámetro (N), mientras que Batch_Pump tiene parámetros (S) y (R). Batch_Pump
se activa tan pronto como lo hace el paso 20, y permanece así hasta que la señal Level_Full
es encendida, activando el paso 30, terminando el programa Batch_Pump.
Sistemas IEC 1131-3
En adición a la implementación del IEC 1131-3 en controladores, muchos fabricantes
proporcionan el estándar en variadas plataformas y sistemas operativos, tales como
Windows y Unix. Estos sistemas informáticos emulan la operación de un controlador
programable y pueden soportar el uso de módulos de E/S de uno o más fabricantes.
Un controlador ‘SOFT’ con
módulos de E/S
Controladores
Programables
Ramón
Medina
Página 53
de 53