Lenguajes de programación. Lenguajes Booleanas y lista de instrucciones. Diagrama de contactos. Lenguajes de Alto Nivel. Grafcet. Diseño basado en Grafcet. Gemma.
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
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.
Algunos
de estos símbolos normalizados, correspondientes a las funciones más
frecuentes, se dan en la.
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
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 ( 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 con 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
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.
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.).
Los
lenguajes gráficos, con origen en los esquemas eléctricos de relés y en los
diagramas de la electrónica digital, utilizan símbolos de contactos / bobinas
para representar las instrucciones básicas y símbolos de bloques lógicos para
las extensiones al lenguaje, que extienden su potencia hasta la de los
lenguajes literales de alto nivel. De esta forma permiten estructuras de
programación tan complejas como aquellos, sin perder por ello la facilidad de
comprensión y visión de conjunto que ofrece siempre la representación gráfica.
Así
la automatización de procesos comunes ( mando de máquinas, cadenas de
producción, etc.) puede hacerse con diagramas de contactos o con listas de
instrucciones, los dos lenguajes básicos para la mayoría de autómatas. De
hecho, es tan frecuente el uso de uno u otro, que muchos fabricantes ya prevén
en su software de programación sobre PC la posibilidad de transcodificación
entre ellos, con operaciones sencillas de compilación / decompilación. De esta
forma, el usuario puede trabajar con el lenguaje que prefiera y compilarlo, si
fuera necesario, al que entiende su autómata.
Para
mandos complejos que necesiten realizar cálculos, manipular largas cadenas de
caracteres o utilizar subrutinas o bloques de programación manufacturado (
mando de ejes, regulación PID, etc. ) puede ser necesario utilizar lenguajes
literales de alto nivel, que permiten también, no se olvide, programar
sentencias booleanas sencillas o manejar temporizadores y contadores como
listas de instrucciones.
Utilizados
originalmente de forma independiente unos de otros, la tendencia actual de los
fabricantes pasa por la integración de las diferentes formas en un único
lenguaje mixto, que combine la claridad de los lenguajes gráficos para las
funciones combinacionales y secuenciales, con la potencia y compacidad de los
literales para el cálculo matemático y los tratamientos de textos.
Para
ello se siguen los siguientes pasos:
-
Potenciar los lenguajes gráficos permitiendo el uso de estructuras de
programación avanzada ( GRAFCET y aumentando las instrucciones de expansión
disponibles.
-
Permitir la utilización de lenguajes literales dentro de un programa gráfico,
bien incluyéndolos como líneas de instrucción dentro del programa, bien
editandolos como subrutinas de libre acceso desde él.
-
Desarrollar herramientas de edición que permitan al usuario de definir sus
propias sentencias, que podrá almacenar como bloques de expansión dentro de la
librería disponible.
En
genera, y como conclusión se espera una evolución de los lenguajes gráficos
haciéndolos más potentes, más abiertos y más sencillos de manejar por el
usuario, que, cada vez en mayor medida, podrá desarrollar sus aplicaciones
sobre terminales de uso general tipo PC.
Bibliografía utilizada:
www.lafacu.com