Traductor de Ecuaciones Logicas Secuenciales


Resumen

La parte fundamental de este trabajo consiste en el desarrollo de un programa codificado en Lenguaje C++, que realiza la traducción de ecuaciones lógicas secuenciales a códigos en lenguaje ensamblador, se aplica al control de procesos industriales. Las ecuaciones boolenas resultantes de problemas específicos son alimentadas al traductor y éste genera en forma automática archivos con extensiones "file.asm" que se aplican directamente al ensamblador, produciéndose de esta manera archivos con extensiones "file.bin", "file.obj" y "file.hex". Los archivos "file.bin" y "file.obj" se utilizan para la simulación por computadora, Con los archivos "file.hex" se programan circuitos electrónicos, tal como lo hace un PLC. Todo el trabajo de este traductor se diseñó orientado al microcontrolador INTEL 8748.

ABSTRACT
The fundamental part of this work consists in the development of a program codified in Language C++, that accomplishes The Logic Sequential Equations Translation to codes in language assembly, is applied to the control of industrial processes. The booleans equations resulting of specific problems are fed to the translator and this generates in automatic form files with extensions "file.asm" that are applied directly to the assembler, it being produced in this way files with extensions "file.bin", "file.obj" and "file.hex". The files "file.bin" and "file.obj" are used for the simulation by computer, With the files "file.hex" are programmed electronic circuits, such as the PLC does. All the work of this translator was designed guided to the chip INTEL 8748.
 

1. INTRODUCCIÓN:
Un PLC es un equipo que se utiliza en sistemas de control automático, se programa con distintos algorítmos para regular diversos procesos, funciona en base a operaciones de tipo lógico, tales como operaciones AND, OR y NOT, cuenta además con funciones tales como contadores y temporizadores [1].

Un PLC contiene; módulo de entrada, módulo de salida, memoria y CPU, por lo que no es muy diferente de una computadora, se clasifica como un sistema de uso específico.

En el mercado existe una gran variedad de PLC’S que fabrican diversas compañías, pero sin importar el fabricante, los PLC’s contienen la misma teoría básica de funcionamiento siendo su principal diferencia la forma en que se programan, así como su capacidad de entradas y salidas.
 

2. DESCRIPCIÓN DEL TRADUCTOR.
El trabajo global consiste de dos programas:
Un programa traductor de ecuaciones que se implementó utilizando el lenguaje de programación Borland C++ [2], y un programa para el microcontrolador que se implementa usando el lenguaje assembly del MCS 8748.

Para realizar la programación se parte del diagrama de flujo que se muestra en la Figura 1, representa el algoritmo que se debe implementar en el microcontrolador.

Posteriormente se codifica esta información con los mnemotécnicos que representan las instrucciones del 8748 [3], una vez que se tiene la forma general del programa en ensamblador, se procede a realizar el traductor de ecuaciones.

En resumen los pasos requeridos para diseñar los programas son:
Realizar el diagrama de flujo del algoritmo,
Codificar el diagrama de flujo en lenguaje assembly,
Simular en computadora la ejecución del microcontrolador con algún simulador [4],
Programar al microcontrolador por medio de la PC,
y pasar al impreso las ecuaciones obtenidas depositándolas en un MCS.
 

 
 

Figura 1. Diagrama de flujo para el Traductor de Ecuaciones.

2.1 Diseño Básico.
Se utilizó el Puerto 1 (P1) del 8748 como puerto de entrada, y el puerto 2 (P2) como puerto de salida, dado que los puertos son de 8 bits, se cuenta entonces con 8 diferentes señales de entrada/salida [3].

Como el puerto 1 se puede configurar para ser de entrada ó de salida, lo primero que hay que hacer es configurarlo para que sus 8 bits sean de entrada, esto se hace directamente con instrucciones del MCS 8748.

Se hace un mapa de memoria de entradas y salidas, para esto se utilizaron direcciones de la memoria RAM del MCS; para la imágen de las señales en el puerto de entrada se usaron las direcciones 10H - 17H, y para la imágen del puerto de salida las direcciones 20h - 27h.

Para hacer la tabla de imágenes de entradas y salidas se procede de la siguiente manera:

Se lee el puerto deseado, ya sea de entradas o de salidas, y el byte leído se descompone en cada uno de los bits que lo integran, guardando esos bits en las direcciones mencionadas anteriormente, ver la Tabla 1.

Ya que se tienen los bits individuales de cada estado de las salidas y las entradas, se pueden hacer las operaciones lógicas marcadas por las ecuaciones simplemente leyendo la entrada o salida correspondiente en la tabla de imágenes.

Al terminar de hacer las operaciones lógicas de la ecuaciones programadas, se actualiza la tabla de imágenes de las salidas y sigue el paso de mandar las salidas al puerto 2 del microcontrolador, por lo que se tiene que hacer una reconstrucción del byte de salida que representa la imagen de memoria.

Una vez que se realiza la reconstrucción del byte, se procede a mandarlo al puerto de salida P2, la corrida en tiempo real del programa consiste en un ciclo infinito que realiza las siguientes operaciones:

Leer los puertos de entrada y salida,
Separar los bits de cada puerto,
Hacer las operaciones indicadas en las ecuaciones,
Reconstruir el byte de salida,
Mandar la salida al puerto 2,
Repetir los pasos anteriores.
 

Tabla 1. Mapa de Memoria del PLC.
 
Imagen  Dirección 10 11 12 13 14 15 16 17
Entrada
Bit B0 B1 B2 B3 B4 B5 B6 B7
Imagen Direccion 20 21 22 23 24 25 26 27
Salidas Bit B0 B1 B2 B3 B4 B5 B6 B7
 


A continuación se presenta el programa general en ensamblador del Compilador de Ecuaciones Lógicas Secuenciales con su "encabezado", y su "cola de archivo" que siempre van en todos los programas, en la parte intermedia se depositan las operaciones lógicas como resultado del traductor.
 

ENCABEZADO DEL ARCHIVO
 
main: 

init 

inicia: 

leepts: 

ciclo: 

cpu "8048.tbl"  

hof "int8"  

org 0000h  

call inicia 

call lee_pts  

call ops  

call sal 

jmp init 

mov a,#00h 

outl p1,a 

outl p2,a 

ret 

in a,p1 

mov r0,a 

mov r1,#10h 

mov r2,#08h 

anl a,#01h 

mov @r1,a  

mov a,@r0 

ci 

clo2: 

sal: 

anl a,#01h  

mov a,r0 

rr a  

mov r0,a 

inc r1  

djnz r2,ciclo 

in a,p2 

mov r0,a  

mov r1,#20h 

mov r2,#08h  

anl a,#01h  

mov @r1,a  

mov a,r0  

rr a  

mov r0,a 

inc r1 

djnz r2,ciclo2  

ret  

mov r0,#20h 

recons: 

reco:

mov r2,a  

mov r1,#21h 

mov r5,#07h 

mov r3,#01h 

mov a,r3 

mov r4,a 

mov a,@r1 

anl a,#01h 

rl a 

djnz r4, reco 

orl a,r2 

mov r2,a 

inc r3 

inc r1 

djnz r5, recons 

mov a,r2 

outl p2,a 

ret 

ops:
;Subrutina que ejecuta las ecuaciones, donde se depositan todas las operaciones lógicas de las;ecuaciones.
ret

COLA DEL ARCHIVO

e0: equ 10h
e1: equ 11h
e2: equ 12h
e3: equ 13h
e4: equ 14h
e5: equ 15h
e6: equ 16h
e7: equ 17h
s0: equ 20h
s1: equ 21h
s2: equ 22h
s3: equ 23h
s4: equ 24h
s5: equ 25h
s6: equ 26h
s7: equ 27h

GUÍA DE USO DEL SIMULADOR
DE ECUACIONES SECUENCIALES
3.1. Las Ecuaciones Booleanas
Las ecuaciones de control que se desean implementar se escriben con cualquier editor de texto (se recomienda el editor de DOS "edit" [5], grabando el archivo en modo ASCII y usando la extensión "PLC" para la organización de los archivos de ecuaciones).

Se cuenta con 8 entradas y 8 salidas, numeradas del 0 al 7, la representación de un salida se hace con la letra "s ", seguida de un número, que es el número de la salida que se desea controlar, de igual manera, la representación de una entrada se hace con la letra "e", seguida de un número, que es el número de la entrada que se desea leer.

Para negar una condición cualquiera, se pueden usar dos símbolos indistintamente, que son: "/" ó "!".

La sintaxis de la escritura de las ecuaciones es la siguiente:

se pueden usar letras mayúsculas ó minúsculas,

se puede separar cada operación con un espacio en blanco, ó pueden ir juntas.

La ecuación siempre comienza con una salida que se desea controlar seguida del signo igual, luego se escriben todas las condiciones que apagan la salida en forma de variables que se multiplican, después se abre un paréntesis, escribiendo dentro todas las condiciones que encienden la salida como términos que se suman.

Ejemplo:

s0 = e1 * e2 * !e3 ( e4 + s0 )
s1 = !e1 * ( e2 + s0)

3.2. Ejecución del Programa Traductor
El programa traductor denominado PLC8048, es ejecutado pasándole como parámetro de entrada el nombre del archivo que se desea analizar por ejemplo;

PLC8048 "file.plc" <enter>

Si existe algún error, el programa se interrumpirá y mandará un mensaje, si no existe error de sintaxis en el archivo de las ecuaciones, el programa indicará que todo resultó bien.

Una vez que se termine la corrida del programa, se habrá generado un archivo con el mismo nombre manejado, pero con la extensión "file.asm", que es la extensión que reconoce el ensamblador "a48.exe" [6] usado para trabajar en la computadora.

3.3. Ejecución del Programa Ensamblador
Ensamblar el programa generado con el ensamblador a48.exe, como;

a48 "file.asm" <enter>

Usando el programa FSIM8048.COM se carga el programa "file.obj" generado por el ensamblador para poder observar los resultados por simulación.

4. RECOMENDACIONES GENERALES
El diseño básico utiliza el puerto 1 (P1) del 8748 como puerto de entrada y el puerto 2 (P2) como puerto de salida.

Se tienen 8 diferentes señales de entrada/salida,
se necesita un programador de microcontroladores,
una computadora personal con 640k de RAM y
el software desarrollado en este trabajo, de tal forma que el resultado obtenido es un archivo que se carga directamente sobre el circuito que funciona como un PLC.

La principal limitante que se tiene es la capacidad de memoria de programas del MCS 8748, que es de solamente 1k byte, lo cual no permite que el problema a resolver contenga un gran número de ecuaciones o que sean muy complejas, el planteamiento de los problemas no debe rebasar el número de condiciones de ocho entradas y ocho salidas, sin embargo es posible usar memoria externa para poder soporta mas ecuaciones.

Es posible substituir el 8748 por el 8749 de INTEL que trabaja bajo las mismas instrucciones y que contiene internamente 2k bytes de EPROM y 128 bytes de RAM.

El PLC resultante es de 8 bits, para hacerlo de 16 bits se pueden expandir las E/S.

5. REFERENCIAS BIBLIOGRAFICAS
[1] Cutler Hammer Corporation, Design Handbook, U.S.A., 1993.

[2] Brian W. Kernighan, Dennis M. Ritchie, El Lenguaje de Programación C, Prentice hall, México, 1991.

[3] Intel Corporation, Embedded Microcontrollers and Processors Vols, 1 and 2, intel, 1993.

[4] FSIM8048.COM

[5] Libros PC Magazine, Aprende y Practica DOS 6, Ediciones Anaya Multimedia S.A., 1993.

[6] J. Terry Godfrey, Lenguaje Ensamblador para Microcomputadoras IBM, Prentice Hall, 1991.