Vous êtes sur la page 1sur 149

Instituto Superior Politcnico Jos Antonio Echeverra

CUJAE

CONTROLADOR L !ICO PRO!RA"A#LE #ASADO EN $ARD%ARE &&&


"ai'el Ra(re) Despaine

La $a*ana+ ,-.,

Tesis /e "aestra

Pgina Legal

Controlador lgico programable basado en hardware reconfigurable. La Habana : Instituto Superior Politcnico os !ntonio "che#err$a %C& !"'( )*+). ,esis %-aestr$a'. Dewey: **. / Programacin. programas. datos de computadores. Registro No.: -aestria++01 C& !". (cc) -ai2el 3am$re4 5espaine( )*+). Licencia: Creative Commons de tipo Reconocimiento, Sin Obra Derivada. En acceso perpetuo: http://www.e-libro.com/titulos

Instituto Superior Politcnico Jos Antonio Echeverra

MAESTRA EN SISTEMAS DIGITALES 6TA EDICIN

Universidad de las Ciencias Informticas (UCI)

Controlador Lgico Programable basado en hardware reconfigurable


Autor: Ing. Maikel Ramrez Despaine

Tutores:

Dr. Valery Moreno Vega. Dr. Alejandro Cabrera Sarmientos

La Habana, Cuba 2011

Resumen En esta tesis de maestra se desarroll un controlador lgico programable basado en hardware reconfigurable con las funcionalidades necesarias en el control industrial actual, con ncleo de procesamiento el procesador softcore embebido Microblaze. Los diseos hardware y software del controlador se implementaron en la tarjeta Spartan 3e, utilizando las herramientas ISE 12.1 y EDK 12.1 de la empresa Xilinx. Tambin se implement la herramienta para programar el controlador lgico programable mediante lenguaje escalera.

ndice Introduccin .....................................................................................................................9 Captulo 1. Fundamentacin Terica.............................................................................13 1.1. 1.2. 1.3. Introduccin al controlador lgico programable...............................................13 Hardware reconfigurable en el control industrial .............................................16 Estudios relacionados sobre los controladores lgicos programables basados

en hardware reconfigurable .......................................................................................20 1.4. Conclusiones parciales ...................................................................................21

Captulo 2. Descripcin de las funcionalidades generales y requisitos de diseo necesarios .....................................................................................................................22 2.1. Unidades de entrada/Salida ............................................................................22

2.1.1. Entradas/Salidas digitales..........................................................................22 2.1.2. Interfaces A/D y D/A ..................................................................................23 2.1.2.1. Representacin de los datos analgicos de entrada...........................25 2.1.2.2. Representacin de los datos analgicos de salida..............................26 2.2. 2.3. 2.4. 2.5. 2.6. Temporizadores ..............................................................................................27 Contadores......................................................................................................28 Mdulo PID .....................................................................................................28 Protocolo Modbus RTU ...................................................................................30 Conclusiones parciales ...................................................................................32

Captulo 3: Implementacin del controlador lgico programable basado en hardware reconfigurable................................................................................................................33 Introduccin ...................................................................................................................33 3.1. Circuitos reconfigurables. FPGAs ...................................................................33

3.1.1. La FPGA XC3S500E .................................................................................35 3.2. 3.3. 3.4. Kit de desarrollo Spartan 3e............................................................................35 Entorno de desarrollo ISE 12.1 .......................................................................36 Procesador Microblaze como ncleo de procesamiento del PLC basado en

hardware reconfigurable ............................................................................................37 3.5. Bus PLB ..........................................................................................................39

3.5.1. Caractersticas ...........................................................................................39 3.6. Entorno de desarrollo EDK..............................................................................40

3.6.1. Herramientas de EDK ................................................................................40 3.6.2. Ficheros de EDK........................................................................................41 3.6.3. Fases de desarrollo de un sistema empotrado ..........................................41 3.6.4. Xilinx Platform Studio.................................................................................42 3.6.4.1. Inicio de proyectos en XPS .................................................................44 3.7. Introduccin al controlador lgico programable basado en hardware

reconfigurable ............................................................................................................45 3.8. Implementacin en VHDL de funcionalidades del controlador lgico

programable basado en hardware reconfigurable......................................................46 3.8.1. Mdulo de entradas digitales (mdulo_in.vhd) ..........................................46 3.8.2. Mdulo de salidas digitales (mdulo_out.vhd) ...........................................47 3.8.3. Contador Ascendente (CTU.vhd)...............................................................47 3.8.4. Contador descendente (CTD.vhd) .............................................................48 3.8.5. Contador ascendente/descendente (CTUD.vhd) .......................................49 3.8.6. Timer con retardo a la conexin (TON.vhd)...............................................50 3.8.7. Timer con retardo a la desconexin (TOFF.vhd) .......................................51 3.8.8. Temporizador de eventos (Temporizador.vhd) ..........................................52

3.9.

Mdulos IP de funcionalidades del controlador lgico programable basado en

hardware reconfigurable ............................................................................................53 3.9.1. Mdulo IP de las entradas digitales ...........................................................55 3.9.1.1. Crear IP ..............................................................................................55 3.9.1.2. Importar IP...........................................................................................63 3.9.2. Mdulo IP del contador ascendente...........................................................64 3.9.2.1. Crear IP ...............................................................................................64 3.9.2.2. Importar IP...........................................................................................70 3.9.3. Mdulo IP del timer con retardo a la conexin ...........................................71 3.9.3.1. Crear IP ...............................................................................................71 3.9.3.2. Importar IP...........................................................................................73 3.9.4. Mdulo IP del temporizador de eventos.....................................................74 3.9.4.1. Crear IP ...............................................................................................74 3.9.4.2. Importar IP...........................................................................................75 3.10. Flujo de diseo Hardware/Software del controlador lgico programable

basado en hardware reconfigurable...........................................................................75 3.10.1. Flujo de diseo hardware .......................................................................76

3.10.1.1. Puerto serie (Uart Lite) ......................................................................79 3.10.1.1.1. Registros del UART Lite..............................................................79 3.10.1.1.2. Interrupciones .............................................................................80 3.10.1.2. Controlador de interrupciones ...........................................................80 3.10.1.3. LCD ...................................................................................................80 3.10.1.4. Conversin A/D y D/A........................................................................80 3.10.1.4.1. BUS SPI......................................................................................80 3.10.1.4.2. Conversin A/D ...........................................................................81 3.10.1.4.2.1.Pre-amplificador programable .................................................83

3.10.1.4.2.2.Conversor A/D .........................................................................84 3.10.1.4.3. Conversin D/A ...........................................................................85 3.10.1.4.4. Mdulo SPI de la herramienta EDK ............................................87 3.10.1.4.4.1.Configuracin del mdulo SPI .................................................88 3.10.1.4.4.2.Registros del mdulo SPI ........................................................89 3.10.1.4.5. Manejo de los conversores A/D y D/A con el mdulo SPI...........90 3.10.1.5. Implementacin del diseo hardware ................................................91 3.10.2. Flujo de diseo software.........................................................................91

3.10.2.1. Libreras de los mdulos IPs .............................................................92 3.10.2.1.1. Controlador de interrupciones .....................................................93 3.10.2.1.2. Puerto serie.................................................................................93 3.10.2.1.3. XGPIO.........................................................................................94 3.10.2.1.4. Contador ascendente (contador_up)...........................................94 3.10.2.1.5. Contador descendente (contador_down) ....................................95 3.10.2.1.6. Contador ascendente/descendente (contador_up_down)...........95 3.10.2.1.7. Timer con retardo a la conexin (timer_on_delay) ......................96 3.10.2.1.8. Timer con retardo a la desconexin (timer_off_delay) ................96 3.10.2.1.9. Temporizador de eventos (timer) ................................................97 3.10.2.2. Libreras de usuario ...........................................................................97 3.10.2.2.1. Modbus.h ....................................................................................97 3.10.2.2.2. Lcd.h ...........................................................................................98 3.10.2.2.3. Spi.h............................................................................................98 3.10.2.2.4. Interrupciones.h ..........................................................................99 3.10.2.3. Libreras de instrucciones del PLC ....................................................99 3.10.2.3.1. Matemtica.h...............................................................................99

3.10.2.3.2. Manipulacin.h ..........................................................................100 3.10.2.3.3. Bit.h...........................................................................................100 3.10.2.3.4. Comparacin.h..........................................................................100 3.10.2.3.5. PID.h .........................................................................................100 3.11. Conclusiones parciales..............................................................................101

Captulo 4: Herramienta para programar el controlador lgico programable basado en hardware reconfigurable mediante lenguaje escalera......................................................102 4.1. Introduccin a los lenguajes de programacin de PLC......................................102 Clasificacin de los lenguajes de programacin para PLC...........................102

4.1.1. 4.2.

Caractersticas de los lenguajes de programacin de PLC...........................103

4.2.1. Listado de Instrucciones (LI)....................................................................103 4.2.2. Texto Estructurado (ST)...........................................................................103 4.2.3. Esquema Bsico de Funciones (FBD) .....................................................103 4.2.4. Esquema de Contactos (LD)....................................................................104 4.2.5. Esquema Secuencial de Funciones (SFC) ..............................................104 4.3. Proceso de compilacin ................................................................................104

4.3.1. Anlisis lexicolgico .................................................................................105 4.3.2. Anlisis sintctico.....................................................................................106 4.3.3. Anlisis semntico ...................................................................................106 4.3.4. Generacin de cdigo intermedio ............................................................107 4.3.5. Optimizacin del cdigo intermedio .........................................................107 4.3.6. Generacin del cdigo objeto ..................................................................108 4.3.7. Gestin de informacin de errores...........................................................108 4.4. Metodologa y Herramientas de desarrollo....................................................108

4.4.1. Programacin Extrema (XP) ....................................................................108

4.4.2. C++ como lenguaje de programacin ......................................................110 4.4.3. Qt v4.6.1 ..................................................................................................111 4.5. Caractersticas de la herramienta .................................................................111

4.5.1. Requerimientos de la herramienta ...........................................................111 4.5.1.1. Requerimientos funcionales ..............................................................111 4.5.1.2. Requerimientos no funcionales .........................................................112 4.5.1.2.1. Requerimientos de Usabilidad ....................................................112 4.5.1.2.2. Requerimientos de Soporte ........................................................113 4.5.1.2.3. Requerimientos de portabilidad y operatividad ...........................113 4.5.1.2.4. Requerimientos de Hardware del Sistema..................................113 4.5.1.2.5. Requerimientos de Software del Sistema ...................................113 4.6. 4.7. 4.8. Actores del sistema .......................................................................................113 Historias de usuario.......................................................................................113 Descripcin de la herramienta.......................................................................118

Conclusiones generales ..............................................................................................122 Recomendaciones.......................................................................................................124 Bibliografa ..................................................................................................................125 Anexos ........................................................................................................................127

Introduccin Nuestro pas impulsa el desarrollo de equipos de fabricacin nacional para reducir la importacin y propugnar la independencia tecnolgica como elemento indispensable para el desarrollo econmico y tecnolgico de la sociedad. Los controladores lgicos programables son componentes indispensables en los sistemas de automatizacin. En Cuba se han desarrollados algunos autmatas programables como el Nova creado por el ICID y el ErosPLC del grupo de Serconi, ambos basados en microcontroladores. Existe en el mundo un auge creciente del uso del hardware reconfigurable en el control industrial, sistemas operativos embebidos, potentes herramientas CAD para el diseo del flujo hardware y software con dispositivos lgicos programables, especficamente las FPGAs, mdulos de propiedad intelectual como: procesadores embebidos, controladores de puerto serie y Ethernet, controladores de interrupcin, mdulos SPI, etc. Como es conocido, los PLC se pueden encontrar bsicamente de 2 formas distintas: modulares y compactos. Los PLC compactos ya tienen una cantidad fija de mdulos de entrada/salida, comunicacin, etc., y normalmente se encuentran PLC compactos de gama baja, media y alta incrementndose la complejidad y en este caso el nmero de entradas/salidas, puertos de comunicacin, etc. se incrementan de la gama baja a la alta. Los modulares, que tienen una unidad de procesamiento, una interfaz de comunicacin, y memoria interna y de programa, permiten mayor libertad de seleccin al especialista en cuanto a los mdulos especializados de entradas/salidas, tanto analgicas como digitales, as como otras posibilidades de comunicacin. Sin embargo, incluso para estos PLC, las limitaciones en cuanto al nmero de funciones, los tipos de las mismas y el comportamiento del hardware se mantienen de la misma forma que en los compactos. No es posible en ninguno de los dos casos, poder configurar el PLC desde el punto de vista del hardware, es decir, poder especificar para el mismo PLC que en una aplicacin este tenga 16 salidas digitales y para otra aplicacin, esas 16 salidas digitales se conviertan en 16 entradas digitales. Esta es una ventaja importante con relacin a los PLC convencionales, que aunque programables, no son

configurables en su hardware (incluso para los modulares, una vez que uno adquiere un mdulo dispondr de un hardware fijo en ese mdulo). De la revisin bibliogrfica realizada, se concluye que no existe en el mundo una oferta de dispositivos programables y/o reconfigurables con las mismas prestaciones y funcionalidades de un autmata programable del tipo utilizado en la industria, lo que nos conlleva a la siguiente hiptesis: Un controlador lgico programable reconfigurable basado en FPGA, con un procesador softcore embebido, reutilizando mdulos IP para hardware reconfigurable, y con las funcionalidades necesarias en el control industrial actual se puede adaptar a los requerimientos de cada aplicacin en particular (cada aplicacin puede diferir en la cantidad y tipo de mdulos de comunicacin, mdulo PID, contadores, temporizadores, E/S analgicas y digitales). A partir de esta hiptesis se formulan los objetivos de este trabajo. Objetivo general Desarrollar un controlador lgico programable y reconfigurable utilizando FPGA, con las funcionalidades necesarias en el control industrial actual. Objetivos especficos 1. Conceptualizacin del controlador lgico programable-reconfigurable. Tarea1: Estudiar la arquitectura hardware y funcionalidades de los controladores lgicos programables actuales. Tarea 2: Revisin bibliogrfica del estado del arte de los controladores lgicos programables reconfigurables. Tarea 3: Procesamiento y evaluacin de la informacin obtenida. 2. Arquitectura general que responda a las funcionalidades que se determinaron. Tarea 1: Diseo terico de la arquitectura hardware y software del controlador lgico programable basado en hardware reconfigurable. 3. Construccin del controlador lgico programable basado en hardware

reconfigurable.

Tarea 1: Seleccin de las herramientas para el desarrollo hardware y software del controlador lgico programable basado en hardware reconfigurable. Tarea 2: Familiarizacin y dominio de las herramientas seleccionadas. Tarea 3: Implementacin de los componentes de la plataforma hardware del controlador lgico programable en la tarjeta Spartan 3e. Tarea 4: Implementacin de las libreras de la plataforma software del controlador lgico programable. 4. Desarrollar la aplicacin para programar el controlador lgico programable

basado en hardware reconfigurable utilizando un lenguaje de la norma 61131-1. Tarea 1: Estudio de los lenguajes de programacin de PLC. Tarea 2: Diseo terico de la aplicacin. Tarea 3: Seleccin del lenguaje de programacin de PLC. Tarea 4: Seleccin de las herramientas para el desarrollo de la aplicacin. Tarea 5: Edicin de un programa en lenguaje PLC. Tarea 6: Traduccin de un programa en lenguaje PLC al cdigo que ejecuta el procesador del controlador lgico programable basado en hardware reconfigurable. Se utilizaron los siguientes mtodos: Tericos: Histrico lgico: Sobre los conocimientos tericos existentes para la determinacin de los momentos ms trascendentales en la evolucin histrica del desarrollo de los PLC y sus tendencias. Analtico Sinttico: Anlisis documental de la bibliografa que recoge los elementos del estado del arte de los controladores lgicos programables y el hardware reconfigurable en el control industrial. Hipottico-deductivo: A partir de la interpretacin de la realidad se establecen posibles situaciones o resultados para llegar a conclusiones. Modelacin: Usado en el proceso de simulacin de las funcionalidades del controlador lgico programable basado en hardware reconfigurable.

Empricos Consulta a especialistas: Se emple para comprobar la necesidad y la funcionalidad prctica del controlador lgico programable basado en hardware reconfigurable que se propone en la presente investigacin. La observacin: Mediante guas de observacin se le dar seguimiento al desarrollo del PLC. Los aportes esperados de esta investigacin son: Aporte Terico: 1- Diseo de una arquitectura hardware y software para desarrollar un controlador lgico programable basado en hardware reconfigurable. 2- Diseo de una herramienta de programacin de PLC mediante lenguajes de la norma IEC 61131-3. Aporte Prctico: 1. Implementacin del controlador lgico programable basado en hardware reconfigurable. 2. Desarrollo de una herramienta de programacin del PLC. La novedad cientfica radica en: Desarrollar un controlador lgico programable basado en hardware reconfigurable que se adapta a los requerimientos especficos de la aplicacin que lo utiliza: cantidad de mdulos de comunicacin, PID, contadores, temporizadores, etc. Adems, implementar la herramienta para programarlo mediante lenguaje escalera.

Captulo 1. Fundamentacin Terica


En este captulo se realiza un estudio de las caractersticas actuales de los controladores lgicos programables tradicionales, y del estado del arte de los controladores lgicos programables basados en hardware reconfigurable. 1.1. Introduccin al controlador lgico programable

Un controlador lgico programable (PLC) es una forma especial de controlador basado en procesador que usa una memoria programable para almacenar instrucciones e implementar funciones tales como: lgica, secuenciamiento, temporizaciones, conteo y aritmtica; con el objetivo de controlar mquinas y procesos, son diseados para operar por ingenieros con un conocimiento limitado de computadores y lenguajes de computacin.[1] Los PLCs son optimizados para tareas de control y el entorno industrial, por tanto, son: [1] 1. Robustos y diseados para resistir vibraciones, temperatura, humedad y ruido. 2. Son fciles de programar y tiene un lenguaje de programacin fcil de comprender el cual es principalmente concerniente con operaciones lgicas y de conmutacin. La arquitectura hardware del PLC consiste de una CPU para el control de clculos; memoria operativa para datos temporales, memoria de programa, conversor A/D y D/A como interfaces con los valores del procesos, un bus interno de datos para intercambio de datos, y un paquete robusto para ambientes severos, incluyendo vibraciones. [2] El mercado del PLC puede segmentarse en 5 grupos [3], para obtener un mayor detalle consultar el anexo 2: 1. Micro PLCs 2. PLCs pequeos 3. PLCs medianos 4. PLCs grandes 5. PLCs muy grandes

Las diferencias entre las categoras incluye: cantidad de E/S, tamao de memoria, lenguaje de programacin, funciones software, y otros factores. Una comprensin de los rangos del PLC y sus caractersticas le permitir al usuario identificar adecuadamente el controlador que puede satisfacer los requerimientos de una aplicacin en particular. Los PLCs estn disponibles en todas las formas y tamaos, cubriendo un amplio espectro de capacidades.[3] En la parte baja estn los sustitutos del rel con un mnimo de E/S y capacidad de memoria. En el tope estn los grandes controladores de supervisin, los cuales juegan un papel importante en los sistemas jerrquicos por la realizacin de una variedad de funciones de control y adquisicin de datos. Entre estos dos extremos estn los multifuncionales controladores con ambas capacidades de comunicacin, que permite la integracin con varios perifricos, y capacidades de expansin, lo cual permite al producto crecer a la medida que cambien los requerimientos de la aplicacin. Los microPLC se utilizan en aplicaciones con hasta 32 E/S, siendo 20 o menos lo normal. Los microPLC son seguidos por los PLC pequeos los cuales tienen de 32 a 128 E/S. Los PLCs medianos son usados en aplicaciones que necesitan ms de 128 E/S, adems de control analgico, manipulacin de datos, y capacidades aritmticas. Las caractersticas estndar[3] de un PLC de tamao mediano son: Hasta 1024 E/S Procesador de 16 32 bit Sustituto de rel y control analgico Memoria de hasta 4K palabras Expandible a 16K E/S digital E/S analgicas E/S remotas y locales Lenguaje escalera Lenguaje de bloque de funciones de alto nivel Control mster de rels Temporizadores/contadores/registros de desplazamientos

Secuenciador Instrucciones de Salto Capacidades matemticas: suma, resta, multiplicacin, divisin Limitada manipulacin de datos: comparar, mover registro/fichero Mdulos E/S de funciones especiales Puerto de comunicacin RS-232 LAN Soporta redes Bus de E/S Los PLC muy grandes son utilizados en sofisticadas aplicaciones de control y adquisicin de datos[3] que requieren gran cantidad de memoria y capacidades de E/S, las interfaces de E/S remotas y especiales son tambin un requerimiento estndar para este tipo de controlador. Aplicaciones tpicas para este tipo de muy grandes PLCs incluyen fbricas de acero y refineras. Estos PLCs usualmente sirven como controladores supervisores en grandes aplicaciones de control distribuido. Las caractersticas estndares de los PLCs muy grandes son: Hasta 8192 E/S Procesador o multiprocesador de 32 bit Sustituto de rel y control analgico Memoria de hasta 64K palabras Expandible a 1MB E/S digital E/S analgica E/S analgica remota Mdulos especiales remotos E/S remota y local Lenguaje en escalera Lenguaje de bloque de funciones y alto nivel Control mster de rels Temporizadores/contadores/registros de desplazamientos Secuenciadores

Instrucciones de Salto Subrutinas, interrupciones Mdulos E/S de funciones especiales LAN Mdulos PID o sistema software PID Dos o ms puertos de comunicacin RS232 Capacidades matemticas: suma, resta, multiplicacin, divisin, raz cuadrada, doble precisin, punto flotante, funciones coseno Potente manipulacin de datos: comparar, conversin de datos, mover registro/fichero, funciones de matrix, bloque de transferencia, tablas binarias, tablas ASCII, LIFO, FIFO Diagnsticos de mquina Soporta redes bus de E/S El proceso de seleccin del PLC nunca es fcil. Sin embargo existe un nmero de caractersticas etiquetadas como muy importantes cuando se especifica, recomienda y/o se compra un PLC. Segn encuesta realizada[4] y acorde a la respuesta de los encuestados, construir el soporte de comunicacin es el nmero uno en su lista de xito. Otros atributos rankeados en orden descendente, incluye: capacidad PID, tiempo de scan rpido, capacidad total de memoria, cartucho de memoria extrable, y capacidad inalmbrica. 1.2. Hardware reconfigurable en el control industrial

Las tcnicas de manufacturas han evolucionado con el tiempo, desde la produccin masiva de ayer a la automatizacin flexible de hoy y a la automatizacin reconfigurable de maana.[5] Los ingenieros de control estn incrementando el uso de tecnologas embebidas, tales como FPGA en combinacin con las PCs y PLCs para solucionar aplicaciones de control complejas que mejoran los tiempos de respuestas del sistema y proporcionan confiabilidad adicional y determinismo. La FPGA es una tecnologa que emerge rpido y proporciona a los ingenieros rpida velocidad de control, implementacin de contadores personalizados, interfaz digital personalizada a un actuador o sensor y control discreto.

El crecimiento de esquemas complejos de control obliga a ingenieros e investigadores a explorar nuevas arquitecturas. El hardware reconfigurable, especficamente los FPGAs, han surgido como una alternativa a la demanda de aplicaciones.[6] La utilizacin de FPGAs en lugar de otra arquitectura fue basada en 4 factores: la aceleracin del diseo, la flexibilidad del hardware reconfigurable, la reduccin de costos y el consumo de energa. Estos factores tienen un impacto diferente en cada rea de aplicacin.[6] A. Aceleracin de algoritmos La aceleracin de algoritmos fue descrito como una de las principales contribuciones del hardware reconfigurable para la implementacin de los controladores digitales. Esto fue llevado a cabo por varios medios, tales como procesamiento paralelo, reduccin de la sobrecarga computacional o realizacin de pipelines pesados. 1. Procesamiento paralelo. En contraste a la arquitectura software (ejemplo procesadores), una realizacin hardware con varios elementos de procesamiento operando en paralelo pueden conseguir un mejor rendimiento. 2. La utilizacin de hardware dedicado reduce la sobrecarga computacional lo cual es necesitado cuando se usa una arquitectura de propsito general para ejecutar operaciones complejas. Adems, muchas operaciones, tales como desplazamiento de bit o multiplicacin y divisin por potencia de dos, son hechas implcitamente cuando se realizan en hardware. Para diseos que requieren particiones HW/SW la utilizacin de un procesador softcore (ejemplo Microblaze de Xilinx) reduce la sobrecarga de la comunicacin, en comparacin a sistemas con acoplamiento a chip externos. B. Flexible Se dice que una arquitectura es flexible si tiene la posibilidad de ser modificada para cumplir nuevos requerimientos. Esta caracterstica es llamada programabilidad y es normalmente relacionada a las arquitecturas software, donde tal adaptacin es hecha

reemplazando las instrucciones que controlan la unidad central de proceso (ejemplo, una ALU). La flexibilidad fue una de las caractersticas ms reportadas del hardware reconfigurable. Dos factores contribuyen especialmente: la reconfiguracin del hardware y la posibilidad de realizar particiones HW/SW en la misma plataforma. 1. Reconfiguracin hardware: la arquitectura ms especializada es la que posea un mayor rendimiento eficiente. Sin embargo, cambios en la aplicacin pueden disminuir fuertemente el rendimiento que se haba logrado, incluso para arquitecturas de propsito general con cierto nivel de especializacin. El hardware reconfigurable permite la adaptacin a los requerimientos de la aplicacin, alcanzando normalmente un mejor rendimiento que su equivalente software. 2. Particiones HW/SW en un solo chip: las FPGAs permiten la realizacin HW/SW en un solo chip. Esto es posible por usar lgica reconfigurable para realizar hardware dedicado en combinacin con procesador embebidos soft o hardware. Estas caractersticas abren nuevas posibilidades en el espacio de diseo, ofreciendo un mayor nivel de flexibilidad que las plataformas de hardware puro o software puro. Las partes de un algoritmo de control que tienen alta diversidad de operaciones y requieren baja frecuencia de muestreo son mejor implementadas en software, mientras que otras partes con algoritmos computacionales intensivos son mejor implementados como un hardware dedicado. C. Costos El costo es una importante razn para usar hardware reconfigurable en vez de hacer uso de otra tecnologa. Los factores claves para preferir el hardware reconfigurable son: la razn costo/rendimiento, descripcin del hardware, tiempo que tarda introducir el producto en el mercado (Time to Market), costos de desarrollo. 1. Razn Costo/rendimiento: algunos autores consideran que esta razn se reduce por el uso de tcnicas de diseo especializadas, lo cual permite la utilizacin de dispositivos ms baratos para la implementacin.

2. Descripcin de hardware: la descripcin del hardware puede realizarse en diferentes niveles de abstraccin; desde el nivel RTL a la descripcin de comportamiento usando lenguajes como VHDL o Verilog, proporcionando independencia de la tecnologa. La utilizacin de mdulos de propiedad intelectual (IP), lenguajes de programacin visual, y mtodos de reusabilidad de diseos facilitan la implementacin de sistemas complejos en un chip (SoC). La descripcin del hardware tiene un impacto directo en el esfuerzo requerido para completar el diseo. Esto influye en el tiempo de introducir un producto al mercado (Time to Market). 3. Time to Market (TTM): introducir un producto tarde en el mercado acarrea una disminucin potencial de los ingresos. Cuando se usa hardware reconfigurable el TTM puede ser reducido drsticamente en comparacin con el ASIC. 4. Costos de desarrollo: cuando se utiliza hardware reconfigurable, es posible realizar la mayora de los bloques funcionales requeridos en el mismo chip, lo cual evita usar muchos elementos discretos, y reduce el tamao del board y el consumo de energa. La disponibilidad de FPGAs de bajo costo y gran capacidad, un nmero creciente de mdulos IP, y poderosas herramientas CAD permiten el desarrollo de un SoPC (System on programmable chip) completo. D. Consumo de energa El consumo de energa de un sistema puede ser un factor crtico cuando se selecciona la implementacin de una arquitectura, especialmente para sistemas con suministros limitados de energa. El uso de la tecnologa FPGA reduce el consumo de energa en comparacin al diseo construido con varios circuitos integrados. A menudo los ingenieros usan FPGA en productos de control industrial, pero solo como un componente interno. La tarea de redefinir funciones de la FPGA histricamente ha demandado experticia en programacin HDL, usos de complejas herramientas de diseo ms familiares a los ingenieros de diseo de hardware que a ingenieros de control.[7]

1.3.

Estudios relacionados sobre los controladores lgicos programables basados en hardware reconfigurable

Ichikawa[8] present un convertidor experimental, el cual traduce una secuencia de instrucciones PLC en una descripcin lgica en VHDL, adems en su trabajo hace mencin a estudios previos en la implementacin de un programa de control en un FPGA, por ejemplo, Adamski y Monteiro presentaron una metodologa de diseo que traduce especificaciones interpretadas en redes petri en un lenguaje de descripcin de hardware. Wegrzyn present un marco de trabajo (framework) que transforma descripciones basadas en regla (ejemplo, interpretada en redes Petri) en descripciones lgicas (ejemplo, VHDL). Ikeshita present un programa de conversin que traduce descripciones SFC (Esquema Secuencial de Funciones) en Verilog para sntesis lgicas. Todos estos estudios se concentraron en tcnicas para convertir los programas de control de nivel funcional en circuitos lgicos. Daijin[9] en su trabajo trata sobre la implementacin de un controlador difuso en un FPGA. Paulo[10] present un controlador lgico reconfigurable para aplicaciones de control discreto, utilizando redes Petri como lenguaje formal para la descripcin funcional de la aplicacin; para sintetizar el proceso en hardware se tradujeron las especificaciones en redes Petri en lenguaje VHDL. Snaider[11] en su trabajo muestra el procedimiento seguido para la construccin de un PLC, utilizando un microprocesador diseado por ellos en VHDL y sintetizado en FPGA. Por otra parte, Viswanathan[12] implement un controlador PID en un FPGA. A su vez, Xu[13] presenta en su trabajo el core IP de un microprocesador RISC para PLC. Daoshan[14] propone un diseo de PLC basado en FPGA con mecanismo de ejecucin paralela y estructura de hardware reconfigurable, el enfoque esencial de la investigacin es convertir programas LD al equivalente en VHDL. Sharma[15] present el diseo e implementacin de un microPLC en FPGA, limitado a la utilizacin de los canales de E/S digitales.

1.4.

Conclusiones parciales

Los tpicos anteriores brindan una idea del estado del arte sobre el control basado en PLC y a la notable tendencia del uso de hardware reconfigurable para dotar a los sistemas de control de mayor flexibilidad y desempeo. En el tpico de estudios relacionados sobre controladores lgicos programables basados en hardware reconfigurable se deduce que los trabajos investigativos relacionados en el uso de hardware reconfigurable para el control basado en PLC se han limitado a la transformacin de un programa (lenguaje de la norma IEC 61131-3) PLC a lenguaje de descripcin de hardware y a su sntesis en FPGA. De la revisin bibliogrfica llevada a cabo se puede concluir que no existe en el mundo una oferta de dispositivos programables y/o reconfigurables con las mismas prestaciones y funcionalidades de un autmata programable del tipo utilizado en la industria. Se podra decir que, la existencia de este tipo de dispositivo mejora las posibilidades de automatizacin, al reducir costos, permitir mayor versatilidad y libertad de diseo. Propicia adems la creacin e incorporacin en el dispositivo de algoritmos autctonos de control.

Captulo 2. Descripcin de las funcionalidades generales y requisitos de diseo necesarios


Introduccin En este captulo se definen las funcionalidades de un controlador lgico programable convencional, las cuales sern implementadas en el controlador lgico programable basado en hardware reconfigurable. 2.1. Unidades de entrada/Salida Las unidades de entrada salida proporcionan la interface entre el controlador lgico programable y el mundo exterior, permitiendo la conexin de dispositivos de entrada como sensores y dispositivos de salidas tales como motores y selenoides, por lo tanto debe proveer el necesario acondicionamiento de la seal para obtener el nivel de seal requerido, y aislar al PLC de posibles riesgos elctricos, como alto voltaje. Las seales provenientes de los sensores y la salida requeridas para los actuadores pueden ser: 1. Analgica: seal continua en el tiempo. 2. Discreta: esencialmente seales on-off. 3. Digital, una secuencia de pulsos 0 y 1 . 2.1.1. Entradas/Salidas digitales La seal digital que es generalmente compatible con el procesador del PLC es de 5 V dc. Sin embargo, el acondicionamiento de la seal en el canal de entrada, permite un amplio rango de seales de entrada, ejemplo, 5v, 24v, 110v, 240v, ver anexo 3. Entre los dispositivos de entrada digitales se tienen los siguientes: Encoder rotacional Interruptores de lmite Detector fotoelctrico Detector de proximidad (inductivo o capacitivo) Pulsadores

La salida de la unidad de entrada/salida sera de 5v. Sin embargo, despus del acondicionamiento de la seal con relays, transistores o triacs, la salida del canal de salida podra ser 24v, 100mA, 110v, 1A, 240v, 2, ver anexo 4. Las salidas son especificadas en los siguientes tipos. 1. Con el tipo rel, la seal de salida del PLC es usada para operar un rel y permite conmutar corrientes del orden de algunos amperes en un circuito externo. El rel no solo conmuta pequeas corrientes a corrientes mayores, sino que tambin asla al PLC del circuito externo. Los rel pueden soportan sobrecarga de corrientes y transientes de voltajes. Operan relativamente lentos. 2. La salida de tipo transistor usa un transistor para conmutar corriente a travs de un circuito externo, dando una accin de conmutacin considerablemente ms rpida. 3. El triac es un interruptor de corriente alterna, el cual bsicamente consiste de dos tiristores conectados en reverso. La salida triac puede ser usada para controlar cargas externas conectadas a fuentes de alimentacin de corriente alterna. Entre los dispositivos de salida se encuentran: Alarmas Control rel Ventiladores Bocinas Luces Motor de arranque (motors starter) Solenoides Vlvulas 2.1.2. Interfaces A/D y D/A Los PLCs son sistemas discretos que solo comprenden 1s y 0s, por lo tanto no pueden interpretar las seales analgicas en su forma continua. Las interfaces analgicas de entrada traducen la seal analgica continua en valores discretos que pueden ser interpretados por la CPU del PLC. Estos valores discretos son utilizados despus en el programa de control.

El procesamiento de las seales analgicas en el dominio del tiempo es altamente factible y tiene algunas ventajas con respecto al procesamiento digital. Primero, no existe la necesidad de utilizar conversores anlogo a digital y viceversa. Segundo, los diseos anlogos generalmente consumen menos potencia que su contraparte digital, por ejemplo en comunicaciones inalmbricas el bajo consumo de potencia es una consideracin de diseo crtica. Tercero, los diseos anlogos ocupan menos rea en el chip que los digitales.[16] Los circuitos digitales pueden ser aplicados para implementar algoritmos de procesamiento de seales de alta precisin y alta complejidad para seales de baja frecuencia donde la potencia disipada durante la operacin no es crtica. Los circuitos analgicos ofrecen ventajas en aplicaciones donde la frecuencia de la seal es alta y un bajo consumo es esencial. Sin embargo, la precisin de los circuitos analgicos es limitada y no pueden ser usados para implementar algoritmos de alta complejidad.[17] En un sistema reconfigurable que utiliza seales mixtas analgicas y digitales, sera ideal que las partes analgicas y digitales sean reconfigurables. En lo digital se logra mediante el uso de la FPGA y en lo analgico a travs de las FPAA. Consecuentemente, el procesamiento en un sistema grande es asignado acordemente a circuitos analgicos y digitales para tomar ventajas de las propiedades de un circuito especfico para optimizar toda la ejecucin, tales como minimizar el consumo. La tecnologa de FPAA en combinacin con la bien conocida tecnologa de FPGA, proporciona la base para el desarrollo de un hardware analgico/digital dinmicamente reconfigurable.[17] Aunque existen trabajos relacionados con el diseo mixto con FPGA y FPAA, ejemplo: Vemuri[18], Morales[19], Cornel[17]; la tecnologa FPAA no ha logrado la madurez de su contraparte digital las FPGA. La claramente definida descomposicin jerrquica de sistemas digitales con bien aceptadas medidas de desempeo hace los circuitos integrados digitales muy fciles de disear sobre los sistemas analgicos. Se han desarrollado muchas metodologas CAD compatibles de diseo de sistemas digitales, lo cual resulta en ciclos de diseo cortos y bajos costos.[20] Por el contrario, al proceso de diseo analgico lo caracteriza un diseo manual e intuitivo

por las insuficientes herramientas CAD[21]. Se necesitan adecuadas metodologas CAD con el objetivo de mejorar la eficiencia del diseo analgico. Por lo tanto, el uso de conversores A/D y D/A continan siendo la mejor opcin como interfaces para las seales analgicas. Los mdulos de entrada/salida analgicas son usados en aplicaciones donde la seal de los dispositivos de campo es continua. 2.1.2.1. Representacin de los datos analgicos de entrada

Los dispositivos de campo que proporcionan una salida analgica (sensores analgicos o transductores), son usualmente conectados a transmisores, que a su vez, envan la seal analgica al mdulo de entrada analgica. Un transductor convierte una variable de dispositivo de campo (presin, temperatura, etc.) en una seal elctrica (corriente o voltaje) de bajo nivel que puede ser amplificada por un transmisor y entonces puede entrar a la interface analgica, ver anexo 5. Algunos de los dispositivos que tpicamente son usados con las interfaces de entrada analgica son: 1. Transductor de flujo 2. Transductor de humedad 3. Potencimetro 4. Transductor de presin 5. Transductor de vibracin 6. Transductor de temperatura Debido a que estn disponibles varios tipos de transductores, los mdulos de entrada analgicas tienen varios rangos estndar de entrada elctrica. Las interfaces analgicas pueden ser unipolar (solo voltaje positivo, ejemplo, de 0 a +5V dc) o bipolar (voltajes negativos y positivos, ejemplo, -5V a +5 V dc). Los rangos tpicos de entradas analgicas son: 1. 4-20 mA. 2. 0 a +1V dc. 3. 0 a +5V dc. 4. 0 a +10V dc.

5. 1 a +5V dc. 6. -5V a +5V dc. 7. -10V a 10V dc Un mdulo de entrada analgica transforma una seal analgica de entrada va un sensor/transmisor en un valor discreto. Este valor transformado es el equivalente digital de la variable analgica medida por el dispositivo de campo. El sensor enva una corriente o voltaje analgico de bajo nivel al transmisor. El transmisor enva la informacin al mdulo de entrada como una corriente amplificada o un voltaje proporcional a la seal que est siendo medida. Despus, la interface analgica de entrada digitaliza la corriente o voltaje convirtindolo en un nmero binario equivalente. La interface entonces enva la seal digital al controlador. De esta manera, el valor binario que el PLC recibe es el equivalente digital de la seal analgica entrante, ver anexo 6. Un convertidor analgico a digital (A/D) realiza la conversin de la seal en el mdulo de entrada analgica. El convertidor divide la seal de entrada en varios conteos digitales, los cuales representan la magnitud de la corriente o el voltaje. Esta divisin de la seal de entrada se denomina resolucin. La resolucin del mdulo indica en cuantas partes el mdulo A/D divide la seal de entrada, o sea, cuantos bits usa el A/D durante la conversin. Por ejemplo, si un AD divide una seal de entrada usando 12 bits o 4096 partes (212=4096), este tiene 12 bits de resolucin con un rango de valores de 0 a 4095. El A/D transfiere el nmero digital al procesador, que a su vez lo hace disponible para usar en un registro o localizacin de memoria, ver anexo 7. 2.1.2.2. Representacin de los datos analgicos de salida

Similar a las entradas analgicas, las interfaces de salida analgica estn usualmente conectadas a dispositivos de control a travs de transductores. Estos transductores amplifican, reducen o cambian la seal analgica, que a su vez, controla los dispositivos de salida, ver anexo 8. Algunos de los rangos estndar usados en los PLCs con capacidad de salida analgica son: 1. 4 a 20 mA. 2. 10 a 50 mA

3. 0 a +5V dc. 4. 0 a +10V dc. 5. -2,5V a +2,5V dc. 6. -5V a +5V dc. 7. -10V a +10V dc. El mdulo de salida analgica es responsable de cambiar el valor binario a una seal analgica que pueda ser entendida por los dispositivos de campo. Un convertidor digital a analgico (D/A) transforma un dato digital enviado desde el procesador en una seal analgica. Este valor de salida analgica es proporcional al valor numrico digital recibido por el mdulo. As, el convertidor D/A crea una seal analgica continua con una magnitud proporcional a la mnima y mxima corriente o voltaje admitido por el dispositivo de campo (ejemplo, 0 a 10V dc), ver anexo 9. La resolucin de un D/A es definido por el nmero de bits que usa para la conversin analgica. Por ejemplo, un D/A con 12 bits de resolucin crea una seal analgica que va de cero a 4095. Por lo tanto, el valor analgico 2047 en una resolucin de 12 bits es igual a la mitad del rango completo, para un dispositivo de campo analgico con un rango de 0 a 10V dc, el valor analgico sera 5V dc. 2.2. Temporizadores En varias tareas de control se necesita controlar tiempo, por ejemplo: un motor o bomba que podra necesitar ser controlada para operar en un particular intervalo de tiempo. Los PLCs tienen temporizadores incorporados, los cuales cuentan fracciones de segundos o segundos utilizando el reloj interno de la CPU.[1] Los temporizadores del PLC son instrucciones internas que proporcionan la misma funcionalidad que el temporizador hardware, activan o desactivan un dispositivo despus que un intervalo de tiempo ha expirado.[3] Los fabricantes de PLCs difieren en cmo los temporizadores deben ser programados y por lo tanto en cmo ellos deben ser considerados. Un acercamiento comn es considerar a los temporizadores con un comportamiento parecido a rels con bobinas que al ser energizadas resultan en contactos abiertos o cerrados despus de un tiempo determinado.

Existen diferentes tipos de temporizadores que pueden encontrarse en un PLC. El temporizador con retardo a la conexin (TON) que activa la salida despus de un tiempo de activarse la entrada, el temporizador con retardo a la desconexin (TOFF) que activa la salida hasta un tiempo despus de desactivada la entrada, y el temporizador de pulso (TP) el cual conmuta en encendido o apagado para un periodo fijo de tiempo, ver anexo 10. 2.3. Contadores Los contadores son proporcionados como elementos integrados en los PLCs, son instrucciones internas que activan o desactivan dispositivos despus que se ha alcanzado un valor deseado y permiten contar el nmero de ocurrencias de seales de entrada, por ejemplo los artculos que pasan a lo largo de una cinta transportadora, o el nmero de revoluciones de un eje, o quizs el nmero de personas que pasan por una puerta.[1] El contador es seteado en un valor de conteo, y cuando es igual al nmero de pulsos de entrada que recibe, este opera sus contactos. De esta manera los contactos que normalmente estn cerrados deberan abrirse y viceversa. Existen tres tipos de contadores: contador descendente (CTD) que cuenta desde el valor deseado hasta cero (ver anexo 11), contador ascendente (CTU) que cuenta desde cero hasta el valor deseado (ver anexo 12) y el ascendente/descendente (CTUD). Cuando el contador alcanza el valor deseado, sus contactos de salida cambian de estado. 2.4. Mdulo PID Las interfaces Proporcional-integral-derivativa (PID) son usadas en aplicaciones de procesos que requieren un control a lazo cerrando empleando el algoritmo PID[22]. Estos mdulos proporcionan accin de control proporcional, integral y derivativo segn los parmetros medidos, tales como presin y temperatura, los cuales son las variables de entrada al sistema, ver anexo 13. La funcin bsica de un control de proceso a lazo cerrado es mantener ciertas caractersticas del proceso en valores deseados. Las caractersticas del proceso a menudo se desvan un poco de su referencia de valor deseado como resultado de cambios en el material de carga, perturbaciones e interacciones con otros procesos. Durante el control, las caractersticas actuales del proceso (nivel del lquido, razn de flujo, temperatura, etc.) son

medidas como variables del proceso (PV) y comparadas con el valor deseado de referencia (SP). Si la variable del proceso (valor actual) se desva del valor de la referencia (valor deseado) ocurre un error (E=SP-PV). Una vez que el mdulo detecta un error, el control a lazo cerrado modifica la variable de control (CV) para forzar el error a cero, ver anexo 15. La siguiente ecuacin define el algoritmo implementado en el mdulo PID:

Donde: Kp= ganancial proporcional , Ki=ganancia integral, Ti= tiempo de integracin , Kd= ganancia integral, Td= tiempo derivativo E=SP-SV, E=error CV=Vout= salida de la variable de control El mdulo PID recibe la variable del proceso en forma analgica y calcula la diferencia de error entre el valor actual y la referencia, ver anexo 16. Este error es utilizado por el algoritmo para iniciar la accin correctiva a travs de la salida de la variable de control. Primero, el mdulo formula una accin de control proporcional basada en una salida de la variable de control que es proporcional al valor instantneo del error. Entonces, se inicia la accin de control integral cuya funcin principal es asegurarse de que la salida del proceso coincida con el punto de consigna en estado estacionario[23]. Finalmente, el mdulo inicia una accin de control derivativa para mejorar la estabilidad en lazo cerrado. Estos tres pasos proporcionan la accin de control deseada en formas de control: proporcional (P), proporcional-integral (PI) y proporcional-integral-derivativo (PID). Un mdulo PID recibe ante todo parmetros de control y la referencia desde la CPU. Durante esta operacin, la interface PID mantiene el estado de la comunicacin con la CPU, intercambio informacin del mdulo y del proceso. En dependencia del mdulo usado, las interfaces PID tambin pueden recibir datos acerca del tiempo de actualizacin (update time) y la banda muerta del error (error deadband). El tiempo de actualizacin es la razn o perodo en el cual la variable de

salida es actualizada. La banda muerta del error, es la cantidad que es comparada con la seal de error; si la banda muerta del error es menor o igual que la seal de error no se realiza ninguna actualizacin. Adems, algunos mdulos tambin proporcionan clculos de raz cuadrada de la variable del proceso. Para proporcionar este clculo, el mdulo ejecuta una extraccin de la raz cuadrada de la variable del proceso para obtener una salida en escala lineal, la cual es usada por el lazo PID. El control de flujo por un PID es un ejemplo de una aplicacin usando un extractor de raz cuadrada. 2.5. Protocolo Modbus RTU Modbus es un protocolo de comunicaciones, basado en la arquitectura maestro/esclavo o cliente/servidor, diseado en 1979 por Modicon para su gama de controladores lgicos programables.[24] Caractersticas principales del protocolo Modbus[25]: Debido a su simplicidad y especificacin abierta, actualmente es ampliamente utilizado por diferentes fabricantes. Su implementacin es fcil y requiere poco desarrollo. Entre los dispositivos que lo utilizan se puede mencionar: PLC, HMI, RTU, sensores y actuadores remotos. El protocolo establece cmo los mensajes se intercambian en forma ordenada y la deteccin de errores. Control de acceso al medio tipo Maestro/Esclavo. El protocolo especifica: formato de trama, secuencias y control de errores. Existen dos variantes en el formato: ASCII y RTU. A cada esclavo se le asigna una direccin fija y nica en el rango de 1 a 247. La direccin 0 est reservada para mensajes de difusin sin respuesta. Modbus diferencia cuatro tipos de datos y tiene funciones especficas para ellos con un direccionamiento independiente. Se diferencian entre s, en cuanto a si son de lectura o de escritura, y si son de tipo bit o tipo Word (16 bits).

Tabla 1. Tipos de datos Modbus.

Tipo de dato Entradas discretas (Discret Input) Salidas discretas (Discret output) Registros de entrada (Input Register) Registros de salida (Holding Register )

Lectura/Escritura Lectura

Ancho dato 1 bit

Comentario Variables de un bit que el maestro puede leer. Variables de un bit que el maestro puede escribir y leer. Variables de 16 bits que el maestro puede leer. Variables de 16 bits que el maestro puede escribir y leer.

Lectura /Escritura

1 bit

Lectura

palabra (16 bits)

Lectura / Escritura

palabra (16 bits)

La comunicacin va Modbus es usada para el intercambio de datos entre todos los dispositivos conectados al bus. El protocolo Modbus crea una estructura jerrquica (un maestro y varios esclavos), un enlace multipunto conecta el maestro y los esclavos. El maestro manipula exclusivamente toda la comunicacin y esta es posible de dos formas de dilogo diferentes, ver anexo 17 y 18. El maestro intercambia con un esclavo y espera por su respuesta. El maestro intercambia con todos los esclavos sin esperar respuesta alguna (difusin). En Modbus RTU el primer campo de la trama es la direccin del esclavo, todos los dispositivos presentes en la red decodifican el primer byte con el objetivo de determinar la direccin de destino y entonces tener en cuenta los prximos bytes si el esclavo es identificado, ver anexo 19 y 20. La integridad de la trama es indicada en el contenido del CRC (cdigo de redundancia cclica). Modbus ofrece 19 funciones diferentes. Estn caracterizadas por una funcin asociada a un tamao de 1 byte y no todos los dispositivos admiten este tipo de funcin. A continuacin se describen algunas de ellas.

Tabla 2. Funciones Modbus

Cdigo Accin 01 02 03 04 05 06 15 16 Leer Bobinas Leer Entradas Leer Registros Leer Registros Escribir Bobina Escribir Registro Escribir Bobinas Escribir Registros

Significado Obtiene el estado actual ON/OFF de un grupo de bobinas lgicas Obtiene el estado actual ON/OFF de un grupo de entradas lgicas Obtiene el valor binario de uno o ms registros de almacenamiento Obtiene el valor binario de uno o ms registros de entrada Fuerza el estado de una bobina Escribe el valor binario de un registro de almacenamiento Fuerza el estado de un grupo de bobinas Escribe el valor binario de un grupo de registros de almacenamiento

Si el esclavo no puede realizar la funcin requerida devuelve una trama de error, donde al campo de funcin se le suma 80h (funcin+80h), y en el campo de cdigo de error se indica el error ocurrido.
Tabla 3. Cdigos de error

Cdigo Tipo de error 01 02 03 04 05 06 07 Funcin ilegal Direccin ilegal Dato ilegal Falla en el dispositivo Reconocimiento(ACK) Ocupado Reconocimiento Negativo(NACK)

Significado La funcin recibida no est permitida en el esclavo La direccin est fuera del rango permitido El dato contiene un valor no vlido El controlador no responde o ha ocurrido un error Se ha aceptado la funcin y se est procesando El mensaje ha recibido sin error, pero el dispositivo no puede procesarlo en este momento La funcin solicitada no puede realizarse en este momento

2.6.

Conclusiones parciales

En este captulo se explic el funcionamiento de los mdulos bsicos de un PLC convencional. Estas funcionalidades sern implementadas en el controlador lgico programable basado en hardware reconfigurable, lo cual se describe en el prximo captulo.

Captulo 3: Implementacin del controlador lgico programable basado en hardware reconfigurable


Introduccin En este captulo se describe la implementacin del controlador lgico programable basado en hardware reconfigurable en la tarjeta Spartan 3e, as como la creacin de algunos componentes del PLC en VHDL, utilizando la herramienta ISE 12.1, y su conversin en mdulo IP con la herramienta EDK 12.1. Se explica el desarrollo de las libreras utilizadas en el software (programa del PLC) que ejecuta Microblaze. 3.1. Circuitos reconfigurables. FPGAs

El FPGA es un circuito integrado que puede ser configurado por el usuario, con la intencin de implementar funciones digitales lgicas de complejidad diversa.[12] El circuito digital que se desea construir se programa a partir de describir sus componentes en un lenguaje de descripcin de hardware. Este circuito se construye conectando convenientemente distintos bloques digitales bsicos que se encuentran disponibles en el mismo. Programar el circuito reconfigurable significa poder identificar los bloques necesarios para poder realizar una funcin determinada deseada, decidir cules bloques se usarn y conectarlos entre s. Todo este proceso se realiza a partir del fichero de descripcin de lenguaje, empleando un entorno de desarrollo especfico ofertado por el fabricante del circuito en cuestin. Al finalizar el proceso, se descarga hacia el circuito un fichero digital que contiene la informacin para conectar los componentes necesarios internamente, as como para decidir cules sern las entradas y salidas del sistema. [26]

Figura 1. Estructura interna de FPGA.

En la tabla 4 se muestra un resumen de los principales fabricantes de FPGAs, as como los procesadores y buses.[27]
Tabla 4. Principales fabricantes de FPGAs

Fabricante Xilinx Altera

FPGAs Spartan Virtex Cyclone Arria Stratix LatticeECP2M, LatticeSC/M Axcelerator, Fusion M1 Fusion, M7 Fusion AT40K y AT40KAL

Procesadores Microblaze y PowerPC Nios y Nios II

Buses PLB, OPB, FSL, LMB Avalon

Lattice Semiconductor Actel

MICO32 ARM7, Leon3

AMBA

Atmel

MARC4, AVR8, AVR32

La tecnologa FPGA brinda un conjunto de beneficios, entre ellos se tiene: Es programable por el usuario por medio de lenguajes de descripcin de hardware tales como VHDL y Verilog. El flujo de diseo es relativamente simple. Permiten el rpido desarrollo de prototipos. Existe un amplio mercado con propuesta para mltiples necesidades.

3.1.1.

La FPGA XC3S500E

La FPGA XC3S500E que se utiliza en este trabajo pertenece a la familia Spartan 3E, est desarrollada sobre tecnologa de 90nm, con una capacidad de hasta 376 pines de E/S simples 156 pares de E/S diferenciales[28]. La estructura interna de esta familia est conformada por: Bloques de E/S (IOB, Input Output Block) Bloques lgicos configurables (CLB, Configurable Logic Blocks) Manejador de reloj digital (DCM, Digital Clock Manager) Ram de Bloque (BRAM, Block Ram) Los IOBs conforman la interfaz de la FPGA con el entorno, en los CLBs se implementa la lgica del sistema diseado. Los DCM permiten sintetizar frecuencias por medio de la multiplicacin, divisin y desfase de la frecuencia suministrada por un oscilador, la BRAM es una memoria interna de propsito general. 3.2. Kit de desarrollo Spartan 3e Los kits de desarrollo son plataformas de hardware cuyo propsito es mostrar los conceptos fundamentales de una arquitectura, definir la filosofa base de esta, familiarizar a los desarrolladores con un producto por medio de diseos de ejemplo ya verificados, brindando adems la posibilidad de realizar los propios. Para este fin se encuentran en los kits de desarrollo interfaces de E/S como es el caso de LCDs, leds, puertos de diversa ndole, conmutadores etc. Las ventajas que estos kits ofrecen son varias: No se necesita fabricar placas de circuito impreso. La misma placa se puede reutilizar en mltiples aplicaciones. Permite el desarrollo rpido de prototipos. La FPGA a utilizar se encuentra formando parte de el kit de desarrollo Spartan 3E 500 Starter Kit. Este kit contiene los siguientes componentes[29]. FPGA Xilinx Spartan 3E XC3S500E AFG320 Reloj

Oscilador de Reloj a cristal 50 MHz. Socket de ocho pines tipo DIP para oscilador de reloj auxiliar. Interfaces E/S.

Ethernet 10/100 PHY. Puerto de programacin USB. Puerto de video VGA. Dos puertos RS-232 de 9 pines (DTE y DCE). Puerto para Teclado y Mouse tipo PS/2. Display LCD de 2 lneas alfanumrico de 16 caracteres. Cuatro interruptores. Cuatro botones pulsantes. Ocho LEDs. Conector de expansin Hirose FX2 de 100 pines. Tres conectores de expansin Digilent de 6 pines. Conversores

Conversor digital- analgico de cuatro salidas con interfaz SPI. Resolucin de 12 bits.

Conversor analgico- digital de dos entradas con preamplificadores de ganancia programable e interfaz SPI. Resolucin de 14 bits Memorias

Memoria Flash paralela de 128Mbits. Memoria Flash 16Mbits SPI. Memoria DDR SDRAM de 512Mbits (32M x 16) Plataforma de memoria Flash de 4 bits. Fuente de alimentacin

Fuente de 100

240 V, 50

60Hz.

3.3. Entorno de desarrollo ISE 12.1 El entorno de diseo ISE (Entorno de Software Integrado) proporciona un conjunto integrado de herramientas para la implementacin de sistemas sobre FPGAs y CPLDs[30] fabricados por la empresa Xilinx.

El flujo de diseo con ISE es el siguiente: 1. Introducir el diseo: HDL, esquemtico, mquina finita de estado. 2. Acceso a herramientas de sntesis y simulacin. 3. Implementar los diseos 4. Programar la FPGA.

Figura 2. Entorno de desarrollo ISE 12.1

3.4. Procesador Microblaze como ncleo de procesamiento del PLC basado en hardware reconfigurable Microblaze es un mdulo IP sintetizable de un microprocesador RISC de 32 bits con arquitectura Harvard y representacin de tipo Big-endian, ver anexo 21. Est especialmente diseado para hacer uso ptimo de los recursos de los FPGA de Xilinx[31]. Caractersticas de Microblaze: Instrucciones de 32 bits con tres operandos y dos modos de direccionamiento. Bus de direcciones de 32 bits

Arquitectura Harvard - Buses separados de instrucciones y datos Tipos de buses: - PLB: Processor Local Bus - LMB: Local Memory Bus - OPB: On-chip Peripheral Bus 32 registros de propsito general de 32 bits Cach de instrucciones y datos Multiplicacin hardware (a partir de la familia Spartan-3) Los tipos de datos permisibles son: Byte: Ocho bits. Media palabra: Diecisis bits. Palabra: Treinta y dos bits. En cuanto al formato de los mismos se distinguen dos clasificaciones fundamentales: Big Endian: El bit ms significativo est al comienzo del dato. Bit reversed: El bit ms significativo est al final del dato. Otra de las caractersticas incorporadas por MicroBlaze es la segmentacin de las instrucciones o como tambin se le conoce pipeline. Esta tcnica contribuye a la optimizacin del rendimiento de la arquitectura RISC. En el caso de este procesador la segmentacin de las instrucciones tiene de 3 a 5 etapas.[32] Traer la instruccin de memoria (fetch). Decodificar la instruccin (decode). Ejecutar la instruccin (execute). El procesador MicroBlaze contiene una lnea de interrupciones, la cual al ser activada hace que el procesador ejecute una rutina de manejo de interrupciones que ha de ser especificada al compilador. Las excepciones se tratan de forma similar. Cuando una de ellas ocurre, se paraliza el procesamiento de instrucciones y se ejecuta una rutina de manejo de excepciones. En el caso de que el sistema necesite manejar ms de una interrupcin, ser necesaria la utilizacin de un perifrico especfico (controlador de

interrupciones), que se encarga de multiplexar e identificar las diferentes fuentes de interrupcin. 3.5. Bus PLB El bus local de procesador (PLB) versin 4.6, proporciona la infraestructura de bus para conectar un nmero opcional de maestros y esclavos dentro del sistema PLB. Est compuesto por una unidad de control del bus, un watchdog, unidades de lectura y escritura de datos, as como un registro de control de dispositivo (DCR en ingls) que proporciona a las interfaces esclavas acceso al registro de estado de errores del PLB[33]. 3.5.1. Caractersticas Soporte de arbitracin para un nmero configurable de dispositivos maestros PLB. Direccin PLB y direccionamiento de datos soportado por todos los msteres. Soporte de 128 bits, 64 bits y 32 bits para maestros y esclavos. Pipeline de direcciones PLB (soportado en modo bus compartido o configuracin punto a punto). 3 ciclos de arbitracin. 4 niveles de prioridad dinmica de solicitud de maestro. Seleccionable arbitracin de prioridad fija o por turnos. Optimizacin configurable para topologa punto a punto. Watchdog PLB. Arquitectura PLB compatible. Proporciona una estructura de bus PLB completa - Soporta un nmero configurable de esclavos. - No se requieren compuertas OR externas para seales de entrada de esclavo PLB. Circuito de reset del PLB. - Reset PLB generado sincrnicamente al reloj PLB.

- Reset PLB generado sincrnicamente de un reset externo cuando una seal de reset es proporcionada. - Proporciona una seal de reset vectorizada para reducir el fanout del sistema para mejorar tiempo. - Estado activo de un reset externo seleccionable por un parmetro de diseo. 3.6. Entorno de desarrollo EDK

EDK (Embedded Development Kit) engloba a un conjunto de componentes IP (propiedad intelectual) y herramientas de diseo que facilitan el desarrollo de sistemas de procesado empotrados sobre FPGAs de Xilinx.[30] Para desarrollar una aplicacin sobre el procesador MicroBlaze, es necesario utilizar EDK, el cual permite: Seleccionar y configurar el hardware asociado al procesador. Desarrollar aplicaciones de software en los lenguajes C y C++. Simular y depurar la aplicacin desarrollada. Cargar el sistema en la FPGA para su ejecucin. 3.6.1. Herramientas de EDK XPS (Xilinx Platform Studio) - Interfaz grfica de usuario que facilita la gestin de diseos. PlatGen (Platform Generator) - Crea la plataforma hardware a partir de un fichero MHS (Microprocessor Hardware Specification). LibGen (Library Generator) - Crea la plataforma software a partir de un fichero MSS (Microprocessor Software Specification). Herramientas de desarrollo de GNU. - Facilitan la compilacin, link-edicin y depuracin de aplicaciones software. XMD (Xilinx Microprocessor Debugger)

- Proporciona comunicacin entre las herramientas de depuracin y el procesador. BSB (Base System Builder) - Asistente para la creacin de diseos sobre placas de desarrollo especficas. CreateIP (Create/Import Peripheral Wizard) - Permite incorporar IPs de usuario a proyectos EDK. 3.6.2. Ficheros de EDK MHS (Microprocessor Hardware Specification) - Mdulos, buses, espacio de memoria, parmetros. MSS (Microprocessor Software Specification) - Drivers, libreras, sistema operativo, rutinas de interrupcin. MPD (Microprocessor Peripheral Description) - Definicin de perifricos de E/S, parmetros genricos. UCF (User Constraints File) - Fichero de restricciones de implementacin -> conexiones FPGA. ELF (Executable and Linker Format) - Fichero ejecutable sobre Microblaze. BIT - Configuracin FPGA -> download.bit=system.bit+executable.elf Para trabajar en EDK, se necesita tener previamente instalado el entorno de desarrollo ISE (Entorno de Software Integrado), esto se debe a que EDK realiza llamadas al mismo para sintetizar el hardware del sistema que se est implementando. 3.6.3. Fases de desarrollo de un sistema empotrado Creacin de la plataforma hardware Arquitectura, conectividad, mapa de memoria, parmetros

Verificacin de la plataforma hardware Modelos y ficheros de comandos de simulacin

Configuracin de la plataforma software

Drivers, libreras, sistema operativo

Desarrollo de software de aplicacin Edicin fuentes, compilacin, enlazado

Depuracin de aplicaciones Descarga y ejecucin bajo control de un debugger

3.6.4. Xilinx Platform Studio En este caso, el flujo de diseo hardware/software del PLC desarrollado, se realiz con la herramienta Xilinx Platform Studio. XPS es una interfaz grfica de usuario (GUI) que facilita los diferentes procesos relacionados con la especificacin y creacin de una plataforma de procesado empotrada, as como el desarrollo y depuracin de aplicaciones software sobre dicha plataforma.[34] Las funciones de XPS son: Configuracin hardware y software de la plataforma. Desarrollo de programas de aplicacin. Gestin de dependencias en el flujo de diseo. XPS crea una estructura de carpetas y ficheros donde se encuentran todos los parmetros del sistema que estamos implementando.[35]

Figura 3. reas que constituyen la interfaz grfica de XPS.

Las reas de la interfaz de XPS son:

El panel de Informacin del Proyecto. El panel de Ensamblaje del Sistema. El panel Consola. A continuacin se brindan detalles de cada rea. El Panel de Informacin de Proyecto est compuesto por: - Panel de proyecto: Aqu se pueden ver la estructura de carpetas y ficheros de configuracin creados por XPS. - Panel de aplicaciones: En este se observan los ficheros que constituyen la aplicacin a desarrollar y se configuran los parmetros de compilacin y enlazado. - Panel catlogo de mdulos IP: Muestra hardware previamente verificado que puede servir de soporte para los perifricos del sistema.

Panel de Ensamblaje del Sistema. En este panel se puede apreciar todo el hardware del sistema utilizado. Tiene tres vistas: - Interfaz de Bus: Es posible ver los buses usados y los perifricos conectados a estos. - Puertos: En esta vista se muestra los puertos de E/S de cada uno de los IP cores que constituyen el sistema. - Direcciones: Aparecen el mapa de direcciones de memoria, en este se observan los rangos de direcciones asignados a cada dispositivo de entrada/salida. El Panel de Consola - En l se muestran los mensajes de las aplicaciones a las que XPS llama para ejecutar cada tarea ofrecida por la interfaz grfica. Es de especial utilidad en la visualizacin de errores de programacin y en la estructura del hardware. 3.6.4.1. Inicio de proyectos en XPS

La creacin de un proyecto requiere la definicin de los ficheros de especificacin de hardware (MHS) y software (MSS). Existen tres procedimientos para crear una plataforma en XPS: Mediante el asistente Base System Builder (BSB) si la placa que se utiliza es una de las soportadas. A travs de las ventanas de captura de informacin de XPS: - Add/EditCores: especificacin hardware en el fichero MHS. - Software Settings: configuracin software en el fichero MSS. - Utilizando el editor PBD (Processor Block Diagram). Permite leer, crear o modificar las especificaciones de la plataforma hardware de forma grfica.

3.7. Introduccin al controlador lgico programable basado en hardware reconfigurable En el tpico Introduccin al controlador lgico programable del captulo 1 se conoci que la arquitectura hardware bsica del PLC consiste de una CPU para el control de clculos; memoria operativa para datos temporales, memoria de programa, conversor A/D y D/A como interfaces con los valores del procesos y un bus interno de datos para intercambio de datos. Por ser el FPGA de naturaleza puramente digital, la mayor parte de las funcionalidades del PLC van estar embebidas en el FPGA excepto la interfaces para E/S de las seales analgicas, ver figura 4. En el PLC convencional las funcionalidades (conteo, temporizacin) se desarrollan a nivel de software y de manera secuencial. En el PLC que se desarrolla, varias funcionalidades se realizan en hardware aprovechando las potencialidades de paralelismo y velocidad que este ofrece. Se quiere obtener un PLC reconfigurable que se pueda adaptar a los requerimientos de cada aplicacin en particular (cada aplicacin puede diferir en la cantidad y tipo de mdulos de comunicacin, mdulo PID, contadores, temporizadores, E/S analgicas y digitales).

Figura 4. PLC basado en hardware reconfigurable.

3.8. Implementacin en VHDL de funcionalidades del controlador lgico programable basado en hardware reconfigurable Con la herramienta ISE 12.1 (Integrated Software Environment) se crearon los mdulos VHDL de los siguientes mdulos del PLC: 1. Contador ascendente (CTU). 2. Contador descendente (CTD). 3. Contador ascendente/descendente (CTUD). 4. Timer con retardo a la conexin (Timer On Delay). 5. Timer con retardo a la desconexin (Timer Off Delay). 6. Entradas digitales (Digitial In). 7. Salidas Digitales (Digital Out). 8. Temporizador de eventos (Timer). Los contadores y temporizadores son de 32 bits, y pueden configurarse para que generen interrupcin. Los mdulos de entradas/salidas digitales son de 4,8,16 y 32 bits. A partir de estos mdulos VHDL se crearon sus respectivos mdulos IP con la herramienta EDK 12.1 (Embedded Development Kit), lo cual se describe en la seccin 3.9. 3.8.1. Mdulo de entradas digitales (mdulo_in.vhd)

Este mdulo realiza la lectura de las entradas digitales del PLC reconfigurable, tiene las variantes de 4,8,16 y 32 bits. En la siguiente figura se muestra la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 5. Mdulo de entradas digitales de 8 bits.

En su funcionalidad incorpora un circuito antirrebotes para las entradas, por lo que se usa la seal de reloj (clk) y la seal de reset (R) de los biestables. 3.8.2. Mdulo de salidas digitales (mdulo_out.vhd)

Este mdulo tiene las variantes de 4,8,16 y 32 bits. En la siguiente figura se muestra la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 6. Mdulo de salidas digitales de 8 bits.

3.8.3. Contador Ascendente (CTU.vhd) El contador ascendente es de 32 bits y tiene 4 entradas y tres salidas, tal y como muestra la siguiente figura de la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 7. Contador ascendente de 32 bits.

El contador tiene las siguientes entradas: PV: Valor de conteo deseado en un nmero de 32 bit por lo que puede contar 232 eventos. Clk: reloj del sistema a 50Mhz, la entrada asincrnica CU se sincroniza mediante un detector de flanco al reloj del sistema. CU: entrada de eventos a contar. R: Reset del contador. Cuando se activa, la salida DN va a 0 y la salida CV se carga con el valor cero.

Salidas del contador: CV: contiene el valor actual del conteo de eventos del contador. DN: salida del contador que se pone a 1 cuando se alcanza el valor de conteo PV . Interrupt: salida del contador que se pone a 1 cuando se alcanza el valor de conteo PV , se utiliza para generar la seal de interrupcin. El contador ascendente cuenta eventos desde un valor cero. Cada vez que detecta un flanco ascendente en la entrada CU incrementa el conteo. Cuando alcanza el valor de conteo PV pone las salidas DN y Interrupt en 1 . 3.8.4. Contador descendente (CTD.vhd) El mdulo del contador descendente es de 32 bits y tiene 4 entradas y 3 salidas tal como muestra la siguiente figura de la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 8. Contador descendente de 32 bits.

El contador tiene las siguientes entradas: PV: Valor de conteo deseado en un nmero de 32 bit por lo que puede contar 232 eventos. Clk: reloj del sistema a 50Mhz, la entrada asincrnica CD se sincroniza mediante un detector de flanco al reloj del sistema. CD: entrada de eventos a contar. Preset: Preset del contador. Cuando se activa, la salida DN va a cero y CV se carga con el valor PV .

Salidas del contador: CV: contiene el valor actual del conteo de eventos del contador. DN: salida del contador que se pone a 1 cuando se alcanza el valor de conteo cero. Interrupt: salida del contador que se pone a 1 cuando se alcanza el valor de conteo cero. El contador descendente cuenta eventos comenzando desde el valor PV , decrementando el conteo cada vez que detecta un flanco de subida en la entrada CD . Cuando el conteo llega a cero las salidas DN y Interrupt del contador se ponen en 1 . 3.8.5. Contador ascendente/descendente (CTUD.vhd) El mdulo del contador ascendente/descendente es de 32 bits y tiene 5 entradas y 4 salidas tal como muestra la siguiente figura de la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 9. Contador ascendente/descendente de 32 bits.

El contador tiene las siguientes entradas: PV: Valor de conteo deseado en un nmero de 32 bit por lo que puede contar 232 eventos. Clk: reloj del sistema a 50Mhz, las entrada asincrnicas CU y CD se sincronizan mediante un detector de flanco al reloj del sistema. CD: entrada de eventos a contar en modo descendente. CU: entrada de eventos a contar en modo ascendente. R: reset del contador. Cuando se activa la salida QU y QD van a 0 y CV se carga con el valor cero.

Salidas del contador: CV: contiene el valor actual del conteo de eventos del contador. QU: salida del contador que se pone a 1 cuando se alcanza el valor de conteo PV en modo ascendente. Interrupt: salida del contador que se pone a 1 cuando se alcanza el valor de conteo PV en modo ascendente. QD: salida del contador que se pone a 1 cuando se alcanza el valor de conteo cero en modo descendente. El contador ascendente/descendente cuenta eventos comenzando desde el valor cero, si detecta un flanco de subida en la entrada CU se incrementa el conteo, si se detecta un flanco de subida en la entrada CD se decrementa el conteo. Si se detectan flancos de subidas simultneos en ambas entradas el conteo no vara. Si el conteo alcanza el valor PV , las salidas QU y Interrupt se ponen en 1 , si el conteo alcanza el valor cero en modo descendente la salida QD se pone en 1 . 3.8.6. Timer con retardo a la conexin (TON.vhd) El timer con retardo a la conexin tiene 4 entradas y 5 salidas tal como muestra la siguiente figura de la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 10. Timer on_delay

El timer on_delay tiene las siguientes entradas: Tiempo_base: especifica en un nmero de 32 bit la base de tiempo del temporizador, valor 1000 para base de tiempo 1ms(milisegundos), 10 para base de tiempo 10ms, 1 para base de tiempo 1s.

PV: cantidad a temporizar en un nmero de 32 bits, dependiendo de la base de tiempo se temporizan PV milisegundos o PV segundos. Clk: reloj del sistema de 50Mhz a partir del cual se logra la temporizacin. Input: entrada para iniciar la temporizacin del timer. El timer on_delay tiene las siguientes salida: CV: contiene el valor actual transcurrido del tiempo de temporizacin DN: salida del timer que se pone a 1 cuando se termina la temporizacin. Interrupt: salida del timer que se pone a 1 cuando se termina la temporizacin. EN: salida de timer(indica habilitacin del timer) que se pone a 1 cuando la entrada input=1 , y se pone a 0 cuando la entrada input=0 . TT: salida del timer que se pone a 1 mientras el timer est temporizando.

Figura 11. Carta de tiempo del timer on delay.

3.8.7. Timer con retardo a la desconexin (TOFF.vhd) El timer con retardo a la desconexin tiene 4 entradas y 5 salidas tal como muestra la siguiente figura de la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 12. Timer off_delay

El timer off_delay tiene las siguientes entradas: Tiempo_base: especifica en un nmero de 32 bit la base de tiempo del temporizador, valor 1000 para base de tiempo 1ms(milisegundos), 10 para base de tiempo 10ms, 1 para base de tiempo 1s. PV: cantidad a temporizar en un nmero de 32 bits, dependiendo de la base de tiempo se temporizan PV milisegundos o PV segundos. Clk: reloj del sistema de 50Mhz a partir del cual se logra la temporizacin. Input: entrada para iniciar la temporizacin del timer. El timer off_delay tiene las siguientes salida: CV: contiene el valor actual transcurrido del tiempo de temporizacin DN: salida del timer. Interrupt: salida del timer que se pone a 1 cuando se termina la temporizacin. EN: salida de timer(indica habilitacin del timer) que se pone a 1 cuando la entrada input=1 , y a cero cuando la entrada input=0 . TT: salida del timer que se pone a 1 mientras el timer est temporizando.

Figura 13. Carta de tiempo del timer off delay

3.8.8. Temporizador de eventos (Temporizador.vhd) Este temporizador se utilizar para generar cada determinado tiempo especificado por el usuario una interrupcin, la se utilizar en el control PID. Tiene 4 entradas y 1 salida tal como muestra la siguiente figura de la vista esquemtica realizada por la herramienta ISE 12.1.

Figura 14. Temporizador de eventos.

El temporizador tiene las siguientes entradas: Tiempo_base: especifica en un nmero de 32 bit la base de tiempo del temporizador, valor 1000 para base de tiempo 1ms(milisegundos), 10 para base de tiempo 10ms, 1 para base de tiempo 1s. PV: cantidad a temporizar en un nmero de 32 bits, dependiendo de la base de tiempo se temporizan PV milisegundos o PV segundos. Clk: reloj del sistema de 50Mhz a partir del cual se logra la temporizacin. R: entrada para reiniciar la temporizacin del timer. El temporizador tiene la siguiente salida: Interrupt: salida del timer que se pone a 1 cuando se termina la temporizacin configurada. 3.9. Mdulos IP de funcionalidades del controlador lgico programable basado en hardware reconfigurable Para poder integrar al sistema Microblaze los mdulos VHDL de las funcionalidades del PLC descritos anteriormente se hace necesario crear sus correspondientes mdulos IP, esto se hizo mediante la opcin Create or Import Peripheral de Xilinx Platform Studio, figura 15.

Figura 15. Opcin para crear mdulo IP

Al seleccionar esta opcin aparece un asistente para crear el mdulo IP, figura 16.

Figura 16. Asistente para crear mdulo IP

La creacin de un IP tiene dos partes, figura 17: 1. Primero se selecciona la opcin de create template for a new peripheral, donde el usuario configura en las ventanas siguientes las funcionalidades del perifrico y lo crea. 2. Ya creado el perifrico, entonces se selecciona la opcin import existing peripheral. Al culminar se tiene listo el mdulo IP para ser usado en el sistema Microblaze.

Figura 17. Opciones para crear e importar un perifrico

A continuacin se describen los elementos ms importantes de la creacin de los siguientes IP: Entradas digitales. Contador ascendente. Timer con retardo a la conexin Temporizador de eventos. Se explicarn los pasos para crear e importar el perifrico para cada uno de ellos. 3.9.1. Mdulo IP de las entradas digitales 3.9.1.1.Crear IP En el asistente de crear/importar un perifrico se selecciona la opcin de create template for a new peripheral, donde el usuario configura en las ventanas siguientes las funcionalidades del perifrico. A continuacin se selecciona la localizacin donde se va a almacenar el perifrico a crear, figura 18.

Figura 18. Ventana donde se indica la localizacin para guardar el perifrico a crear

Se especifica el nombre y la versin del perifrico a crear, figura 19. El nombre se escribe con letra minscula.

Figura 19. Ventana para especificar el nombre del perifrico.

A continuacin se especifica el bus al cual se conectar el perifrico en el sistema Microblaze (se seleccion el bus PLB para todos los mdulos IP creados en este trabajo), figura 20.

Figura 20. Ventana para seleccionar el bus soportado por el perifrico.

Para este mdulo de entradas digitales se configura que este perifrico sea accesible a travs de registros, que permitan leer o escribir en l cuando se implemente la aplicacin software en lenguaje C, para esto marcar solamente el checkbox User logic software register, figura 21.

Figura 21. Ventana para seleccionar los servicios IPIF del perifrico.

En la ventana de Slave interface, donde se especifica el ancho del bus de dato de PLB, dejarlo por defecto en 32 bit y pulse next. En la ventana de User S/W Register seleccionar 2 como la cantidad de registros a ser accesibles por software (registros slv_reg0 y slv_reg1) y pulse next. En la ventana de IP Interconnect pulse next sin modificar ningn parmetro. En la ventana de Peripheral Simulation Support pulse next sin modificar ningn parmetro. En la ventana de Peripheral Implementation Support, marcar los checkbox que se muestran en la figura 22, para poder implementar la lgica de usuario del perifrico utilizando la herramienta ISE.

Figura 22. Ventana para seleccionar la herramienta de implementacin de la lgica de usuario

Pulsar next, y despus finish. En el camino seleccionado para crear el perifrico: D:\Edk_respositorio_usuario\MyProcessorIPLib, encontramos dos carpetas importantes como se muestra en la figura 23. 1. Drivers: contiene fundamentalmente, la librera digital_in_8b.h, con las funciones para poder leer y escribir en el mdulo IP en la aplicacin software a desarrollar en lenguaje C. 2. Pcores: contiene un conjunto de carpetas asociadas al hardware del mdulo IP. - HDL\VHDL: contiene los ficheros VHDL del IP creado. - Devl\projnav: contiene un proyecto ISE para desarrollar la lgica de usuario del mdulo IP.

Figura 23. Carpeta del IP digital_in_4b.

Antes de importar el perifrico para tener listo el mdulo IP hay que modificar los ficheros que estn ubicados en la carpeta VHDL: User logic.vhd: contiene la lgica de usuario, donde el mdulo VHDL descrito en la seccin 3.8.1 se mapea como componente. Digital_in_8b.vhd: es el top level del mdulo IP creado, en el se mapea el fichero user_logic.vhd. Para crear la lgica de usuario del IP se siguen los siguientes pasos: 1. Copiar en la carpeta VHDL el fichero mdulo_in.vhd decrito en la seccin 3.8.1. 2. Ejecutar el proyecto ISE que se encuentra en la carpeta Devl\projnav. 3. Aadir el fichero mdulo_in.vhd al proyecto ISE. 4. Aadir la seal salida de tipo std_logic_vector (31 downto to 0), figura 24. 5. Mapear el componente mdulo_in en el user_logic.vhd, como se muestra en la figura 24. 6. En el fichero user_logic.vhd, en la sentencia case de la implementacin del modelo del registro accesible por software, sustituir slv_reg1 por salida, como muestra la figura 25.

7. Aadir el puerto de usuario entradas al fichero user_logic.vhd, como se muestra en la figura 26. 8. En el fichero digital_in_8b.vhd, aadir el puerto de usuario entradas como muestra la figura 27. Cuando se utilice en un proyecto hardware el IP creado, este puerto es accesible a travs de los pines fsicos de la FPGA. 9. Mapear los puertos de usuario del fichero user_logic.vhd con los puertos de usuarios del fichero digital_in_8b.vhd, como se muestra en la figura 28.

Figura 24. Mapeo del fichero mdulo_in.vhd en la lgica de usuario.

Figura 25. Registros del IP mdulo_in_8b accesibles por software.

Figura 26. Puerto de usuario del user_logic.vhd.

Figura 27. Puertos de usuario en el top level.

Figura 28. Mapeo de la lgica de usuario en el top level.

3.9.1.2.

Importar IP

En el asistente de crear/importar un perifrico se selecciona la opcin de Import existing peripheral y se pulsa Next, despus se selecciona la ruta D:\Edk_respositorio_usuario y se pulsa Next. En la ventana Name and versin se escribe el nombre digital_in_8b y se pulsa Next. En la ventana Source File Type se marca el checkbox HDL sources files y pulsa Next. En la ventana HDL Source files se indica como la herramienta debe localizar los ficheros VHDL para construir el perifrico (mdulo IP): Se marca el checkbox Use data (*.mpd) collected during a previous invocation of the tool y se selecciona la ruta del fichero digital_in_8b_v2_1_0.mpd, como se muestra en la figura 29. Se marca el radiobottom Use existing Peripheral Analysis Order file (*.pao) y se selecciona la ruta del fichero digital_in_8b_v2_1_0.pao como se muestra en la figura 29.

Figura 29. Ventana para localizar los ficheros VHDL que componen el mdulo IP.

En la prxima ventana aadir el fichero mdulo_in.vhd (se encuentra en la carpeta VHDL del directorio Edk_respositorio_usuario) que contiene la funcionalidad del mdulo IP, dando click en el botn Add Files. Ubicarlo en el orden que muestra la figura 30 utilizando los botones Move up y Move down.

Figura 30. Orden de anlisis de los ficheros VHDL que componen el mdulo IP.

En la ventana Bus Interfaces dejar marcada la opcin que aparece por defecto de PLBv46 Slave (SPLB) y pulsar Next en las prximas ventanas y Finish para terminar. 3.9.2. Mdulo IP del contador ascendente Los pasos a seguir son similares a la creacin del IP del mdulo de entradas digitales, excepto que hay que aadir los pasos para configurar la interrupcin tanto para crear como para importar el perifrico, solo se mostrarn las ventanas para estos nuevos pasos. 3.9.2.1. Crear IP En la ventana Name and Version se escribe el nombre contador_up.

En la ventana IPF (IP interface) Services marcar los checkbox User logic software register y Interrupt control. En la ventana Interrupt Service configurar como se muestra en la figura 31: Modo de captura: Rising Edge Detect. Nmero de interrupciones generadas por la lgica de usuario: 1 Desmarcar el checkbox User Device ISC porque no se necesita un controlador de interrupciones en la lgica de usuario, ya que solo se genera una interrupcin.

Figura 31. Ventana para configurar la interrupcin del IP.

En la ventana User S/W register seleccionar 5 registros. Antes de importar el perifrico para tener listo el mdulo IP hay que modificar los ficheros que estn ubicados en la carpeta VHDL:

User logic.vhd: contiene la lgica de usuario, donde el mdulo VHDL descrito en la seccin 3.8.3 se mapea como componente. Contador_up.vhd: es el top level del mdulo IP creado, en el se mapea el fichero user_logic.vhd. Para crear la lgica de usuario del IP se siguieron los siguientes pasos. 1. Copiar en la carpeta VHDL el fichero CTU.vhd descrito en la seccin 3.8.3. 2. Ejecutar el proyecto ISE que se encuentra en la carpeta Devl\projnav. 3. Aadir el fichero CTU.vhd al proyecto ISE. 4. Aadir la seales necesarias como muestra la figura 32: salida:std_logic_vector(31 downto 0); salidaQ:std_logic_vector(31 downto 0); signal sal_Q:std_logic; 5. Mapear el componente CTU en el user_logic.vhd, como se muestra en la figura 33. 6. En el fichero user_logic.vhd, en la sentencia case de la implementacin del modelo del registro accesible por software, sustituir slv_reg1 por salida y slv_reg4 por salidaQ, como muestra la figura 34. 7. Aadir el puerto de usuario Interrupt al fichero user_logic.vhd, como se muestra en la figura 35. 8. Eliminar o desactivar el ejemplo de cdigo para generar interrupcin en el fichero user_logic, como muestra la figura 36. 9. En fichero contador_up.vhd, en la declaracin de atributos de la entidad, cambiar attribute SIGIS of IP2INTC_Irpt: signal is "INTR_ LEVEL_HIGH" por attribute SIGIS of IP2INTC_Irpt: signal is "INTR_EDGE_RISING", como muestra la figura 37. 10. En el fichero contador_up.vhd, en la instancia de control de interrupcin eliminar o desactivar la lnea de mapeo Intr2Bus_DevInt => IP2INTC_Irpt, como muestra la figura 38. 11. En el fichero contador_up.vhd mapear en la instancia del user_logic

Interrupt=>IP2INTC_Irpt, como se muestra en la figura 39. Interrupt: representa la seal de interrupcin que genera la lgica de usuario del fichero CTU.vhd. IP2INTC_Irpt: representa el puerto de interrupcin del IP.

Figura 32. Seales de la lgica de usuario.

Figura 33. Mapeo del componente CTU en el fichero user_logic.vhd

Figura 34. Registros del IP contador_up accesibles por software.

Figura 35. Puerto de usuario en el fichero user_logic.vhd.

Figura 36. Eliminar el cdigo ejemplo de generacin de interrupcin en el fichero user_logic.

Figura 37. Configurar atributo de la interrupcin.

Figura 38. Eliminar interrupcin de la instancia de control de interrupcin.

Figura 39. Mapeo de la seal de la interrupcin de la lgica de usuario.

3.9.2.2.

Importar IP

Los pasos a seguir son los mismos que lo realizados para importar el mdulo IP de las entradas digitales, aadiendo los de configuracin de interrupcin. 1. En la ventana Name and Version poner el nombre contador_up. 2. En la ventana Identify interrupt signals marcar el radiobottom Rising edge sensitive, como muestra la figura 40. 3. Next en las prximas ventanas y Finish.

Figura 40. Configurar seal de interrupcin del IP.

3.9.3. Mdulo IP del timer con retardo a la conexin 3.9.3.1. Crear IP

Los pasos a seguir son los mismos que al crear el IP del contador ascendente, solo se especificarn los pasos especficos para crear este IP. 1- En la ventana Name and Version escribir timer_on_delay. 2- En la ventana IPIF services marcar los checkbox: User logic software register y Interrupt control. 3- En la ventana Interrupt Service configurar idem al contador ascendente. 4- En la venta User S/W Register seleccionar 5 registros. 5- Next y Finish en las prximas ventanas Antes de importar el perifrico para tener listo el mdulo IP que se quiere crear hay que modificar los ficheros que estn ubicados en la carpeta VHDL: - User logic.vhd: contiene la lgica de usuario, donde el mdulo VHDL descrito en la seccin 3.8.6 se mapea como componente. - Contador_up.vhd: es el top level del mdulo IP creado, en l se mapea el fichero user_logic.vhd. Para crear la lgica de usuario del IP se siguieron los siguientes pasos: 1. Copiar en la carpeta VHDL el fichero TON.vhd descrito en la seccin 3.8.6. 2. Ejecutar el proyecto ISE que se encuentra en la carpeta Devl\projnav. 3. Aadir el fichero TON.vhd al proyecto ISE. 4. Aadir la seales necesarias como muestra la figura 41: salida:std_logic_vector(31 downto 0); salidaQ:std_logic_vector(31 downto 0); sal_EN:std_logic; sal_TT:std_logic; sal_Q:std_logic; 5. Mapear el componente TON en el user_logic.vhd, como se muestra en la figura 42. 6. En el fichero user_logic.vhd, en la sentencia case de la implementacin del modelo del registro accesible por software, sustituir slv_reg2 por salida y slv_reg4 por salidaQ, como muestra la figura 43. 7. Aadir el puerto de usuario Interrupt al fichero user_logic.vhd, idem al contador_up.

8. Eliminar o desactivar el ejemplo de cdigo para generar interrupcin en el fichero user_logic, idem al contador_up. 9. En fichero timer_on_delay.vhd, cambiar el atributo "INTR_ LEVEL_HIGH " por "INTR_EDGE_RISING", idem al contador_up. 10. En el fichero timer_on_delay.vhd, en la instancia de control de interrupcin eliminar o desactivar la lnea de mapeo Intr2Bus_DevInt => IP2INTC_Irpt, idem al contador_up. 11. En el fichero timer_on_delay.vhd mapear en la instancia del user_logic Interrupt=>IP2INTC_Irpt, idem al contador_up. - Interrupt: representa la seal de interrupcin que genera la lgica de usuario del fichero TON.vhd. - IP2INTC_Irpt: representa el puerto de interrupcin del IP.

Figura 41. Seales del fichero user_logic.vhd.

Figura 42. Mapear TON.vhd en el fichero user_logic.vhd.

Figura 43. Registros del IP timer_on_delay accesibles por software.

3.9.3.2.

Importar IP

Los pasos a seguir son los mismos que lo realizados para importar el mdulo IP del contador_up. 1. En la ventana Name and Version poner el nombre timer_on_delay. 2. En la ventana Identify interrupt signals marcar el radiobottom Rising edge sensitive, idem al contador_up.

3. Next en las prximas ventanas y Finish. 3.9.4. Mdulo IP del temporizador de eventos Crear IP

3.9.4.1.

Los pasos a seguir son los mismos que al crear el IP del contador ascendente, solo se especificarn los pasos especficos para crear este IP. 6- En la ventana Name and Version escribir timer. 7- En la ventana IPIF services marcar los checkbox: User logic software register y Interrupt control. 8- En la ventana Interrupt Service configurar idem al contador ascendente. 9- En la venta User S/W Register seleccionar 3 registros. 10-Next y Finish en las prximas ventanas. Antes de importar el perifrico para tener listo el mdulo IP que se quiere crear hay que modificar los ficheros que estn ubicados en la carpeta VHDL: User logic.vhd: contiene la lgica de usuario, donde el mdulo VHDL descrito en la seccin 3.8.8 se mapea como componente. Timer.vhd: es el top level del mdulo IP creado, en el se mapea el fichero user_logic.vhd. Para crear la lgica de usuario del IP se siguieron los siguientes pasos: 1. Copiar en la carpeta VHDL el fichero temporizador.vhd decrito en la seccin 3.8.8. 2. Ejecutar el proyecto ISE que se encuentra en la carpeta Devl\projnav. 3. Aadir el fichero temporizador.vhd al proyecto ISE. 4. Mapear el componente temporizador en el user_logic.vhd, como muestra la figura 44. 5. Aadir el puerto de usuario Interrupt al fichero user_logic.vhd, idem al contador_up. 6. Eliminar o desactivar el ejemplo de cdigo para generar interrupcin en el fichero user_logic, idem al contador_up. 7. En fichero timer.vhd, cambiar el atributo "INTR_ LEVEL_HIGH " por

"INTR_EDGE_RISING", idem al contador_up. 8. En el fichero timer.vhd, en la instancia de control de interrupcin eliminar o desactivar la lnea de mapeo Intr2Bus_DevInt => IP2INTC_Irpt, idem al contador_up.

9. En el fichero timer.vhd mapear en la instancia del user_logic Interrupt=>IP2INTC_Irpt, idem al contador_up. Interrupt: representa la seal de interrupcin que genera la lgica de usuario del fichero Temporizador.vhd. IP2INTC_Irpt: representa el puerto de interrupcin del IP.

Figura 44. Mapeo del componente Temporizador en el fichero user_logic.vhd.

3.9.4.2.

Importar IP

Los pasos a seguir son los mismos que lo realizados para importar el mdulo IP del contador_up. 1. En la ventana Name and Version poner el nombre timer. 2. En la ventana Identify interrupt signals marcar el radiobottom Rising edge sensitive, idem al contador_up. 3. Next en las prximas ventanas y Finish. 3.10. Flujo de diseo Hardware/Software del controlador lgico programable basado en hardware reconfigurable En el diseo que se aborda para este trabajo se conciben 3 tipos de configuraciones bsicas para el PLC: la gama baja, la media y la alta. Esta decisin se fundamenta en

el hecho de que no todos los mdulos presentes en un PLC convencional, desde el punto de vista del hardware, se pueden sintetizar en un FPGA. Por ejemplo, las etapas analgicas. Al dividir en 3 gamas el diseo, el hardware de las etapas analgicas de cada una es diferente, siendo mayor la cantidad posible de entradas/salidas analgicas la de la gama alta. Esto no atenta contra la reconfiguracin, ya que se puede mantener la capacidad del usuario de seleccionar cuntas de esas posibles entradas/salidas configurar para el PLC en una aplicacin determinada, pudiendo en cualquier momento, modificar su decisin a lo largo del proceso de puesta a punto de la aplicacin. Desde el punto de vista del software, las diferentes gamas no tendrn diferencias entre ellas. En este sentido, se explican los principios generales de diseo e implementacin del PLC de gama baja basado en hardware reconfigurable. A continuacin se describe el flujo de diseo hardware/software del controlador lgico programable. 3.10.1. Flujo de diseo hardware En la pestaa IP Catalog de la herramienta XPS, estn los mdulos IP que se pueden utilizar para desarrollar un sistema basado en Microblaze, incluyendo los IPs creados en la seccin 3.9, como muestra la figura 45.

Figura 45. Catalogo de mdulos IP.

Para aadir un IP, se deber dar click derecho encima y seleccionar Add IP, para cada uno aadido hay que configurarlo en las pestaas Bus Interface, Ports y Addresses. En caso de que algn mdulo tenga puertos externos al FPGA hay que configurar dicho puerto como externo. En la figura 46 se muestra el diagrama en bloque de los mdulos que componen al PLC, se pusieron juntos en los recuadros los temporizadores, contadores y mdulos de entradas/salidas digitales, pero cada uno se conecta de manera independiente al bus PLB. RS232: puerto serie. Es el mdulo del PLC para comunicarse con otros PLC o con un sistema SCADA. SPI: mdulo SPI. Se utiliza para manejar los conversores A/D y D/A de los mdulos de E/S analgicas. LCD: es un GPIO (general purpose I/O), configurado con 7 bits de ancho de datos para manejar el LCD del kit Spartan 3e.

Adconv: es un GPIO configurado con un bit de ancho de datos, para manejar la seal de inicio de conversin del A/D. Intc: controlador de interrupciones, para manejar las interrupciones de los diferentes mdulos que la generan. La salida del controlador se conecta a la interrupcin de microblaze. Timer_on_delay: timer con retardo a la conexin. Hay 2 instancias en el proyecto hardware como muestra la figura 45. 1. Timer_on_delay_0. 2. Timer_on_delay_1. Timer_off_delay: timer con retardo a la desconexin. Hay 2 instancias en el proyecto hardware como muestra la figura 45. 1. Timer_off_delay_0. 2. Timer_off_delay_1. Timer: temporizador de eventos. Digital_in_8b: mdulo de entradas digitales de 8 bits. 1. Digital_in_8b_0: conectado a los 4 interruptores y 4 pulsadores del kit de desarrollo. Digital_out_8b: mdulo de salidas digitales de 8 bits. 1. Digital_out_8b_0: conectado a los 8 leds del kit de desarrollo. Contador_up: contador ascendente. Hay 2 instancias en el proyecto hardware como muestra la figura 45. 1. Contador_up_0. 2. Contador_up_1. Contador down: contador descendente. Hay 2 instancias en el proyecto hardware como muestra la figura 45. 1. Contador_down_0. 2. Contador_down_1. Contador_up_down: contador ascendente/descendente.

RS232

SPI

LCD

adconv

Intc

Bus PLB
Microblaze

Timer_on_delay Bus ILMB


ILMB BRAM CNTLR

Digital_in_8b Digital_out_8b

Contador_up Contador_down Contador_up_down

Bus DLMB
DLMB BRAM CNTLR

Timer_off_delay Timer

BRAM

Figura 46. Diagrama en bloques del sistema PLC.

3.10.1.1. Puerto serie (Uart Lite) Ciertas caractersticas pueden ser parametrizadas en el diseo del UART Lite para permitir al usuario que obtenga una UART Lite confeccionada nicamente para el sistema que desarrolla. Esto permite que el usuario configure un diseo que utilice solo los recursos requeridos por el sistema y que funcione con el mejor desempeo posible, por ejemplo: razn de baudios, paridad, cantidad de bits de datos, etc. En el sistema PLC est configurado de la siguiente forma: velocidad 9600 baudios, 8 bits de datos y paridad par. 3.10.1.1.1. Registros del UART Lite El conjunto de registros del UART Lite es el siguiente: 1. Registro de recepcin FIFO: lee carcter desde la FIFO de recepcin. 2. Registro de transmisin FIFO: escribe carcter dentro de la FIFO de transmisin. 3. Registro de estado: contiene el estado del FIFO de recepcin y transmisin, si las interrupciones estn habilitadas, y si ocurre cualquier error. 4. Registro de control: contiene el control del UART Lite.

3.10.1.1.2. Interrupciones Si las interrupciones estn habilitadas, una interrupcin se genera cuando una de las siguientes condiciones es verdadera: 1. Cuando existe cualquier carcter vlido en el FIFO de recepcin, la interrupcin permanece activa hasta que el FIFO de recepcin est vaco. 2. Cuando el FIFO de transmisin pasa de no vaco a vaco. 3.10.1.2. Controlador de interrupciones Al controlador de interrupciones se conectan todas las fuentes de interrupcin como muestra la figura 47.

Figura 47. Fuentes de interrupcin del PLC.

3.10.1.3. LCD Es un GPIO, con el canal 1 configurado con 7 bit de ancho de datos, los cuales se asocian a los pines del FPGA conectados al LCD de la tarjeta Spartan 3e, ver anexo 22 y 23. 3.10.1.4. Conversin A/D y D/A A continuacin se explican los elementos hardware para la conversin A/D y D/A. 3.10.1.4.1. BUS SPI El BUS SPI (Serial Peripheral Interface) constituye un estndar desarrollado por Motorola con el objetivo de comunicar dispositivos electrnicos ubicados en la misma

placa de circuito impreso. El BUS establece un enlace serie sincrnico para la comunicacin bidireccional, en modo full duplex, y configuracin Maestro/Esclavo. Solo el Maestro puede iniciar la comunicacin y se permite la existencia de varios esclavos. Este BUS tambin es conocido como BUS serie de 4 hilos.[36] SPI establece el uso de 4 seales, cada una de ellas con su identificador y una funcin especfica. Estas seales pueden utilizarse en diferentes configuraciones, dependiendo de los dispositivos a utilizar, por lo que pueden no estar presentes todas en una aplicacin determinada: SCK: Serial Clock (Reloj) MOSI: Master Output Slave Input (Salida del maestro, entrada del esclavo) MISO: Master Input Slave Output (Entrada del maestro, salida del esclavo) SS: Slave Select (seleccin del esclavo)

. Figura 48. Conexin bsica de dispositivos mediante SPI.

3.10.1.4.2. Conversin A/D La tarjeta Spartan 3e tiene un circuito de captura analgica de dos canales, compuesto por un pre-amplificador de escala programable y un convertidor analgico-digital (ADC). El preamplificador de tecnologa linear LTC6912-1 escala la seal analgica, su salida se conecta al ADC de tecnologa linear LTC1407A-1, ambos son programados o controlados serialmente por la FPGA.[28]

Figura 49. Vista detallada del circuito de captura analgica.

El circuito de captura analgica convierte el voltaje analgico entrante en el conector VINA o VINB en una representacin digital de 14 bits por cada canal, como expresa la siguiente ecuacin:

El voltaje de referencia para el amplificador y el conversor A/D es 1.65V, generado mediante un divisor de voltaje como muestra la figura 49. El mximo rango de voltaje del A/D es centrado alrededor del voltaje de referencia. Por eso 1.25V aparece en el denominador de la ecuacin para calcular la entrada analgica. El conversor A/D presenta la salida digital de 14 bits en complemento a dos. Un nmero de 14 bits en complemento a dos representa un valor entre manera, la cantidad es escalada por 8192 o . y . De esta

3.10.1.4.2.1. Pre-amplificador programable La ganancia (GAIN) es la configuracin actual cargada en el pre-amplificador programable. Las diferentes configuraciones permitidas de ganancias y voltajes aplicados en las entradas VINA y VINB se muestran en la tabla 5.
Tabla 5. Ganancias programables del pre-amplificador

GAIN A3 B3 0 -1 -2 -5 -10 -20 -50 -100 0 0 0 0 0 0 0 0

A2 B2 0 0 0 0 1 1 1 1

A1 B1 0 0 1 1 0 0 1 1

A0 B0 0 1 0 1 0 1 0 1

Rango del entrada Mnimo 0.4 1.025 1.4 1.525 1.5875 1.625 1.6375

voltaje Mximo 2.9 2.275 1.9 1.775 1.7125 1.675 1.6625

de

La tabla 6 lista las seales de interface entre la FPGA y el pre-amplificador. Las seales MISO, SCK y MISO son compartidas con otros dispositivos en la tarjeta Spartan 3e.
Tabla 6. Listado de las seales del pre-amplificador.

Seal MOSI AMP_CS

Pin FPGA T4 N7

Direccin FPGA->AMP FPGA->AMP

Descripcin Presenta los 8 bit de la configuracin de la ganancia programable, como define la tabla 5. Seleccin del chip, activo a nivel bajo. La ganancia del amplificador es configurada cuando esta seal se retorna a nivel alto. reloj

SCK

U16

FPGA->AMP

AMP_SHDN P7 AMP_DOUT E18

FPGA->AMP FPGA<-AMP

Apagado y Reset del pre-amplificador, activo a nivel alto Eco de la configuracin de la ganancia del preamplificador, es ignorado en la mayora de las aplicaciones.

La figura 50 muestra la interface de comunicacin SPI con el pre-amplificador, la ganancia para cada pre-amplificador es enviada como un comando de 8 bit, que consiste en dos campos de 4 bits. El bit ms significativo B3 se enva primero.

Figura 50. Interfaz SPI para el pre-amplificador.

3.10.1.4.2.2. Conversor A/D Ambos canales del conversor LTC1407A-1 son muestreados simultneamente cuando se aplica la seal AD_CONV. La tabla 7 muestra las seales de las interfaces entre la FPGA y el conversor.
Tabla 7. Seales de la interface del A/D.

Seal

Pin FPGA U16

Direccin

Descripcin

SCK

FPGA->AD FPGA->AD FPGA<-AD

Reloj Inicio de conversin Presenta la representacin digital de la muestra analgica como un valor binario de 14 bit en complemento a dos.

AD_CONV P11 MISO N10

Cuando la seal AD_CONV se pone en alto, el AD muestrea simultneamente ambos canales analgicos, como muestra la figura 51. La mxima frecuencia de muestreo es aproximadamente 1.5MHz.

Figura 51. Interfaz SPI de la conversin A/D.

3.10.1.4.3.

Conversin D/A

La tarjeta Spartan 3e incluye el conversor de tecnologa lineal LTC2624 de 4 canales e interfaz SPI, con resolucin de 12 bits. Como se muestra en la figura 52, la FPGA utiliza la interfaz SPI para comunicar el valor digital a cada uno de los 4 canales del conversor.

Figura 52. Conexin esquemtica del conversor D/A.

En la tabla 8 se muestran las seales de la interface del conversor digital-analgico.

Tabla 8. Seales de la interfase del D/A.

Seal MOSI DAC_CS

Pin FPGA T4 N8

Direccin FPGA->DA FPGA->DA

Descripcin Salida del maestro, entrada del esclavo Seleccin del D/A, activo a nivel bajo. La conversin digital a analgica comienza cuando esta seal se retorna a nivel alto. Reloj Entrada de reset asincrnico, activo a nivel bajo Entrada del maestro, salida del esclavo

SCK

U16

FPGA->DA FPGA->DA FPGA<-DA

DAC_CLR P8 MISO N10

La figura 53 muestra el protocolo de comunicacin requerido por la interface del conversor D/A. La interfaz SPI dentro del conversor D/A est formada por un registro de desplazamiento de 32 bits. Cada comando de 32 bits consiste de un comando, una direccin, seguido por un valor de dato. Cuando un nuevo comando se enva al D/A, este responde al maestro con un eco, esta respuesta del conversor puede utilizarse para confirmar una correcta comunicacin.

Figura 53. Protocolo de comunicacin con el conversor LTC2624.

La FPGA enva primero 8 bits sin significado, seguido de un comando de 4 bits, el comando ms utilizado es COMMAND[3:0]= 0011 , el cual actualiza inmediatamente la salida seleccionada del D/A con el valor de dato especificado. Seguido al comando se selecciona uno o todos los canales del conversor con un campo de direccin de 4 bits, seguido al campo de direccin se enva un dato sin signo de 12 bits que el D/A convierte en un valor

analgico en la salida seleccionada. Finalmente, 4 o ms bits sin significado completan el comando de 32 bits. Los canales A y B usan un voltaje de referencia de 3.3V con una tolerancia de lo que el valor analgico en cada uno est representado por la siguiente ecuacin: , por

Los canales C y D usan un voltaje de referencia de 2.5V con una tolerancia de lo que el valor analgico en cada uno est representado por la siguiente ecuacin:

, por

3.10.1.4.4.

Mdulo SPI de la herramienta EDK

Los conversores A/D y D/A de la tarjeta spartan 3e tienen interfaz SPI, por eso se utiliz el mdulo SPI de la herramienta EDK para manejarlos. En la tarjeta spartan 3e las seales del bus SPI estn compartidas por varios dispositivos [28]: Pre-amplificador de ganancia programable (AMP_CS). Conversor digital-analgico (DAC_CS). Memoria Flash 16Mbits SPI (SPI_SS_B). Memoria Flash paralela de 128Mbits (SF_CE0). Plataforma de memoria Flash (FPGA_INIT_B). Es vital que cuando la FPGA se comunica con un dispositivo se deshabiliten los otros, la tabla 9 muestra las seales y el valor lgico requerido para deshabilitarlos. En el datasheet[28] de la tarjeta Spartan 3e aparece que la seal FPGA_INIT_B se deshabilita con el valor lgico 1 , lo cual es un error.

Tabla 9. Dispositivos deshabilitados en el bus SPI.

Seal SPI_SS_B AMP_CS SF_CE0 DAC_CS FPGA_INIT_B

Dispositivo deshabilitado Memoria Flash Serie Pre-amplificador programable Memoria Flash paralela Conversor D/A Plataforma Flash de

Valor 1 1 1 1

memoria 0

3.10.1.4.4.1. Configuracin del mdulo SPI El mdulo SPI se configura como muestra la figura 54: En cada transferencia SPI se envan 8 bits. Se incluyen las FIFOs para transmisin y recepcin: Cuando la FIFO de transmisin existe el dato es escrito directamente en la FIFO y la primera localizacin de la fijo es tratada como el SPIDTR (registro de transmisin del SPI), el puntero se decrementa despus de completar cada transferencia SPI. Cuando la FIFO de recepcin existe el dato recibido se almacena en la FIFO.

La razn de la frecuencia de reloj del PLB es 32, para as obtener los 1,5 MHz de operacin mxima de los conversores ( ).

El total de nmero de bits de seleccin de esclavos en el vector SS es 2. Seleccin del conversor D/A. Seleccin del pre-amplificador de ganancia programable.

Figura 54. Configuracin del mdulo SPI.

3.10.1.4.4.2. Registros del mdulo SPI El mdulo SPI es accedido a travs de un conjunto de registros que se describen a continuacin[36]: Registro de reset software (SRR): permite al programador resetear el core IP del SPI, independiente a otros cores del sistema. Registro de control (SPICR): da al programador control sobre varios aspectos del core SPI. Registro de estado: es de solo lectura, da al programador visibilidad sobre el estado de algunos aspectos del core SPI. Registro de transmisin de datos (SPIDTR): este registro es escrito con el dato a ser transmitido por el bus SPI. Registro de recepcin de datos (SPIDRR): este registro es utilizado para leer el dato recibido del bus SPI. Registro de seleccin del esclavo (SPISSR): este registro contiene una codificacin one-hot para la seleccin del esclavo en el vector SS, cada seleccin del esclavo es activa a nivel bajo.

3.10.1.4.5. Manejo de los conversores A/D y D/A con el mdulo SPI Para la conversin A/D y D/A las seales se conectaron como se indica en la figura 55.

Figura 55. Puertos externos.

El puerto amp_shdn_pin se conecta a GND (cero lgico), con esto se garantiza que el amplificador siempre est encendido, ya que la entrada AMP_SHDN del preamplificador es activa a nivel alto. Tambin se poda realizar utilizando un GPIO, poniendo un uno lgico para apagarlo y un cero lgico para encenderlo. El puerto dac_clear_pin se conecta a VCC (uno lgico), con esto se garantiza que el reset del conversor D/A no est activo, ya que la entrada DAC_CLEAR es activa a nivel bajo. Tambin se poda realizar utilizando un GPIO, poniendo un cero lgico para activar el reset y un uno lgico para desactivarlo. La entrada de seleccin (DAC_CS) del conversor D/A se conecta al bit 0 del registro de seleccin del esclavo. La entrada de seleccin (AMP_CS) del pre-amplificador se conecta al bit 1 del registro de seleccin del esclavo. Existen otros dispositivos que comparten el bus SPI, por lo que hay que deshabilitar su seleccin. La seal de seleccin (SPI_SS_B) de la memoria flash serie se pone a VCC (uno lgico).

La seal de seleccin (SF_CE0) de la memoria flash paralela se pone a VCC (uno lgico).

La seal de seleccin (FPGA_INIT_B) de la plataforma de memoria flash se pone a GND (cero lgico).

3.10.1.5. Implementacin del diseo hardware La conexin de los puertos externos de la FPGA a los pines correspondientes se describe en el anexo 23(fichero system.UCF). A partir de los ficheros system.MHS y system.UCF se crea el hardware del PLC: 1- Invocar la herramienta PlatGen para crear la plataforma hardware a partir del fichero MHS, en la opcin Hardware->Generate Netlist. 2- Invocar la herramienta Xflow para generar el fichero de configuracin de la FPGA con el hardware del PLC, en la opcin Hardware->Generate Bitstream. Se obtiene el fichero system.bit. 3.10.2. Flujo de diseo software Los PLC convencionales pueden utilizarse en varias aplicaciones modificando la programacin del PLC, siempre y cuando este cumpla con las funcionalidades requeridas. Aunque este trabajo trata sobre el desarrollo de un PLC basado en hardware reconfigurable que puede adaptarse a los requerimientos de varias aplicaciones, donde el usuario configura a la medida la cantidad de E/S analgicas y digitales, contadores, temporizadores, PID, puertos de comunicacin, etc. Como resultado en esta tesis de maestra se desarrolla un PLC de gama baja con un hardware fijo, el cual se programa en lenguaje escalera mediante la herramienta que se describe en el captulo 4. Como ncleo de procesamiento del controlador lgico programable se tiene el procesador Microblaze, el cual ejecuta cdigo ansi C. En la figura 56 se muestra el flujo de desarrollo del software de aplicacin.

Figura 56. Desarrollo de software de aplicacin.

1- A partir del fichero MSS se crea la plataforma software, mediante la opcin Software->Generate Libraries and BSPs, obtenindose: Libreras. Drivers. Rutinas de interrupciones.

2- Con el compilador GCC se desarrolla el software del PLC. 3- Al compilar el cdigo de la aplicacin software mediante la opcin Software-> Built All User Applications se obtiene el fichero executable.elf. 3.10.2.1. Libreras de los mdulos IPs En el directorio donde se almacena el proyecto, en la localizacin Microblaze_0\include se encuentran las libreras de cada mdulo IP utilizado, incluyendo los creados por el usuario. Los mdulos IPs son accesibles en el programa de aplicacin mediante la lectura y/o escritura de los registros software descritos en la seccin de creacin de mdulos IPs. Para cada IP existe una librera de funciones que permite escribir y/o leer en sus registros. En el caso de los IPs creados por el usuario con la versin EDK 12.1, cada funcin de lectura de los registros software en la librera est definida como xil_io_in32 y las de escrituras como xil_io_out32, lo cual de error al compilar la aplicacin software. Esto se soluciona modificando con XIo_In32 y XIo_Out32 respectivamente.

3.10.2.1.1. Controlador de interrupciones Se utiliz la librera de funciones de bajo nivel xintc_l.h , la cual tiene un conjunto de funciones para configurar el controlador de interrupciones y manejar las fuentes de interrupciones: Habilitar el controlador de interrupciones. XIntc_MasterEnable(BaseAddress)

Habilitar las solicitudes de las fuentes de interrupciones en el controlador. XIntc_EnableIntr(BaseAddress, EnableMask)

Es necesario habilitar la interrupcin en el procesador para que sean atendidas por Microblaze: microblaze_enable_interrupts() En la versin 8.2i a cada fuente de interrupcin se le poda asociar la rutina de atencin a interrupcin a ejecutar mediante la opcin Software->Sotfware Platform Settings. En versiones superiores esta opcin se elimin, por lo que solamente se pueden asociar las rutinas de atencin a interrupcin utilizando la funcin: XIntc_RegisterHandler(u32 BaseAddress, int InterruptId, XInterruptHandler Handler, void *CallBackRef) Como detalle para el uso de esta funcin, de parmetro *CallBackRef se utiliza (void *)0 3.10.2.1.2. Puerto serie

El puerto serie es utilizado por el protocolo Modbus RTU para la comunicacin con otros dispositivos o SCADAs. La recepcin de datos se realiza por interrupcin y la transmisin por encuesta. Se utiliz la librera de funciones de bajo nivel xuartlite_l.h , la cual tiene un conjunto de funciones para configurar y acceder al puerto serie: Habilitar la interrupcin del puerto serie. XUartLite_EnableIntr(BaseAddress)

Deshabilitar la interrupcin del puerto serie. XUartLite_DisableIntr(BaseAddress)

Chequear si el registro de recepcin est vaco. XUartLite_IsReceiveEmpty(BaseAddress)

Chequear si el registro de transmisin est lleno. XUartLite_IsTransmitFull(BaseAddress)

Enviar un byte XUartLite_SendByte(u32 BaseAddress, u8 Data)

Recibir un byte. XUartLite_RecvByte(u32 BaseAddress)

3.10.2.1.3. XGPIO Se utiliz la librera de funciones de bajo nivel xgpio_l.h , la cual tiene un conjunto de funciones para configurar y acceder a los mdulos adconv y LCD. Configurar la direccin de E/S del canal especificado. XGpio_mSetDataDirection(Xuint32 BaseAddress, unsigned Channel, Xuint32 DirectionMask) Escribir dato en el canal especificado. XGpio_mSetDataReg(Xuint32 BaseAddress, unsigned Channel, Xuint32 Data) Leer dato del canal especificado. 3.10.2.1.4. XGpio_mGetDataReg(Xuint32 BaseAddress, unsigned Channel) Contador ascendente (contador_up)

El acceso a este mdulo se hace travs de los registros software en el fichero user_logic.VHD, mediante las funciones definidas en la librera contador_up.h . Configurar el valor deseado de conteo (PV). CONTADOR_UP_mWriteSlaveReg0(BaseAddress, RegOffset, Value)

Leer el valor actual del conteo (CV). CONTADOR_UP_mReadSlaveReg1(BaseAddress, RegOffset)

Resetear el contador (R). CONTADOR_UP_mWriteSlaveReg2(BaseAddress, RegOffset, Value)

Entrada de conteo (CU). CONTADOR_UP_mWriteSlaveReg3(BaseAddress, RegOffset, Value)

Leer estado de la salida del contador (DN). 3.10.2.1.5. CONTADOR_UP_mReadSlaveReg4(BaseAddress, RegOffset) Contador descendente (contador_down)

El acceso a este mdulo se hace travs de los registros software en el fichero user_logic.VHD, mediante las funciones definidas en la librera contador_down.h . Configurar el valor deseado de conteo (PV). CONTADOR_DOWN_mWriteSlaveReg0(BaseAddress, RegOffset, Value)

Leer el valor actual del conteo (CV). CONTADOR_ DOWN _mReadSlaveReg1(BaseAddress, RegOffset)

Preset del contador (Preset). CONTADOR_DOWN_mWriteSlaveReg2(BaseAddress, RegOffset, Value)

Entrada de conteo (CD). CONTADOR_DOWN_mWriteSlaveReg3(BaseAddress, RegOffset, Value)

Leer estado de la salida del contador (DN). CONTADOR_DOWN_mReadSlaveReg4(BaseAddress, RegOffset)

3.10.2.1.6. Contador ascendente/descendente (contador_up_down) El acceso a este mdulo se hace travs de los registros software en el fichero user_logic.VHD, mediante las funciones definidas en la librera contador_up_down.h . Configurar el valor deseado de conteo (PV). CONTADOR_UP_DOWN_mWriteSlaveReg0(BaseAddress, RegOffset, Value)

Leer el valor actual del conteo (CV). CONTADOR_UP_DOWN _mReadSlaveReg1(BaseAddress, RegOffset)

Reset del contador (R). CONTADOR_UP_DOWN_mWriteSlaveReg2(BaseAddress, RegOffset, Value)

Entrada de conteo ascendente (CU). CONTADOR_UP_DOWN_mWriteSlaveReg3(BaseAddress, RegOffset, Value)

Entrada de conteo descendente (CD). CONTADOR_UP_DOWN_mWriteSlaveReg4(BaseAddress, RegOffset, Value)

Leer estado de las salidas del contador (QU y QD).

CONTADOR_UP_DOWN_mReadSlaveReg5(BaseAddress, RegOffset)

3.10.2.1.7. Timer con retardo a la conexin (timer_on_delay) El acceso a este mdulo se hace travs de los registros software en el fichero user_logic.VHD, mediante las funciones definidas en la librera timer_on_delay.h . Configurar base de tiempo (tiempo_base). TIMER_ON_DELAY_mWriteSlaveReg0(BaseAddress, RegOffset, Value)

Configurar cantidad a temporizar (PV). TIMER_ON_DELAY_mWriteSlaveReg1(BaseAddress, RegOffset, Value)

Leer estado actual temporizado (CV). TIMER_ON_DELAY_mReadSlaveReg2(BaseAddress, RegOffset)

Entrada de habilitacin del timer. TIMER_ON_DELAY_mWriteSlaveReg3(BaseAddress, RegOffset, Value)

Leer estado de las salidas del timer (DN, TT, EN). TIMER_ON_DELAY_mReadSlaveReg4(BaseAddress, RegOffset)

3.10.2.1.8. Timer con retardo a la desconexin (timer_off_delay) El acceso a este mdulo se hace travs de los registros software en el fichero user_logic.VHD, mediante las funciones definidas en la librera timer_off_delay.h . Configurar base de tiempo (tiempo_base). TIMER_OFF_DELAY_mWriteSlaveReg0(BaseAddress, RegOffset, Value)

Configurar cantidad a temporizar (PV). TIMER_OFF_DELAY_mWriteSlaveReg1(BaseAddress, RegOffset, Value)

Leer estado actual temporizado (CV). TIMER_OFF_DELAY_mReadSlaveReg2(BaseAddress, RegOffset)

Entrada de habilitacin del timer. TIMER_OFF_DELAY_mWriteSlaveReg3(BaseAddress, RegOffset, Value)

Leer estado de las salidas del timer (DN, TT, EN). TIMER_OFF_DELAY_mReadSlaveReg4(BaseAddress, RegOffset)

3.10.2.1.9. Temporizador de eventos (timer) El acceso a este mdulo se hace travs de los registros software en el fichero user_logic.VHD, mediante las funciones definidas en la librera timer.h . Configurar base de tiempo (tiempo_base). TIMER _mWriteSlaveReg0(BaseAddress, RegOffset, Value)

Configurar cantidad a temporizar (PV). TIMER _mWriteSlaveReg1(BaseAddress, RegOffset, Value)

Reset del timer (R) TIMER_mWriteSlaveReg2(BaseAddress, RegOffset, Value)

3.10.2.2. Libreras de usuario 3.10.2.2.1. Modbus.h Se implement el modbus RTU esclavo con las funciones: 1,2,3,4,5 y 6 descritas en la seccin 2.5. La recepcin del primer elemento de la trama modbus se realiza por interrupcin con la llamada de la funcin receiveMessage(), ver anexo 24. En caso de que el byte recibido coincida con el Identificador del dispositivo se recibe el siguiente byte correspondiente al cdigo de la funcin que se quiere ejecutar, en este caso solo se ejecutarn las funciones de lectura y escritura de datos. Si la funcin es de lectura (cdigos 01, 02, 03 y 04) se reciben los siguientes campos correspondientes a dicha funcin y se conforma el mensaje Modbus, luego se realiza la llamada al mtodo disassembleReadQuery(), este es el encargado de interpretar cada campo del mensaje. En caso de que la funcin sea de simple escritura (cdigo 05 y 06), al igual que en las funciones de lectura se reciben los restantes campos de la trama, y luego mediante la llamada al mtodo disassembleSingleWriteQuery() se realiza la interpretacin de cada uno de los campos. En los dos mtodos una vez que se interpretan los campos se realiza el clculo del CRC para verificar la integridad del mensaje, mediante el mtodo calculateCrc(), contenido en la clase crc.h, si se produce un error se enva una respuesta de excepcin, dicha respuesta es enviada a travs del mtodo sendException(), en caso contrario se procede a ejecutar la funcin deseada y enviar la respuesta correspondiente, para ello se utiliza el mtodo sendResponse(). Tanto sendException() como sendResponse(), utilizan el mtodo enviarRS232(), que es el encargado de enviar un byte por el puerto serie, ver anexo 25.

En la funcin receiveMessage() se invocan las funciones que se encuentran en la librera modbus.h . Para probar el funcionamiento del protocolo Modbus en el PLC se utiliz el simulador ModScan32, ver anexo 26. 3.10.2.2.2. Lcd.h

La librera Lcd.h se utiliza para visualizar mensajes y nmeros en el LCD de la tarjeta spartan 3e, con las siguientes funciones: Inicializar el LCD initLcd()

Escribir un comando en el LCD writeLcd(int rs, int value)

Escribir un mensaje printLcd(char *msg)

Mostrar un nmero de hasta 7 cifras display_num(double n)

Retornar cursor a la posicin inicial 3.10.2.2.3. returnLcdHome() Spi.h

En esta librera se encuentran las funciones para manejar cualquier dispositivo con interfaz SPI, utilizando el mdulo SPI del EDK: Inicializar el SPI initSPI(void)

Resetear las FIFOs de transmisin y recepcin. clearSPI(void)

Leer del bus SPI readSPI(unsigned int numBytes)

Escribir en el bus SPI writeSpi(unsigned int device, unsigned int value, unsigned int numBytes)

Adems se incluyen las funciones especficas para manejar los conversores A/D y D/A. Escribir valor de voltaje en un canal del conversor D/A. writeSpiDA(int device,int canal, float voltaje)

Escribir la ganancia del pre-amplificador. writeSpiAD(int gainA, int gainB)

Leer los canales 0 y 1 de la conversin A/D. readADC(unsigned int adc[])

Obtener voltaje analgico de la conversin A/D. getAdcVoltage(double adc_val, int gain)

Si el bit ms significativo es 1 , ejecutar complemento a dos y negar el valor. 3.10.2.2.4. twosComplement(unsigned int num, int n) Interrupciones.h

En la seccin 3.10.2.1.1 se describe como habilitar cada solicitud de interrupcin en el controlador de interrupciones. Adems de esto, hay que configurar la interrupcin de cada mdulo que la genera. En la librera Interrupciones.h estn implementadas las funciones para configurar la interrupcin de cada mdulo que la genera: Establecer el manejador de la rutina de atencin a la interrupcin. Habilitar la interrupcin del mdulo. Ver anexo 27, sobre ejemplo de configuracin de la interrupcin del temporizador de eventos (Timer). 3.10.2.3. Libreras de instrucciones del PLC 3.10.2.3.1. Matemtica.h

En la librera Matemtica.h estn implementadas las funciones: Bsicas: suma, resta, multiplicacin, divisin. Trigonomtricas: seno, coseno, tangente.

3.10.2.3.2.

Manipulacin.h

En la librera Manipulacin.h estn implementadas las funciones de manipulacin de datos: Move: mover datos de una direccin fuente a una destino. MoveMask: mover datos de una direccin fuente a una destino, segn los bits de la mscara. Copy: copiar n datos desde una direccin fuente a una direccin destino. 3.10.2.3.3. Bit.h En la librera Bit.h estn implementadas las funciones de manipulacin a nivel de bits. SetBit: poner a 1 un bit. ClearBit: poner a 0 un bit. TestBit: testear el estado de un bit (si es 1 0 ). SHRBit: desplazar a la derecha. SHLBit: desplazar a la izquierda. RORBit: rotar a la derecha. ROLBit: rotar a la izquierda. 3.10.2.3.4. Comparacin.h

En la librera Comparacin.h estn implementadas las funciones de comparacin. Mayor que. Menor que. Igual a. 3.10.2.3.5. PID.h

En la librera PID.h se implementa la forma posicional del algoritmo PID discreto:

donde: : Variable de control.

: Posicin inicial. : Ganancia, tiempo integral y tiempo derivativo. : Perodo de control En la rutina de atencin a la interrupcin del temporizador de eventos (Timer), se ejecutan las siguientes tareas que complementan el control PID: 1. Medicin de la variable a controlar, mediante la lectura de la seal analgica presente en un canal del conversor A/D. 2. Convertir la medicin a unidades de ingeniera. 3. Ejecutar algoritmo PID. 4. Convertir las unidades de ingeniera de la seal de control en el valor correspondiente para la conversin D/A. 5. Escribir la seal de control en un canal del conversor D/A. 3.11. Conclusiones parciales En este captulo se describi la implementacin de cada componente del PLC. Adems se explicaron las libreras desarrolladas, que son utilizadas por el software resultante de la traduccin de un programa en lenguaje escalera al cdigo en lenguaje C que ejecuta Microblaze, lo cual se explica en el captulo 4.

Captulo

4:

Herramienta

para

programar

el

controlador

lgico

programable basado en hardware reconfigurable mediante lenguaje escalera


En el presente captulo se explica el desarrollo de una herramienta para programar el PLC reconfigurable. La herramienta permite editar un programa en lenguaje escalera, analizar su sintaxis y traducirlo a un cdigo en lenguaje C que ejecuta el procesador Microblaze. Se abordan las caractersticas de los principales lenguajes de programacin de PLC, as como los principios de funcionamiento de un traductor, mostrando las diferentes fases contenidas dentro del proceso, adems de otros aspectos como lenguajes, sistemas y herramientas utilizadas en la solucin. 4.1. Introduccin a los lenguajes de programacin de PLC

Al igual que los PLC se han desarrollado y expandido, los lenguajes de programacin se han desarrollado junto a ellos. Los lenguajes de programacin permiten al usuario entrar un programa de control dentro del PLC usando una sintaxis establecida. Los lenguajes actuales tienen instrucciones ms verstiles, las cuales proporcionan ms poder computacional por cada operacin ejecutada por ellas[1]. Estas instrucciones expanden las posibilidades de programacin en reas como: manipulacin de datos, comunicacin en redes, transferencia de datos, y control del flujo de programa, solo por mencionar algunas[3]. 4.1.1. Clasificacin de los lenguajes de programacin para PLC Los lenguajes de programacin para PLC son de dos tipos, visuales y escritos. Los visuales admiten estructurar el programa por medio de smbolos grficos, similares a los que se utilizan para describir los sistemas de automatizacin, planos esquemticos y diagramas de bloques. Los escritos son listados de sentencias que describen las funciones a ejecutar.[1] Los programadores de PLC poseen formacin en mltiples disciplinas y esto determina que exista diversidad de lenguajes. Los programadores de aplicaciones familiarizados con el rea industrial prefieren lenguajes visuales, por su parte quienes tienen formacin en electrnica e informtica optan, inicialmente por los lenguajes escritos.

Lenguajes visuales: Utilizan los smbolos de planos esquemticos y diagramas de bloques. El acceso a los recursos se ve restringido a los smbolos que proporciona el lenguaje. En este grupo se destacan los lenguajes LD, SFC y FBD. Lenguajes escritos: Utilizan sentencias similares a las de programacin de computadoras. Brindan acceso total a los recursos de programacin. En este grupo se destacan los lenguajes LI y ST. Todos ellos tienen la finalidad de generar cdigo objeto para que sea ejecutado en la CPU del PLC. 4.2. Caractersticas de los lenguajes de programacin de PLC

4.2.1. Listado de Instrucciones (LI) Es un tipo de lenguaje ensamblador con un repertorio muy reducido de instrucciones. Los programas utilizan un estilo muy similar al empleado por los lenguajes de ensamblador. Es una transcripcin elemental e inmediata de las instrucciones del lenguaje mquina que estn representadas por expresiones nemotcnicas. Se suele aplicar para pequeas aplicaciones y para optimizar partes de una aplicacin. 4.2.2. Texto Estructurado (ST) Facilitan la programacin de procesos que requieren instrucciones complejas y clculos muy grandes. Es un lenguaje de alto nivel. 4.2.3. Esquema Bsico de Funciones (FBD) Es un lenguaje grfico. Los programas son bloques de funciones entre s de forma anloga al esquema de un circuito. Tiene una interface de E/S bien definida y adems posee un cdigo interno oculto.

4.2.4. Esquema de Contactos (LD) La lgica de escalera o ladder es el lenguaje ms usado para la programacin de PLCs. Fue el primero con el que se comenz a programar, de ah que presente grandes semejanzas con los diagramas elctricos de escalera utilizados por los tcnicos anteriormente a la aparicin del autmata. Est especialmente indicado para facilitar el cambio de un sistema de control realizado con rels por un PLC. 4.2.5. Esquema Secuencial de Funciones (SFC) En sus orgenes fue GRAFCET (Grfico Funcional de Control Etapa Transicin). Es una tcnica eficaz para describir el comportamiento secuencial de un proceso y de un programa. Se usa para distribuir un problema de control. Permite un rpido diagnstico. 4.3. Proceso de compilacin Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje es lenguaje de mquina, pero tambin puede ser simplemente texto. Este proceso de traduccin se conoce como compilacin.[37] Un compilador es un programa que permite traducir el cdigo fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente lenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a cmo piensa un ser humano, para luego compilarlo a un programa ms manejable por una computadora. El proceso de compilacin, Figura 57, se divide en seis fases fundamentales.

Figura 57. Fases del proceso de compilacin.

La herramienta de programacin del PLC solo tiene 3 fases: Anlisis sintctico. Anlisis semntico. Generacin de cdigo intermedio. En cada fase se realiza la gestin de errores. 4.3.1. Anlisis lexicolgico La entrada de un compilador es el cdigo de un programa escrito en un lenguaje de programacin. Dicho cdigo no es ms que una secuencia de smbolos pertenecientes al alfabeto de un determinado lenguaje. El analizador lexicolgico o scanner se encarga de tomarlos y agruparlos en entidades sintcticas simples o elementales denominadas tokens o lexemas.[38] Los tokens pueden ser de diferentes categoras pero las ms elementales son: Palabras reservadas. Identificadores. Constantes numricas y literales. Operadores.

Se considera una buena prctica a cada token asignarle una estructura lexicolgica, consistente en un par de la forma <tipo del token, info>, donde tipo del token almacena la categora lexicolgica del token, e info el valor del token en particular (ejemplo: el valor de la constante, nombre del identificador, etc.). Por tanto, un scanner no es ms que un traductor cuya entrada es una cadena de smbolos escritas en lenguaje natural (programa fuente) y cuya salida es una secuencia de estructuras lexicolgicas o tokens. 4.3.2. Anlisis sintctico El anlisis sintctico es un proceso en el cual se examina la secuencia de tokens para determinar si el orden de la secuencia es correcto de acuerdo a ciertas convenciones estructurales (reglas) de la definicin sintctica del lenguaje. La entrada del analizador sintctico o parser es la secuencia de tokens generada por el scanner. El parser analiza solamente la primera componente de cada tokens; la segunda componente se utiliza en otros pasos.[38] 4.3.3. Anlisis semntico En la fase de Anlisis Semntico el compilador adiciona informacin al rbol de Sintaxis Abstracta generado en la fase de Anlisis Sintctico. Esta operacin est relacionada con la segunda componente de la tupla devuelta en el anlisis lxico (<tipo del token, info>). Al comprobar la validez semntica de un programa se pudiera decir que se realiza un reconocimiento sintctico-semntico, pero los errores semnticos no pueden ser detectados por el analizador sintctico, puesto que se relacionan con interdependencias entre las diferentes partes de un programa que no son reflejadas en un anlisis gramatical. El analizador semntico revisa el programa fuente para tratar de encontrar errores semnticos y rene la informacin sobre los tipos para la fase posterior de generacin de cdigo. En ella se utiliza la estructura jerrquica determinada por la fase de anlisis sintctico para identificador los operadores y operandos de expresiones y proposiciones. Un componente importante del anlisis semntico es la verificacin de tipos. Aqu, el compilador verifica si cada operador tiene operandos permitidos por la especificacin del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programacin requieren que el compilador indique

un error cada vez que se use un nmero real como ndice de una matriz. Sin embargo, la especificacin del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmtico binario se aplica a un nmero entero y una cadena de caracteres. 4.3.4. Generacin de cdigo intermedio Despus del anlisis sintctico, un compilador puede generar una o varias representaciones explcitas intermedias del cdigo fuente. Dicha representacin puede servir para la realizacin de un anlisis semntico del cdigo fuente o para la optimizacin del cdigo. Ejemplo de estos formas intermedias son los cdigos: MSIL, Java bytecode, Notacin de Cudruplos, Notacin Polaca. Las formas intermedias deben tener dos caractersticas muy importantes: debe ser fcil de producir y fcil de traducir al programa objeto. Las mismas se clasifican en: Formas Intermedias de Alto Nivel: son aquellas que se suelen emplear en las primeras fases de anlisis. Formas Intermedias de Nivel Medio: son vlidas para representar un conjunto amplio de lenguajes fuente, no siendo dependientes de uno en concreto. Vlidas para representar un conjunto extenso de arquitecturas de hardware. Formas Intermedias de Bajo Nivel: permiten traducir a distintos micros de una misma arquitectura, creando una dependencia a sta. Formas Intermedias Multinivel: Aquellas que conjugan varias de las caractersticas anteriores. 4.3.5. Optimizacin del cdigo intermedio La fase de optimizacin se encarga de transformar el cdigo intermedio en un nuevo cdigo de funcin equivalente pero de menor tamao o de menor tiempo de ejecucin. Algunas de las transformaciones que puede llevar a cabo la fase de optimizacin son: Eliminar el clculo de expresiones cuyo valor no se usa. Fundir en uno, el clculo repetido de la misma expresin. Sacar de los lazos, las expresiones cuyo valor no cambia en ellos. Reducir el uso de memoria local reutilizando el espacio de una variable muerta.

4.3.6. Generacin del cdigo objeto La fase de generacin de cdigo objeto se encarga de generar el programa nativo usando el juego de instrucciones especfico de la mquina o CPU objeto, y el formato para archivos ejecutables del sistema operativo. Entre otras cosas, tambin se le asignan direcciones definitivas a las rutinas y variables que componen el programa. 4.3.7. Gestin de informacin de errores Si los compiladores tuvieran que procesar solamente programas correctos, su diseo e implementacin se simplificara en buena medida. Pero los programadores escriben programas incorrectos frecuentemente, y un buen compilador debe ayudar al programador a localizar e identificar los errores[38]. pueden clasificarse en 4 grandes grupos: Lexicolgicos. Sintcticos. Semnticos. Lgicos o de programacin. Un traductor eficiente debe ser capaz de detectar los errores y tratarlos de manera que pueda continuar, permitiendo as que se puedan detectar errores posteriores. Un traductor que se detenga ante el primer error que se encuentre no es muy eficaz. El tratamiento de los errores en cualquiera de las fases debe cumplir con los siguientes requisitos: Reportar la presencia de los errores de forma clara y precisa. Recuperarse de los errores rpido y ser capaz de continuar parar detectar los errores siguientes. No demorar significativamente el procesamiento de los programas correctos. 4.4. Metodologa y Herramientas de desarrollo Los errores en un programa

4.4.1. Programacin Extrema (XP) Es el ms destacado de los procesos giles de desarrollo de software. La programacin extrema se diferencia de las metodologas tradicionales principalmente

en que pone ms nfasis en la adaptabilidad que en la previsibilidad; considerndose que los cambios de requisitos sobre la marcha son un aspecto natural, inevitable e incluso deseable del desarrollo de proyectos. Siendo capaz de adaptarse a los cambios de requisitos en cualquier punto de la vida del proyecto, es una aproximacin mejor y ms realista que intentar definir todos los requisitos al comienzo del proyecto e invertir esfuerzos despus en controlar los cambios en los requisitos[39]. Las caractersticas fundamentales del mtodo son: Desarrollo iterativo e incremental: pequeas mejoras, unas tras otras. Pruebas unitarias continuas, frecuentemente repetidas y automatizadas, incluyendo pruebas de regresin. Programacin en parejas. Frecuente integracin del equipo de programacin con el cliente o usuario. Correccin de todos los errores antes de aadir nueva funcionalidad. Hacer entregas frecuentes. Refactorizacin del cdigo, es decir, reescribir ciertas partes del cdigo para aumentar su legibilidad y mantenibilidad pero sin modificar su comportamiento. Propiedad del cdigo compartida: en vez de dividir la responsabilidad en el desarrollo de cada mdulo en grupos de trabajo distintos, este mtodo promueve el que todo el personal pueda corregir y extender cualquier parte del proyecto. Simplicidad en el cdigo: es la mejor manera de que las cosas funcionen. Cuando todo funcione se podr aadir funcionalidad si es necesario. La programacin extrema apuesta que es ms sencillo hacer algo simple y tener un poco de trabajo extra para cambiarlo si se requiere, que realizar algo complicado y quizs nunca utilizarlo.

Es una metodologa gil centrada en potenciar las relaciones interpersonales como clave para el xito en desarrollo de software, promoviendo el trabajo en equipo, preocupndose por el aprendizaje de los desarrolladores, y propiciando un buen clima de trabajo.

4.4.2. C++ como lenguaje de programacin El lenguaje C++ como lenguaje de programacin orientado a objetos en s tiene mltiples ventajas en las que se encuentran: Eficiencia. Uniformidad. Comprensin: Los datos componen los objetos y los procedimientos que los manipulan estn agrupados en clases que se corresponden con las estructuras de informacin que el programa trata. Flexibilidad: Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar, cualquier cambio que se realice sobre ellos quedar reflejado automticamente en cualquier lugar donde estos datos aparezcan. Estabilidad: Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo. Reusabilidad: La nocin de objeto permite que programas que traten las mismas estructuras de informacin reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan. De esta forma, el desarrollo de un programa puede llegar a ser una simple combinacin de objetos ya definidos donde estos estn relacionados de una manera particular. Otra de las razones por las cuales se utiliz C++ como lenguaje de programacin es debido a su increble versatilidad. Con l pueden programarse desde los programas ms simples hasta los programas ms complicados como son los sistemas operativos. Es adems portable, es decir, un programa con el cdigo escrito en C++, se podr compilar en cualquier sistema operativo o sistema informtico sin necesidad de cambiar casi el cdigo fuente. Este es por ejemplo uno de los grandes secretos de Linux, al estar el cdigo escrito en este lenguaje (al menos en su concepcin original), es ms fcil portarlo a diferentes ordenadores como PCs, Macintosh, incluso superordenadores. Otras de las grandes ventajas del C++, es que es un lenguaje multi-nivel, es decir, puedes usarlo tanto para

programar directamente el hardware (dependiendo del sistema operativo, eso s), como para crear aplicaciones tipo Windows definidas todas por poseer una misma interfaz.[40]

4.4.3. Qt v4.6.1 Qt es una amplia plataforma de desarrollo que dispone de tres grandes ventajas ante las bibliotecas rivales. Es completamente gratuito para aplicaciones de cdigo abierto. Las herramientas, bibliotecas y clases estn disponibles para casi todas las plataformas Unix y sus derivados (como Linux, MacOS X, Solaris, etc) como tambin para la familia Windows, por lo que una aplicacin puede ser compilada y utilizada en cualquier plataforma sin necesidad de cambiar el cdigo y la aplicacin se ver y actuar mejor que una aplicacin nativa. Qt tiene extensas bibliotecas con clases y herramientas para la creacin de ricas aplicaciones. Estas bibliotecas y clases estn bien documentadas, son muy fciles de usar y tienen una gran herencia de programacin orientada a objetos lo cual hace de la programacin de interfaces grficas una aventura placentera[41]. 4.5. Caractersticas de la herramienta

La herramienta brindar facilidades para implementar diagramas escalera, permitiendo la ejecucin de los mismos y realizando un chequeo de la sintaxis, con el fin de generar una lista de errores en caso de que existan, ayudando al usuario en su identificacin y correccin. El cdigo generado a partir de la generacin del cdigo intermedio ser ejecutado por el procesador Microblaze del PLC reconfigurable. 4.5.1. Requerimientos de la herramienta Un requerimiento: es una condicin o capacidad que tiene que ser alcanzada o poseda por un sistema o componente de un sistema, para satisfacer un contrato, estndar, u otro documento impuesto formalmente.[42] 4.5.1.1. Requerimientos funcionales

Un requerimiento funcional define el comportamiento interno del software: clculos, detalles tcnicos, manipulacin de datos y otras funcionalidades especficas que

muestran cmo los historias de usuario sern llevados a la prctica. Los requerimientos funcionales se mantienen invariables sin importar con qu cualidades o propiedades se relacionen. A continuacin se muestran los requerimientos funcionales: R.1 El sistema debe brindar un mecanismo de almacenamiento para los valores de los componentes del programa en desarrollo. R.2 El sistema debe ser capaz de guardar ficheros con los datos del programa en desarrollo. R.3 El sistema debe ser capaz de cargar ficheros con datos de programas que hayan sido guardados con anterioridad. R.4 El sistema debe ser capaz de informar los diferentes errores encontrados durante el chequeo del programa en desarrollo. R.5 El sistema debe ser capaz de reconocer e interpretar las diferentes instrucciones creadas por el usuario. R.6 El sistema debe ser capaz de exportar y traducir los datos del programa desarrollado a funciones en lenguaje C. R.7 El sistema debe brindar la posibilidad de crear nuevos programas. R.8 El sistema debe brindar la posibilidad de introducir, cambiar y consultar los datos del programa en desarrollo en cualquier instante de tiempo. 4.5.1.2. Requerimientos no funcionales

Los requerimientos no funcionales son propiedades o cualidades que el producto debe tener. En muchos casos, estos requerimientos son fundamentales en el xito del producto y generalmente estn vinculados a requerimientos funcionales. Debe pensarse en estas propiedades como las caractersticas que hacen al producto atractivo, usable, rpido o confiable. 4.5.1.2.1. Requerimientos de Usabilidad El sistema deber tener una interfaz amigable con una buena utilizacin de los elementos de diseo, con adecuada combinacin de colores.

El sistema deber ser usado por usuarios capacitados para el uso de la herramienta y que hayan ledo previamente el manual de ayuda. 4.5.1.2.2. Requerimientos de Soporte El sistema debe ser capaz de dar las mismas salidas para diferentes ambientes. El sistema debe ser flexible ante la necesidad de cambios de sus salidas. El sistema debe tener alguna documentacin o ayuda. Los errores del sistema no pueden afectar a los sistemas clientes. 4.5.1.2.3. Requerimientos de portabilidad y operatividad El sistema debe ser compatible con las plataformas Windows y Linux. 4.5.1.2.4. Requerimientos de Hardware del Sistema Las computadoras que utilizarn el software a desarrollar debern tener 128 MB de Memoria tipo RAM como mnimo. 4.5.1.2.5. Requerimientos de Software del Sistema Las computadoras que utilizarn el software deben tener instalado: Windows XP Professional, Windows 7 alguna distribucin GNU/Linux. Qt 4.7.0 o superior. 4.6. Actores del sistema

Tabla 10. Actores del sistema.

Actor

Descripcin Representa a una persona capaz de desarrollar un programa

Usuario

en lenguaje escalera, accediendo a todas las funcionalidades que brinde la aplicacin.

4.7.

Historias de usuario

Las historias de usuario es la tcnica utilizada en XP para especificar los requisitos del software[39]. Se trata de tarjetas de papel en las cuales el cliente describe brevemente

las caractersticas que el sistema debe poseer, sean requisitos funcionales o no funcionales. El tratamiento de las historias de usuario es muy dinmico y flexible, en cualquier momento las historias de usuario pueden romperse, reemplazarse por otras ms especficas o generales, aadirse nuevas o ser modificadas. Cada historia de usuario es lo suficientemente comprensible y delimitada para que los programadores puedan implementarla en unas semanas. Las HU conducen al proceso de creacin de los test de aceptacin, los cuales servirn para verificar que estas historias se han implementado correctamente.
Tabla 11. HU Guardar programa.

Historia de Usuario Nmero: 1 Nombre de la Historia de Usuario: Guardar programa

Usuario: Desarrollador

Prioridad en el Negocio: Alta

Nivel de Complejidad: Alta

Puntos de Estimacin: 1

Iteracin Asignada: 2

Descripcin: Permite crear un fichero XML que contiene la informacin del programa que se encuentra en desarrollo (imgenes y datos modificados por el usuario), el fichero es generado mediante la biblioteca QXMLStreamWriter().

Observaciones: La creacin del fichero de tipo XML le permitir al usuario contar con un respaldo en caso de cualquier situacin extrema, adems de acceder a los datos registrados de manera organizada en la estructura definida dentro del cdigo de la aplicacin.

Tabla 12. HU Abrir programa.

Historia de Usuario Nmero: 2 Nombre de la Historia de Usuario: Abrir programa

Usuario: Desarrollador

Prioridad en el Negocio: Alta

Nivel de Complejidad: Alta

Puntos de Estimacin: 1

Iteracin Asignada: 2

Descripcin: Permite abrir un fichero XML que contiene informacin de un programa guardado previamente (imgenes y datos), el fichero es cargado mediante la biblioteca que se encarga de parsear el XML, QXMLStreamReader();

Observaciones: Cualquier aplicacin que trabaje con XML necesita un mdulo de clases, su funcin es leer documentos y proporcionar acceso a su contenido y estructura. Para poder llevar a cabo esta funcin, la aplicacin debe identificar la informacin XML y cmo se encuentra almacenada esta a travs de un DTD (Document Type Declaration).

Tabla 13. HU Analizar Sintaxis.

Historia de Usuario Nmero: 3 Nombre de la Historia de Usuario: Analizar Sintaxis

Usuario: Desarrollador

Prioridad en el Negocio: Alta

Nivel de Complejidad: Alta

Puntos de Estimacin: 2

Iteracin Asignada: 1

Descripcin: Permite parsear el diagrama desarrollado por el usuario, ayudndolo a identificar los posibles errores cometidos durante la creacin del mismo y habilita la opcin de generar el cdigo intermedio correspondiente al programa escrito, una vez corregidos todas las fallas.

Observaciones: El proceso de anlisis de la sintaxis, es el resultado del parseo del diagrama en cuestin. Permite la generacin de una lista de errores en caso de que existan (HU. No.4). Una vez finalizada esta accin habilita la opcin de generar el cdigo

intermedio, solo si la primera funcionalidad no arroj fallo alguno. Este cdigo intermedio ser exportado y finalmente descargado en un dispositivo externo (HU. No.5).

Tabla 14. HU Generar lista de errores.

Historia de Usuario Nmero: 4 Nombre de la Historia de Usuario: Generar lista de errores

Usuario: Desarrollador

Prioridad en el Negocio: Alta

Nivel de Complejidad: Alta

Puntos de Estimacin: 1

Iteracin Asignada: 1

Descripcin: Permite mostrar al usuario los errores cometidos durante la creacin del programa.

Observaciones: Posibilita el chequeo del diagrama mediante un algoritmo desarrollado, que tiene como fin arrojar un resultado (lista de errores) entendible para el usuario. Esta actividad forma parte de una de las principales funcionalidades de la aplicacin (HU. No.3).

Tabla 15. HU Generar cdigo intermedio.

Historia de Usuario Nmero: 5 Nombre de la Historia de Usuario: Generar cdigo intermedio.

Usuario: Desarrollador

Prioridad en el Negocio: Alta

Nivel de Complejidad: Alta

Puntos de Estimacin: 1

Iteracin Asignada: 3

Descripcin: Permite traducir el diagrama desarrollado en un lenguaje de alto nivel (C), con la finalidad de hacerlo entendible a dispositivos externos que manejen este tipo de informacin.

Observaciones: Posibilita la generacin de un cdigo en otro lenguaje de mayor nivel (C), que facilite la comunicacin entre el usuario y la maquina. Esta actividad forma parte de una de las principales funcionalidades de la aplicacin (HU. No.3), y es dependiente de otra funcionalidad (HU. No.4).

Tabla 16. HU Crear nuevo programa.

Historia de Usuario Nmero: 6 Nombre de la Historia de Usuario: Crear nuevo programa.

Usuario: Desarrollador

Prioridad en el Negocio: Alta

Nivel de Complejidad: Alta

Puntos de Estimacin: 1

Iteracin Asignada: 2

Descripcin: Permite crear nuevos programas dentro de la aplicacin.

Observaciones: Habilita el editor para introducir nuevas sentencias con el fin de crear un nuevo diagrama, limpia todas las variables involucradas en el proceso y da la posibilidad de guardar los datos en caso de que se estuviese desarrollando un programa anterior.

Tabla 17. Introducir, cambiar y consultar datos.

Historia de Usuario Nombre de la Historia de Usuario: Introducir, cambiar y consultar datos.

Nmero: 7

Usuario: Desarrollador

Prioridad en el Negocio: Alta

Nivel de Complejidad: Alta

Puntos de Estimacin: 1

Iteracin Asignada: 1

Descripcin: Permite introducir, cambiar y consultar datos en la aplicacin.

Observaciones: Es una de las principales funciones que realiza el usuario en la aplicacin, dndole caractersticas particulares al programa desarrollado, todas las acciones que

encierra esta funcionalidad se realizan mediante un inspector de propiedades.

4.8.

Descripcin de la herramienta

La aplicacin actualmente se encuentra en su versin 1.0, consta de una ventana principal compuesta por tres paneles principales, ver anexo 33; el panel 1 ubicado en la parte izquierda se encarga de ubicar de forma organizada los diferentes componentes a los que el usuario tiene acceso para construir el programa en lenguaje escalera; el panel 2

corresponde al editor principal, parte en la cual el usuario construye los diferentes programas que desee, este editor brinda de forma automtica un algoritmo de organizacin que ubica a cada componente en un rea determinada con el fin de evitar desorganizacin y mantener en una misma lnea los componentes que el usuario va insertando en caso de desearlo; el panel 3 se ubica en la parte inferior de la ventana, y es el rea destinada a mostrar los errores contenidos en el programa en desarrollo. Los componentes que brinda la aplicacin como medio para desarrollar los programas en lenguaje escalera constan de una serie de propiedades definidas que permiten introducir atributos a las funciones a las cuales ser traducido el programa, ver anexo 29. A estas propiedades se accede de manera dinmica a travs de una ventana de propiedades que poseen todos los componentes, estas propiedades poseen elementos particulares en correspondencia con el tipo de componente y elementos comunes para todos los componentes como son, el identificador (nico en cada caso), la posicin que ocupa en el editor y el cuadrante en el que se encuentra, parmetros que ubican al usuario a la hora de conocer detalles de un elemento determinado. Existen un conjunto de reglas a tener en cuenta a la hora de construir un programa, entre ellas se encuentran: Cada instruccin debe comenzar en el primer cuadrante de cada rengln horizontal, de igual forma la primera lnea del programa a desarrollar debe estar ubicada en el primer rengln del editor, esta medida permite utilizar el espacio del editor al mximo, evitando dejar espacios innecesarios que podran ser utilizados para la insercin de algn componente necesario en el programa desarrollado. Los componentes que forman parte de condiciones entre los que se encuentran los contactos abiertos y cerrados, estarn ubicados en la parte izquierda del editor, por su parte los componentes que son instrucciones o acciones a ejecutar estarn ubicados en la parte derecha del editor con el fin de mantener el orden del flujo de datos, ya que es una de las principales caractersticas del lenguaje escalera que las lecturas se realicen siempre de izquierda a derecha y de arriba hacia abajo. Las componentes tipo lneas no poseen caractersticas particulares, aunque si son necesarias ya que permiten continuar el flujo de informacin hacia qu componente

sigue detrs de otro. Se encuentran varios tipos de lneas, es importante sealar las lneas tipo T, permiten la creacin de condiciones OR, estas lneas siempre deben estar seguidas por lneas tipo L, que se encargarn de enlazar los componentes a analizar en cada condicin. Los componentes como los Contadores y Temporizadores, siempre deben ir ubicados al final de cada lnea, para mantener el orden en el editor y ajustarse a las reglas de la gramtica implementada, en caso contrario se arrojar un error indicndole al usuario de la incorrecta ubicacin del componente. Un componente muy importante es el componente tipo FIN, el mismo debe estar presente al final de cada programa construido, y esto en gran medida se debe a que en la implementacin del algoritmo de traduccin del lenguaje escalera al lenguaje C, siempre se chequea siguiendo el flujo de datos el prximo elemento en la cadena, este componente, le indica a este algoritmo que la secuencia de datos llega hasta el punto especificado y que debe terminar la espera para pasar a realizar otras operaciones como la impresin por pantalla de las funciones nativas de cada componente en el lenguaje final (C). El editor permite ubicar 11 elementos en secuencia continua, espacio que en acciones no es suficiente para una instruccin determinada, esto no quiere decir que las instrucciones deben tener mximo 11 componentes, pues se le da la posibilidad al usuario de continuar la secuencia de la instruccin en la lnea inmediata inferior y no se altera el resultado de la misma. Los datos que forman parte de atributos pueden ser cambiados en cualquier instante de tiempo, permitindole al usuario tener una interaccin dinmica con la aplicacin e ir probando diferentes juegos de datos para un mismo programa, estos datos se actualizan de forma automtica en el lenguaje C generado finalmente. El mecanismo de salvar un programa se realiz usando bibliotecas que permitieran la interaccin con XML, este formato permite generar ficheros con una estructura determinada que le permitan al usuario acceder de forma rpida y eficiente a los datos guardados e incluso realizar cambios en estas plantillas y sern actualizados en el cdigo C una vez

cargado el fichero en la aplicacin, la organizacin de los datos esta creada en forma de rbol jerrquico para una mayor comprensin de los mismos.

Conclusiones generales
Como resultado de este trabajo se obtuvo un controlador lgico programable basado en hardware reconfigurable y la herramienta para programarlo mediante lenguaje escalera. En esta primera versin la herramienta solo permite editar un programa en lenguaje escalera y traducirlo al cdigo en lenguaje C que ejecutar Microblaze, por lo que el usuario deber incluir este fichero con el cdigo en C en la herramienta EDK para poder descargarlo al FPGA. Las instrucciones de conteo y temporizacin generalmente son instrucciones software en los PLC convencionales. En el PLC reconfigurables estn funcionalidades se implementan en hardware; pero tambin pueden implementarse en software. El PLC reconfigurable desarrollado mantiene el mismo ciclo scan de los convencionales. 1. Leer las entradas. 2. Ejecutar el programa. 3. Actualizar las salidas. A continuacin se realiza una comparacin PLC convencional vs PLC reconfigurable para mostrar las ventajas del uso de este ltimo. Deficiencias del PLC convencional 1- Los PLC convencionales tienen un set de instrucciones limitado en dependencia de su complejidad, sin darle posibilidad al usuario de incluir instrucciones que necesite. 2- Tienen un limitado nmero de entradas/salidas digitales, y en caso de los PLC modulares solo permite una expansin limitada a travs de mdulos de entrada/salida. 3- Tienen un limitado nmero de entradas/salidas analgicas, y en caso de los PLC modulares solo permite una expansin limitada a travs de mdulos de entrada/salida. 4- Tienen puerto de comunicacin limitados, si el usuario necesita ms puertos debe cambiar el PLC. 5- El usuario est limitado a utilizar los algoritmos de control que ofrece el PLC, estos no permiten incluir algoritmos autctonos de control.

6- Los temporizadores son software, ocupan tiempo del procesador para ejecutarse. 7- Los contadores son software, ocupan tiempo del procesador para ejecutarse, y en caso de que se utilicen entradas de conteo de alta frecuencia se debe incluir un mdulo hardware de contador de alta velocidad. 8- La ejecucin del programa es cclica, obligatoriamente el microprocesador debe ejecutar las rdenes que se realizarn en cada momento. Solucin en el PLC reconfigurable 1. El usuario puede incluir en el editor de programas las funciones que desarrolla, siempre que estn puedan ser procesadas por el compilador del procesador. 2. El usuario puede reconfigurar el PLC para utilizar a la medida las entradas/salidas que necesita en su aplicacin, claro est, que estar limitado a la cantidad de pines libres del FPGA. 3. El usuario puede reconfigurar el PLC para utilizar a la medida las entradas/salidas que necesita en su aplicacin, claro est, que estar limitado a la cantidad de pines libres del FPGA. 4. El usuario puede configurar el PLC para utilizar a la medida la cantidad de puertos de comunicacin que necesite. 5. El usuario puede incluir algoritmos autctonos de control, incluso escoger si los desarrolla en hardware o en software. 6. Los temporizadores son hardware. 7. Los contadores son hardware. 8. Al tener funcionalidades hardware (temporizadores, contadores, dems mdulos creados en VHDL) es posible mapearlas fsicamente a las entradas y salidas del PLC, funcionando independiente al ciclo de scan del PLC.

Recomendaciones
A continuacin se exponen un conjunto de recomendaciones para incrementar las prestaciones de la herramienta: Continuar el perfeccionamiento del diseo del editor, con el fin de hacer ms fcil su uso. Incluir otros lenguajes de programacin de PLC. Dotarla de un mdulo de simulacin. Tambin se recomienda incluirle funcionalidades que permitan al usuario configurar y parametrizar el hardware del PLC segn los requerimientos de la aplicacin en que se utilizar: cantidad de E/S salidas digitales y analgicas, cantidad de mdulos de comunicacin serie y Ethernet, temporizadores, contadores, PID, etc. La herramienta se encarga de invocar a EDK e ISE para implementar el hardware, y configurar la FPGA, de manera transparente al usuario.

Bibliografa
1. 2. 3. 4. 5. Bolton, W., Programmable Logic Controllers, Fourth Edition. Fourth ed. 2006: Elsevier Newnes. Krzysztof, P.a.D., Pawel, Programmable automation controllers (PACs). Control Engineering, 2006. Vol. 53(12): p. p72-72. Bryan, L.A.B.a.E.A., Programmable Controllers Theory and Implementation. Second ed. 1997: An Industrial Text Company Publication. Johnson, D., Programmable Logic Controllers. Control Engineering, 2007. Kulkarni, R., The rise of embedded technologies is allowing control engineers greater flexibility in designing control applications. IEE Computing & Control Engineering, 2006. Carlos Paiz, M.P., The Utilization of Reconfigurable Hardware to Implement Digital Controllers: a Review. IEEE Industrial Electronics, 2007. Kulkarni, R., Machine Control beyond PLCs. Machine design, 2006. Shuichi Ichikawa, M.A., Ryo Ikeda, and Hiroshi Yamamoto, Converting PLC instruction sequence into logic circuit: A preliminary study. IEEE Industrial Electronic, 2006. Kim, D., An Implementation of Fuzzy Logic Controlller on the Reconfigurable FPGA System. IEEE Transactions on Industrial Electronics, 2000. Vol. 47(No. 3): p. 13. Paulo Sergio B. Nascimento, P.R.M.M., Manoel E. Lima, Remy E. Santana, Abel Guilhermino S. Filho, A Partial Reconfigurable Architecture for Controllers based on Petri Nets. IEEE Integrated Cirtuits and Systems Design, 2004. 17th Symposium on, 2004. L. Carrillo, S.y.P.Z., Agenor y Esmeral P. , Mario, Diseo y construccin de un controlador lgico programable basado en un ncleo reconfigurable. www.iberchip.org/iberchip2006/ponencias/43.pdf 2006: p. 7. Viswanathan, V.S., Embedded Control Using FPGA. Submitted in partial fulfillment of the requirements for the degree of Master of Technology, 2005. XU Mei-hua, R.F., CHEN Zhang-jin, KANG Shu-feng, LI Run-guang, IP Core Design of PLC Microprocessor with Boolean Module. IEEE High Density Microsystem Design and Packaging and Component Failure Analysis., 2005. Daoshan Du, Y.L., Xingui Guo, Yamazaki, Kazuo, Fujishima, Makoto, Study on LD-VHDL conversion for FPGA-based PLC implementation. International Journal of Advanced Manufacturing Technology, 2009. Vol. 40(11/12): p. p1181-1190. V.K.SHARMA, D.G.a., FPGA BASED MICRO-PLC. International Conference on Advances in Computing, Control, and Telecommunication Technologies, 2009. Caicedo-Grueso, R.y.J.V.-M., Diseo de circuitos anlogos usando FPAAs. Cornel Reiser, L.Z., Olgierd A. Palusinski, Sarma B.K.Vrudhula, Daler Rakhmatov, Dinamically Reconfigurable Analog/Digital Hardware Implementation Using FPGA and FPAA Technologies. Journal of Circuits, Systems and Computers. World Scientific, 1998: p. 4. Vemuri, S.G.a.R., An FPGA/FPAA Based Rapid Prototyping Environment for Mixed Signal Systems. 1999.

6. 7. 8.

9.

10.

11.

12. 13.

14.

15. 16. 17.

18.

19.

20.

21.

22. 23. 24. 25. 26.

27.

28. 29. 30. 31.

32. 33. 34. 35.

36. 37. 38. 39. 40. 41. 42.

Morales, D.P., Antonio Garca, Alberto J. Palma, Miguel A. Carvajal, Encarnacin Castillo and Luis F. Capitn-Vallvey, ENHANCING ADC RESOLUTION THROUGH FIELD PROGRAMMABLE ANALOG ARRAY DYNAMIC RECONFIGURATION. IEEE Field Programmable Logic and Applications, 2008. Ji Lou, J.B.B., J. Ari Tuchman, Hu Huang, Kuan-Jung Chung, A High Performance Radiation-Hard Field Programmable Analog Array. Quality Electronic Design, 2004. Faik Baskaya, S.R., Sung Kyu Lim, and David V. Anderson, Placement for Large-Scale Floating-Gate Field Programmable Analog Arrays. IEEE TRansactions on Very Large Scale Integration (VSLI) Systems., 2006. Vol. 14(No.8). Visioli, A., Practical PID Control. Springer. 2006. Karl J. Astrm, T.H., Control PID avanzado. Prentice Hall. 2009. Wikipedia, Modbus. http://es.wikipedia.org/wiki/Modbus. Internet, Protocolo Modbus. Laboratorio de automatizacin II. Herrera P. , R., Sntesis y evaluacin de un procesador DSP empotrado en FPGA, in Departamento de Telecomunicaciones y Electrnica. 2008, Universidad de Pinar del Ro. Aparicio Rodrguez, M., Diseo de un sistema de lectura y procesado para mltiples sensores embebidos en una FPGA. 2007, Universidad Autnoma de Madrid. Xilinx, Spartan-3E Starter Kit board User Guide, UG230 (v1.0). 2006. Spartan-3E Starter Kit Board User Guide. www.Xilinx.com, 2006. Cabrera Sarmientos, A., Asignatura Sistemas Empotrados de la maestra de Sistemas Digitales. 2009. Cabrera S., A., del Toro H. Ernesto, EVALUACIN CUALITATIVA DE TRES PLATAFORMAS PARA EL DISEO DE SISTEMAS EMPOTRADOS SOBRE UN FPGA. Evento Informtica 2009. II Simposio Internacional de Computacin y Electrnica . , 2009. Xilinx, I.A.R.R., MicroBlaze Processor Reference Guide. www.xilinx.com, 2008. Xilinx, PLB_v4.6. www.xilinx.com, 2010. Xilinx, Embedded System Tools Reference Manual. www.xilinx.com, 2008. Prez R., F.C., Implementacin de un servidor web sobre hardware reconfigurable., in Dpto de Telecomunicaciones y Electrnica. 2009, Universidad de Pinar del Ro. Xilinx, XPS Serial Peripheral Interface (SPI) (v2.01b). www.xilinx.com, 2010. http://es.wikipedia.org/wiki/Compilador. [cited. Universidad de las Ciencias Informticas. La Habana, C., Conferencia 1. Introduccin al proceso de compilacin. 2005-2006. Ferrer, J., Metodologas giles. [Online] http://libresoft.dat.escet.urjc.es/html/downloads/ferrer-20030312.pdf. Pozo Coronado, S., Curso de C++. Mxico DF, Mxico 2003. Sande, M., Programacin en C++ con QT. Buenos Aires, Argentina, 2004. Craig, L., UML y Patrones Introduccin al Anlisis y Diseo Orientado a Objeto. Mxico : Person. 1999.

Anexos
Anexo #1. Arquitectura del PLC

Anexo #2. Rangos del PLC

Anexo #3. Niveles de entradas digitales

Anexo #4. Niveles de salidas digitales

Anexo #5. Conversin de una seal analgica por un transmisor y transductor

Anexo #6. Transformacin de una seal analgica a un nmero binario

Anexo #58. Convertidor analgico a digital con 12 bits de resolucin

Anexo #59. Mdulo analgico de salida conectado a un transductor

Anexo #60. Conversin digital a analgica de un dato numrico en un registro del

PLC

Anexo#61. Tipos de temporizadores

Anexo #11. Salida cuando se alcanza el cero despus de contar descendente desde el valor seteado

Anexo #12. Salida cuando se alcanza el valor seteado contado desde cero

Anexo #13. Diagrama en bloques de un control PID

Anexo #14. Ilustracin de un control PID de proceso

Anexo #15. Control de proceso a lazo cerrado

Anexo #16. Diagrama en bloque de un algoritmo PID

Anexo #17. El maestro interroga a un esclavo con una direccin de red nica y espera por su respuesta

Anexo #18. El maestro enva un mensaje a todos los esclavos, los cuales ejecutan el comando del mensaje sin devolver una respuesta

Anexo #19. Formato general de las tramas Modbus

Anexo #20. Formato de la trama Modbus RTU

Anexo #21. Diagrama de bloques funcionales de Microblaze

Anexo #22. Interface del LCD

Anexo #23. Fichero de restricciones de usuario system.UCF # Spartan-3E 500E MicroBlaze Dev Board #Puerto serie Net fpga_0_RS232_DCE_RX_pin LOC=R7 | IOSTANDARD = LVCMOS33; Net fpga_0_RS232_DCE_TX_pin LOC=M14 | IOSTANDARD = LVCMOS33; # reloj de sistema de 50 Mhz y seal de reset. Net fpga_0_clk_1_sys_clk_pin TNM_NET = sys_clk_pin; TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 50000 kHz; Net fpga_0_clk_1_sys_clk_pin LOC=c9 | IOSTANDARD = LVCMOS33; Net fpga_0_rst_1_sys_rst_pin TIG; Net fpga_0_rst_1_sys_rst_pin LOC=K17 PULLDOWN; #***************Mdulo SPI para los conversores AD y DA net xps_spi_0_SCK_pin loc=u16 | IOSTANDARD = LVCMOS33; net xps_spi_0_MOSI_pin loc=t4 | IOSTANDARD = LVCMOS33; net xps_spi_0_MISO_pin loc=n10 | IOSTANDARD = LVCMOS33; net xps_spi_0_SS_pin<0> loc=n8 | IOSTANDARD = LVCMOS33; #DAC_CS net xps_spi_0_SS_pin<1> loc=n7 | IOSTANDARD = LVCMOS33; #AMP_CS # seales SPI a bloquear | IOSTANDARD = LVCMOS33 |

NET SPI_SS_B LOC = U3 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 6 ; NET SF_CE0 LOC = D16 | IOSTANDARD = LVCMOS33 | DRIVE = 4 | SLEW = SLOW ; NET FPGA_INIT_B LOC = T3 | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 4 ; # encender o apagar los preamplificadores de ganancia programable net amp_shdn_pin loc=p7 | IOSTANDARD = LVCMOS33; # reset del conversor D/A NET dac_clr_pin LOC = P8 | IOSTANDARD = LVCMOS33; #inicio de conversin del A/D net ad_conv_pin<0> loc=p11 | IOSTANDARD = LVCMOS33 ; # Mdulo de salida digitales conectado a los leds net digital_out_4b_0_Salidas_pin<0> loc=f12 | IOSTANDARD = LVCMOS33; net digital_out_4b_0_Salidas_pin<1> loc=e12 | IOSTANDARD = LVCMOS33; net digital_out_4b_0_Salidas_pin<2> loc=e11 | IOSTANDARD = LVCMOS33; net digital_out_4b_0_Salidas_pin<3> loc=f11 | IOSTANDARD = LVCMOS33; net digital_out_4b_1_Salidas_pin<0> loc=c11 | IOSTANDARD = LVCMOS33; net digital_out_4b_1_Salidas_pin<1> loc=d11 | IOSTANDARD = LVCMOS33; net digital_out_4b_1_Salidas_pin<2> loc=e9 | IOSTANDARD = LVCMOS33; net digital_out_4b_1_Salidas_pin<3> loc=f9 | IOSTANDARD = LVCMOS33; # Mdulo de entrada conectado a los 4 interruptores Net digital_in_4b_0_Entradas_pin<0> LOC=L13 | IOSTANDARD = LVTTL | PULLUP ; Net digital_in_4b_0_Entradas_pin<1> LOC=L14 | IOSTANDARD = LVTTL | PULLUP; Net digital_in_4b_0_Entradas_pin<2> LOC=h18 | IOSTANDARD = LVTTL | PULLUP; Net digital_in_4b_0_Entradas_pin<3> LOC=n17 | IOSTANDARD = LVTTL | PULLUP; # Mdulo de entrada conectado a 4 pushbottom Net digital_in_4b_1_Entradas_pin<0> LOC=h13 | IOSTANDARD = LVTTL | PULLUP; Net digital_in_4b_1_Entradas_pin<1> LOC=v4 | IOSTANDARD = LVTTL | PULLUP; Net digital_in_4b_1_Entradas_pin<2> LOC=d18 | IOSTANDARD = LVTTL | PULLUP; Net digital_in_4b_1_Entradas_pin<3> LOC=v16 | IOSTANDARD = LVTTL | PULLUP;

# LCD NET lcd_pin<6> LOC = R15 | IOSTANDARD = LVCMOS33; # LCD Data 0 NET lcd_pin<5> LOC = R16 | IOSTANDARD = LVCMOS33; # LCD Data 1 NET lcd_pin<4> LOC = P17 | IOSTANDARD = LVCMOS33; # LCD Data 2 NET lcd_pin<3> LOC = M15 | IOSTANDARD = LVCMOS33; # LCD Data 3 NET lcd_pin<2> LOC = M18 | IOSTANDARD = LVCMOS33; # LCD E NET lcd_pin<1> LOC = L18 | IOSTANDARD = LVCMOS33; # LCD RS NET lcd_pin<0> LOC = L17 | IOSTANDARD = LVCMOS33; # LCD RW

Anexo #24. Rutina de atencin a la interrupcin del Modbus RTU void receiveMessage() { XUartLite_DisableIntr(XPAR_RS232_DCE_BASEADDR); //......Recibir codigo del esclavo..... while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); sId = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); size = 0;

if(sId==1) { display_num(sId); writeLcd(LCD_CMD, 0xC0); printLcd(" OK" ); message[size ++]= sId; //......Recibir codigo de la funcion..... while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); fCode = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); message[size ++]= fCode;

if(fCode == 1 || fCode == 2 || fCode==3 || fCode==4) { //......Recibir direccin del primer elemento....... for(i=0; i< 2; i++) { while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); add = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); message[size ++]= add; } //.......Recibir cantidad de elementos a leer...... for(i=0; i< 2; i++) { while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); numberItems = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); message[size ++]= numberItems; } //........Recibir los 2 bytes de CRC..... for(i=0; i< 2; i++) { while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); hCRC = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); message[size ++]= hCRC; } disassembleReadQuery(); } if(fCode == 5 || fCode == 6) { //......Recibir direccin del primer elemento....... for(i=0; i< 2; i++) {

while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); add = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); message[size ++]= add; } //.......Recibir dato a forzar...... for(i=0; i< 2; i++) { while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); fData = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); message[size ++]= fData; } //........Recibir los 2 bytes de CRC..... for(i=0; i< 2; i++) { while(XUartLite_IsReceiveEmpty(XPAR_RS232_DCE_BASEADDR)); hCRC = XUartLite_RecvByte(XPAR_RS232_DCE_BASEADDR); message[size ++]= hCRC; } disassembleSingleWriteQuery(); } } XUartLite_EnableIntr(XPAR_RS232_DCE_BASEADDR); } Anexo #25. Funcin para enviar por encuesta un byte por el puerto serie void enviarRS232(unsigned char dato) { while(XUartLite_IsTransmitFull(XPAR_RS232_DCE_BASEADDR)); XUartLite_SendByte(XPAR_RS232_DCE_BASEADDR,dato); } Anexo #26. Simulador Modbus ModScan32

Anexo #27. Configuracin de la interrupcin del Timer /******Funcin de la librera Interrupciones.h ***/ void Configurar_Interrupcion_Timer(u32 XIntc_BASEADDR,int InterruptId,u32

timer_BASEADDR,XInterruptHandler interrupt_handler) { XIntc_RegisterHandler(XIntc_BASEADDR,InterruptId,interrupt_handler, (void *)0); //habilitando la interrupcin del timer TIMER_mWriteReg(XPAR_TIMER_0_BASEADDR, TIMER_INTR_IPIER_OFFSET, 0x00000001); /* * Set global interrupt enable. */ TIMER_mWriteReg(XPAR_TIMER_0_BASEADDR, INTR_GIE_MASK); } TIMER_INTR_DGIER_OFFSET,

/***********Ejemplo de llamada a la funcin de configuracin del timer*******/

Configurar_Interrupcion_Timer(XPAR_XPS_INTC_0_BASEADDR,XPAR_XPS_INTC_0 _TIMER_0_IP2INTC_IRPT_INTR, XPAR_TIMER_0_BASEADDR,Timer_interrupt_handler);

Anexo #28. # Gestio onar diagra amas esca alera

Anexo #29. # Gestio onar las pr ropiedades s de cada componen c nte

Anexo #30. # Gestio onar los er rrores cont tenidos en los diagra amas desa arrollados

Anexo #31. Gestionar mec canismos de salvar y desarro ollados

abrir ficheros d de programas

Anexo #32. # Gestio onar los me ecanismos s de gener rar y expor rtar cdigo o intermedi io

Anexo #33. Progra ama de arr ranque y parada de un motor

Anexo #34. Cdigo en lenguaje C obtenido del anexo#33 Programa de arranque y parada de un motor

This document was created with Win2PDF available at http://www.daneprairie.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only.

Vous aimerez peut-être aussi