PROYECTO DE AUTOMATA PROGRAMABLE
DE 8 E/S
BASADO EN EL PROCESADOR PIC 16F84
Autor: Juan Manuel Rodríguez
|
|
Circuitos impresos | Fotos del PLC montado | Software |
| Instrucciones PLC | Ejemplos | Links | Home |
El sistema operativo esta disponible en formato texto con la extensión
.asm para
ser editado con el programa MPLAB de Microchip. He procurado incluir
todos
los comentarios posibles para facilitar su comprensión, de todas
formas es imprescindible
conocer los códigos ensamblador del procesador PIC16F84.
A la hora de realizar un programa PLC con el software MPLAB se utilizan
dos ficheros,
uno con el S.O. y otro con las instrucciones PLC. en este ultimo se
ha de realizar una
llamada al fichero que contiene el S.O. de forma que se compilen juntos.
Descargar el sistema operativo
OS_PLC8.asm
Descargar plantilla de programa PLC PLANTILLA.asm
Descargar ejemplo de programa PLC EJEMPLO.asm
El programa MPLAB de Microchip es un software muy completo y fácil
de usar, la forma
mas cómoda de trabajar es crear un PROYECTO para cada programa
PLC que creemos.
Es útil usar una plantilla donde tengamos ya creadas las variables
iniciales del programa PLC.
Ejecutamos el programa MPLAB y desde el menú FILE abrimos el
fichero plantilla
"base.asm", desde el mismo menú lo guardamos "Save as.." con
el nombre que mas
describa las funciones del programa. Picamos el menú "Proyect"
y creamos un nuevo
proyecto "New proyect", tecleamos el mismo nombre con el que llamamos
al fichero
del programa PLC anterior y nos aparece una ventana con el nombre del
fichero .hex
que será el que posteriormente grabemos en el PIC.
En la misma ventana "Project Files" picamos sobre el fichero que aparece
y a continuación
sobre el icono "Node propierties". Se despliega otra ventana con diferentes
parámetros,
pulsamos OK y volvemos al menú anterior. En este punto se activa
el icono "Add node",
lo picamos y añadimos al proyecto el fichero.asm del programa
PLC Ya tenemos creado
el proyecto con los dos ficheros necesarios, picamos OK y se cierran
todas las ventanas.
Podemos a continuación escribir el programa PLC y compilarlo
junto con el S.O
con los iconos:
Para ver el numero de bytes de memoria EEPROM que ocupa el programa
compilado,
desde el menú "Window" opción "Program Memory"
abrimos una ventana donde
veremos las direcciones EEPRON usadas y poder calcular el espacio libre.
Una vez compilado y libre de errores
podemos pasar a grabarlo en el PLC, para ello
conectamos el cable de comunicaciones entre el puerto paralelo de nuestro
P.C. y el
autómata, ejecutamos el programa WPicProg16 y pasamos
el interruptor del PLC
de la posición RUN a STOP/PROGRAM, se apaga el led verde intermitente
y se
activa el led rojo. La primera vez que ejecutemos este programa, comprobaremos
los ajustes del puerto paralelo, (figura
WPIC0.jpg) picamos el icono "Options >>> Hardware"
donde veremos los bits del puerto usados para cada señal de
programación. Desde el menú
"Options" elegimos "Find Port" con esto el programa entra en
comunicación con el autómata
y detecta la dirección Hexa del puerto al que esta conectado
( esquina inferior izquierda).
Desde el menú "File" abrimos el fichero.hex.que quedara visualizado
en la ventana Buffer,
seleccionamos el tipo de procesador en nuestro caso el PIC16F84 y borramos
el contenido
de la memoria del PIC con el icono "Erase". Ajustamos las casillas
"Fuses" y "Oscillator"
activando WDT (wath dog), PUT y HS.
Picando sobre el icono Write PIC volcamos el fichero.hex a la memoria
EEPROM del PIC,
activandose en el proceso el led amarillo del frontal del autómata,
si no ocurre ningún error
en el recuadro inferior derecho aparece el tiempo total de volcado
unos 4 segundos.
En cualquier momento podemos comparar el contenido de la memoria del
PIC con el
fichero.hex picando sobre el icono Verify.
Solo resta pasar el interruptor de STOP/PROGRAM a RUN ( se apaga el
led rojo y se
activa el verde en intermitencia ) y comprobamos que el programa cumple
las
especificaciones activando las entradas en la secuencia correcta.
MPLAB0.jpg 25.67 Kb |
MPLAB1.jpg 38.21 Kb |
MPLAB2.jpg 38.81 Kb |
MPLAB3.jpg 59.94 Kb |
MPLAB4.jpg 48.99 Kb |
MPLAB5.jpg 40.03 Kb |
MPLAB6.jpg 26.38 Kb |
MPLAB7.jpg 42.10 Kb |
MPLAB8.jpg 76.57 Kb |
MPLAB9.jpg 46.91 Kb |
MPLABE.jpg 84.71 Kb |
WPIC0.jpg 55.51 Kb |
WPIC1.jpg 62.21 Kb |
WPIC2.jpg 77.16 Kb |
Cuando creamos un programa PLC, es posible que cometamos algún
error de sintaxis.
Estos errores aparecerán reflejados al compilar el programa
en una ventana que mostrara
las siguientes lineas:
------------------------------------------------------------------------------------------------------------------------
building PLC1.HEX...
Compiling PLC1.ASM:
Command line: "d:\MPLAB\MPASMWIN.EXE /e+ /l+ /x- /w0 /c+ /m+ /rhex
/p16C84 /q D:\MPLAB\PIC\EJEMPLOS\PLC1.ASM"
Warning[202] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 435 : Argument out of
range. Least significant bits used.
Warning[202] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 437 : Argument out of
range. Least significant bits used.
Error[128] D:\MPLAB\PIC\EJEMPLOS\PLC1.ASM 104 : Missing
argument(s)
Error[113] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 427 : Symbol
not previously defined (DATA1)
Error[113] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 427 : Symbol
not previously defined (DATA2)
Warning[207] D:\MPLAB\PIC\EJEMPLOS\PLC1.ASM 79 : Found label after
column 1. (AMD)
Error[122] D:\MPLAB\PIC\EJEMPLOS\PLC1.ASM 79 : Illegal
opcode (E0)
MPLAB is unable to find output file "PLC1.HEX".
Build failed.
------------------------------------------------------------------------------------------------------------------------
En primer lugar nos informa si es un error grave o un aviso (Warning)
seguido de un código
que se puede consultar desde la ayuda del MPLAB.
En segundo lugar nos dice en que fichero se ha encontrado el error,
la linea de programa
en que se encuentra e información de lo que el compilador
no reconoce o no encuentra.
Haciendo doble clik con el ratón sobre el texto de error saltamos
directamente a la linea
del programa que contiene dicho fallo. Como vemos en el ejemplo superior,
se nos informa
que contienen errores tanto el fichero del sistema operativo ( OS_PLC:ASM)
como el fichero del programa plc (PLC1.ASM). Esto no es del todo real
y puede
crear al principio bastante confusión. Como ya hemos visto el
sistema operativo esta
compuesto de "MACROS" y el programa PLC de llamadas a estas macros,
por tanto
si cometemos un error de sintaxis en una llamada a una macro del S.O.
desde el programa
PLC al enlazar y compilar juntos los dos ficheros el compilador
intentara pasar los
parámetros de la llamada a la macro ( instrucción PLC)
usada en el fichero PLC
a la macro que en realidad se encuentra en el fichero del S.O. produciendose
el error en la MACRO del fichero del S.O. cuando en realidad el error
se encuentra
en los parametros del fichero del programa PLC.
Veamos en realidad donde se han cometido los errores de sintaxis:
Warning[202] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 435 : Argument out of
range. Least significant bits used.
Warning[202] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 437 : Argument out of
range. Least significant bits used.
El mensaje es que tenemos argumentos fuera de rango en las lineas 435
y 437, haciendo
doble clic en cualquiera de estas lineas saltamos a la macro del S.O
donde se producen.
432 OUT MACRO DATA1,DATA2
433 MOVWF S
434 BTFSS S,0
435 BCF DATA1,DATA2
436 BTFSC S,0
437 BSF DATA1,DATA2
438 ENDM
Lo que podemos deducir es que el error se encuentra en alguna linea
del fichero PLC
donde aparezca la instrucción OUT, revisando este fichero encontramos
la linea 93
donde se intenta direccionar el bit nº 8 del registro de salidas
S0. Dado que los registros
del plc son de 8 bits el rango de direccionamiento solo puede encontrarse
ente cero y siete.
93 OUT S0,8
Corrigiendo este despiste seleccionando el bit adecuado, el error desaparecerá
al volver a
compilar el programa. Como vemos los errores se encontraba en realidad
en el fichero PLC.
Error[113] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 427 : Symbol
not previously defined (DATA1)
Error[113] D:\MPLAB\PIC\EJEMPLOS\OS_PLC8.ASM 427 : Symbol
not previously defined (DATA2)
Estos mensages de error nos mandan a la siguiente linea 427 del
fichero OS_PLC(:ASM
424 RESET MACRO DATA1,DATA2
425 MOVWF S
426 BTFSC S,0
427 BCF DATA1,DATA2
428 ENDM
El error se encuentra dentro del la macro RESET del sistema operativo,
pero no informa
en que linea del fichero PLC se encuentra este error por lo que tendremos
que revisar
el fichero y comprobar la sintaxis de todas las llamadas a la instrucción
RESET.
Es muy útil en estos casos usar las funciones de búsqueda
que ofrece MPLAB, activando
la ventana que contenga el fichero del programa PLC y pulsando F3 se
abre la ventana
de búsqueda donde escribiremos la palabra a buscar y así
revisar todas las concurrencias
que aparezcan.
104 RESET S0.4
En la linea 104 del fichero PLC tenemos una llamada a la instrucción
RESET con un error
de sintaxis en los parámetros, en esta linea realizamos un reset
de la salida nº4 de la tarjeta
de salidas S0 pero en lugar de una coma "," hemos tecleado un
punto "." para separar los
parámetros, este despiste ha generado dos errores en la linea
427 del S.O que
desaparecerán al sustituir el punto por la coma y compilar de
nuevo el proyecto.
Error[128] D:\MPLAB\PIC\EJEMPLOS\PLC1.ASM 104 : Missing
argument(s)
Este error si nos dice en que linea del fichero PLC se encuentra, concretamente
en la 104
y al hacer doble clic en el nos manda al fichero PC donde confirmamos
el error de
sintaxis del punto y la coma explicado anteriormente. El error
se produce al faltarle un
argumento a la instrucción RESET ya que S0.4 es considerado
un solo argumento.
Warning[207] D:\MPLAB\PIC\EJEMPLOS\PLC1.ASM 79 : Found label after column
1. (AMD)
Error[122] D:\MPLAB\PIC\EJEMPLOS\PLC1.ASM 79 : Illegal
opcode (E0)
Estos errores si nos mandan directamente al fichero de programa PLC.
Picando sobe cualquiera de ellos saltamos a la linea 79 del fichero
PLC donde vemos
rápidamente que nos hemos confundido al escribir la instrucción
AND como AMD
79 AMD E0,0