Trabajo
sobre
Lenguajes
de
Programación
de
Autómatas
Programables.
Índice
1.- Lenguajes de programación.
1.1.- Lenguajes
Booleanas y lista de instrucciones.
1.2.- Diagrama de contactos.
1.3.- Plano de funciones.
1.4.- Lenguajes de Alto Nivel.
1.5.- Grafcet.
1.5.1.- Resumen histórico.
1.5.2.- Diseño basado en Grafcet.
1.5.3.- Gemma.
2.- Resumen.
1.- Lenguajes de programación.
Se ha descrito el programa como el conjunto
de instrucciones, ordenes y símbolos reconocibles por el autómata a través de
su unidad de programación, que le permiten ejecutar la secuencia de control
deseada. Al conjunto total de estas instrucciones, ordenes y símbolos que están
disponibles se le llama lenguaje de programación del autómata.
Seria deseable que la misma simbología
utilizada para representar el sistema de control pudiera emplearse para
programar el autómata: el ahorro de tiempo y documentación y la seguridad en el
programa obtenido serían considerables.
Sin embargo, esta solución no es siempre
posible: El lenguaje depende del autómata empleado y de su fabricante, que
decide el tipo de unidad de programación
( literal,
gráfica ) y el interprete ( firmware ) que utiliza su máquina, mientras que el
modelo de representación depende del usuario, que lo elige según sus
necesidades o conocimientos.
Pese a ello, los lenguajes de programación de
autómatas intentan ser lo más parecidos posibles a los modelos de presentación
usuales. Los lenguajes pueden ser:
- Algebraicos.
- Lenguajes booleanos.
- Lenguajes de instrucciones.
- Lenguajes de alto nivel.
- Gráficos.
- Diagrama de contactos.
- Diagrama de funciones - bloques.
- Grafcet.
Si la representación elegida para el sistema
de control es comprensible por la unidad de programación, no será necesario
realizar ninguna codificación, al aceptar ésta los símbolos utilizados. En caso
contrario, habrá que traducirla a un programa, según uno de los
anteriores lenguajes.
El programa obtenido está formado por un
conjunto de instrucciones, sentencias, bloques funcionales y grafismo que
indican las operaciones a realizar sucesivamente por el PLC.
La instrucción representa la tarea más
elemental de un programa: leer una entrada, realizar una operación AND, activar
una salida, etc.
La sentencia representa el mínimo conjunto de
instrucciones que definen una tarea completa: encontrar el valor de una función
lógica combinación de varias variables, consultar un conjunto de condiciones y,
si son ciertas, activar un temporizador, etc.
El bloque funcional es el conjunto de
instrucciones o sentencias que realizan una tarea o función compleja:
contadores, registros de desplazamientos, transferencias de información, etc.
Todos estos elementos están relacionados
entre sí mediante los símbolos o grafismos ( algebraicos o gráficos ) definidos
en el lenguaje empleado.
La figura 10.11 muestra la estructura de una
instrucción típica en diferentes lenguajes de programación.
En general, las instrucciones pueden ser de
distintos tipos: lógicas, aritméticas, de transferencias, etc., que adoptan
diferentes formas de representación según el lenguaje empleado.
En algunos autómatas, el programa necesita
para su correcta ejecución de una tabla de parámetros, introducida también
desde la unidad de programación, que define el entorno de funcionamiento de la
máquina:
- uso o no de entradas de reset o stop,
- capacidad de la memoria de usuario empleada,
- conexión o no en red local,
- variables internas a mantener contra pérdidas de tensión, etc.
La tabla de parámetros es especifica para
cada programa y es grabada con el mismo cuando se transfiere al autómata.
1.1.- Lenguajes Booleanos y Lista
de Instrucciones.
El lenguaje booleano esta constituido por un
conjunto de instrucciones que son transcripción literal de las funciones
del álgebra de Boole, a saber:
- OR función suma lógica.
- AND función producto lógico.
- LOD leer variable inicial.
- OUT enviar resultado a salida.
- OR LOD coloca bloque en paralelo
- AND LOD coloca bloque en serie.
En una operación normal el autómata utiliza
algunas otras instrucciones del lenguaje booleano que le permiten manejar
elemento de común automatización y que son las siguientes instrucciones
secuenciales:
- TIM definir un temporizador.
- CNT definir un contador.
- SET activar una variable binaria ( unidad
de memoria )
- RST desactivar una variable binaria.
También existe otros tipos de instrucciones
como las siguientes:
- DD sumar.
- BB restar.
- MUL multiplicar.
- DIV Dividir.
- CMP comparar variables digitales.
- FR rotaciones de bits ( variables de
binarias ).
- HIFT rotaciones de palabras ( variables
digitales ).
- MOV transferencias de datos.
- CD / BIN conversiones de códigos numéricos,
etc.
- END fin de programa.
- JMP salto de bloque de programa.
- MCS habilitación de bloque de programa.
- JMPSUB salto a subrutina, etc.
Al lenguaje restante que no puede llamarse ya
booleano después de ampliarlo con estas extensiones se le denomina de lista de
instrucciones ( “ Instruction List “ ).
Algunos fabricantes amplían las capacidades
de programación de sus autómatas de gama baja con estas instrucciones avanzadas
que serian de más lógica aplicación en autómatas de superiores prestaciones. El
tiempo de ejecución resultante ( tiempo de
“ scan “ )
sobre CPU básicas desaconseja su empleo en la mayoría de las ocasiones.
1.2.- Diagrama de contactos.
El lenguaje de contactos expresa las
relaciones entre señales binarias como una sucesión de contactos en serie y en
paralelo según las equivalencias que se muestran en la tabla 10.6.
Adoptado por muchos fabricantes de autómatas
( norteamericanos y japoneses, principalmente ) como lenguaje base de
programación, el diagrama de contactos (
“ Ladder
Diagram “ ) puede ser introducido directamente en la unidad de programación
mediante un editor de símbolos gráficos. Normalmente este editor incluye
restricciones en cuanto al numero de contactos o bobinas a representar en cada
línea, la ubicación de los mismos, la forma de las conexiones, etc.
Siendo los contactos de relés componentes de
dos estados, asignados a los valores lógicos:
0: contacto abierto.
1: Contactos cerrado.
las equivalencias de la tabla 10.6 permiten
definir sobre ellos un álgebra de Boole, denominada usualmente álgebra de
contactos.
Esto significa que cualquier función lógica
puede ser transcrita directa e inmediatamente a diagrama de contactos y
viceversa, transcripciones de utilidad cuando se trata de visualizar
gráficamente un programa escrito en lenguaje booleano.
Sin embargo el diagrama de contactos de
origen norteamericano no nació como una posible herramienta de visualización de
programa ya escritos en lista de instrucciones, sino como transcripción directa
de los esquemas eléctricos de relés ( circuitos de mando) de uso común en la
automatización previa a la aparición de los sistemas programables.
Por esta razón, los diagramas de contactos
incluyen desde sus orígenes bloques funcionales que ya aparecían como elementos
propios en aquellos esquemas, los temporizadores y los contadores.
Utilizando estos bloques sobre los cuales
pueden definirse la base de lo tiempos y el tiempo final en el caso de
temporizadores y el módulo de contaje y condiciones de paro y reset en el caso
de contadores, el lenguaje de contactos permite programar directamente
cualquier esquema eléctrico de reles.
Sin embargo, y al igual que ocurría en los
lenguajes Booleanos, también en este se desarrollan bloques funcionales
complejos que permiten la manipulación de datos y las operaciones con variables
digitales de varios bits.
La presencia de estos bloques de ejecución
dependiente de una más condiciones
binarias, multiplica la potencia de programación sin dejar de mantener
las ventajas de la representación gráfica del programa. Así, pueden programarse
situaciones de automatización compleja que involucren variables digitales,
registros, transferencias, comparaciones, señales analógicas, etc.
Por supuesto, y al igual que ocurre con las
extensiones al lenguaje booleano, no todos los autómatas, aun del mismo
fabricante, pueden manejar todas las posibilidades de programación con
contactos: solo las gamas más altas acceden a la totalidad de extensiones del
lenguaje.
1.3.- Plano de funciones.
El diagrama
lógico o plano de funciones es la representación de las tareas de
automatización utilizando los símbolos contenidos en las normas DIN 40700 y DIN
40719, cuya forma general se presenta en la figura 10.14.
Algunos de estos símbolos normalizados,
correspondientes a las funciones más frecuentes, se dan en la figura 10.15:
La programación por diagramas lógicos, que
deriva de la representación por logigrama habitual entre los técnicos en
electrónica digital, incluye como bloques normalizados algunas funciones
secuenciales típicas en automatización como temporizadores y contadores, e
incluso algunos bloques combinacionales y de tratamiento numéricos, como
multiplexores, demultiplexores, sumadores, multiplicadores, etc., pero no
alcanza la multitud de funciones que han ido añadiéndose a las listas de
instrucciones y diagramas de contactos, como extensiones a estos lenguajes.
Por esta razón, y en sentido estricto, la
programación por diagramas lógicos queda reservada a aplicaciones en las que
solo intervengan variables booleanas todo - nada, y algunos bloques
secuenciales elementales: temporizadores, contadores, registros de
desplazamiento, etc.
Esta circunstancia, unida al desconocimiento
del diagrama lógico por parte del usuario habitual del autómata, explica la
baja difusión de estos lenguajes de programación.
La figura 10.16 muestra un ejemplo de
programación con plano de funciones, comparado con el mismo programa en
diagrama de contactos según los lenguajes gráficos STEP 5 de Siemens. Dada la
existencia, antes comentada, de bloques normalizados para todas las posibles
operaciones del autómata, los fabricantes han optado por permitir el uso en sus
consolas gráficas el uso de los bloques de extensión definidos en el diagrama
de contactos, aun trabajando bajo el entorno de diagrama lógico: el lenguaje
resultante resulta un grupo que recoge toda la potencia de programación del
autómata y en el que el usuario puede elegir la forma de representación que
prefiera para las representaciones básicas ( AND, OR, NOT, etc. ).
Algunas unidades de programación basadas en
ordenador ( especifico de cada fabricante o PC de uso general) permiten al
usuario definir sus propios bloques lógicos a partir de los preexistentes
incorporando nuevas funciones ( macrobloques ) que pueden ser incorporadas al
lenguaje.
1.4.- Lenguajes de Alto Nivel.
Con CPU´s cada vez más rápidas, más potentes
y de mayor capacidad de tratamiento, los autómatas de gamas altas invaden
aplicaciones hasta hace bien poco reservadas a los miniordenadores
industriales.
Para estas aplicaciones, los lenguajes
tradicionales en lista de instrucciones ( IL ) o diagrama de contacto ( LD )
resultan ya insuficientes, aun mejorados con las expansiones comentadas en
apartados anteriores.
Por esta razón, los fabricantes han
desarrollado lenguajes de programación próximos a la informática tradicional,
con sentencias literales que equivalen a secuencias completas de programación:
son lenguajes de alto nivel.
En ellos las instrucciones son líneas de
texto que utilizan palabras o símbolos reservados ( SET, AND, FOR, etc. ) Las
operaciones se definen por los símbolos matemáticos habituales ( +, *, <,
etc.), y se dispone de funciones trigonométricas, logarítmicas y de
manipulación de variables complejas (
Cos, pi, real, img, ....).
Sin embargo, lo que distingue realmente estos
lenguajes avanzados de las listas de instrucciones ampliadas son las tres
características siguientes:
- Son lenguajes estructurados, donde es posible la programación
por bloques o “ procedimientos” , con definición de variables locales o
globales,
- Incluyen estructuras de cálculo repetitivo y condicional ( figura
10.18 ) tales como:
- FOR ... TO
- REPEAT ... UNTIL X
- WHILE X...
- IF ... THEN ...ELSE
- disponen de instrucciones de manipulación de cadenas de
caracteres, muy útiles en aplicaciones de gestión, estadística, etc.
Dada su facilidad de manejo y su difusión a
todos los niveles, el BASIC, convenientemente adaptado a las aplicaciones del
autómata, se configura como el lenguaje de alto nivel más extendido. Sin
embargo, también se pueden encontrar intérpretes o compiladores de C, PASCAL,
FORTRAN, etc., lo que permite resolver tareas de cálculo científico en alta
resolución, clasificaciones de datos, estadísticas, etc., con total facilidad,
y con acceso además a módulos y
subrutinas específicos ya escritos en estos lenguajes y de uso general en
aplicaciones informáticas.
Dado lo especifico de su aplicación un
programas escrito en alto nivel necesita para su edición de una unidad de
programación avanzada o de un software de desarrollo de programas que corra
sobre PC.
Adicionalmente, es frecuente que el empleo de
estos lenguajes estructurados obligue además a utilizar no solo una unidad de
programación tipo PC, sino incluso una CPU especial en el autómata (
coprocesadora ), capaz de interpretar y ejecutar las nuevas instrucciones.
En cualquier caso, los lenguajes de alto
nivel son posibilidades adicionales al alcance del programador, que puede si así lo desea, utilizar solo las formas
básicas de contactos / bloques o lista de instrucciones para escribir sus
aplicaciones: en otras palabras, los lenguajes avanzados nuca constituyen el
lenguaje básico de un autómata o familia de autómatas, papel que queda
reservado a la lista de instrucciones o al diagrama de contactos.
La figura 10.19 muestra un ejemplo de
programación con este lenguaje. Como se observa, una ventaja adicional del
programa en alto nivel es que a él se puede transcribir, casi literalmente el
diagrama de flujos que constituye la primera aproximación a la representación
del sistema de control. Esta ventaja, que evita pasar a algún otro modelo o transcribir
este inicial a otro lenguaje, supone sin duda un importante ahorro de tiempo en
la puesta en marcha de la aplicación.
1.5.- Grafcet.
1.5.1.- Resumen Histórico.
El grafcet nació como resultado de los trabajos de la AFCET, iniciados
en la década de los sesenta. Su significado es el de GRÁfico Funcional de
Control de Etapas y Transiciones ).
En
principio se pretendía satisfacer la necesidad de disponer de un método de
descripción de procesos, con total independencia de la tecnología, mediante un
gráfico funcional que pudiera ser interpretado por no especialistas en automatización. El gráfico funcional permite
la forma de descripción del proceso para técnicos de distintos campos, desde el
ingeniero de organización o de producción, que define las necesidades del
automatismo, pasando por el de diseño, que debe implementar el sistema de
control y los accionamientos, hasta el técnico de mantenimiento, que debe
cuidar de su funcionamiento o introducir modificaciones en la fase de explotación.
A partir de 1977 y gracias a la colaboración
entre AFCET y ADEPA se crearon una
serie de útiles metodológicos entre los que destaca el GEMMA para apoyar el
GRAFCET como método no solo descriptivo, sino como herramienta de diseño.
En 1982 el trabajo fue recogido por un grupo
de trabajo de AFNOR, organismo encargado de la normalización en Francia,
compuesto por miembros de UTE, CNOMO, UNM y de otros organismos relacionados
con la industria de la automatización y la enseñanza culminado con la publicación
de la Norma NF C03-1904.
En la actualidad, diversos autómatas
programables incorporan algunas instrucciones de programación que permiten
introducir directamente el grafo de GRAFCET. En otros casos se dispone de
software capaz de compilar un grafo GRAFCET al lenguaje de la máquina,
permitiendo en ambos una gran flexibilidad y rapidez de diseño con ventajas
sustanciales en las fases de verificación, explotación o eventual modificación
del automatismo. A pesar de ello no debe confundirse el GRAFCET con un lenguaje
de programación.
El gráfico funcional complementado con los
métodos del álgebra de Boole, permite ir más allá de la simple descripción e
interpretación gráfica de un proceso y
se ha convertido en una potente herramienta de diseño de sistemas lógicos, con
unas reglas bastantes simples.
1.5.2.- Diseño basado en GRAFCET.
Los principios que inspiraron la creación del GRAFCET y en los que se
basa su aplicación son los siguientes:
a) debe caracterizarse el funcionamiento del
automatismo con total independencia de los componentes con los que vaya a ser
construido.
b) el conjunto de un sistema automático se
divide en dos partes: parte de control ( PC ) y parte operativa ( PO ). La
parte de control comprende todo aquello que contribuye a la automatización del
proceso.
c) El elemento fundamental de un proceso es
la “ operación” ( denominada etapa en
el lenguaje de GRAFCET ), entendiendo como tal una acción realizada por el
automatismo.
d) Debe dividirse el proceso en macroetapas y
estas en etapas más elementales, hasta
conseguir que las acciones a realizar en cada una de ellas dependan solo de relaciones combinacionales entre entrada y
salidas. Cada una de estas etapas elementales tendrá asociada una variable de
estado.
e) Establecer un gráfico de evolución que
indique la secuencia de operaciones
secuencia de etapas y las
condiciones lógicas para pasar de una a otra ( denominadas condiciones de
transición en el lenguaje de GRAFCET ). Como resultado de esta fase se obtienen
las ecuaciones lógicas de las variables de estado y, por tanto, queda resuelta
la parte secuencial del automatismo.
f)
Establecer para cada operación elemental ( etapa ) las relaciones lógicas entre
entradas y salidas, utilizando eventualmente otras variables internas combinacionales.
g)
Finalmente, implementar el sistema utilizando tantos biestables como variables
de estado y cableando o programando las relaciones lógicas obtenidas en las
fases e y f.
A
continuación le expongo algunos equivalentes en GRAFCET de algunos bucles
1.5.3.- Gemma
He insistido varias veces en que el desarrollo y explotación de
sistemas automáticos de producción requiere el empleo de útiles metódicos, con
un vocabulario preciso y una aproximación sistemática y guiada donde se
reflejen punto por punto los procedimientos a emplear a modo de un “ check list
“.
En lo que se refiere al GRAFCET es un útil
adecuado para ello, pero es preciso partir de unas especificaciones precisas y
prever posibles condiciones anómalas. En otras palabras, las especificaciones
son la “ materia prima “ a partir de la cual construimos un proyecto. Unas
especificaciones incorrectas o incompletas nos llevaran a un resultado final
incorrecto. Es necesario, pues, un útil previo que nos permita generar unas
especificaciones correcta, asegurando que no dejan situaciones imprevistas y no
dejan situaciones imprevistas y no contienen incoherencias.
Uno de los intentos de creación de dicho útil
ha sido llevado a cabo por un equipo de investigación impulsado en Francia por
ADEPA y ha dado como resultado la creación del GEMMA. El GEMMA es un método
para el estudio de las posibles situaciones de marcha y parada en que puede
encontrarse la parte operativa ( PO )
de un proceso y las formas de evolucionar de unas a otras. Para ello se
apoya en un útil gráfico que representa una serie de estados tipificados de la
POR y muestra las posibles formas de evolución de unos a otros.
2.- Resumen.
Programar un autómata consiste en
introducirle una secuencia de órdenes
(
instrucciones ) obtenidas desde un modelo de control, según una codificación
determinada ( lenguaje ) que por su forma puede ser:
- literal o de textos,
- gráfica, o de símbolos.
Cada instrucción del programa consta dos
partes: el código de operación, que define qué se debe hacer y código o códigos
de los operandos (generalmente identificados por su disposición ), que indican las constantes o variables con las que
se debe operar. Los lenguajes literales están formados por secuencias de textos
agrupados en instrucciones u ordenes elementales del programa.
Según la complejidad del lenguaje están
disponibles instrucciones desde sencillas funciones booleanas ( AND, OR, etc. )
hasta estructuras complejas de programación en alto nivel ( FOR NEXT, WHILE,
ETC. ), pasando por instrucciones de acceso a bloques secuenciales ( TIM, CNT,
etc. ) y de manipulación de texto y valores numéricos ( ADD,MOV, MUL, etc.).