logotipo

img_google
SISTEMA OPERATIVO

 PROYECTO DE AUTOMATA PROGRAMABLE  DE 8 E/S
        BASADO EN EL PROCESADOR PIC 16F84

Autor: Juan Manuel Rodríguez


Esquemas
Circuitos impresos Fotos del PLC montado Software
Instrucciones PLC Ejemplos Links  Home
Sistema Operativo OS
El sistema operativo en realidad es muy sencillo, tan solo incluye las instrucciones que
inicializan los registros del procesador, puerto A, puerro B, temporizador TMR0,
vectores de interrupción, rutina que gestiona las entradas/salidas y la rutina de gestión
de pilas, el resto son macros que se utilizan como instrucciones PLC.
Una de las muchas ventajas de las MACROS del ensamblador, es que solo se compilan e
incluyen dentro del código del programa si son usadas en el programa PLC, si no usamos
por ejemplo los contadores, estos aunque formen parte del sistema operativo no serán
incluidos en la compilación del programa del autómata reduciendo el uso de memoria.
Esto posibilita el diseño de un sistema operativo muy compacto, dado que la capacidad de
memoria EEPROM del procesador PIC16F84 esta limitada a 1024 bytes, el S.O ha de
ocupar el menor espacio posible.
El sistema operativo utiliza un 15% de la memoria del procesador concretamente 155 bytes
quedando el resto para las instrucciones del programa PLC un total de 869 bytes libres.


 
 

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
MPLAB0.jpg
25.67 Kb
MPLAB1.jpg
MPLAB1.jpg
38.21 Kb 
MPLAB2.jpg
MPLAB2.jpg
38.81 Kb 
MPLAB3.jpg
MPLAB3.jpg
59.94 Kb 
MPLAB4.jpg
MPLAB4.jpg
48.99 Kb 
MPLAB5.jpg
MPLAB5.jpg
40.03 Kb 
MPLAB6.jpg
MPLAB6.jpg
26.38 Kb 
MPLAB7.jpg
MPLAB7.jpg
42.10 Kb 
MPLAB8.jpg
MPLAB8.jpg
76.57 Kb 
MPLAB9.jpg
MPLAB9.jpg
46.91 Kb 
MPLABE.jpg
MPLABE.jpg
84.71 Kb 
WPIC0.jpg
WPIC0.jpg
55.51 Kb 
WPIC1.jpg
WPIC1.jpg
62.21 Kb 
WPIC2.jpg
WPIC2.jpg
77.16 Kb 

Ir al principio

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
 

Ir al principio