Sei sulla pagina 1di 75

Captulo 6

ESTNDAR IEC 61131-3


6.1. Marco Introductorio
Los diagramas escalera, tal como se vieron en el Captulo 4, han evolucionado desde los diagramas de cableado utilizados en el diseo de sistemas para vehculos, siendo inicialmente una excelente forma de expresar el desarrollo de pequeas aplicaciones con habilidades muy bsicas en programacin. Debido a su fcil interpretacin y seguimiento se hicieron muy populares y la mayora de los PLCs entregaron una forma de programacin con base en los diagramas escalera. Sin embargo, el desarrollo de un sistema de estos se vuelve ms complejo cuando el tamao del sistema crece, trayendo con ello nuevos problemas en el desarrollo, especialmente haciendo muy difcil la creacin de programas estructurados, el diseo de subrutinas o procedimientos y dicultando enormemente el seguimiento y mantenimiento de sistemas en proporcin al tamao de los mismos. Aunque cada fabricante de PLCs trat a su manera de ir subsanando las dicultades presentadas, el enorme crecimiento de la industria de los automatismos ocasion la presencia de diversos lenguajes y tcnicas de desarrollo propios de cada uno dicultando la integracin, mantenimiento y seguimiento de los sistemas por parte de los desarrolladores y personal de planta, requiriendo de habilidades y capacitacin especial en cada uno de los tipos de PLCs usados. Se requera, entonces, de lo que se llama hoy en da Sistemas Abiertos, permitiendo la construccin de grandes soluciones usando equipos provenientes de varios manufacturadores y estandarizando los mtodos y tcnicas de programacin. Lo anterior fue la motivacin principal para la emisin del Estndar IEC 61131-3, el cual provee tcnicas bien concebidas y probadas para lenguajes de programacin de PLCs teniendo implicacin directa sobre la productividad en el desarrollo de las aplicaciones al mejorar su anlisis, desarrollo, mantenimiento y seguimiento [8, 9, 10]. La primera publicacin del estndar se realiz en 1993 y a lo largo del tiempo ha tenido correcciones, enmiendas y reportes tcnicos de los cuales los principales son: Correccin al IEC 61131-3 de 1994 149

150

CAPTULO 6. ESTNDAR IEC 61131-3

el cual corrige errores encontrados en el estndar posteriores a su publicacin, Reporte Tcnico 2 Extensiones Propuestas al IEC 61131-3 y el Reporte Tcnico 3 Guas para la aplicacin e implementacin de lenguajes de programacin para controladores programables [4, 6, 5, 7, 8, 9].

6.1.1. Deciencias de la Programacin Escalera


Aunque este tipo de programacin fue la abanderada en los inicios de la propagacin de los sistemas basados en PLCs, ella presentaba unas deciencias bien denidas las cuales era necesario superar. La mayora de los sistemas de programacin en escalera soportados por los PLCs entregaban un nmero limitado de subrutinas, dicultando la divisin de un programa extenso en estructuras funcionales menores y con una jerarqua bien denida. De lo anterior se puede deducir que se limitaba la reutilizacin de piezas de software con funcionalidades comunes a ms de una aplicacin. Era entonces necesario escribir una y otra vez las mismas piezas de software para cumplir exactamente la misma funcionalidad dentro de un mismo sistema y ms an en sistemas diferentes. Es claro que la posibilidad de tener bloques funcionales con lgica repetida que se puedan invocar continuamente puede reducir en gran proporcin el tamao de los programas y facilitar su mantenimiento. Otro inconveniente con este tipo de sistemas escalera era su inercia natural a impedir el uso de estructuras de datos ya que estos eran almacenados como unidades simples de memoria en bits o registros, pero en los sistemas actuales se necesita poder mantener agrupados conjuntos de datos relacionados y todos, posiblemente, de naturaleza diferente. Un ejemplo particular es el caso de un sensor en el cual fuera del valor que entrega relacionado con una variable fsica se debe guardar informacin de su ubicacin, identicacin, ltimo mantenimiento, ltima falla, etc. Tal vez la dicultad ms grande con los sistemas escalera aparece una vez los sistemas de control crecen, y a la vez tambin sus alcances y propsitos. Cuando el deseo es controlar un sistema complejo el cual abarca varios frentes se hace necesaria la introduccin de control para la aplicacin mediante secuencias. Si por ejemplo se quiere controlar el arranque de un motor de corriente alterna se requerir iniciar vericando el estado de ciertas partes del sistemas que son externas al motor con el n de asegurar la conveniencia o seguridad de su arranque, luego ser necesario proceder con las acciones propias del arranque y cuando se asegure su operacin en rgimen permanente realizar el paso de las acciones posteriores o activacin de mquinas y sistemas subsecuentes. Aunque la realizacin de este tipo de aplicacin es posible mediante el uso de los diagramas escalera, su implementacin es tediosa, a medida que el sistema crece se vuelve prcticamente inmanejable y su posterior mantenimiento es casi que imposible. En un sistema como el descrito en el prrafo anterior ser posible encontrar requerimientos sobre el control de ejecucin, por ejemplo se puede requerir seguimiento simultneo a procesos donde las necesidades de ejecucin del

6.2. MARCO CONCEPTUAL

151

cdigo relacionado con cada proceso pueden ser diferentes, as unas partes del cdigo deben ser evaluadas con mayor periodicidad en relacin con otras. Estas demandas son bastantes difciles de cumplir mediante la mayora de los sistemas tradicionales encontrados. Es ms, cuando el sistema requiere de controles basados en tcnicas PID el problema se multiplica, ya que para garantizar un buen control, es necesario mantener la velocidad de muestreo entre actualizaciones de los algoritmos de control en estado estable y con una duracin denida. Adems, cuando se hace necesaria la introduccin de anlisis ms complejos se requerir de la presencia de operaciones aritmticas, las cuales son bastante complicadas en su implementacin mediante el uso exclusivo de programacin escalera. Todas las problemticas expuestas son justicaciones ms que vlidas como motivacin para la bsqueda y posterior introduccin del Estndar IEC 611313 [2, 1, 8, 9].

6.2. Marco Conceptual


El estndar IEC 61131-3 fuera de describir los lenguajes de programacin para PLCs, tambin consta de guas y metodologas para la creacin de proyectos. El estndar asume en todo instante que los valores provenientes de los sensores externos, encargados de obtener la valoracin de las diferentes cantidades fsicas, se encuentran disponibles en locaciones denidas de memoria en un PLC; de igual forma los valores de salida, encargados de controlar actuadores e indicadores, sern exteriorizados al actualizar locaciones denidas de memoria.

6.2.1. Elementos del Modelo de Software


Los principales elementos requeridos en un modelo de software IEC 611313 son los siguientes [8, 9]: Conguracin: Conforma la capa exterior del modelo de software. Generalmente se concibe como el mismo software requerido en un PLC. Cuando las aplicaciones se hacen ms complejas y extensas, se hace necesaria la presencia de varios PLCs, los cuales deben interactuar entre ellos y donde el software de cada uno se puede interpretar como una conguracin separada. La conguracin guarda informacin sobre el tipo de PLC y recurso necesario para ejecutar un programa, la prioridad respectiva asignada, las variables globales y externas y las variables de asignacin fsica. Recurso: Cada una de las unidades de proceso disponibles en un PLC. Un recurso puede correr varios programas y un programa no se podr ejecutar si no es cargado en un recurso.

152

CAPTULO 6. ESTNDAR IEC 61131-3

Programa: Un programa se puede elaborar a partir de diferentes elementos de software, cada uno de los cuales puede a su vez ser elaborado en cualquiera de los lenguajes de programacin denidos por el estndar. Cada elemento constitutivo de un programa puede requerir de prioridades diferentes de ejecucin, para lo cual a cada parte se le puede asignar una tarea. Tarea: Una tarea congura la ejecucin de un conjunto de programas y/o bloques de funciones. Esta conguracin puede permitir la ejecucin peridica de estos elementos o su ejecucin ante solicitud. Un programa o bloque de funcin determinado permanecer inactivo hasta que sea asignado a una tarea especca y hasta el momento en el cual dicha tarea se ejecute ya sea de forma peridica o por demanda. Unidades de Organizacin de Programa (POU): Son las funciones y bloques de funciones a partir de las cuales se pueden elaborar programas y otras POUs, por tanto pudiendo ser usados repetidamente en diferentes partes de una aplicacin. El estndar IEC 61131-3 limita los tipos de POUs a tres principales tipos de bloques los cuales se describen en la Tabla 6.1:
Tipo de POU Programa PROGRAM Descripcin Representa el programa principal y la unidad mayor de reutilizacin de software. En este tipo de unidad se incluye la asignacin de variables de entrada y salida a direcciones fsicas del PLC. Puede tener uno o varios parmetros de entrada y de salida. Bloque de Funcin FUNCTION_BLOCK Tipo de POU base del diseo jerrquico, al permitir la creacin de programas desde unidades menores. Puede contener funciones y otros bloques de funciones. Posee un algoritmo que corre una vez con cada ejecucin del bloque de funcin. Permite denir datos como conjunto de parmetros de entrada y salida que se pueden conectar a otros bloques o a variables internas. Las variables denidas pueden ser estticas, lo cual implica que sus valores se pueden retener entre ejecuciones. Funcin FUNCTION Elemento de software que al ser invocado con un mismo conjunto de valores de entrada siempre retorna el mismo valor de salida, es decir, no posee variables estticas y solo produce un nico resultado primario.

Tabla 6.1: Tipos de POUs Variables Locales y Globales: Las variables pueden contener diferentes tipos de datos y poseer nombres que las representen de forma adecuada. Las variables locales se pueden declarar ya sea en las conguraciones, en los programas, en los bloques de funciones o en las funciones, pero quedando restringidas en acceso nicamente al elemento que las contiene. Una

6.2. MARCO CONCEPTUAL

153

variable global puede ser declarada en un programa y por tanto ser accedida desde todos los elementos de software dentro del mismo, igualmente si sta es denida en un recurso o en una conguracin podr ser accedida por todos los elementos constitutivos de los mismos. Variables de Representacin Directa: Permiten el acceso directo a posiciones de memoria del PLC. Slo pueden ser declaradas y accedidas dentro de los programas. Su uso extensivo diculta la reutilizacin de los programas que las denen, dado que al indicar posiciones determinadas de memoria stas pueden variar de un programa a otro. Ruta de Acceso: Es una declaracin especial de variable que puede ser leda o escrita por otras conguraciones remotas diferentes a la que la declara. Es de resaltar que el estndar no dene los protocolos de comunicaciones a emplear. A continuacin, en la Tabla 6.2, se resumen los diferentes tipos de variables disponibles y el Constructor 1 respectivo de cada una de ellas.
Tipo de Variable Variable Local VAR Constructor Descripcin Slo es visible y procesable dentro de la POU que la dene. Puede ser leda o escrita. Variable de Entrada VAR_INPUT Es una variable que es visible en la POU invocante. Dentro de su POU slo puede ser leda ms no escrita. Variable de Salida VAR_OUTPUT Es una variable que es visible en la POU invocante. Fuera de su POU slo se puede leer, pero dentro puede ser tanto leda como escrita. Variable de Entrada y Salida Variable Externa VAR_IN_OUT Tipo de variable que combina los dos tipos anteriores. Puede ser leda y escrita tanto fuera como dentro de su POU. VAR_EXTERNAL Es una variable global denida por una POU, siendo visible y con posibilidades de lectura y escritura por todas las otras POUs. Variable Global Variable Ruta de Acceso VAR_GLOBAL VAR_ACCESS Posee las mismas caractersticas de una variable externa. Variable global de uso en las conguraciones como medio de comunicacin entre una y las dems.

Tabla 6.2: Tipos de Variables


constructor es una palabra especial, escrita normalmente en maysculas, empleada para determinar el inicio y/o n de un elemento particular de software.
1 Un

154

CAPTULO 6. ESTNDAR IEC 61131-3

En la Figura 6.1 se observa una representacin esquemtica de los diferentes componentes o elementos involucrados en el modelo de software denido por el Estndar IEC 61131-3.

CONFIGURACIN RECURSO Tarea RECURSO Tarea Tarea RECURSO Tarea Tarea

Programa

Programa

Programa Bloque de Funcin (FB) Funcin (FUN)

Programa VAR LOCAL

Programa

FB

FUN

VARIABLES GLOBALES Y DE REPRESENTACIN DIRECTA

RUTAS DE ACCESO

HACIA OTRAS CONFIGURACIONES

Figura 6.1: Modelo Denido por el Estndar IEC 61131-3

6.2.2. Partes de una POU


Toda POU consta de tres partes, con las cuales se dene completamente su tipo y funcionalidad deseada. En la primer parte se dene el nombre y tipo de la POU, en la segunda parte se realiza la declaracin de tipos de datos y variables y la ltima parte consta del cdigo de instrucciones o algoritmo que dene la funcionalidad [8, 9]. Si la POU es una funcin, en la primer parte debe ir la denicin de tipos de datos. El Estndar IEC 61131-3 permite que las partes de declaracin y de cdigo puedan ser realizadas en cualquiera de los cinco lenguajes de programacin textuales o grcos denidos en el mismo estndar. Si, por ejemplo, se desea implementar un bloque de funcin para el arranque de un motor AC trifsico, la POU respectiva podra ser la mostrada en la Figura 6.2. En el estndar se denen un total de cinco lenguajes de programacin, de los cuales tres son grcos y dos son textuales, permitiendo la portabilidad de los programas independiente de los proveedores de los PLCs. A continuacin se realiza una corta presentacin de cada uno de los lenguajes, ya que su descripcin ser objetivo de secciones subsecuentes.

6.2. MARCO CONCEPTUAL


Tipo de POU Interfaz de variables Variables locales
Parte de declaraciones FUNCTION_BLOCK VAR_INPUT VAR_OUTPUT VAR ArranqueMotor :BOOL; END_VAR :BOOL; :BYTE; END_VAR :BOOL; END_VAR Iniciar Velocid

155

Iniciar FIN Velocid PasoYD

ArranqueMotor Fin

Algoritmo
ALGORITMO

Parte de cdigo

Figura 6.2: Partes de una POU Texto Estructurado: (Structured Text- ST) Lenguaje de programacin de alto nivel de sintaxis similar a los lenguajes tradicionales de texto como C, PASCAL, etc. Listado de Instrucciones: (Instruction List- IL) Lenguaje de programacin de bajo nivel con orientacin a mquina, el cual se basa en lenguajes similares ofrecidos por varios proveedores de PLCs. Diagrama de Bloques de Funciones: (Function Block Diagram- FBD) Lenguaje de programacin que permite la interconexin grca del ujo de control entre funciones, bloques de funciones y los dems elementos funcionales. Diagrama Escalera: (Ladder Diagram- LD) Lenguaje grco de programacin que se basa en los tradicionales diagramas de lgica cableada, o escalera. Diagrama Funcional Secuencial: (Sequential Function Chart- SFC) Lenguaje grco de programacin que permite describir el ujo de control mediante la asignacin de tareas en partes que se pueden realizar en forma secuencial o paralela. Como ejemplo para los diferentes tipos de lenguajes del estndar, se tiene la implementacin de un control sencillo para una alarma en un banco: si se abre la caja fuerte en horario laboral se debe encender un indicador de riesgo, pero si se abre la caja fuerte fuera de horario laboral se debe activar una alarma sonora:
IF (CajaFuerte=Abierta) AND (Horario=Laboral) THEN Indicador=1; ELSE IF (CajaFuerte=Abierta) AND (Horario<>Laboral) THEN Alarma=1; END_IF; END_IF;

Figura 6.3: Ejemplo de Texto Estructurado

156

CAPTULO 6. ESTNDAR IEC 61131-3

LD AND ST LD AND ST

CajaFuerte Laboral Indicador CajaFuerte NOT(Laboral) Alarma

Figura 6.4: Ejemplo de Listado de Instrucciones

CajaFuerte

& 1 &

Indicador

Laboral CajaFuerte

Alarma

Figura 6.5: Ejemplo de Diagrama de Bloques Funcionales

CajaFuerte

Laboral Laboral

<Indicador <Alarma

Figura 6.6: Ejemplo de Diagrama Escalera

0 CajaFuerte 1

Laboral 2 Indicador Cancelar 3

Laboral Alarma Cancelar

Figura 6.7: Ejemplo de Diagrama Funcional Secuencial

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

157

6.3. Elementos Comunes a los Lenguajes del Estndar


Como ya se ha dicho, el algoritmo funcional de los programas, bloques de funciones y funciones puede ser programado empleando cualquiera de los cinco lenguajes denidos por el estndar, sin embargo independientemente del lenguaje seleccionado, ciertas partes de toda POU deben ser denidas siempre de la misma manera, como es el caso de la declaracin de variables, los tipos de datos, denicin del tipo de POU, etc. Para ello se hace necesario introducir antes que nada un gran nmero de elementos comunes y caractersticas que aplican para todos los lenguajes [8, 9].

6.3.1. Conjunto de Caracteres


Una condicin importante que debe cumplir cualquier lenguaje del estndar es su portabilidad entre diferentes sistemas, por tanto toda informacin en texto debe estar restringida a ser expresada mediante un conjunto denido de letras, dgitos y caracteres. Para cumplir con lo anterior se emplea los caracteres del estndar ISO 646 denominado como Basic Table Code. El estndar es exible al permitir alternativas para resolver conictos debidos a caracteres con varios signicados dependiendo de su contexto o uso regional, sin embargo se prohbe el empleo de caracteres regionales, aunque se pueden incluir como extensiones del estndar para una nacin determinada.

6.3.2. Identicadores
Los identicadores son mostrados en texto normal y se emplean para dar nombres a las variables, funciones, nuevos tipos de datos y otros elementos dentro del lenguaje. Siempre deben iniciar con un caracter que sea diferente de un dgito y el resto de la cadena se puede componer de letras, dgitos o lneas de subrayado, sin embargo se prohbe el uso de dos lneas de subrayado seguidas. Se debe prestar atencin al hecho que los identicadores no son sensibles a maysculas, por tanto dos variables llamadas por ejemplo Activo y ACTIVO son tratadas como la misma variable; adems el estndar slo exige la vericacin de los primeros 6 caracteres de un identicador para determinar su unicidad, por lo que dos variables llamadas por ejemplo Activo_1 y Activo_2 podran ser las mismas dependiendo del sistema empleado.

6.3.3. Palabras Reservadas


Identicadores especiales que normalmente se escriben en maysculas y que el estndar reserva para denir diferentes construcciones o para iniciar y terminar elementos determinados del lenguaje. Se permite su escritura en maysculas, minsculas o mezcla de ambas sin afectar el signicado de ellas,

158

CAPTULO 6. ESTNDAR IEC 61131-3

por lo que adems se prohbe su empleo para denir el nombre de variables, programas u otros elementos. En la Tabla 6.3 se hace una lista completa de las palabras reservadas por el estndar IEC 61131-3, la mayora de ellas se describirn en las secciones siguientes, las otras se dejan para que el lector verique su funcionalidad.

Letra A B C D E

Palabras Reservadas ABS, ACOS, ACTION, ADD, AND, ANDN, ANY, ANY_BIT, ANY_DATE, ANY_INT, ANY_NUM, ANY_REAL, ARRAY, ASIN, AT, ATAN BOOL, BY, BYTE CAL, CALC, CALCN, CASE, CD, CDT, CLK, CONCAT, CONFIGURATION, CONSTANT, COS, CTD, CTU, CTUD, CU, CV D, DATE, DATE_AND_TIME, DELETE, DINT, DIV, DO, DS, DT, DWORD ELSE, ELSIF, END_ACTION, END_CASE, END_CONFIGURATION, END_FOR, END_FUNCTION, END_FUNCTION_BLOCK, END_IF, END_PROGRAM, END_REPEAT, END_RESOURCE, END_ STEP, END_STRUCT, END_TRANSITION, END_TYPE, END_VAR, END_WHILE, EN, ENO, EQ, ET, EXIT, EXP, EXPT

F G I J L M N O P Q R

FALSE, F_EDGE, F_TRIG, FIND, FOR, FROM, FUNCTION, FUNCTION_BLOCK GE, GT IF, IN, INITIAL_STEP, INSERT, INT, INTERVAL JMP, JMPC, JMPCN L, LD, LDN, LE, LEFT, LEN, LIMIT, LINT, LN, LOG, LREAL, LT, LWORD MAX, MID, MIN, MOD, MOVE, MUL, MUX N, NE, NEG, NOT OF, ON, OR, ORN P, PRIORITY, PROGRAM, PT, PV Q, Q1, QU, QD R, R1, R_TRIG, READ_ONLY, READ_WRITE, REAL, RELEASE, REPEAT, REPLACE, RESOURCE, RET, RETAIN, RETC, RETCN, RETURN, RIGHT, ROL, ROR, RS, RTC, R_EDGE

S T U V W X

S, S1, SD, SEL, SEMA, SHL, SHR, SIN, SINGLE, SINT, SL, SQRT, SR, ST, STEP, STN, STRING, STRUCT, SUB TAN, TASK, THEN, TIME, TIME_OF_DAY, TO, TOD, TOF, TON, TP, TRANSITION, TRUE, TYPE UDINT, UINT, ULINT, UNTIL, USINT, VAR VAR_ACCESS, VAR_EXTERNAL, VAR_GLOBAL, VAR_INPUT, VAR_IN_OUT, VAR_OUTPUT WHILE,. WITH, WORD XOR, XORN

Tabla 6.3: Palabras Reservadas IEC 61131-3

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

159

En las Figuras 6.2 y 6.3 las palabras reservadas se muestran en maysculas.

6.3.4. Comentarios
La gran mayora de los lenguajes de programacin, tanto modernos como tradicionales, han permitido la insercin de comentarios dentro del cuerpo de instrucciones, esto con el n de poder especicar funcionalidades, facilitar el mantenimiento de los algoritmos o simplemente para claricar procedimientos. Todos los lenguajes IEC 61131-3 permiten la insercin de comentarios, aunque el Listado de Instrucciones tiene algunas restricciones. Un comentario se inicia con los caracteres (* y se termina con *), se puede colocar en cualquier ubicacin que permita la insercin de al menos un espacio en blanco, aunque se debe tener en cuenta que los comentarios anidados no se permiten. A continuacin se muestra un ejemplo de comentario:

(*****************************************) (*****************************************) (*********Arranque Motor Trifsico********) (*****************************************) (*****************************************) (*Arranque Y-Delta por Transicin Abierta*) (*****************************************) (*****************************************)

Figura 6.8: Ejemplo de Comentario

6.3.5. Delimitadores
Son smbolos especiales requeridos para la sintaxis de un lenguaje, los cuales pueden variar su signicado dependiendo de su forma de uso. Por ejemplo, el smbolo ( seguido de un asterisco denota el inicio de un comentario, pero si se usa solo denota el listado de parmetros de una funcin que se invoca; otro ejemplo de smbolo con mltiples usos, y por ende signicados, es el -, el cual se puede usar como el operador de sustraccin, pero tambin se puede emplear como un operador de negacin de expresiones. Algunos de los delimitadores ms empleados son los siguientes, tenindose en cuenta que sus modos de uso y signicados se podrn inferir para la gran mayora de forma natural: +, - , #, E, ;, :=, ,(coma), (...), [...], ;, %, =>, <, >, >=, <=, =, <>, *, **, /, &. El espacio en blanco se considera igualmente como un delimitador.

160

CAPTULO 6. ESTNDAR IEC 61131-3

6.3.6. Tipos de Datos


6.3.6.1. Tipos de Datos Elementales

Debido al amplio rango de operacin de los PLCs hoy en da, se hace necesario que estos soporten una gran variedad de tipos y formatos de datos, entre los cuales se encuentran los Enteros, Reales, Tiempo, Fecha y Tiempo, Cadenas y Booleanos los cuales se constituyen como los tipos elementales de datos disponibles. Cuando se habla de tipos de datos siempre se hace una relacin con aquellos datos especiales que representan valores jos para un tipo de dato dado, normalmente denominados como constantes, a los cuales el estndar los llama Literales. Los literales en algunas ocasiones pueden presentar problemas de ambigedad en el valor que se desea representen en relacin con el tipo de dato empleado, por ejemplo si se desea indicar que el nmero 547 est en base 8 y no en base 10 se hace necesario introducir un delimitador para denir con claridad el tipo de dato, en el caso particular del ejemplo podra ser 8#547, o este mismo nmero en base 2 podra ser ingresado como 2#101_100_111 donde el caracter _ es permitido por el estndar para nes de claridad sin introducir signicado alguno. En la Tabla 6.4, se muestra un listado completo de los tipos elementales de datos disponibles en el estndar y ejemplos de literales para cada uno de ellos, adems se puede observar el empleo de varios delimitadores. Es importante destacar de la Tabla 6.4 como el tamao requerido para los tipos de datos Duracin, Fecha y Tiempo y de las Cadenas depende de la implementacin realizada, adems para el tipo de dato Cadena existe un conjunto de caracteres reservados que se pueden emplear al post ponerlos al indicador de caracteres no imprimibles, $, y con los cuales se puede relacionar acciones de control sobre las cadenas a imprimir. Por ejemplo, $L indica un caracter de alimentacin de lnea, $N caracter de nueva lnea, $P caracter de nueva pgina, $R caracter de retorno de carro y $T caracter de tabulacin. Estos caracteres de control se pueden escribir en maysculas o minsculas y tambin se puede usar su valor hexadecimal en dos dgitos. Un caso especial se presenta cuando se desea imprimir el caracter de comilla simple, el cual a su vez se emplea para iniciar y terminar un literal de cadena (ver ejemplo de literales para cadenas en la Tabla 6.4), en este caso se usa $ para indicar su impresin como en el caso de la siguiente cadena: Aviso de $Alarma$ lo cual dar como resultado visible al usuario: Aviso de Alarma.

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR


Tipos de Datos Enteros (Integer) SINT INT DINT LINT USINT UINT UDINT ULINT Ejemplos de Literales Reales (Real) REAL LREAL Ejemplos de Literales Duracin (TIME) TIME Ejemplos de Literales Fecha y Tiempo (Date and Time) DATE TIME_OF_DAY DATE_AND_TIME Ejemplos de Literales Descripcin Entero corto Entero Entero doble Entero largo Entero corto sin signo Entero sin signo Entero doble sin signo Entero largo sin signo 16#2AF USINT#135 Real Real largo +2_145.021 REAL#+2.4E-03 Duracin de tiempo T#63h12m10s TIME#3.5m_10ms Bits 8 16 32 64 8 16 32 64 Rango o Uso -128 a +127 -32768 a +32767 -231 a +231 -1 -263 a +263 -1 0 a 255 0 a +216 -1 0 a +232 -1 0 a +264 -1

161

2AF en base 16 135 tipo USINT 32 64 1038 10308

+2,145.021 0.0024 tipo REAL Segn Tiempo enlasado

1 h, 15 min y 10 s 3 min, 30 s y 10 ms

Fechas calendario (D) Hora del da (TOD) Fecha y hora da (DT) date#2007-10-31 TOD#15:30:30 DT#2005-07-12-17:46:12

Segn Segn Segn

Fechas Horas reloj Fecha y hora da

31 de octubre de 2007 3 pm, 30 min y 30 seg 12 de Julio de 2005 y 5pm, 46 min y 12 seg Segn Guarda texto

Cadenas (Strings) STRING Ejemplos de Literales Cadenas de caracteres Inicio de Arranque Fin de Arranque $r Mensaje de inicio Mensaje con caracter de retorno de carro Cadenas de Bits (Bit String) BOOL BYTE WORD DWORD LWORD Ejemplos de Literales

Cadena de un bit Cadena de 8 bits Cadena de 16 bits Cadena de 32 bits Cadena de 64 bits BYTE#1111_0000 16#DC1A FALSE

1 8 16 32

Estados lgicos 8 bits de datos 16 bits de datos 32 bits de datos

64 64 bits de datos 11110000 Asignacin a WORD Asignacin 0 a BOOL

Tabla 6.4: Tipos de Datos Elementales

162 6.3.6.2. Datos Genricos

CAPTULO 6. ESTNDAR IEC 61131-3

Los tipos de datos elementales se han organizado en una estructura jerrquica de acuerdo con propiedades similares entre ellos, por ejemplo todos los tipos de datos Enteros comparten ciertas propiedades, lo mismo se puede decir de los tipos de datos Reales. A un nivel mayor, los tipos de datos Enteros y Reales comparten ciertas propiedades entre s. De estas agrupaciones jerrquicas salen los tipos de datos genricos, los cuales mostrados de menor a mayor nivel son: ANY_INT el cual hace referencia a cualquiera de los tipos de datos enteros ANY_REAL el cual hace referencia a cualquiera de los tipos de datos reales ANY_NUM el cual hace referencia a cualquiera de los dos tipos anteriores ANY_INT o ANY_REAL ANY_DATE el cual hace referencia a cualquiera de los tipos de datos de fecha y tiempo ANY_BIT el cual hace referencia a cualquiera de los tipos de datos de cadenas de bits ANY_ELEMENTARY el cual hace referencia a cualquiera de los tipos de datos elementales ANY es el nivel mayor de jerarqua y comprende a cualquiera de los tipos de datos Estos tipos de datos genricos se emplean para describir variables de entrada y/o salida en bloques de funciones o funciones las cuales pueden tener varios tipos de datos, y se les conoce como Variables Sobrecargadas. Un ejemplo de este tipo de funcione es MIN(), la cual est descrita mediante el uso de tipos de datos genricos, lo cual muestra que esta misma funcin se puede emplear en un amplio rango de tipos de datos diferentes. Los tipos de datos que dene el usuario, Datos Derivados, quedan incluidos dentro de la categora ANY. Los tipos de datos genricos no se pueden emplear dentro de la parte de declaracin de variables en las POUs creadas por el usuario y su uso se restringe a explicar la interfaz de llamado de las funciones y bloques de funciones estndares del lenguaje. 6.3.6.3. Propiedades de Tipos de Datos Elementales A un tipo de dato elemental se le puede asignar varias propiedades. Una de estas propiedades comn a todos los tipos es el Valor Inicial, por defecto los valores iniciales de las variables se jan en cero para las numricas y de tiempo, cadenas vacas para las Strings, False (0) para las de Bits y 0001-01-01 para las fechas.

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

163

Otra propiedad comn a todos los tipos de datos es la Enumeracin, la cual asigna nombres a los valores que puede asumir una variable determinada, donde cada nombre es convertido adecuadamente por el sistema en cdigo apropiado. Una propiedad que se podra extender a varios tipos de datos, pero que de acuerdo con el estndar slo est denida para los tipos Enteros es Range, sta consiste en limitar el rango entre los cuales una variable de este tipo puede asumir valores. Otras dos propiedades bien importantes, y quiz las de mayor utilidad, son las de Array y Structure. En la primera de ellas varios elementos del mismo tipo son combinados en un solo arreglo, permitindose su uso anidado, caso en el cual se formaran arreglo de varias dimensiones. En la propiedad de Structure varios elementos de distintos tipos de datos se combinan para formar un nuevo tipo de dato. Los arreglos (Arrays) son disposiciones ordenadas de datos del mismo tipo, los cuales se pueden acceder mediante un ndice que se encuentra dentro de unos lmites apropiados de acuerdo al tamao del arreglo. La mayora de los sistemas modernos de PLCs permiten el control de error para acciones que intentan acceder a posiciones dentro de un arreglo que estn fuera de los lmites, o tamao, del mismo. El nmero de ndices necesarios para acceder un elemento particular depender del nmero de dimensiones, por ejemplo, para una matriz (2D) sern necesarios dos ndices para poder apuntar hacia un elemento cualquiera. La forma de denirlos se ver ms adelante, aunque se resalta el hecho que el estndar permite que los arreglos se puedan denir directamente en la parte de declaracin de variables sin necesidad de una declaracin previa de tipo de dato. Las estructuras (Structures) son colecciones de elementos de diferentes tipos, entre las cuales pueden haber tipos elementales, tipos derivados e incluso otras subestructuras en una organizacin jerrquica. Las dos palabras reservadas STRUCT y END_STRUCT se emplean para indicar el inicio y n, respectivamente, de la declaracin de una nueva estructura.

6.3.6.4. Tipos de Datos Derivados Son tipos de datos que se forman con base en los tipos elementales y sus propiedades, permitindose as al usuario la creacin personalizada de estructuras complejas de datos adecuadas para una aplicacin dada. Estos tipos derivados son globales para todo un proyecto y se emplean para declarar variables mediante el uso de nombres, en la misma forma que se hace con los tipos elementales. La forma de denir estos tipos de datos es textual y para ello se emplean las palabras reservadas TYPE y END_TYPE para indicar su inicio y n. Si por ejemplo, se desea crear un nuevo tipo de variable que reeje toda la informacin de los motores de una planta industrial se podra crear un tipo de dato como el siguiente:

164
TYPE Rpm MotMaq MotLin Trabajo Archivo STRUCT Nombre Estado Motores END_STRUCT; END_TYPE

CAPTULO 6. ESTNDAR IEC 61131-3

:INT(0..10000); :ARRAY[1..20]OF Rpm; :ARRAY[1..10]OF MotMaq; :(Paro, Mant, Prod); : :STRING; :Trabajo:=Paro; :MotLin;

(*Propiedad (*Propiedad (*Propiedad (*Propiedad (*Nombre de

de rango*) arreglo*) arreglo*) enumeracin*) la estructura*)

(*Tipo elemental de dato*) (*Tipo enumerado inicializado*) (*Tipo arreglo*)

Figura 6.9: Ejemplo de Declaracin de Tipo de Dato Derivado En el ejemplo mostrado en la Figura 6.9 se muestra la forma de denir tipos de datos derivados haciendo uso de los tipos elementales y de sus propiedades. El tipo Rpm es la velocidad que se ha denido con un rango de valores enteros aceptables entre 0 y 10000, MotMaq es un arreglo donde se puede guardar el valor de velocidad de hasta 20 motores para una misma mquina, cada una de las cuales es del tipo Rpm denido previamente. MotLin es otro arreglo de un mximo de 10 elementos representado a cada una de las mquinas que pueden conformar una lnea de produccin, donde cada elemento son los motores de cada una de las mquinas tal como se deni en el tipo MotMaq. El tipo Trabajo posee la propiedad de enumeracin y cada uno de sus elementos se ingresa como un nombre pero el sistema de programacin convierte estos elementos al cdigo correcto, normalmente a valores enteros iniciando con un valor numrico de uno. En el caso de este ejemplo particular, para determinar el estado de trabajo actual de la lnea se han denido los estados de operacin paro, mantenimiento y produccin (Paro, Mant, Prod). En el ejemplo de la Figura 6.9, Archivo es un dato tipo estructura el cual se ha formado de otros datos de diferente naturaleza y contiene a su vez datos elementales y datos derivados, por ejemplo Nombre es un tipo de dato elemental, mientras Estado es del tipo de dato derivado Trabajo pero ha sido inicializado con el valor Paro. Finalmente Motores es otro elemento de la estructura denominada Archivo y es del tipo de dato derivado MotLin. Todas las propiedades descritas para los datos de tipo elemental se extienden a los datos derivados con la misma restriccin dada para la propiedad Range. Adems en general, los tipos de datos derivados pueden componerse de otros tipos derivados siempre y cuando no se cause recursin, es decir, un tipo derivado se componga de otro y a su vez este ltimo se componga del primero. Como consecuencia de la extensin de la propiedad Valor Inicial a tipos derivados de datos, ellos se pueden inicializar en valores que se deben denir en la parte de declaracin del tipo o de una variable, aunque si lo anterior no se realiza los tipos derivados conservan los valores por defecto de los tipos elementales que los componen. La inicializacin de valores en el caso de los arreglos y las estructuras se puede realizar para cada uno de los elemen-

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

165

tos, a continuacin se muestran dos ejemplos de como realizar la denicin de valores iniciales en el caso de estructuras de este tipo:
MotMaq: ARRAY[1..20]OF Rpm:=[10(0), 4(1800), 6(3600)]; MotEmpresa: Archivo (Estado:=Mant);

En el caso de MotMaq se ha inicializado las diez primeras componentes del arreglo en un valor de 0, las cuatro siguientes componentes en 1800 y las ltimas seis en 3600. Para MotEmpresa denido como de tipo Archivo se ha inicializado la componente Estado en la calidad de Mant, pero los dems valores iniciales de los elementos de este tipo permanecern igual a los denidos para Archivo o en los valores por defecto de los tipos de datos elementales en caso de no haber sido inicializados, ver Figura 6.9.

6.3.7. Variables
Existen varios tipos de variables las cuales se declaran, al igual que los tipos de datos, en la parte de declaraciones de una POU y dichos tipos dependen de su funcionalidad dentro de la POU. La denicin de todos los tipos inicia con una palabra reservada que indica el tipo, pero siempre termina con END_VAR. Si dentro de un mismo tipo de variable existe mas de una variable del mismo tipo de dato, stas se pueden denir como una lista separada mediante el delimitador coma (,). Adems las variables poseen propiedades que tambin pueden ser denidas dentro de su declaracin, entre las cuales estn: las propiedades de los tipos de datos declarados ya sean elementales o derivados, declaracin de valores iniciales, declaracin de lmites adicionales a arreglos y declaracin de atributos. En las secciones siguientes se ver los tipos especcos de variables disponibles con su aplicacin y los atributos que se pueden denir para cada una de ellas. 6.3.7.1. Tipos de Variables Variables Internas: Es el listado de variables que se usan dentro de la POU y que se comportan de forma anloga a las variables locales de los lenguajes tradicionales de programacin, es decir, ellas slo pueden ser accedidas dentro de la POU que las dene. Su declaracin inicia con la palabra reservada VAR y termina con END_VAR y se puede realizar en cualquiera de los tres tipos de POU ya descritos. Variables de Entrada: Es el listado de variables que se comportan como parmetros de entrada para una POU y los cuales son suministrados por fuentes externas de datos. Esta clase de variable puede ser denida en todo tipo de POU y su declaracin debe iniciar con la palabra reservada VAR_INPUT y terminar con END_VAR.

166

CAPTULO 6. ESTNDAR IEC 61131-3

Variables de Salida: Es el listado de variables que se comportan como parmetros de salida de una POU y son consecuentemente escritas hacia variables externas. Esta clase de variable se puede denir slo en los programas o bloques de funciones ms no en las funciones. Su declaracin inicia con la palabra reservada VAR_OUTPUT y termina con END_VAR. Variables de Entrada/Salida: Es el listado de variables que actan simultneamente como parmetros de entrada y salida a una POU y los cuales se pueden modicar a su interior, aunque estas variables son guardadas como externas a la POU que las dene. Su acceso externo es igual al denido para las variables de salida. Un ejemplo de uso de este tipo de variables es cuando un mismo bloque funcional puede realizar varias tareas, ste sera el caso de un bloque de funcin capaz de realizar las tareas de Arranque, Operacin y Paro de un motor AC trifsico. Declarando una variable de entrada/salida MODO, al inicio de la ejecucin una variable externa escribir en MODO la tarea Arranque, pero una vez este bloque de funcin realice dicha labor escribir en MODO el valor Operacin indicando el estado actual del motor y el cual se puede emplear como validacin para el inicio de otras tareas. La declaracin de este tipo de variable inicia con la palabra reservada VAR_IN_OUT y termina con END_VAR, aunque dicha declaracin no se puede realizar en las POUs de tipo funcin. Variables Globales: Las variables globales se pueden declarar a nivel de conguracin, recurso o programa y pueden ser accedidas por cualquier POU existente dentro de ellos. Su funcin es permitir el acceso a valores de variables desde el interior de los programas y bloques de funciones. Su declaracin inicia con la palabra reservada VAR_GLOBAL y termina con END_VAR. Variables Externas: Son declaradas dentro de las POUs y su funcin es permitir el acceso a variables globales denidas a nivel de conguracin, recursos o programa. Su declaracin inicia con la palabra reservada VAR_EXTERNAL y termina con END_VAR. Variables Temporales: Son variables denidas por el estndar como variables declaradas dentro de una POU que son ubicadas en un rea temporal de memoria y las cuales son liberadas una vez la POU indique su n de ejecucin. Su declaracin se realiza mediante la palabra reservada VAR_TEMP y termina con END_VAR. Variables de Representacin Directa: Este tipo de variable es empleada para hacer referencia directa a posiciones de memoria en un PLC sin necesidad de emplear un identicador. Su uso puede limitar la reutilizacin de cdigo cuando se emplean en programas o bloques de funciones. La sintaxis de una variable de representacin directa tiene la forma de la siguiente cadena: %AB#. En la anterior cadena % es el caracter de inicio,

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

167

A representan la regin de memoria del PLC a la cual pertenece la variable y que puede ser memoria de entrada (I), memoria de salida (Q) y memoria interna (M); B representa el tipo de memoria la cual puede ser Bit (X), Byte (B), Word (W) Doble Word (D) y Long Word (L); nalmente # es una direccin numrica en formato multi-dgito jerrquico donde la parte ms signicativa se encuentra a la izquierda y su signicado depende de cada fabricante. La variable de representacin directa %QX2.3 es la variable de salida tipo bit para la palabra 2 bandera 3. Cuando, como en el ejemplo anterior, el tipo de memoria es Bit (X) se puede omitir sta en la cadena de la variable de representacin directa, con lo cual la cadena anterior queda %Q2.3. Las variables de representacin directa tambin pueden ser declaradas empleando un identicador, caso en el cual se denominan Variables Simblicas. A continuacin se muestra un ejemplo de como realizar la declaracin de este tipo de variable:
AT %IB2: Byte; (*Entrada Byte en direccin 2 tipo representacin directa*)

SENSOR AT %IW4: WORD;

(*Salida Word en direccin 4 tipo variable simblica*)

Variables MultiElemento: El estndar se reere a los arreglos y estructuras como variables multi-elemento, por lo que a las variables de un solo elemento se les denomina como variables de elemento simple. Las deniciones de los tipos de datos para variables multi-elemento se realizan de la forma descrita para tipos de datos derivados. Variables de Acceso: Es el listado de variables por medio de las cuales otros programas basados en el estndar IEC 61131-3 y otros dispositivos remotos podrn hacer referencia a ciertas variables. Este tipo de variable slo puede hacer referencia a variables de entrada o salida en un programa, a variables globales y a variables de representacin directa. Las variables anteriores pueden, a su vez, hacer referencia a un tipo de dato multielemento o a un elemento particular del mismo. Su declaracin inicia con la palabra reservada VAR_ACCESS y termina con END_VAR. 6.3.7.2. Atributos de las Variables El estndar dene un conjunto de atributos con los cuales se puede realizar la asignacin de propiedades adicionales a las variables declaradas. Estos atributos los podemos dividir en dos grupos principales, uno en el cual el atributo afecta a todo un conjunto de variables declaradas y otro que afecta a cada variable de forma individual.

168

CAPTULO 6. ESTNDAR IEC 61131-3

Al primer grupo pertenecen los atributos RETAIN y CONSTANT los cuales se deben colocar enseguida de la palabra reservada que dene al grupo de variables que se desea cubrir. RETAIN se emplea para indicar variables cuyos valores no se deben perder durante un corte de energa y que por ende son soportadas mediante batera interna, se puede emplear con variables de tipo VAR, VAR_OUTPUT y VAR_GLOBAL. CONSTANT se emplea para indicar variables cuyos valores no pueden ser cambiados durante la ejecucin de un programa y por lo que en realidad deben ser tomadas como constantes y no como variables, se puede emplear con variables de tipo VAR y VAR_GLOBAL. El uso simultneo de los dos atributos anteriores no tiene sentido y por tanto no es permitido por el estndar. En el segundo grupo se encuentran cuatro atributos que deben ser especicados de forma individual para cada variable. R_EDGE y F_EDGE hacen referencia a variables booleanas con activacin por anco de subida o bajada respectivamente y segn el estndar slo estn denidos para variables de tipo VAR_INPUT aunque pueden ser extensibles a VAR y VAR_GLOBAL. Los atributos READ_ONLY y READ_WRITE se reservan de forma expresa para el tipo VAR_ACCESS y adems son los nicos permitidos para este tipo de variable. READ_ONLY indica que un dispositivo o programa remoto slo puede leer la variable referenciada, mientras que READ_WRITE indica que dicha variable se puede leer y/o escribir. A continuacin, en la Figura 6.10, se presenta un ejemplo en el cual se puede comprender la forma y sintaxis para empleo de los anteriores atributos.

VAR_INPUT Inicio END_VAR VAR CONSTANT Modo END_VAR VAR_OUTPUT Salida1, Salida2 END_VAR

:BOOL R_EDGE;

(*Atributo de flanco de subida*)

:Bit:=2#1; RETAIN :BYTE;

(*Variable tipo Bit con atributo Constant fijada a un valor de 1 binario*) (*Variables tipo Byte con atributo Retain*)

Figura 6.10: Ejemplo de Declaracin de Atributos a Variables

Como se puede observar los atributos van luego de un delimitador de espacio en blanco inmediatamente a continuacin de la palabra reservada que hace referencia a los elementos afectados. En el ejemplo anterior, para el caso de la variable Inicio que es afectada por un atributo individual, ste se debe colocar luego del tipo de dato, mientras que en el caso de las variables Modo, Salida1 y Salida2 ellas se afectan grupalmente por lo que el atributo se coloca luego del tipo de variable.

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR


6.3.7.3. Inicializacin de Variables

169

Cuando una conguracin o recurso arranca se le asigna un valor inicial a todas las variables, el cual depender de la informacin especicada por el programador en la parte de declaracin de la variables o de sus tipos de datos elementales y derivados. Todas las variables poseen un valor inicial intrnseco, excepto las de tipo Externas y de Entrada/Salida, lo cual se debe en el caso de las externas a que son inicializadas cuando se declaran como globales y en el caso de las de Entrada/Salida a que hacen referencia (son punteros) y no son variables en s. Una variable puede asumir un valor inicial de acuerdo a un orden prioritario ascendente de la siguiente forma: 1. Valor inicial desde el tipo de dato elemental 2. Valor inicial desde el tipo de dato derivado 3. Valor inicial en la declaracin de la variable 4. Valor almacenado para la variable si posee el atributo RETAIN En la anterior lista el numeral cuatro posee la prioridad ms alta, sin embargo se debe diferenciar entre dos tipos diferentes de arranque, uno proveniente luego de cargar por primera vez un programa o posterior a un paro por error o solicitud del usuario y que se denomina Arranque en Fro caso en el cual el numeral cuatro no se lleva a efecto y la prioridad en los valores iniciales la toman los puntos uno a tres con mayor prioridad en ste ltimo. Otro tipo de arranque es el posterior a un paro por corte en potencia y el cual se denomina Arranque en Caliente y donde el punto cuatro es el que tiene la mayor prioridad.

6.3.8. Tipos de Unidades de Organizacin de Programa


Existen tres formas diferentes de denir unidades de organizacin de programas (POUs), las cuales son: Funciones, Bloques de Funciones y Programas. Su nalidad es la creacin estructurada de proyectos en PLCs al permitir la reutilizacin de software. Al igual que con los tipos de datos y nombres dados a las variables, se requiere de un identicador para declararlas, accin que es conocida como Instancia. Cuando se declaran varias variables del mismo tipo de dato pero con diferentes nombres, se crea una copia (instancia) de cada una en memoria, as mismo cuando lo declarado son POUs estas copias contiene los valores de las variables locales, de entrada y de salida, lo cual signica que la instancia guarda los valores de datos locales as como los parmetros de entrada y salida de cada una. A continuacin se describir en ms detalla cada una de tres POUs denidas por el estndar.

170 6.3.8.1. Funciones

CAPTULO 6. ESTNDAR IEC 61131-3

Son un elemento de software con una funcionalidad denida y que ante un conjunto de parmetros particulares de entrada siempre entregan el mismo valor primario como respuesta. En forma general el tipo de dato de salida de una funcin es del mismo tipo de dato de la entrada, aunque se pueden presentar excepciones a esta regla como se ver ms adelante. Este tipo de POU se caracteriza por que ante un mismo valor en las entradas siempre se producir el mismo valor en la salida, este sera el caso por ejemplo de la funcin seno, SIN(), la cual ante un mismo parmetro siempre retornar el mismo valor de salida. Aunque lo anterior parece evidente para todo tipo de funcin, en ocasiones se requiere que la respuesta vare de una ejecucin a otra as los parmetros de entrada sigan siendo los mismos (como en el caso de una funcin de conteo, la cual produce una salida en incremento o decremento en relacin al ltimo valor producido), este tipo de comportamiento no se puede lograr con las Funciones denidas por el estndar y para ello se requiere de los Bloques de Funciones los cuales se vern en la seccin siguiente. En denitiva una funcin no puede guardar valores dentro de variables internas. El usuario puede crear nuevas funciones, adicionales a las estandarizadas, para lo cual se debe iniciar la declaracin con la palabra reservada FUNCTION y terminar con END_FUNCTION. El nombre dado a la funcin se debe colocar a continuacin de la palabra de inicio separado por el delimitador espacio en blanco y debe tener denido su tipo de dato. Ya que las funciones slo poseen un nico valor de salida, el mismo nombre de la funcin acta como el acceso a dicho dato. La declaracin de una funcin en general contiene una lista de parmetros de entrada y variables internas al nal de la cual sigue el algoritmo que describe la funcionalidad deseada. Este algoritmo se puede describir en cualquiera de los lenguajes del estndar menos en SFC. Los nicos tipos permitidos para la declaracin de variables en las funciones son VAR y VAR_INPUT, aunque una enmienda de la segunda edicin de la norma permiti que las entradas a las funciones sean declaradas como de tipo VAR_IN_OUT lo cual implica que las variables puedan ser ingresadas para modicacin dentro de la funcin. La norma permite, ms no exige, que una misma funcin provea la sobrecarga de tipos de datos, esto es que una misma funcin se pueda emplear con la misma funcionalidad pero sobre tipos de datos diferentes aunque relacionados. Un ejemplo de una funcin de este tipo es la funcin raz cuadrada (SQRT), la cual puede ser empleada con cualesquiera de los tipos de datos pertenecientes a ANY_NUM, ya que la misma funcin se puede emplear independiente de si el tipo de dato es por ejemplo REAL o LREAL y por ende la respuesta debe ser en el mismo tipo de dato de la entrada. Si un fabricante decide no implementar la sobrecarga de las funciones, entonces el estndar especica que debe proveer una funcin por cada tipo de dato donde el nombre de la funcin debe ser el nombre estndar de la misma seguida de un guin bajo y el tipo de dato especco de la funcin. De lo anterior, si por ejemplo un fabricante implementa la sobrecarga de funciones entonces la funcin raiz cuadrada slo se debe

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

171

denominar SQRT, mientras que si no la implementa entonces debe existir una funcin por cada tipo de dato, caso en el cual si el tipo de dato es REAL o LREAL la funcin ahora se debe denominar entonces SQRT_REAL o SQRT_LREAL respectivamente. En ciertas ocasiones ser necesaria la conversin entre tipos de datos con el n de poder realizar ciertas operaciones matemticas, de comparacin u otras, ya que el mismo estndar exige vericacin estricta sobre los tipos de datos por parte del compilador, quien debe asegurar su consistencia. El estndar dene que las funciones para conversin entre tipos de datos deben tener la forma <Tipo Entrada>_TO_<Tipo Salida>, as por ejemplo el nombre de la funcin para convertir un entero a real debe ser INT_TO_REAL. La conversin de un dato de punto otante a uno entero implica la prdida de la parte fraccional y el redondeo debe estar en complacencia con el estndar IEC 559. La norma igualmente pide la deteccin de errores cuando la conversin produce un nmero que desborda la capacidad de representacin de destino, lo cual puede ocurrir cuando, por ejemplo, se convierte un dato de tipo UDINT a uno de tipo UINT ya que el rango de representacin del segundo es menor que el del primero. Ejemplo Se requiere implementar una funcin que evale el discriminante de una ecuacin cuadrtica. En este caso las entradas sern las constantes A, B y C de la ecuacin cuadrtica, la cual tiene la forma Ax 2 + Bx + C = 0 y la salida ser una variable booleana que indica con un valor de verdadero si las races son reales o de lo contrario si son complejas: B 2 4AC 0.
FUNCTION DISCR VAR_INPUT A, B, C END_VAR VAR EVALUAR END_VAR :BOOL:=FALSE :LREAL; (*Entradas tipo LREAL*) :LREAL; (*Variable tipo LREAL*) EVALUAR := B* -(4*A*C); IF EVALUAR >= 0 THEN DISCR := TRUE; END_IF; END_FUNCTION (*Se inicia en Falso*)

Figura 6.11: Funcin que Evala Discriminante en Ecuacin Cuadrtica En el ejemplo anterior la funcin posee tres parmetros de entrada, los cuales cuando la funcin es invocada desde otra funcin, bloque de funcin o programa pueden ser asignados como valores provenientes desde literales, valores o expresiones. El nombre de los parmetros para la funcin invocada se toma desde los identicadores asignados a cada variable de entrada que se declar al denir el tipo de funcin. Por ejemplo, a continuacin se muestran tres formas

172

CAPTULO 6. ESTNDAR IEC 61131-3

diferentes de asignar valores a los parmetros de la funcin DISCR cuando es invocada:


DISCR1 := DISCR(A:=2, B:=3, C:=1); DISCR2 := DISCR(B:=4+1, A:=2, C:=1); DISCR3 := DISCR(B:=3, C:=1);

Figura 6.12: Ejemplo de Invocacin de Funcin DISCR1 es evaluada mediante la funcin DISCR con parmetros dados todos como literales, en DISCR2 se puede observar que los parmetros se pueden ingresar en cualquier orden y en DISCR3 hace falta un parmetro, caso en el cual a A le es asignado el valor por defecto para un dato de tipo LREAL (o sea cero). Sin embargo la mayora de las funciones estandarizadas no poseen nombres para los parmetros debido a que son evidentes y explicativos por si mismos, por lo que estas funciones se invocan mediante una lista de parmetros, un ejemplo es nuevamente la funcin raz cuadrada donde es claro que el valor entre parntesis, SQRT(x), es el que se desea evaluar. Cuando las funciones son empleadas en los lenguajes grcos de programacin del estndar LD (Diagrama Escalera) y FBD (Diagrama de Bloques de Funciones) ellas poseen una entrada y una salida adicionales denominadas respectivamente como EN y ENO. Estas dos variables son denidas de forma implcita tanto para las funciones estandarizadas como cuando se dene un nuevo tipo de funcin y por ende no requieren ser declaradas, sin embargo ellas pueden ser accedidas dentro del cuerpo de la funcin como parte de su implementacin. La entrada EN (Enable) es una habilitacin de ejecucin y debe tener un valor de TRUE para poderse ejecutar el conjunto de instrucciones en el cuerpo de la funcin. La salida ENO (Enable Output) es puesta automticamente en un valor de TRUE cuando la ejecucin de la funcin se realiza exitosamente. Cuando EN tiene un valor de FALSE siempre la salida ENO tomar un valor igual, sin embargo cuando EN tiene un valor de TRUE inicialmente ENO toma un valor de TRUE pero programticamente dentro del cuerpo de la funcin este valor puede ser cambiado, lo cual puede ocurrir si durante la ejecucin ocurren errores, aunque el estndar exige que el compilador ponga automticamente ENO en FALSE ante la ocurrencia de alguno de los tipos de errores denidos por el mismo estndar. Para poder realizar la anterior implementacin, las palabras EN y ENO son reservadas en los lenguajes descritos, y aunque una enmienda del estndar permiti la implementacin de estas variables en texto estructurado, para poder permitir una posible conversin de cdigo entre lenguajes tambin deben ser reservadas en IL y ST. Con la ayuda de las variables EN y ENO de las funciones se puede realizar una implementacin fcil de control de error al conectar la variable de salida ENO de una funcin a la variable de entrada EN de otra, lo cual impedir la

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

173

ejecucin de funciones posteriores a la ocurrencia de errores o ante situaciones programadas. Ejemplo Se plantea la necesidad de sumar dos nmeros reales y posteriormente obtener la raz cuadrada de dicha suma. Si la suma efectuada es negativa la raz cuadrada no es un nmero real y por tanto no se podra efectuar, entonces un posible cdigo de control para esta situacin en ST se muestra a continuacin.
SUMA := ADD(A, B, ENO=>OkSuma); IF OkSuma THEN IF SUMA >= 0 THEN POSITIVO := TRUE; END_IF; RAIZ := SQRT(SUMA, EN:=POSITIVO, ENO=>OkRaiz); END_IF;

Figura 6.13: Uso de las Variables EN y ENO de una Funcin Del ejemplo anterior es importante resaltar como se ha empleado la salida ENO de cada una de las funciones para ir controlando la ejecucin. Se puede observar adems que el delimitador =>se emplea para asignar el valor de ENO en otra variable y que para realizar la suma se ha empleado la funcin ADD la cual es idntica al operador de texto estructurado +. Igual analoga ocurre con las funciones y operadores de resta (SUB y -), multiplicacin (MUL y *), divisin (DIV y /), mdulo (MOD y MOD), exponencial (EXPT y **) y de asignacin (MOVE y :=). Los operadores de suma y multiplicacin se denominan extensibles ya que el nmero de parmetros de entrada puede variar, mientras que los dems no presentan esta caracterstica. En la Figura 6.13 tambin es de resaltar el empleo de la funcin de comparacin mayor o igual que. Todas las funciones de comparacin siempre retornarn un tipo de dato BOOL y se pueden emplear con todos los tipos de datos, adems tambin poseen un operador en texto estructurado para cada una as: mayor que (GT y >), mayor o igual que (GE y >=), igual (EQ y =), menor que (LT y <), menor o igual que (LE y <=) y desigualdad (NE y <>). Con frecuencia, la evaluacin de una condicin se compone de varias operaciones lgicas (en la Figura 6.13 del ejemplo anterior la condicin de cada uno de los dos IF es directamente una variable booleana). En general estas operaciones pueden ser realizadas sobre datos de tipo Bit String con la operacin lgica efectuada sobre bits en la misma posicin, pero cuando el tipo de dato es BOOL entonces se tendr una operacin lgica binaria. Las funciones booleanas denidas por el estndar son las siguientes: AND, OR, XOR y NOT con las cuales se puede fcilmente obtener cualquier otra funcin o realizar implementaciones de operaciones ms complejas. En los lenguajes grcos LD y FBD las funciones OR y XOR poseen representacin grca para cada una de ellas, mientras que las funciones AND y NOT aunque poseen representacin grca tambin se pueden emplear de forma textual.

174 6.3.8.2. Bloques de Funciones

CAPTULO 6. ESTNDAR IEC 61131-3

Permiten la evaluacin de un algoritmo o acciones a partir de un conjunto de datos, los cuales pueden ser las variables de entrada, las variables internas y las mismas variables de salida, creando as un nuevo conjunto de valores para las variables de salida y para las variables internas. Los bloques de funciones permiten sostener valores de datos entre ejecuciones los cuales a su vez se pueden emplear como medio para recordar estados anteriores. La denicin de un tipo de bloque de funcin se realiza iniciando con la palabra reservada FUNCTION_BLOCK y terminando con la palabra END_FUNCTION_BLOCK, y dentro de las cuales se especica la estructura de datos y el algoritmo. Para el uso del bloque de funcin se debe especicar una instancia del mismo, mediante la cual se determina un conjunto especco de datos con estructura igual a la denida en el tipo de bloque de funcin asociado. Esta instancia se puede invocar ya sea como un bloque grco de una red o por un llamado en los lenguajes textuales y adems se puede emplear en otras deniciones de tipo de programas o bloques de funciones. La declaracin de un tipo de bloque de funcin se compone de dos partes principales, de las cuales la primera contiene la declaracin del listado de variables de entrada, salida e internas y una segunda parte con el algoritmo o descripcin funcional y que se puede realizar en cualquiera de los cinco lenguajes del estndar. A continuacin se muestra la creacin de un bloque de funcin denominado CONTADOR. Ejemplo Crear un bloque de funcin que implemente la funcionalidad de conteo ascendente y descendente de acuerdo con lo solicitado por una entrada de control denominada MODO, la cual adems debe permitir reiniciar y sostener el valor de la variable de conteo. Para este bloque de funcin se emplea una variable de entrada que se denomina MODO y la cual permite una de entre cuatro posible operaciones diferentes: RESET, ASC, DES y RET. Cuando el valor de MODO sea RESET el valor de la salida ser siempre cero, cuando sea ASC o DES se debe efectuar el conteo ascendente o descendente respectivamente y nalmente para el valor de RET se debe retener el ltimo valor de la salida. Dadas las anteriores consideraciones es claro que la nica variable de entrada es MODO, y puede ser de tipo enumerado, y la nica variable de salida es el valor de la cuenta que se denomina CUENTA y que es un nmero entero con signo, por ejemplo de tipo INT. La declaracin del bloque de funcin debe asumir que con antelacin ya existe una denicin para el tipo enumerado, como se muestra en la Figura 6.14. Se puede notar como el tipo de dato derivado TipoMODO fue inicializado en el valor RET, pero la variable de entrada MODO denida como de TipoMODO fue inicializada en el valor RESET. Adems en el algoritmo se dene un caso especco para la retencin, pero si se desea ste no se requiere explcitamente.

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR


TYPE TipoMODO : (RESET, ASC, DES, RET):=RET: END_TYPE FUNCTION_BLOCK CONTADOR VAR_INPUT MODO : TipoMODO:=RESET; END_VAR VAR_OUTPUT CUENTA : INT:=0; END_VAR IF MODO = RESET THEN CUENTA := 0; ELSIF MODO = ASC THEN CUENTA := CUENTA + 1; ELSIF MODO = DES THEN CUENTA := CUENTA - 1; ELSIF MODO = RET THEN CUENTA := CUENTA; END_IF; END_FUNCTION_BLOCK

175

Figura 6.14: Denicin de Bloque de Funcin Como se puede observar en la Figura 6.14, la variable de salida depende del valor de la variable de entrada y de la misma variable de salida, lo cual hace la diferencia fundamental entre una funcin y un bloque de funcin. Para poder emplear el bloque de funcin CONTADOR en otra POU se debe declarar una instancia del mismo y adems los valores presentes de las entradas y parmetros del bloque de funcin se pueden acceder en los lenguajes textuales colocando el nombre de la instancia seguido de un punto y a continuacin el nombre del parmetro. En la Figura 6.15 se muestra un ejemplo de como emplear una instancia y como asignar sus salidas. Ejemplo Emplear una instancia del bloque de funcin CONTADOR, denido en el ejemplo anterior, dentro de un programa que realice una cuenta cclica de 1 hasta 100. En este ejemplo, el programa denotado como CUENTA_CICLICA permite realizar una cuenta ascendente de 1 hasta 100 dependiendo de si la entrada CONTROL_CUENTA tiene un valor de TRUE, caso en el cual se congura el contador CONT1, de tipo CONTADOR, en modo ascendente y se verica si se ha alcanzado el lmite mximo para congurar nalmente un reset al contador.

176

CAPTULO 6. ESTNDAR IEC 61131-3


PROGRAM CUENTA_CICLICA VAR INPUT CONTROL_CUENTA : BOOL:=FALSE; END_VAR VAR_OUTPUT VALOR_CUENTA : INT:=0; END_VAR VAR CONT1 : CONTADOR; END_VAR IF CONTROL_CUENTA THEN CONT1(MODO := ASC); VALOR_CUENTA := CONT1.CUENTA; IF CONT1.CUENTA = 100 THEN CONT1(MODO := RESET); END_IF; END_IF; END_PROGRAM

Figura 6.15: Denicin de un Bloque de Funcin El estndar IEC-61131-3 dene unos bloques funcionales estndares los cuales abarcan las siguientes operaciones: Biestables: Se incluye el Biestable RS. Se debe recordar, de la Tabla 3.23, que para los ip-ops RS existe restriccin para el caso cuando ambas entradas son 1, por este motivo se implementan dos tipos diferentes de ipop por el estndar, el RS donde la entrada R es dominante y por tanto para el caso de la restriccin la salida valdr 0 lgico y el SR donde S es el dominante y por tanto en caso de entradas con valor igual a la restriccin la salida tomar un valor de 1 lgico. Semforo: Es un bloque de funcin que permite controlar la ejecucin de tareas que comparten un mismo recurso. El bloque de funcin se denomina SEMA y posee dos entradas, una llamada CLAIM, la cual ja una solicitud cuando toma un valor de TRUE y otra RELEASE empleada para liberar el recurso cuando recibe igualmente un valor de TRUE. La nica salida de este bloque de funcin es BUSY, de tipo BOOL, y toma un valor de TRUE desde el instante en el cual se solicita el recurso hasta cuando se libere. Deteccin de Flancos: Son bloques de funciones que permiten la deteccin de cambio de estado en una variable de tipo BOOL. El primero de ellos es R_TRIG, el cual detecta el anco de subida de una seal, y el segundo es F_TRIG que detecta el anco de bajada. La salida de ambos bloques de funciones es Q y cambia de estado cuando se detecta el cambio correspondiente al tipo de anco. Existe un tercer bloque de funcin de este tipo, denominado EDGE_CHECK, el cual detecta simultneamente

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

177

ambos ancos y cuya salida cambia igualmente cuando ocurre cualquiera de las detecciones; para su implementacin requiere de dos entradas, una para los ancos de subida, CLK1, y otra para los ancos de bajada, CLK2. Contadores: Son tres bloques de funciones que implementan las operaciones ms comunes usadas con los contadores. El primero de ellos es el contador ascendente, CTU, el cual realiza la cuenta de ancos de subida en su entrada CU, hasta que alcance un mximo de cuenta denido en la entrada PV de tipo de dato INT. Las salidas de este bloque de funcin son: CV, de tipo INT, la cual se incrementa (mientras no se alcance la cuanta mxima) en uno cada vez que llega un nuevo anco de subida y Q, de tipo BOOL, la cual toma un valor de TRUE cuando se llega a la cuenta mxima. La entrada de tipo BOOL denominada R se emplea para reiniciar el contador. El segundo tipo de contador, CTD, realiza la cuenta en forma descendente desde un valor prejado mediante la entrada PV, de tipo INT, actualizando el valor actual de cuenta en la salida CV cada vez que llega un anco de subida a la seal de entrada CD. Anlogamente al contador CTU, el contador CTD pone en TRUE la salida Q cuando la cuanta alcanza cero y entonces no realiza ms cuentas hasta que se reinicie el contador mediante la entrada LD. El tercer tipo de contador es CTUD e implementa la funcionalidad combinada de los otros dos contadores, por tanto posee dos entradas para detectar los ancos de subida para cuenta ascendente (CU) y para cuenta descendente (CD), dos entradas para reiniciar el contador dependiente de si se logr la cuenta mxima (R) o si se alcanz cero (LD) y una ltima entrada para indicar el mximo valor de cuenta. Posee una salida para el valor actual de cuenta (CV) y dos salidas para indicar si se alcanz la cuenta mxima (QU) o cero (QD) casos estos en los cuales no se vuelve a realizar la operacin de cuenta hasta que se efecte un reinicio del contador. Temporizadores: El estndar dene cuatro tipos diferentes de funciones de temporizacin, relacionadas directamente con operaciones anlogas en lgica cableada. Debido a la naturaleza y gran utilidad de estas funciones se dedicar a continuacin tiempo para ver cada una de ellas por separado. 1. Temporizador de Pulso (TP): Es un bloque de funcin que implementa la funcionalidad de generador de pulsos con una duracin ja de tiempo. Cuando llega un anco de subida a la entrada IN de tipo BOOL la salida Q, tambin de tipo BOOL, se pone en TRUE durante un tiempo que es especicado en la entrada PT (Pulse Time) de tipo TIME. La salida ET (Elapsed Time), de tipo TIME, indica el tiempo transcurrido desde que la salida Q toma un valor de TRUE y permanece constante luego de terminado el pulso y slo es reiniciada con la deteccin de cambio en IN. La operacin de este tipo de temporizador se muestra en la Figura 6.16, donde se puede observar que la principal caracterstica de este temporizador es la de

178

CAPTULO 6. ESTNDAR IEC 61131-3


no refrescar las ordenes de conteo, es decir, la duracin de un pulso siempre ser la indicada en la entrada PT.
IN
BOOL TP IN Q BOOL

Q
TIME

PT

PT

PT

TIME

PT

ET

ET t

Figura 6.16: Caracterstica de Tiempo del Temporizador TP 2. Temporizador de Retraso ON (TON): La funcionalidad de ese bloque consiste en poner en TRUE la salida Q un tiempo despus, dado en la entrada PT, de la activacin de la entrada IN (valor TRUE en IN). La salida Q permanece activa hasta que se presente un cambio de estado en la entrada IN, adems si esta entrada permanece activa por menos tiempo del especicado en PT la salida Q no se activa. En la salida ET, de tipo TIME, se puede consultar el tiempo transcurrido del retraso, tiempo que permanecer constante mientras la salida Q este activa. En la Figura 6.17, se puede observar la caracterstica distintiva de este temporizador. En los lenguajes del estndar LD y FBD este temporizador se puede representar de forma alterna como T0.
IN
BOOL TON IN Q BOOL

Q
TIME

PT

PT

PT

TIME

PT

ET

ET t

Figura 6.17: Caracterstica de Tiempo del Temporizador TON 3. Temporizador de Retraso OFF (TOF): Este bloque de funcin realiza la operacin inversa del temporizador TON, ya que el tiempo de retraso especicado en la entrada PT determina la desactivacin de Q. Cuando la entrada IN se activa, tambin lo hace Q y permanece as hasta un tiempo PT despus de la desactivacin de la entrada IN. La salida ET nuevamente es el tiempo transcurrido del retraso contado

6.3. ELEMENTOS COMUNES A LOS LENGUAJES DEL ESTNDAR

179

desde la desactivacin de IN hasta transcurrido PT, permaneciendo constante mientras Q este activo. La Figura 6.18 muestra la caracterstica de tiempo de este temporizador. En los lenguajes del estndar LD y FBD se puede representar este temporizador de forma alternativa como 0T.
IN
BOOL TOF IN Q BOOL

Q
TIME PT ET TIME

PT

PT

ET t

Figura 6.18: Caracterstica de Tiempo del Temporizador TOF 4. Reloj de Tiempo Real: Cuando un anco de subida llega a la entrada IN del reloj de tiempo real (RTC), se ja el tiempo en la fecha y hora especicadas en la entrada PDT (Preset Data and Time). Luego en los llamados subsecuentes de este bloque de funcin la entrada IN debe permanecer en TRUE, con lo cual la entrada PDT es ignorada y la salida CDT (Current Data and Time) se actualiza mostrando la fecha y tiempo actual. En algunos PLCs slo se permite una instancia de este bloque de funcin, por lo que es comn emplearlo como una variable global. Si la entrada IN no recibe un anco de subida, la salida CDT es de tipo indenida. Actualmente este bloque de funcin no es obligatorio por parte del estndar.
BOOL RTC IN Q BOOL

DATE_AND_TIME

PDT

CDT

DATE_AND_TIME

Figura 6.19: Reloj de Tiempo Real 6.3.8.3. Programas En analoga con los lenguajes tradicionales de programacin, las funciones y bloques de funciones constituyen lo que se denomina subrutinas y la POU de tipo programa viene siendo el programa principal o unidad mayor en jerarqua dentro de la reutilizacin de cdigo. En los PLCs con capacidades de multitarea se pueden tener varios programas en ejecucin simultnea, cada uno asociado a una conguracin.

180

CAPTULO 6. ESTNDAR IEC 61131-3

En general, un programa es similar en estructura a un bloque de funcin, aunque posee unas diferencias que se expresarn a continuacin. Dentro de las funciones y bloques de funcin no se acostumbra el empleo de las variables de representacin directa, dado que limitarn la reutilizacin, pero en los programas ellas si son ampliamente usadas. Los programas pueden contener declaraciones de variables globales con el n de compartir datos entre diferentes elementos internos al programa. Un programa puede declarar variables tipo VAR_ACCESS para permitir la comunicacin con otros dispositivos remotos. Dentro de un programa no se puede declarar instancias de otros programas, stas son exclusivamente reservadas para los recursos. Una caracterstica muy especial, y discutida previamente, se relaciona con el hecho que cada bloque de funcin dentro de un programa puede ser relacionado con una tarea diferente. En general un programa puede actuar como unidad mayor de control sin necesidad de una Conguracin controlando la asignacin de tareas y de las entradas y salidas fsicas de un PLC, aunque para proyectos extensos se recomienda mejor usar la Conguracin. La declaracin de este tipo de POU se realiza empezando con la palabra reservada PROGRAM y terminando con END_PROGRAM. Su declaracin se inicia con los listados de variables de entrada, salida, internas, variables de representacin directa, variables simblicas, instancias de bloques de funciones, instancias de variables internas e instancias de variables externas y termina con el algoritmo que describe la funcionalidad propuesta y el cual puede ser implementado usando cualesquiera de los cinco lenguajes de programacin denidos por el estndar. La Figura 6.15 es un ejemplo de programa. Ejemplo Haciendo uso de la funcin DISCR, implementar un programa que evale las races de una ecuacin cuadrtica.
PROGRAM RAICES VAR_INPUT a, b, c : LREAL:=0; END_VAR VAR R1, R2 : LREAL:=0; Discriminante : BOOL; Mensaje : STRING(25); Tmp : LREAL:=0; END_VAR Discriminante := DISCR(A:=a, B:=b, C:=c); IF Discriminante THEN Mensaje := Las raices son reales; Tmp := SQRT(b*b - (4*a*c)); R1 := (-b + Tmp) / (2*a); R2 := (-b - Tmp) / (2*a); ELSE Mensaje := Las raices son complejas; END_IF; END_PROGRAM

Figura 6.20: Programa que Evala las Raices de la Ecuacin Cuadrtica

6.4. TEXTO ESTRUCTURADO (ST)

181

En la Figura 6.20 se puede observar la forma de invocar una funcin dentro de un programa y como declarar la extensin mxima en caracteres para variables de tipo cadena. Adems se informa la existencia de races complejas mediante un mensaje adecuado.

6.4. Texto Estructurado (ST)


Luego de ver los elementos que conforman cada una de las unidades de organizacin de programa (POU) dentro del estndar IEC 61131-3, se inicia la presentacin individual de cada uno de los cinco lenguajes descritos dentro de la misma norma. El primero que se ver es el Texto Estructurado o ST, el cual se puede emplear para desarrollar los algoritmos dentro de las funciones, bloques de funciones y programas. ST es un lenguaje de alto nivel desarrollado puntualmente para aplicaciones de control industrial, pero con una sintaxis muy similar a los lenguajes tradicionales basados en texto, constituido por un extenso conjunto de constructores con nalidades particulares [1, 8, 9].

6.4.1. Sentencias
Un programa se compone de un conjunto de sentencias, donde cada una est separada mediante el delimitador ;, por lo que una sentencia puede ser escrita empleando varias lneas ya que el caracter de alimentacin de lnea ser tratado simplemente como un espacio. Los comentarios se pueden insertar en cualquier lugar de la sentencia donde se permita la presencia de un espacio. Las sentencias permiten entre otras labores asignar valores a variables, realizar llamados a funciones y bloques de funciones, crear expresiones, evaluar sentencias condicionales y crear estructuras de control de ujo.

6.4.2. Asignaciones, Operandos y Operadores


La sentencia ms simple es la asignacin, donde el valor de una variable se actualiza mediante el uso de la siguiente sintaxis: Val1 := Val2; donde a la variable Val1 le es asignando el valor que posee la variable Val2. Otro ejemplo de asignacin podra ser el siguiente:
Val3 := Val4 (*Error*) * Val5 (*Amplitud*) / 5.0 (*Constante*);

Donde a la variable Val3 le es asignado el valor producto de evaluar la expresin al lado derecho del delimitador := y el cual puede ser de cualquiera de los tipos elementales de datos o un tipo derivado de dato. Se debe prestar atencin a la forma en la cual se puede insertar libremente los comentarios,

182

CAPTULO 6. ESTNDAR IEC 61131-3

indicando en este caso por ejemplo el signicado de cada una de las variables de la expresin a evaluar. En general una expresin consiste de Operandos, los cuales se relacionan mediante Operadores de tipos aritmticos o lgicos. Los operandos pueden ser conformados por literales, variables de tipo simple o multielemento y llamados a funciones. No se permite el uso de bloques de funciones como operandos de una expresin, ya que estas pueden no tener valores de retorno, y por tanto son tratadas directamente como sentencias. Los operadores se dividen principalmente en tres grupos a saber: agrupacin, matemticos y lgicos. Para poder evaluar una expresin que incluye varios operadores se denen reglas de precedencia, o jerarqua, entre los mismos operadores; a continuacin se enumera cada uno de los operadores disponibles iniciando con el de mayor jerarqua y terminando con el de menor: ( ), llamado a funcin, **, -(negacin), NOT, *, /, MOD, +, -(sustraccin), <, >, <=, >=, =, <>, & (AND lgica), XOR, OR. Cuando una expresin contiene varios operadores con el mismo nivel de jerarqua, entonces ellos son evaluados de izquierda a derecha. Un ejemplo de asignacin de una expresin compuesta por varios operandos y operadores se muestra a continuacin.

Salida := Dato1 * Dato2 * (Dato1 + Dato 3) + ADD(4.3, 2.2) + 3 MOD 2;

Ya que los bloques de funciones no se pueden emplear como operandos de una expresin, entonces la forma adecuada es usarlos directamente como sentencias, tal como se puede observar en el programa CUENTA_CICLICA mostrado en la Figura 6.15.

6.4.3. Sentencias para Control de Flujo


Este tipo particular de sentencias permiten controlar la forma en la cual se realiza la evaluacin de las diversas sentencias individuales que componen un algoritmo. Se dividen en dos grupos principales, las condicionales y las de iteracin. Las sentencias condicionales permiten la ejecucin de slo un conjunto particular de sentencias dependiendo de la evaluacin de una expresin. En este tipo de sentencias condicionales se encuentran dos: la sentencia IF ... THEN ... ELSE (Si .... Entonces ... De lo contrario) y la sentencia CASE (Caso). La sentencia IF ... THEN ... ELSE puede ser implementada de varias formas, dependiendo de los requerimientos particulares de cada algoritmo y se distingue de la sentencia CASE por el hecho que en ella las expresiones de evaluacin son de tipo booleanas. A continuacin, en la Figura 6.21, se muestra varias formas de implementacin.

6.4. TEXTO ESTRUCTURADO (ST)


IF <expr bool>THEN <sentencia 1>; . . . <sentencia n>; ELSE <sentencia 1>; . . . <sentencia n>; END_IF; IF <expr1 bool>THEN IF <expr2 bool>THEN <sentencia 1>; . . . <sentencia n>; ELSE <sentencia 1>; . . . <sentencia n>; END_IF; ELSE <sentencia 1>; . . . <sentencia n>; END_IF; Forma 2 IF <expr1 bool>THEN <sentencia 1>; . . . <sentencia n>; ELSIF <expr2 bool>THEN <sentencia 1>; . . . <sentencia n>; ELSE <sentencia 1>; . . . <sentencia n>; END_IF;

183

Forma 1

Forma 3

Figura 6.21: Formas de Sintaxis para la Sentencia IF ... THEN ... ELSE La forma 1 es la tradicional y en ella se puede omitir, a conveniencia, la seccin del ELSE y adems el nmero de sentencias puede ser una sola. La forma 2 es una implementacin anidada de la forma 1 y en ella se puede tener consideraciones individuales para cada IF de acuerdo a lo expresado para la forma 1. La forma 3 permite la evaluacin continuada de consideraciones y en ella puede haber ms de un ELSIF y puede o no existir el ELSE segn conveniencia. Aunque la seccin del ELSE es opcional en cada una de las formas, se debe considerar su implementacin como parte de una buena tcnica de implementacin al no dejar posibles situaciones sin evaluacin. La sentencia CASE permite la evaluacin de un conjunto de sentencias dependiendo del valor entero tomado por una expresin, esta ltima siendo tan compleja como se requiera. En la Figura 6.22 se muestra su forma general.

CASE <expresin con valor entero>OF <Valor entero 1>: <Sentencias>; . . . <Valor entero n>: <Sentencias>; ELSE <Sentencias>; END_CASE;

Figura 6.22: Sintaxis para la Sentencia CASE

184

CAPTULO 6. ESTNDAR IEC 61131-3

El valor entero de seleccin para sentencias puede ser dado en cuatro formas diferentes, a saber: como un nico valor entero (3 : <sentencias>;), como conjunto de valores (1,3,7 : <sentencias>;), como un rango de valores (2..6 : <sentencias>;) y como un valor de una variable enumerada. Para el caso de una variable enumerada, si por ejemplo se tiene una variable llamada OPCION con tres posibles valores (OPCION : (Opc1, Opc2, Opc3)) entonces cada uno se puede emplear como un caso de la sentencia CASE, como se puede observar en la Figura 6.23.

CASE OPCION OF Opc1 : <Sentencias>; Opc2 : <Sentencias>; Opc3 : <Sentencias>; ELSE <Sentencias>; END_CASE;

Figura 6.23: Sentencia CASE con Variable Enumerada

Igualmente en las sentencias CASE no es requerimiento incluir la seccin del ELSE, pero sta se recomienda con el n de evitar omitir posibles situaciones sin evaluacin. En el grupo de sentencias de iteracin se encuentran tres, a saber: la sentencia FOR ... DO, la sentencia WHILE ... DO y la sentencia REPEAT ... UNTIL. La funcionalidad de este grupo es permitir el control de ejecucin para un conjunto de sentencias que se debe repetir cierto nmero de veces y donde por su misma naturaleza se debe tener especial cuidado en no crear ciclos innitos. La sentencia FOR ... DO est diseada para permitir la ejecucin repetida de un conjunto de sentencias de acuerdo con el valor tomado por una variable que determina el nmero de iteraciones a realizar. Dada la naturaleza de la anterior variable, slo se permite que sta sea del tipo INT o DINT. La sentencia se puede congurar para realizar la cuenta de iteraciones en forma ascendente o descendente y en pasos, o incrementos, denidos por el usuario. Si no se especica un paso para el incremento de la variable de iteracin, por defecto tendr un valor unitario. En la Figura 6.24 se muestra la forma general de la sintaxis para esta sentencia. En la sintaxis de la sentencia FOR ... DO se debe tener especial cuidado en denir un valor de paso o incremento negativo cuando se realiza una cuenta descendente, ya que de no denirse un valor de paso o denirse uno positivo, se generar un ciclo innito debido a que en lugar de obtener un descenso en la cuenta se tendr un incremento.

6.4. TEXTO ESTRUCTURADO (ST)


FOR <asignacin valor inicial a variable de iteracin> TO <expresin para valor final de iteracin> BY <expresin para valor de paso de iteracin> DO <Sentencias>; . . . <Sentencias>; END_FOR;

185

Figura 6.24: Sintaxis para la Sentencia FOR ... DO La sentencia WHILE ... DO permite la ejecucin continua de un conjunto de sentencias mientras cierta expresin booleana permanezca verdadera. Esta sentencia se caracteriza por el hecho de vericar la expresin booleana antes de un ciclo, con lo cual si esta expresin es falsa desde un inicio la sentencia no se ejecuta ni siquiera la primera vez. La sintaxis general de esta sentencia se muestra a continuacin en la Figura 6.25.

WHILE <expresin booleana>DO <Sentencias>; . . . <Sentencias>; END_WHILE;

Figura 6.25: Sintaxis para la Sentencia WHILE ... DO La sentencia REPEAT ... UNTIL tiene un comportamiento similar a la sentencia WHILE ... DO pero con la diferencia de evaluar al nal, y no al inicio, la expresin booleana que determina la ejecucin continua. El hecho anterior ocasiona que esta sentencia siempre se ejecute como mnimo una vez. La forma de la sintaxis para la sentencia REPEAT ... UNTIL se muestra en la Figura 6.26.

REPEAT <Sentencias>; . . . <Sentencias>; UNTIL <expresin booleana> END_REPEAT;

Figura 6.26: Sintaxis para la Sentencia REPEAT ... UNTIL

186

CAPTULO 6. ESTNDAR IEC 61131-3

Adicional a las sentencias anteriores, existen otras dos con la nalidad de permitir terminar de forma anticipada la ejecucin de sentencias de iteracin o POUs. La sentencia EXIT se emplea dentro de las sentencias de iteracin y no est limitada en el nmero de veces que puede aparecer. Cuando durante la ejecucin de una sentencia de iteracin se alcanza un EXIT, la ejecucin del resto del cdigo se realiza exactamente a continuacin de la palabra reservada que dene el n de la sentencia (por ejemplo: END_FOR para la sentencia FOR ... DO). Aunque esta sentencia no tiene sentido emplearla exclusivamente en sentencias condicionales, si se emplea junto con ellas dentro de sentencias de iteracin con el n de denir en que casos interrumpir la ejecucin de iteraciones. Una forma para la sintaxis de esta sentencia con el n de controlar la interrupcin de un FOR ... DO se muestra en la Figura 6.27.
WHILE <... >DO <Sentencias>; . . . FOR <... >TO <... >BY <... >DO <Sentencias>; . . . IF <... >THEN EXIT; END_IF; <Sentencias>; . . . END_FOR; <Sentencias>; . . . END_WHILE;

Figura 6.27: Sintaxis para la Sentencia EXIT En la gura anterior, una vez alcanzado el EXIT la ejecucin contina justamente debajo del END_FOR. Tngase en cuenta que en los casos de secuencias anidadas la nalidad del EXIT es interrumpir la ejecucin de la sentencia de iteracin ms interna en la cual el se encuentra. La sentencia RETURN se usa con el n de abandonar la ejecucin de una POU de forma anticipada. Al igual que la sentencia EXIT, sta se debe emplear junto con una sentencia condicional con el n de denir la condicin bajo la cual la interrupcin se lleva a cabo. Cuando la sentencia RETURN se emplea dentro de una funcin, se debe realizar una asignacin previa del valor que debe tomar la funcin, en el caso de los bloques de funciones si los valores de las variables de salida no son asignados antes de un RETURN entonces las variables tomarn sus valores iniciales o por defecto correspondientes. Si a una variable de salida le fue asignado un valor intermedio antes de un RETURN dentro de un bloque de funcin, la variable mantendr el ltimo valor que le

6.5. LISTADO DE INSTRUCCIONES (IL)

187

fue asignado. En resumen, un RETURN ocasiona que una POU sea interrumpida justo en el lugar de dicha sentencia y que la ejecucin prosiga exactamente en el cdigo siguiente.

6.5. Listado de Instrucciones (IL)


Este lenguaje es de bajo nivel y es muy similar a los lenguajes de ensamblador. Con frecuencia se emplea con el n de implementar soluciones sencillas que se caracterizan primordialmente por poseer un ujo secuencial en la ejecucin. Como se ver ms adelante, este programa es frecuentemente tomado como un lenguaje de referencia al cual todos los dems lenguajes del estndar pueden ser transcritos, aunque lo anterior puede no ser tan fcil de realizar cuando se habla de programas complejos [1, 8, 9]. Su aplicacin principal radica en la implementacin de partes crticas de cdigo que requieren una optimizacin mxima en desempeo [8, 9].

6.5.1. Estructura Bsica del Listado de Instrucciones


En este lenguaje una instruccin debe abarcar exactamente una solo lnea. A su vez, una instruccin se compone secuencialmente de una etiqueta, un operador o una funcin, uno o ms operandos y un comentario. La etiqueta y el operador se deben separar mediante el delimitador :, aunque la etiqueta es opcional, y por ende si no se usa no se hace necesario tampoco el delimitador. La insercin de un comentario al nal de la instruccin tambin es opcional por parte del programador o usuario. La funcin de las etiquetas es la de habilitar los saltos condicionales desde cualquier posicin en el cuerpo de instrucciones y aunque la ubicacin de una etiqueta al inicio de una lnea en blanco no est concebida por el estndar, muchos sistemas modernos la permiten con nes de claridad [8]. Los operandos son los parmetros requeridos para la evaluacin de una funcin u operador. Para los casos en los cuales un operador o funcin requiere de ms de un operando, estos ltimos se deben separar mediante comas, espacios en blanco o tabulaciones. Los comentarios deben tener la misma sintaxis denida en la Seccin 6.3.4. La Figura 6.28 muestra los componentes y disposicin general para una lnea de instruccin dentro de listado de instrucciones.

Etiqueta:

Operador/Funcin

Lista de Operandos

(*Comentarios*)

Figura 6.28: Sintaxis para Listado de Instrucciones En la sintaxis es necesario tener en cuenta que se requiere como mnimo un delimitador de espacio en blanco entre el operador o funcin y la lista de operandos asociados.

188

CAPTULO 6. ESTNDAR IEC 61131-3

6.5.2. El Acumulador Universal


Al igual que en los lenguajes tradicionales tipo ensamblador, el listado de instrucciones posee un acumulador el cual se conoce como CR (Current Result: Resultado Actual). El compilador del lenguaje listado de instrucciones actualiza de forma constante el nmero de bits necesarios para el tipo de dato del operando que se ejecute, por lo que en la prctica este acumulador es en realidad un acumulador virtual y no de implementacin fsica en el hardware. Adems el tipo de dato asociado actualmente con el acumulador tambin cambia para coincidir con el tipo de dato del operando ms reciente. Cuando se realiza la evaluacin de una operacin de comparacin, el resultado generado se guarda en el acumulador como un 0 (FALSE) o un 1 (TRUE), por lo que en este caso el listado de instrucciones se aparta de los lenguajes tradicionales de ensamblador donde existen bits de estado, lo anterior da origen a la denominacin de Acumulador Universal. En general el CR puede tomar uno de los siguientes tipos de datos: tipo de dato elemental, tipo de dato derivado o tipo de dato de bloque de funcin. Sin embargo, se debe tener en cuenta que dos instrucciones consecutivas que desarrollan operaciones relacionadas deben ser compatibles, y por ende el tipo de dato del CR debe ser del mismo tipo de dato de la subsiguiente instruccin.

6.5.3. Los Operadores


Los operadores pueden ser afectados en su signicado por medio de modicadores. Existen tres modicadores bsicos, a saber: el modicador de negacin N el cual niega al operando relacionado, el modicador de anidacin ( ... ) que permite la creacin de niveles anidados de operadores y nalmente el modicador condicional C que permite la ejecucin condicional de un determinado operador. Estos modicadores siempre van inmediatamente a continuacin del operador asociado y entre ellos no media ningn tipo de delimitador. El modicador de anidacin tiene la accin de diferir el resultado de una instruccin produciendo resultados intermedios que no afectan al acumulador. Los operadores disponibles dependen a su vez del tipo de dato sobre el cual operan, o de si ellos estn destinados a la implementacin de saltos y llamados. Para los datos de tipo Booleano los operadores disponibles son los siguientes: LD, AND, OR, XOR, ST, S y R. A los anteriores operadores se les puede aplicar los modicadores de negacin y anidacin. Todos estos operadores actan sobre el CR de la siguiente forma: LD carga un operando en CR, las funciones lgicas implementan la funcin correspondiente entre un operando y CR, ST almacena el valor de CR en un operando y los operadores S y R jan a su operando en 1 (TRUE) y 0 (FALSE) respectivamente si CR tiene un valor de 1 (TRUE). De lo anterior se desprende entonces que el operador modicado STN almacenara el valor negado de CR en un operando. A continuacin se muestra en la Figura 6.29 la forma de implementar la siguiente funcin de conmutacin: F = (A (B (C D))).

6.5. LISTADO DE INSTRUCCIONES (IL)


LD OR( AND( OR ) ) STN F A B C D (*Se carga A en el acumulador CR*) (*Difiere la operacin OR y carga B*) (*Difiere la operacin AND y carga C*) (*Se realiza operacin OR entre D y C*) (*Se realiza operacin AND diferida*) (*Se realiza operacin OR difereida*) (*Almacena valor negado de CR en F*)

189

Figura 6.29: Operadores Booleanos en IL Para los datos de tipo ANY los operadores disponibles son los siguientes: LD, ST, ADD, SUB, MUL, DIV, GT, GE, EQ, NE, LE y LT. El signicado de estos operadores, que a excepcin de LD y ST son aritmticos y de comparacin, es igual al dado en la Seccin 6.3.8.1, donde la funcin relacionada se realiza entre CR y el operando asociado y el resultado es asignado nuevamente al acumulador. A estos operadores para tipos de datos ANY nicamente se les puede aplicar el modicador de anidacin. Ahora se mostrar un ejemplo de la forma como se pueden emplear los operadores aritmticos; ms adelante se mostrar un ejemplo de como utilizar los de comparacin. La ecuacin y = w2 (x + z ) se puede representar en listado de instrucciones de la siguiente forma:
LD MUL SUB( ADD ) ST w w x z y (*Se carga w en el acumulador CR*) (*Se carga w2 en el acumulador CR*) (*Difiere resta de CR con parntesis*) (*Realiza la suma de x con z*) (*Se realiza operacin SUB diferida*) (*Almacena el valor de CR en y*)

Figura 6.30: Operadores ANY en IL En la Figura 6.30 se puede observar que el valor de la operacin entre parntesis (x + z ) se realiza pero no se carga en el acumulador, para estos casos de operaciones diferidas se emplea un arreglo de registros que permiten ir almacenando valores intermedios necesarios. Lo mismo ocurre en el ejemplo de la Figura 6.29. Finalmente los operadores para realizar saltos o llamados a POUs son los siguientes: una etiqueta, el nombre de una funcin, JMP, CAL y RET. A estos ltimos tres operadores se les puede aplicar los modicadores de negacin y condicional, adems se puede usar los dos modicadores simultneamente de ser necesario. El operador JMP realiza un salto a una etiqueta, pero si est acompaado del modicador condicional entonces el salto estar condicionado al valor booleano del acumulador, caso en el cual si la condicin no es TRUE entonces el salto no se realiza y la ejecucin contina de forma secuencial. El operador CAL realiza el llamado de una POU e igualmente si est acompaado del modicador condicional este llamado est supeditado al valor booleano del acumulador. Finalmente el operador RET implementa un retorno desde

190

CAPTULO 6. ESTNDAR IEC 61131-3

una funcin, en forma similar a la sentencia RETURN vista en la Seccin 6.4.3; adicionalmente tambin se le puede aplicar los modicadores de condicin y negacin con el mismo comportamiento descrito para los operadores JMP y CAL. Como ejemplo que muestra el uso de los operadores de saltos y los operadores de comparacin se utiliza el mismo ejemplo visto en la Figura 6.11 donde se cre la funcin DISCR que tiene por objeto evaluar el discriminante para una ecuacin cuadrtica. El algoritmo que describe la funcin en lenguaje listado de instrucciones es el siguiente.
FUNCTION DISCR VAR_INPUT A, B, C END_VAR VAR EVALUAR END_VAR LD MUL SUB( MUL MUL ) ST GT JMPCN ST RET SALIR: END_FUNCTION :BOOL:=FALSE :L_REAL;

:L_REAL;

B B 4 A C EVALUAR 0 SALIR DISCR

Figura 6.31: Operadores de Salto y Comparacin en IL En la Figura 6.31 se debe notar que ciertos tipos de operadores no afectan el valor presente del acumulador, este es el caso por ejemplo de los operadores de salto y ST. Se observa que en este caso el salto se realiza, hacia la etiqueta denominada SALIR, condicionado a un valor de FALSE en el acumulador.

6.5.4. Llamados a POUs


Cuando se realiza el llamado de una funcin que requiere nicamente de un parmetro de entrada, este parmetro ser automticamente consultado desde el acumulador. Si la funcin invocada posee ms de un parmetro de entrada, igualmente el primero de ellos ser consultado desde el CR, el segundo parmetro ser el primer operando para la funcin, el tercer parmetro ser el segundo operando y as sucesivamente. Adems como toda funcin regresa

6.6. DIAGRAMA DE BLOQUES DE FUNCIONES (FBD)

191

nicamente un valor, este es asignado al acumulador, el cual se ajusta automticamente al tipo de dato involucrado. Por ejemplo, si se desea invocar la funcin DISCR de la Figura 6.31, entonces su llamado se puede realizar en cualquiera de las tres formas indicadas en la Figura 6.32.
DISCR( A:=Var1 B:=Var2 C:=Var3 ) ST Resultado Mtodo 1 LD Var1 DISCR( B:=Var2 C:=Var3 ) ST Resultado Mtodo 2 LD DISCR Var3 ST Var1 Var2, Resultado

Mtodo 3

Figura 6.32: Llamado a Funcin en IL En la Figura 6.32 se puede observar que adicionalmente se puede ingresar de forma explcita el valor de cada uno de los parmetros, tal como se indica en el Mtodo 1. Los llamados a un bloque de funcin se pueden realizar igualmente de tres formas, siempre haciendo uso del operador de llamado CAL para los bloques de funciones estndares o denidos por el usuario, o sin necesidad de CAL nicamente para los bloques de funciones estndares. La asignacin de salidas del bloque de funcin es igual en todos los mtodos, tal como se puede observar en la Figura 6.33, donde se ha supuesto un bloque de funcin estndar denominado FB1 con dos entradas (EN1 y EN2) y dos salidas (SL1 y SL2).
CAL 2) LD ST LD ST FB1(EN1:=Var1, EN2:=Var FB1.SL1 Resultado1 FB1.SL2 Resultado2 LD Entrada1 ST FB1.EN1 LD Entrada2 ST FB1.EN2 CAL FB1 LD FB1.SL1 ST Resultado1 LD FB1.SL2 ST Resultado2 Mtodo 2 LD Entrada1 EN1 FB1 LD Entrada2 EN2 FB1 LD FB1.SL1 ST Resultado1 LD FB1.SL2 ST Resultado2

Mtodo 1

Mtodo 3

Figura 6.33: Llamado a Bloque de Funcin en IL

6.6. Diagrama de Bloques de Funciones (FBD)


Lenguaje empleado para describir la funcionalidad de cualquier POU mediante un conjunto de bloques interconectados de forma adecuada. Su fun-

192

CAPTULO 6. ESTNDAR IEC 61131-3

cionamiento tiene fundamento en el ujo de las seales entre los diversos elementos que componen un circuito de procesamiento [8, 9].

6.6.1. Elementos Grcos de una Red FBD


El estndar dene dos formas diferentes de realizar los grcos. Una forma semi-grca donde las lneas, conexiones, bloques y conectores son representados mediante los caracteres _ y |. La segunda forma es una representacin grca completa la cual, por su funcionalidad ha sido adoptada por la mayora de los proveedores [8, 9]. En la Figura 6.34 se puede observar las dos formas disponibles para los elementos grcos ms usados. El estndar no dene la representacin grca completa para el formato de lneas que se cruzan sin conexin o que se interconectan, todo ello depende de las disponibilidades en resolucin de cada sistema.

ELEMENTO GRFICO LINEAS HORIZONTALES Y VERTICALES

FORMA SEMI-GRFICA
| | | __ __ __ __ __ __ __ __ | | | | | | | | |

GRFICO COMPLETO

LINEAS QUE SE INTERCONECTAN

__ __ __ __

+ __ __ __ __

LINEAS QUE NO SE CONECTAN

| | __ __ __ __ | |

| | __|__ | | + |

FORMAS DE LOS BLOQUES

+ __ __ __ __ | | | __ __ | | + __ __ __ __ __ __

__ __ | | |__ __ | +

__ __ __

CONECTORES

>CABLE1>
__ __ __

>CABLE1> >CABLE1>

>CABLE1>

Figura 6.34: Elementos Grcos de una Red FBD

6.6. DIAGRAMA DE BLOQUES DE FUNCIONES (FBD)

193

En la Figura 6.34, el elemento denominado Conector es empleado para la elaboracin de grandes redes. Este elemento no se considera como un elemento para el control de ujo, su signicado debe ser entendido como una prolongacin de una lnea y simplemente ayuda en la continuidad del mismo ujo. A un conector se le asocia un nombre o etiqueta el cual es considerado como un identicador local en la POU respectiva. En un sistema donde la pantalla est limitada en ancho o largo, esta herramienta es de mucha utilidad, ms sin embargo en los sistemas que no limitan la pantalla, o que poseen un gran ancho, esta herramienta es opcional de ser implementada. La funcionalidad descrita dentro de una POU se puede realizar empleando una o ms redes, por tanto a cada red se le debe asignar un nombre y en la mayora de los sistemas se acostumbra a realizar una enumeracin consecutiva de stas. Este nombre se asocia con la etiqueta necesaria para realizar saltos en el lenguaje ST, ver Figura 6.31 y el estndar slo la dene con ese propsito y la trata adems como un identicador local dentro de la POU.

6.6.2. Elementos para Control de Flujo


Son elementos grcos adicionales que tienen inuencia sobre el control de ejecucin. Permiten el abandono prematuro de la ejecucin o el salto hacia o desde una red. En ambos casos estas acciones se pueden realizar de forma condicional o incondicional. Estos elementos se muestran en la Figura 6.35.

cond

RETURN

cond

Figura 6.35: Elementos Grcos Para Control de Flujo en FBD En la grca 6.35 el objeto de la derecha es el elemento para abandono prematuro y el objeto de la izquierda el elemento para salto. En ambos casos cond representa la condicin sobre la cual se evala la accin, si esta condicin se ja en 1 (TRUE) las acciones se realizarn de forma incondicional.

6.6.3. Reglas de la Evolucin en una Red FBD


Una red FBD se compone en general de elementos en forma de caja rectangular que representan funciones o bloques de funciones, los cuales se interconectan empleando conexiones y conectores, y donde adems el ujo de la informacin puede ser direccionado empleando elementos para control de ujo. Una funcin en general puede tener varias entradas, las cuales se dibujan al lazo izquierdo de la caja que la representa y una nica salida que se dibuja al lado derecho, un bloque de funcin slo se diferencia de una funcin en el hecho que puede tener varias salidas todas dibujadas al lado derecho. El nombre para el tipo de bloque de funcin al igual que el nombre de una funcin va dentro de la caja rectangular en la parte superior, en el caso de los bloques de

194

CAPTULO 6. ESTNDAR IEC 61131-3

funciones el nombre de la instancia va ubicado sobre la caja. Los nombres de las variables de entrada y salida para una funcin o bloque de funcin dado van dentro de su caja al nivel del respectivo puerto de dato que representan. Una red esquematizada con base en la anterior descripcin, siempre debe seguir los siguientes criterios con el n de determinar la forma de evolucin del ujo de datos a travs de las redes [8, 9]: 1. La secuencia de ejecucin de varias redes se realiza una a una de arriba hacia abajo. Esta secuencia de ejecucin se puede alterar empleando saltos. 2. La evaluacin de un elemento cualesquiera en la red requiere para su inicio que todas sus entradas estn disponibles, lo cual equivale a que sus entradas hayan sido evaluadas y entregadas desde elementos anteriores. 3. La evaluacin de un elemento de la red no se da por terminada hasta que se disponga de la evaluacin de todas sus salidas. 4. En el mismo sentido del punto 2, cuando una primera red transere datos a una segunda se necesita que la primera tenga disponibles todos los datos requeridos en la segunda para que sta ltima pueda iniciar su ejecucin. Esto tambin se aplica en conjuntos de bloques de funciones que se ejecutan bajo el control de diferentes tareas que poseen conguracin de ejecucin en tiempos diferentes. Ejemplo: Una red FBD que implementa la siguiente funcin de conmutacin se muestra en la Figura 6.36: F = (A (B (C 1)))
001: C 1 B tmp OR F A OR AND tmp

Figura 6.36: Ejemplo de Evolucin en Red FBD

6.6. DIAGRAMA DE BLOQUES DE FUNCIONES (FBD)

195

En la Figura 6.36 se puede observar como la salida, que representa a la funcin F , posee una negacin al nal de la expresin la cual se pudo haber implementado usando la funcin estndar NOT indistintamente. Adems se debe notar como los datos de entrada pueden ser variables o constantes. En esta misma gura se ha empleado un conector denominado tmp el cual sirve para darle continuidad a una lnea dentro del diagrama. Ejemplo: Si la funcin F del ejemplo anterior se emplea como condicin necesaria para permitir la ejecucin de una segunda red, la cual implementa la evaluacin de la funcin S = (S 0,05) + N 2, la representacin esquemtica para esta nueva red FB es la mostrada en la Figura 6.37.

001 Red1: C 1 B tmp OR Red2 A 002 Red2: 0.05 MUL AND N2 S OR AND tmp

Figura 6.37: Ejemplo Red FBD con Realimentacin y Salto

En la Figura 6.37, es de aclarar que se permite la realimentacin de valores, pero para poder cumplir con la reglas de evolucin listadas en la Seccin 6.6.3 es necesario que la primera vez que se avala la red el valor de la entrada realimentada sea tomado desde el valor inicial por defecto denido para el tipo de dato asociado. Es de resaltar adems que se cuenta con los parmetros EN y ENO en las funciones, con los cuales se puede incidir explcitamente sobre el ujo de la informacin en una red, de la forma ya descrita en la Seccin 6.3.8.1.

196

CAPTULO 6. ESTNDAR IEC 61131-3

6.7. Diagrama Escalera (LD)


Este lenguaje se fundamenta en los diagramas de la lgica cableada clsica y sus componentes grcos representan elementos encontrados en estos mismos diagramas, tal como se estudi en el Captulo 4. Un diagrama escalera se compone de dos lneas verticales, las cuales entregan la alimentacin para los restantes elementos del diagrama que se sitan en lneas horizontales, o escalones, y donde por convencin se asume que la informacin (ujo de potencia) va desde la lnea vertical de la izquierda a la lnea de la derecha. Como el diagrama se base en el uso de contactores, los contactos indican el estado actual de variables booleanas, con lo cual constituyen un mtodo de slo lectura de la variable que representan, mientras que las bobinas proveen un mtodo de solo escritura para la variable asociada [1, 8, 9].

6.7.1. Elementos Grcos de una Red LD


Al igual que para una red FBD el estndar dene dos mtodos de realizar los grcos, un mtodo semi-grco y un mtodo grco completo. Los elementos bsicos de la red compuestos por lneas, conexiones, bloques y conectores son representados exactamente igual a como se deni en la Seccin 6.6.1 correspondiente a una red FBD. Adicional a los elementos bsicos anteriores, una red LD posee adems elementos grcos para representar contactos y bobinas, ambos representados en cualesquiera de los dos mtodos grcos, por simplicidad se muestra a continuacin nicamente las representaciones grcas completas.

Figura 6.38: Representacin de Bobina y Contacto en LD En la Figura 6.38 la incgnita dentro de cada elemento representa un smbolo de un conjunto posible ya sea para un contacto o para una bobina. A continuacin se listan los smbolos para cada elemento y se da una breve descripcin de su signicado: Contactos: Caracter espacio en blanco: Representa un contacto normalmente abierto / Caracter slash: Representa un contacto normalmente cerrado P: Representa un contacto sensible a transicin positiva, o sea que se activa con anco de subida

6.7. DIAGRAMA ESCALERA (LD)

197

N: Representa un contacto sensible a transicin negativa, o sea que se activa con anco de bajada Bobinas: Caracter espacio en blanco: Bobina que toma el valor de estado lgico evaluado por los elementos a su izquierda / Caracter slash: Bobina negada; toma el valor negado de estado lgico evaluado por los elementos a su izquierda S: Set de Bobina; la bobina se ja en el estado ON cuando el valor lgico evaluado por los elementos a su izquierda es 1. La bobina permanece en este estado hasta que se emplee un reset de bobina. R: Reset de Bobina; la bobina se ja en el estado OFF cuando el valor lgico evaluado por los elementos a su izquierda es 1. La bobina permanece en este estado hasta que se dena un estado contrario. M: Bobina de Retencin; opera de forma igual a una bobina normal, con excepcin que su estado se retiene en la memoria del PLC ante fallos en el suministro de potencia. SM: Bobina de Retencin Set; opera de forma igual a un set de bobina, con excepcin que su estado se retiene en la memoria del PLC ante fallos en el suministro de potencia. RM: Bobina de Retencin Reset; opera de forma igual a un reset de bobina, con excepcin que su estado se retiene en la memoria del PLC ante fallos en el suministro de potencia. P: Bobina Sensible a Transicin Positiva; la bobina pasa al estado ON con un anco de subida. N: Bobina Sensible a Transicin Negativa; la bobina pasa al estado ON con un anco de bajada.

6.7.2. Elementos Para Control de Flujo


Son elementos grcos adicionales que tienen inuencia sobre el control de ejecucin. Permiten el abandono prematuro de la ejecucin o el salto hacia o desde una red LD. En ambos casos estas acciones se pueden realizar de forma condicional o incondicional y su representacin es idntica a la denida en la Figura 6.35 con operacin igual a la ya vista en la Seccin 6.6.2 para el lenguaje FBD.

6.7.3. Llamados a Funciones y Bloques de Funciones


Al igual que en el lenguaje FBD, las funciones y bloques de funciones son representados mediante cajas rectangulares, donde las entradas van al lado izquierdo y las salidas (en el caso de las funciones una sola salida) van al lado derecho. El nombre formal de cada variable de entrada y salida va dentro de

198

CAPTULO 6. ESTNDAR IEC 61131-3

la caja al nivel del respectivo puerto de dato que representan. El nombre de un tipo de bloque de funcin y el nombre de una funcin van dentro de la caja en la parte superior, mientras que el nombre de la instancia de un bloque de funcin va ubicado sobre la caja. Los parmetros de entrada y salida en un bloque de funcin pueden ser de cualquier tipo de dato, pero el estndar exige que como mnimo una entrada y una salida deben ser de tipo booleano y deben tener conexin directa o indirecta a las lneas verticales del diagrama escalera. En las funciones las entradas EN y ENO sirven como elementos para controlar el ujo y adems proveen un medio de cumplir con el requerimiento de tener como mnimo una entrada y una salida booleana con conexin directa o indirecta a las lneas verticales de la red LD.

6.7.4. Reglas de la Evolucin en una Red LD


La secuencia de evaluacin siempre debe seguir los siguientes criterios con el n de determinar la forma de evolucin del ujo de datos a travs de las redes [8, 9]: 1. La secuencia de ejecucin de varias redes se realiza una a una de arriba hacia abajo. Esta secuencia de ejecucin se puede alterar empleando saltos. Igualmente los escalones de una red son ejecutados en secuencia de arriba hacia abajo. 2. La evaluacin de un elemento cualesquiera en la red requiere para su inicio que todas sus entradas estn disponibles, lo cual equivale a que en un escaln o una POU sus entradas hayan sido evaluadas y entregadas desde elementos anteriores. 3. La evaluacin de un elemento de la red no se da por terminada hasta que se disponga de la evaluacin de todas sus salidas. 4. En el mismo sentido del punto 2, cuando una red transere datos a otra se requiere que la primera tenga disponibles todos los datos requeridos en la segunda para poder iniciar su ejecucin. La funcin de conmutacin de la Figura 6.36 se toma a manera de ejemplo para la implementacin de una red en lenguaje LD, la cual se muestra en la Figura en la pgina siguiente. De la anterior red es claro como este lenguaje posee una naturaleza anloga a los circuitos digitales, ya que en ella fcilmente se pueden implementar funciones de conmutacin, adems desde el mismo diagrama se puede deducir simplicaciones que en muchos casos requieren de tcnicas de minimizacin. Sin embargo una de las grandes desventajas de la programacin en este lenguaje, fuera de las ya expuestas en la Seccin 6.1.1, es la dicultad para programar ciclos iterativos o para tratar con tipos de datos derivados [2, 8, 9].

6.7. DIAGRAMA ESCALERA (LD)


A

199

/
1

Figura 6.39: Ejemplo de Evolucin en Red LD En el lenguaje LD tambin es posible realizar la realimentacin de variables, lo cual sucede cuando en un mismo escaln se emplean contactos y entradas a funciones o bloques de funciones que se relacionan con variables (como bobinas o salidas de funciones o bloques de funciones) que se actualizan en el mismo escaln. A diferencia de lo que ocurre con la realimentacin en el lenguaje FBD, en LD la realimentacin slo se realiza mediante conexiones implcitas, con lo cual aquellas conexiones que inician a la derecha y terminan en la izquierda, ver Figura 6.37, no son permitidas en LD. Un tema de especial cuidado, que se puede presentar con mayor frecuencia en lenguaje LD en comparacin con FBD, es el problema de determinacin de secuencia en la ejecucin, que en algunos lenguajes grcos de programacin se denomina como condiciones de ejecucin. Para entender este punto se muestra la Figura 6.40.

Var1

Var2

Var3

FunAB1 FunAB S1 E1 S2 Var2

Figura 6.40: Determinacin de Secuencia en Ejecucin Se puede observar como al momento de ejecutar la red de la Figura 6.40 no es claro en que instante ser actualizado el dato de la variable denominada Var2, por tanto tampoco es claro si al instante de su evaluacin sta poseer un valor que viene desde la evaluacin previa o si por el contrario estar actualizado con el valor que entregue la salida 2 del bloque de funcin (FunAB1.S2) durante la evaluacin presente. Por ende, este tipo de situaciones debe ser evitada durante la realizacin de redes tipo FBD o LD.

200

CAPTULO 6. ESTNDAR IEC 61131-3

6.8. Diagrama Funcional Secuencial (SFC)


ste es el ltimo de los lenguajes del estndar IEC 61131-3, tiene su fundamento en las metodologas para la descripcin de sistemas secuenciales, principalmente en Redes de Petri. Su naturaleza es grca y permite la estructuracin de una implementacin mediante estados, o unidades, que se ejecutan paso a paso. Cada uno de estos estados basa su ejecucin en condiciones denidas por el operador y en condiciones dependientes de las entradas al sistema. Adems cada unidad puede ser implementada en cualquiera de los otros cuatro lenguajes denidos en el estndar o mediante descripciones proporcionadas por el mismo SFC [2, 1, 8, 9]. El diagrama funcional secuencial se puede utilizar para realizar la implementacin de POUs del tipo Bloque de Funciones o Programa, ms no para las Funciones, lo anterior se debe a la misma naturaleza de este lenguaje, el cual retiene informacin en los estados y por tanto va en contrava de la denicin dada para Funcin, ver la Seccin 6.3.8.1.

6.8.1. Elementos Grcos y Descripcin de una Red SFC


Una red SFC se compone primariamente de dos elementos: las Etapas y las Transiciones. Las etapas se representan mediante cajas rectangulares que van interconectadas entre si mediante una lnea vertical, donde a su vez va ubicada una lnea horizontal que representa la transicin. A cada etapa se le puede asociar un conjunto de instrucciones, denominadas Acciones, las cuales se realizan dependiendo del estado actual en el cual se encuentre la etapa. Una etapa puede estar en uno de dos estados posibles: Activo o Inactivo. Si el estado actual es activo, entonces las acciones asociadas se repiten hasta que el estado de la etapa sea el de inactivo. El cambio de estado de una etapa est determinado por la transicin inmediatamente debajo de ella. A la transicin se le asigna una Condicin de Transicin la cual no es ms que una expresin booleana a ser vericada. Cuando una etapa se encuentra activa se evala continuamente la condicin asociada a la transicin debajo de ella, cuando esta condicin alcanza un valor verdadero TRUE ocasiona que la etapa que actualmente se encuentra activa pase al estado de inactiva y la etapa posterior a la transicin, que actualmente se encontraba inactiva, pasa a estar activa (dependiendo de la estructura de la red se podra tener ms de una etapa posterior a la transicin). Dentro de la red SFC existe una etapa especial, denominada Start, (Inicio). Cuando la red SFC es invocada la etapa Start es activada de forma automtica dando inicio as al ujo de datos a travs de la red. En los sistemas modernos se acostumbra indicar las etapas que actualmente se encuentran en el estado activo mediante una marca circular negra () que se denomina Token (moneda) y que ayuda en el seguimiento grco del ujo secuencial a travs de la red. En la Figura 6.41 se muestra una red SFC para una secuencia de encendido de dos cargas.

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)


Lnea con direccin Start P=1 A P=0 Espera P=1 B P=0 Etapa inicial Transicin, su condicin se valida cuando P=1 Etapa Transicin, su condicin se valida cuando P=0

201

Figura 6.41: Componentes Bsicos de una Red SFC En la Figura 6.41, cuando se hace el llamado a la red se activa inicialmente la etapa Start la cual permanece as hasta el instante en el cual la transicin inmediatamente debajo verique la condicin asignada, en este caso se espera por la pulsacin de P. Luego cuando se pulse P entonces se desactiva la etapa inicial y se activa la etapa A donde se debe asignar el conjunto de acciones necesarias para encender la primer carga (las acciones sern estudiadas ms adelante). Esta carga permanece encendida hasta el instante cuando se libere el pulsador P, que adems es la condicin de la transicin debajo de A, por lo que al vericarse esta condicin, esto es P = 0, se desactiva la etapa A y se activa la etapa Espera. En Espera el sistema no realiza ninguna accin asociada, simplemente ahora es necesaria una nueva vericacin de pulsacin de P para poder avanzar hacia la siguiente etapa. Cuando se pulse P entonces se desactiva Espera y se activa la etapa B, donde se realizan las acciones necesarias para encender la carga B hasta cuando se libere nuevamente el pulsador. Finalmente con la liberacin de P se regresa al estado inicial y el ciclo puede reiniciar. 6.8.1.1. Las Etapas Cada etapa dentro de una red SFC posee un identicador que debe ser nico y que es tomado como una variable declarada automticamente y de tipo local. El nombre de este identicador no debe ser asignado a ningn otro elemento dentro de la POU implementada. Las etapas son de dos clases a saber: unas denominadas simplemente como etapas las cuales se representan mediante rectngulos y otras denominadas como etapas iniciales las cuales se presentan mediante un rectngulo dentro de otro, ver Figura 6.41. Cuando se realiza el llamado a una POU implementada en SFC, se activan de forma automtica todas las etapas iniciales, las cuales no necesariamente deben ir al principio de

202

CAPTULO 6. ESTNDAR IEC 61131-3

la red. La activacin de una etapa se indica en la mayora de los sistemas mediante la presencia de una marca circular, o token, dentro del rectngulo de la etapa. Asociado a cada identicador de etapa existen dos variables declaradas implcitamente. La primera de ellas es la Bandera de Etapa, que se puede acceder mediante la notacin identicador.X, y es una variable de tipo BOOL que entrega el valor actual de activacin de la etapa asociada, as si la etapa se encuentra activa entonces identicador.X tendr un valor de TRUE y de lo contrario valdr FALSE. Esta primera variable implcita es de mucha utilidad para el control de ujo y la ejecucin de acciones en diferentes lugares de la red. La segunda variable declarada de forma implcita es Tiempo Transcurrido de Etapa, la cual se puede acceder mediante la notacin identicador.T, y es una variable de tipo TIME que entrega el tiempo transcurrido desde la activacin de la etapa. Si la etapa no ha sido activa ni una sola vez, el valor de esta variable ser cero, pero si la etapa ya fue activa pero actualmente no lo est, entonces el valor de la variable ser el tiempo transcurrido de la ltima vez que estuvo activa. Si se desea que el valor de esta variable incluya el valor de iteraciones anteriores, entonces se debe declarar explcitamente una instancia con el atributo RETAIN, de la misma forma como se explic en la Seccin 6.3.7.2 y tal como aparece en la Figura 6.10.

6.8.1.2. Las Transiciones Una transicin es una especie de barrera que retiene activas las etapas previas a ella hasta cuando se verique una expresin booleana que se le asocia, caso en el cual las etapas previas se desactivan y todas las etapas posteriores se activan. Sin embargo la condicin de una transicin slo es evaluada cuando todas las etapas previas a ella se encuentren en estado activo. La expresin que describe la condicin de la transicin puede ser implementada en varias formas y en cualquiera de los otros cuatro lenguajes del mismo estndar, aunque la forma empleada restringe los lenguajes a usar. Como ejemplo, las expresiones para las transiciones en la Figura 6.41 estn dadas en ST. A continuacin se describen las diversas formas en las cuales se puede realizar la descripcin de la condicin de transicin y en cada una se indica los lenguajes del estndar que se pueden emplear. La primera forma, denominada como de sintaxis inmediata, consiste en escribir inmediatamente a continuacin de la transicin la expresin para la condicin. En este caso escribir puede ser interpretado como la accin de escribir una expresin booleana en lenguaje ST o por la conexin directa de una red LD o FBD que entrega como resultado un dato de tipo BOOL. En esta primera forma no se permite el uso de expresiones en lenguaje IL. A continuacin, en la Figura 6.42, se muestran los casos especcos mencionados.

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)


Representacin Descripcin

203

Etapa1 V1 & V2 Etapa2


Condicin de transicin evaluada mediante cualquier expresin en lenguaje de texto estructurado (ST) que entregue como resultado un dato booleano.

Etapa1 V1 V2 Etapa2

Condicin de transicin evaluada directamente desde un escaln de red LD. Por naturaleza, una red LD evala mediante contactos expresiones booleanas las cuales se emplean para evaluar la transicin.

Etapa1 V1 V2 & Etapa2

Condicin de transicin evaluada directamente desde una salida de tipo booleana en una red FBD. Se debe asegurar que la salida de la red FBD conectada a la transicin sea de tipo booleana.

Figura 6.42: Transiciones con Sintaxis Inmediata La segunda forma, denominada sintaxis de conector, consiste en emplear conectores en los casos de redes LD y FBD en lugar de conexiones inmediatas. El empleo de estos conectores se realiza de la misma forma en que se describieron en la Seccin 6.6.1. A continuacin, en la Figura 6.43, se muestra la forma de ser empleados.

Representacin

Descripcin

Etapa1 Conector Etapa2


Se emplea un conector con conexin directa a la transicin. El conector hace el enlace hacia una red en LD o FBD que se encuentra en otro lugar del diagrama SFC

Figura 6.43: Transicin con Sintaxis de Conector La tercer y ltima forma, denominada sintaxis de nombre de transicin, emplea un identicador como nombre para la transicin. De esta forma se puede

204

CAPTULO 6. ESTNDAR IEC 61131-3

emplear cualquiera de los otros cuatro lenguajes del estndar en los cuales se describe programticamente, de acuerdo a la naturaleza de cada uno, la expresin booleana para el identicador de la transicin. En la Figura 6.44 se muestra un ejemplo de cada uno de los casos posibles para esta forma de sintaxis.

Representacin

Descripcin

Etapa1 Tran1 Etapa2

A la transicin se le asigna un identicador, o nombre, el cual puede ser denido usando cualquiera de los otros cuatro lenguajes del estndar.

TRANSITION Tran1: V1 V2 & Tran1

Denicin del identicador para la condicin de transicin empleando una red FBD. La salida de la red es el valor para la condicin.

END_TRANSITION TRANSITION Tran1: Tran1 V1 V2 END_TRANSITION TRANSITION Tran1: LD V1 AND V2 END_TRANSITION


TRANSITION Tran1 := V1 & V2; END_TRANSITION Denicin del identicador para la condicin de transicin empleando una red LD. A la bobina de la red LD se le asigna el identicador. Denicin del identicador para la condicin de transicin empleando el lenguaje IL. El resultado nal almacenado en el acumulador es el valor de la condicin. Denicin del identicador para la condicin de transicin empleando el lenguaje ST. La asignacin de la condicin se realizar usando el delimitador :=.

Figura 6.44: Transiciones con Sintaxis de Nombre de Transicin

6.8.2. Secuencias
Cualquier POU implementada en SFC puede poseer una o ms redes, cada una de las cuales se compone de etapas y transiciones. Nunca se podr conectar dos etapas entre s o dos transiciones entre s. Es posible que una transicin est precedida de una o ms etapas, e igualmente es posible que luego de ella exista una o ms etapas siguientes. La interconectividad entre estos elementos (etapas, transiciones) se denomina secuencia, as si posterior a la activacin de una etapa es posible slo

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)

205

la activacin de otra se dice que la conexin es en Secuencia nica, pero si es posible la activacin de una etapa entre varias se dice que la conexin es en Secuencia Divergente, mientras que si es posible la activacin de dos o ms etapas a la vez la conexin es en Secuencias Simultneas. Como ejemplo, la red de la Figura 6.41 se compone exclusivamente de secuencias nicas. A continuacin se describe las secuencias divergentes y las simultneas.

6.8.2.1. Secuencias Divergentes Cuando a una etapa le sigue ms de una transicin, se dice que la secuencia es divergente. En este caso al estar la etapa activa se evaluarn todas las transiciones posteriores a ella y la primera transicin en ser validada denir la ruta a seguir. En caso de tener ms de una transicin validada simultneamente se denen mtodos para determinar la prioridad entre ellas. En la Figura 6.45 se muestran las tres posibles formas de denir la prioridad en la evaluacin.

Por Defecto

Denida por Usuario

Mutuamente Excluyente

Etapa1

Etapa1

Etapa1

* Tran1 Etapa2

Tran2 Etapa3

* 2 Tran1 Etapa2

1 Tran2

Tran1 Etapa2

Tran2 Etapa3

Etapa3

La seleccin de una secuencia se realiza evaluando las transiciones de izquierda a derecha. La primer transicin en ser validada dene la ruta a seguir. Un asterisco indica que sta es la prioridad en uso.

El usuario dene mediante un nmero la prioridad de la evaluacin, as cada ruta es enumerada y la evaluacin se realiza en orden ascendente. Un asterisco y el nmero asignado a cada ruta indican que sta es la prioridad en uso.

Las transiciones son evaluadas sin ningn orden denido. En este caso se debe asegurar que las mismas expresiones para las condiciones de las transiciones operen de forma mutuamente excluyente, es decir, slo sea posible la validacin de una entre varias.

Figura 6.45: Secuencias Divergentes y Prioridades

Luego de la seleccin de una secuencia divergente, es necesario volver a unir los caminos hacia una sola ruta. En este caso a una etapa le antecede ms de una transicin, una desde cada ruta. En la Figura 6.46 se muestra la forma de realizar la convergencia de secuencias divergentes.

206
Etapa1 Tran1

CAPTULO 6. ESTNDAR IEC 61131-3


Etapa2 Tran2

Etapa n

Figura 6.46: Convergencia de Secuencias Divergentes 6.8.2.2. Secuencias Simultneas Cuando una transicin debe dar lugar a la ejecucin simultnea de ms de una etapa, se dice que las secuencias son simultneas. En este caso cuando una transicin es validada, lo cual implica adems que la etapa previa a ella se encuentre activa, se activa simultneamente ms de una etapa inmediatamente posterior a la transicin. Igualmente ser necesario realizar la convergencia de secuencias simultneas hacia una sola ruta, en este caso una transicin se valida cuando todas las etapas conectadas a ella y que provienen de secuencias simultneas se encuentren activas y adems se valide la condicin de la transicin, con lo cual se desactivarn todas las etapas previas a dicha transicin y se activar la etapa siguiente. En la Figura 6.47 se muestra la representacin grca de secuencias simultneas y su respectiva convergencia.

Etapa1

Etapa1

Etapa2

Tran Etapa2 Etapa3

Tran Etapa n

Figura 6.47: Secuencias Simultneas y su Convergencia 6.8.2.3. Redes Inseguras Ya que SFC tiene su fundamento en las Redes de Petri, se debe prevenir redes que no tengan un comportamiento seguro. El estndar IEC 61131-3 hace nfasis en la necesidad de evitar redes con topologas Inseguras e Inalcanzables [8, 9]. Una Topologa Insegura es aquella en la cual se puede presentar la activacin incontrolada y sin coordinacin de etapas, esto sucede especialmente cuando en secuencias simultneas se permite la activacin de etapas exteriores a ellas sin asegurar que las acciones al interior se terminen completamente.

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)

207

Una Topologa Inalcanzable es aquella en la cual algn elemento (etapa o transicin) nunca podr ser evaluado. Esto sucede comnmente cuando se mezclan secuencias divergentes con simultneas sin el debido cuidado. La Figura 6.48 muestra un ejemplo de cada uno de estos dos tipos de redes inseguras, topologas estas que se deben evitar.

Etapa1

Etapa1

T1 Etapa2 Etapa3 Etapa2

T1 Etapa3

T2 Etapa4

T3 Etapa5

T4 Etapa6

T2 Etapa4

T3 Etapa5

T4 Etapa6

T5

T6

T5
Red Inalcanzable: En esta red nunca se podr vericar T5, ya que Etapa5 y Etapa6 forman una secuencia divergente ocasionando que nunca T5 tenga sus tres etapas previas activas.

Red Insegura: Si estando activas Etapa2 y Etapa3 se valida T4 podra ocurrir tener activas simultneamente Etapa2 y Etapa4 debido al retorno hacia Etapa1, adems el nmero de marcas podra crecer sin control.

Figura 6.48: Redes Inseguras

6.8.3. Acciones
Al describir una red mediante el lenguaje SFC se persigue como objetivo que con cada etapa que se encuentre activa se realice la ejecucin de una accin, o un conjunto de acciones, que se asocia a dicha etapa con la nalidad de implementar un comportamiento deseado. Estas instrucciones entonces son escritas dentro de una caja denominada Bloque de Acciones y la cual va unida a la etapa asociada. Las acciones tienen por nalidad denir las instrucciones de una etapa o una secuencia de instrucciones que se deben ejecutar bajo ciertas condiciones. Adems de implementar comportamientos externos del sistema, tambin se pueden emplear como elementos para el control de ujo. 6.8.3.1. Bloques de Acciones En la Figura 6.49 se puede observar los elementos constitutivos generales de un bloque de accin, donde la descripcin de las acciones se puede realizar

208

CAPTULO 6. ESTNDAR IEC 61131-3

en cualquiera de los otros cuatro lenguajes denidos por el estndar e incluso se puede emplear otra red SFC.
Calificador Nombre de Accin

Tran1 Etapa2 Tran2 N

Indicador Booleano

AccionEtapa2 IF Presion THEN Indicador := TRUE; ELSE Indicador := FALSE; END_IF

Indicador

Descripcin de la accin

Figura 6.49: Elementos de un Bloque de Accin En general, un bloque de accin consta de los siguientes elementos: un Calicador, el cual dene una condicin de ejecucin que controla ya sea el tiempo, o instante, de ejecucin de las instrucciones asociadas o el valor que se debe asignar a una variable booleana. El Nombre de Accin es un identicador que debe ser nico dentro de la POU implementada. El Indicador Booleano es una variable opcional a ser implementada dentro del bloque de accin con propsito de permitir su actualizacin de forma manual dentro del cuerpo de instrucciones con el n de ser indicativa del estado actual de la ejecucin. Por ltimo la seccin de Descripcin de la Accin puede ser implementada en cualquiera de los lenguajes del estndar, incluyendo otra red SFC, es ms, debido a la complejidad que podra alcanzar la descripcin de un comportamiento dado se permite que esta seccin sea implementada en un diagrama aparte o incluso en otra pgina, caso en el cual el lenguaje IL no se puede usar. Cuando se emplea un diagrama o pgina independiente para la implementacin de la descripcin de la accin, el nombre de la accin se emplea como identicador que enlaza la accin con la descripcin. En general, una etapa puede constar de cualquier nmero de acciones asociadas. Adems una misma accin puede ser relacionada con ms de una etapa. Ms an, si se desea, una etapa puede no tener ninguna accin asociada, con lo cual simplemente se espera a la validacin de la condicin de transicin. La ejecucin de las acciones se rige mediante las siguientes dos reglas: 1. Cada etapa junto con sus acciones asociadas se ejecuta al menos una vez luego de su activacin. En este estado la bandera Etapa.X se ja y permanece en TRUE. 2. Posterior a la desactivacin de una etapa, sta y todas sus acciones asociadas son invocadas una vez ms con el propsito de asegurar una adecuada nalizacin de variables y estados. Durante esta parte de la ejecucin y durante todo el tiempo que la etapa est inactiva la bandera Etapa.X permanece en FALSE.

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)

209

Por ltimo, es de destacar que los bloques de acciones no son de uso restrictivo del lenguaje SFC. Estos tambin pueden ser empleados dentro de redes FBD y LD tal como se muestra en la Figura 6.50.

V1 V2

Salida N Accin I1

V1 V2

&

N Accin

I1

Salida

Bloque de Accin en LD

Bloque de Accin en FBD

Figura 6.50: Bloques de Acciones en los Lenguajes LD y FBD En la Figura 6.50 la lnea a la izquierda del bloque de accin se encarga de dar la activacin, en FBD cuando se entrega un valor booleano de TRUE y en LD cuando hay paso en el ujo de potencia de izquierda a derecha. Igualmente se puede emplear de forma opcional el indicador booleano con propsitos de seguimiento al desarrollo de las acciones implementadas, caso en el cual se asigna su valor a una variable. 6.8.3.2. Calicadores de las Acciones Ya se ha visto que uno de los elementos constitutivos de una accin es su calicador, ver Figura 6.49. Hasta el momento siempre se ha empleado el calicador N con el cual toda accin se ejecuta continuamente mientras su etapa asociada se encuentre activa. Sin embargo, el estndar dene un amplio rango de calicadores adicionales con los cuales se puede controlar de forma exacta el momento justo en el cual una accin se debe ejecutar en relacin con la activacin de su etapa asociada. De lo anterior es claro que la ejecucin de una accin ser dependiente de la activacin de la etapa asociada y del tipo de calicador asignado. En la Tabla 6.5 se muestra el listado de los calicadores disponibles. Aunque estos calicadores son de inmensa ayuda en la descripcin de funcionalidades, igualmente pueden ocasionar mayores inconvenientes en el mantenimiento, depuracin y seguimiento a redes que los contienen, especialmente en aquellos casos donde se emplea calicadores que extienden acciones ms all de la desactivacin de una etapa, como es el caso de SD. Con el propsito de claricar la forma de operar de estos calicadores, a continuacin se muestran las posibles situaciones de cada uno de ellos en un diagrama de tiempos.

210
Calicador N R S L Nombre No Memorizada No Memorizada Reset Set Limitada

CAPTULO 6. ESTNDAR IEC 61131-3


Descripcin Se ejecuta mientras la etapa sea activa Igual a la anterior Reset memorizado de una accin Set memorizado de una accin Accin que se ejecuta slo por un tiempo dado o hasta que la etapa est inactiva, lo que suceda primero D Retarda Accin que inicia su ejecucin luego de un tiempo de retardo dado y que termina cuando la etapa est inactiva. Si la etapa es inactiva antes del retardo la accin nunca se ejecuta P SD Impulsiva Memorizada y Retardada Retardada y Memorizada Memorizada y Limitada Accin que se ejeucta slo una vez al inicio de la activacin de la etapa Set memorizado de una accin luego de un tiempo dado. El set ocurrir independiente de la desactivacin de la etapa. DS Igual a la anterior, pero en este caso si se produce la desactivacin de la etapa antes de terminar el retardo no se realiza la memorizacin SL Set memorizado por un tiempo dado. El set ocurrir independiente de la desactivacin de la etapa

Tabla 6.5: Calicadores de Acciones El calicador tipo N ejecuta la accin de forma continua mientras la etapa asociada est igualmente activa. Esto es, la accin se realizar mientras la bandera Etapa.X tenga un valor de TRUE. En la Figura 6.51 se observa el comportamiento de la accin en el tiempo.
E1.X N AccinE1 T2 AccinE1 T2

T1 E1

Figura 6.51: Accin con Calicador N El calicador tipo S ejecuta la accin de forma continua desde el momento en el cual la etapa asociada est activa y dicha accin permanece (se memoriza) aunque la etapa pase al estado inactivo. Para detener la ejecucin de la accin es necesario que en otra etapa se haga referencia a la misma accin pero usando el calicador R, con lo cual en el momento de la activacin de esta segunda etapa se ejecutar una vez ms la accin y se realizar enseguida el reset. En la Figura 6.52 se muestra la forma como operan estos calicadores.

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)


T1 E1 T2 Tn-1 En Tn R Accin S Accin E1.X T2 Accin Tn-1

211

Figura 6.52: Accin con Calicadores S y R El calicador L ejecuta la accin desde la activacin de la etapa asociada, pero la realiza slo por un periodo determinado de tiempo. En caso que la etapa se desactive antes de culminar la ejecucin de la accin, sta ltima no se contina ejecutando. Es claro entonces que la accin se realizar hasta cuando suceda una de las siguientes situaciones: hasta que transcurra el tiempo propuesto o hasta que se desactive la etapa asociada, estas situaciones se muestran en la Figura 6.53.
E1.X LT#2s Accin T2 Accin T2 2s 2s

T1 E1

Figura 6.53: Accin con Calicador L El calicador D ejecuta la accin un tiempo despus de la activacin de la etapa asociada. Esta ejecucin dura hasta cuando se produzca la desactivacin de la correspondiente etapa, en caso que el tiempo no se cumpla antes de la desactivacin de la etapa entonces la accin nunca se lleva a cabo. Este comportamiento se observa en la Figura 6.54.
E1.X DT#2s Accin T2 Accin T2 2s 2s

T1 E1

Figura 6.54: Accn con Calicador D

212

CAPTULO 6. ESTNDAR IEC 61131-3

El calicador P ejecuta la accin una nica vez con la activacin de la etapa asociada. A este calicador tambin se le denomina como impulsivo. En la Figura 6.55 se muestra su comportamiento.

T1 E1 T2 P Accin

E1.X Accin T2

Figura 6.55: Accin con Calicador P

El calicador SD ejecuta la accin un tiempo despus de la activacin de la etapa asociada, este inicio de ejecucin se realiza independientemente del estado futuro de la etapa. La ejecucin se detiene slo cuando en otra etapa se haga referencia a la misma accin empleando el calicador R. En las anteriores condiciones es de aclarar que en caso que el calicador R se realice sobre la accin antes de que se cumpla el tiempo de retardo la accin nunca se lleva a cabo. En la Figura 6.56 se muestran estos comportamientos para el calicador SD.

T1 E1 T2 Tn-1 En Tn R Accin SD T#2s Accin E1.X T2 Accin Tn-1 2s 2s

Figura 6.56: Accin con Calicador SD

El calicador DS ejecuta la accin un tiempo despus de la activacin de la etapa asociada, este inicio se realiza siempre y cuando una vez cumplido el retardo la etapa an est activa. Al igual que en el caso anterior, se requiere hacer referencia en otra etapa a la misma accin usando el calicador R para detener su ejecucin. La Figura 6.57 muestra el comportamiento descrito para este calicador.

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)


T1 E1 T2 Tn-1 En Tn R Accin DS T#2s Accin E1.X T2 Accin Tn-1 2s 2s

213

Figura 6.57: Accin con Calicador DS Por ltimo, el calicador SL ejecuta la accin desde la activacin de la etapa asociada y memoriza esta accin por un tiempo determinado. La duracin de la ejecucin de la accin no depende en este caso del estado futuro de la etapa asociada, sin embargo si en una etapa posterior se hace referencia a la misma accin usando el calicador R, la accin se detendr an en el caso que no se haya cumplido la duracin jada para la ejecucin. En la Figura 6.58 se muestran los comportamientos descritos para este calicador.
T1 E1 T2 Tn-1 En Tn R Accin LS T#2s Accin E1.X T2 Accin Tn-1 2s 2s

Figura 6.58: Accin con Calicador LS 6.8.3.3. Control de Accin Ya que se puede hacer referencia a una accin en particular desde diferentes bloques de acciones en varias etapas y como estas etapas pueden estar, o no, activas simultneamente, dependiendo incluso de los tipos de calicadores empleados, una accin en particular puede recibir simultneamente llamados desde diferentes lugares los cuales inuenciarn su tiempo de ejecucin. Para poder controlar la programacin de una accin especca se emplea un Control de Accin, el cual en general es un bloque de funcin propio del sistema operativo y que se encarga de evaluar y determinar las condiciones bajo las cuales se debe dar inicio y paro a la ejecucin de una accin [8]. En la Figura 6.59 se muestra la representacin de este bloque de funcin.

214
R

CAPTULO 6. ESTNDAR IEC 61131-3


& Q

N S E1.X Ei.X En.X L D P SD DS SL

Control de Accin

Figura 6.59: Control de Accin El control de accin est implementado con base en una funcin OR la cual recibe como entradas las evaluaciones de cada uno de los diferentes tipos de calicadores (representados en la Figura 6.59 mediante un rectngulo) a excepcin de R. Una funcin AND se encarga de proveer el nivel mayor de prioridad al calicador R. Desde las diferentes etapas que contengan bloques de acciones con la accin a evaluar se conecta la bandera Etapa.X a la entrada respectiva y la salida Q se encarga de activar directamente la accin o de permitir la ejecucin cclica de instrucciones en las secciones asociadas de descripcin de accin. De acuerdo con las reglas para la ejecucin de acciones, se debe tener siempre presente que posterior a la desactivacin de una etapa se realiza una ltima invocacin de todas las acciones con el propsito de asegurar el estado nal de las variables.

6.8.4. Reglas de la Evaluacin en una Red SFC


En los lenguajes de texto como IL o ST las instrucciones se ejecutan en secuencia una a continuacin de la otra en el mismo orden que son escritas y esta secuencia nicamente es alterada por el uso de sentencias para control de ujo u operadores para saltos. En una red SFC el mtodo que determina la secuencia de ejecucin es diferente. En las redes SFC cada POU se asocia con una tarea, la cual es responsable de la ejecucin de los elementos en su interior. As una red SFC dentro de una POU es evaluada cada vez que la POU lo haga y una red SFC dentro de un bloque de accin es evaluada cada vez que la etapa asociada sea activa. En general las reglas para la evaluacin de redes SFC son las siguientes [8, 9]: 1. Todos las etapas iniciales son activadas por defecto cuando se realiza la inicializacin del sistema, por ende se ejecutan las acciones asociadas a

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)


las etapas iniciales.

215

2. Con el inicio de una nueva evaluacin se determina el conjunto de todas las etapas activas y se permite la evaluacin de todas las transiciones asociadas con ellas. 3. Para cada accin se realiza la vericacin de la salida de su control de accin respectivo. Las acciones que terminan su ejecucin desde la evaluacin anterior (transicin TRUE a FALSE de la salida del control de accin) son ejecutadas una vez ms. 4. Se ejecutan todas las acciones con salida TRUE en su control de accin. 5. A medida que las instrucciones en acciones se terminen, se realiza la lectura y escritura de valores de variables hacia o desde los canales fsicos de entrada. 6. Las etapas activas con transiciones asociadas que tienen condicin de transicin TRUE (que son validadas) son desactivadas y se activan las etapas siguientes a las transiciones validadas. En este punto se itera desde el paso 2. El comportamiento descrito para la evaluacin se implementa de forma fsica mediante lo denominado Mdulo Secuenciador de Etapa. ste se interpreta como un elemento tecnolgico funcional capaz de realizar la conexin entre etapas anteriores y posteriores. Su diseo se realiza mediante un biestable donde a la entrada SET se conectan mediante una funcin AND dos seales con el n de implementar las dos condiciones necesarias para la activacin de la etapa, a saber: que la etapa anterior est activa y que se produzca la validacin de la transicin previa a ella. En la entrada RESET se conecta una seal desde la etapa siguiente, esta entrada implementa la condicin de ejecucin de acciones una vez ms luego de la desactivacin de la etapa. Finalmente la nica salida del mdulo es el estado actual de activacin que se emplea como seal para las etapas siguientes, seal de desactivacin de las etapas previas y como seal de la bandera Etapa.X. En la Figura 6.60 se muestra un mdulo secuenciador y la forma de conexin para la implementacin de varias etapas.
Ti Ti+1

En.X Etapa y Transicin Previas Etapa Siguiente & En 1

En.X & En 1

En+1.X & En+1 1 En+2

En-1

Figura 6.60: Mdulo Secuenciador de Etapa

216

CAPTULO 6. ESTNDAR IEC 61131-3

6.8.5. Reglas de la Evolucin en una Red SFC


Las siguientes reglas de evolucin aseguran el correcto ujo de la informacin y el comportamiento adecuado de una red SFC [8, 9]. 1. Nunca se podr unir de forma directa dos etapas o dos transiciones, la conexin siempre debe incluir de forma alternada etapas y transiciones. 2. Si una transicin se une hacia dos o ms etapas en secuencia simultnea, las secuencias que inician en cada nueva etapa se ejecutan de forma simultnea e independiente. 3. El tiempo durante el cual se realiza la validacin de una transicin, la desactivacin de las etapas previas a ella y la activacin de sus etapas siguientes se puede considerar como instantneo. 4. No se hace necesario considerar efectos de retardo entre transiciones que se validan de forma simultnea. 5. La condicin de transicin para una etapa no se evala hasta que el efecto resultante de la activacin de la etapa sea comunicado a travs de toda la POU.

6.8.6. Otras Caractersticas No Denidas en el Estndar


Debido a la gran popularidad en implementacin de automatismos con base en SFC muchos sistemas integran en forma general algunas caractersticas adicionales no denidas dentro del estndar IEC 61131-3. El propsito de esta seccin es el de describir brevemente algunas de las caractersticas adicionales ms relevantes que se implementan [3, 9]. Dentro del conjunto de los calicadores se dene uno adicional denominado Condicional y representado por C. Este calicador ocasiona que una accin en particular requiera del cumplimiento de una condicin para ser ejecutada, esta condicin es adicional a la activacin de la etapa. La forma general para este calicador se muestra en la Figura 6.61, donde la condicin booleana es una expresin en sintaxis ST igual a las expresiones descritas para las transiciones y que dene la condicin bajo la cual se puede realizar la accin. La accin se ejecutar slo si la etapa asociada est activa y la expresin booleana para la condicin toma un valor TRUE.

T1 E1 T2 C

Condicin Booleana AccinEtapaE1

Figura 6.61: Accin con Calicador C

6.8. DIAGRAMA FUNCIONAL SECUENCIAL (SFC)

217

Otro concepto importante no denido dentro del estndar es el de MacroEtapa. Una macro-etapa es una representacin grca que permite agrupar como una sola unidad una porcin de la red SFC, facilitando de esta forma la legibilidad, mantenibilidad y reutilizacin de porciones de cdigo. La interfaz de conexin entre la macro-etapa y el resto de la red SFC se realiza mediante una etapa de entrada E y una etapa de salida S, ver Figura 6.62, las cuales enmarcan a las etapas y transiciones que se desea agrupar. Estas ltimas reciben el nombre de Expansin de la macro-etapa. La validacin de la transicin que precede a la macro-etapa ocasiona la activacin de la etapa de entrada y la activacin de la etapa de salida ser entonces una de las condiciones necesarias, ms no suciente, para la validacin de la transicin posterior a la macroetapa. En la Figura 6.62 para activar la etapa de inicio de la macro-etapa se requiere de la validacin de la transicin A y para la validacin de la transicin B debe estar activa la etapa de salida en la macro-etapa.
Etapa Inicial E10

Start A ME1 B Etapa2 C Etapa3 D Macro-Etapa

F E11 G E12 H S10 Etapa Final

Figura 6.62: Partes de una Macro-Etapa Cuando se realiza un diseo jerrquico frecuentemente se tendrn varias redes SFC que describen de forma separada funcionalidades particulares del sistema implementado. Esta situacin requiere entonces de acciones de control que permitan la interaccin controlada y sincronizada de las diferentes redes mediante la denicin de condiciones de dependencia entre ellas lo cual conlleva a establecer jerarquas entre las mismas redes. Para facilitar esta labor varios sistemas de implementacin adicionan acciones denominadas rdenes de Forzado, las cuales permiten controlar la ejecucin de un diagrama jerrquicamente inferior desde otro de orden superior. Este control se lleva a efecto mediante la modicacin del conjunto de etapas activas en la red inferior en funcin de las variables que intervienen en la activacin de las transiciones de la red de orden superior.

218

CAPTULO 6. ESTNDAR IEC 61131-3

Una orden de forzado se comporta como una accin de ndole interna con la cual la red de jerarqua inferior toma de inmediato la situacin que se impone y adems esta orden es prioritaria sobre las dems reglas de evolucin. Con el propsito de impedir ciclos indeseados se prohbe que una red forzada realice accin similar sobre su red de orden superior y adems una red slo puede ser forzada en todo instante por una sola red de orden superior. Lo anterior facilita una de las condiciones generales de una red forzada y es que sta debe permanecer en dicho estado mientras las condiciones que jaron tal situacin se sigan vericando. La sintaxis general para una orden de forzado es: F/Identicador de red a forzar:{elementos a forzar}. El formato para las etapas que se desea forzar puede tomar varias formas dependiendo de lo deseado, as por ejemplo si se desea forzar todas las etapas de una red identicada como G01 la sintaxis es F/G01:{ }, pero si se desea desactivar nicamente la evolucin conservando activa la etapa actual la sintaxis es F/G01:{*}. Si nalmente lo deseado es cambiar las etapas de la red que deben estar actualmente activas, por ejemplo a las etapas 3 y 8, entonces la sintaxis es F/G01:{3,8}. En muchas ocasiones se desea que estas rdenes de forzado duren solo un instante, caso en el cual se puede emplear el calicador impulsivo para esta accin adicionando una echa orientada a continuacin de la letra F as: F/G01:{3,8}.

6.9. Portabilidad entre los Diferentes Lenguajes


La portabilidad es la posibilidad de representar una POU descrita en un lenguaje en otro dado. Aunque debera ser posible realizar en forma general la traduccin entre lenguajes del estndar, esto no siempre es prctico, ya que una de la principales caractersticas del mismo estndar es proveer el conjunto de lenguajes de entre los cuales se debe escoger de acuerdo a la aplicacin puntual o diseo particular de POU el que mejor se acomode [1, 8, 9]. Durante el desarrollo de cada una de las secciones concernientes a los lenguajes del estndar se han presentado ejemplos de como realizar ciertas operaciones o funcionalidades en cada uno de los lenguajes, a su vez, de la comparacin entre estas formas se puede ir esbozando mtodos generalizados para realizar la traduccin, aunque est no siempre se puede realizar de forma directa como en el caso de sentencias para el control de ujo en ST hacia FBD, donde se debe recurrir a toda la experiencia y algo de ingenio para lograr de forma correcta la traduccin.

6.10. Ejemplo
Se presenta el desarrollo de un ejemplo en los cinco lenguajes del estndar IEC 61131-3. Para la implementacin del mismo se ha empleado el paquete de software CoDeSys.

6.10. EJEMPLO

219

Se implementa un sistema de control para un tanque de aguas lluvias, el cual posee tres motobombas (denominadas respectivamente M1, M2 y M3) y tres sensores de nivel, S1 para indicar nivel bajo, S2 para nivel medio y S3 para nivel alto. El control permite la activacin alternada de motobombas cada vez que el nivel ascienda a S1. Si estando una motobomba activa el nivel llega a S2 se debe activar la siguiente motobomba en la secuencia. Si estando dos motobombas activas el nivel llega a S3 se debe activar la ltima de las motobombas. Cuando el nivel baje nuevamente de S1 se deben apagar todas las motobombas activas. La siguiente ocasin que el nivel suba de S1, debe encender la motobomba que sigue en la secuencia individual.

Figura 6.63: Ejemplo en Texto Estructurado

220

CAPTULO 6. ESTNDAR IEC 61131-3

Figura 6.64: Ejemplo en Listado de Instrucciones

6.10. EJEMPLO

221

Figura 6.65: Ejemplo en Diagrama de Bloques de Funciones

222

CAPTULO 6. ESTNDAR IEC 61131-3

Figura 6.66: Ejemplo en Diagrama Escalera

6.10. EJEMPLO

223

Action Init M1:=FALSE; M2:=FALSE; M3:=FALSE; Action Step 2 M1:=TRUE; IF S2 THEN M2:=TRUE; END_IF IF S3 THEN M3:=TRUE; END_IF Action Step 3 M1:=FALSE; M2:=FALSE; M3:=FALSE; Action Step 4 M2:=TRUE; IF S2 THEN M3:=TRUE; END_IF IF S3 THEN M1:=TRUE; END_IF Action Step 5 M1:=FALSE; M2:=FALSE; M3:=FALSE; Action Step 6 M3:=TRUE; IF S2 THEN M1:=TRUE; END_IF IF S3 THEN M2:=TRUE; END_IF

Figura 6.67: Ejemplo en Diagrama Funcional Secuencial

Potrebbero piacerti anche