PAC- Performance-centered Adaptive Curriculum for Employment Needs Programa ERASMUS: Acción Multilateral - 517742-LLP-1-2011-1-BG-ERASMUS-ECUE MASTER DEGREE: Industrial Systems Engineering ASIGNATURA ISE5: Controladores industriales de diseño de alto nivel MÓDULO 3: Sistemas embebidos TAREA 3-2: INGENIERÍA DE LOS SISTEMAS EMBEBIDOS SW (Software). Sistemas Embebidos Contenido TAREA 4-2: ÁREAS DE APLICACIÓN DE LOS ICN. .................................................... 3 1. INTRODUCCIÓN Y OBJETIVOS ................................................................................. 3 2. CONTENIDO..................................................................................................................... 3 2.1 APARTADO 1: ¿Cuáles son las ventajas de los sistemas de control distribuido en comparación con centralizado? .................................................... 3 2.2 APARTADO 2: ¿Qué significa "sensores inteligentes" y qué ventajas proporcionan estos tipos de sensores? .................................................................. 5 2.3 APARTADO 3: Breve descripción de la automatización interna y automatización de edificios. ..................................................................................... 10 3. CONCLUSIONES ........................................................................................................... 13 4. BIBLIOGRAFÍA Y/O REFERENCIAS ....................................................................... 15 5. ENLACES DE INTERÉS ............................................................................................... 15 Índice de figuras Figura 1: Sistema de control centralizado ..................................................................................... 7 Figura 2: Diagrama de bloque general del sensor inteligente ....... ¡Error! Marcador no definido. Figura 3: Estructura hardware básica de un sensor inalámbrico inteligente. ¡Error! Marcador no definido. Figura 4: El primer sensor inteligente. ........................................... ¡Error! Marcador no definido. Figura 5: Evolución de los sensores inteligentes............................ ¡Error! Marcador no definido. Índice de tablas CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 2 Sistemas Embebidos TAREA 3-2: INGENIERÍA EMBEBIDOS SW (Software). DE LOS SISTEMAS 1. INTRODUCCIÓN Y OBJETIVOS Se realizará una breve introducción a la tarea a realizar en la que se describa la tarea y el objetivo perseguido. Se pide que el alumno investigue sobre las siguientes cuestiones planteadas: 1. ¿Cuáles son los principales objetivos de la ingeniería del software? 2. Describir las principales etapas de desarrollo de software para sistemas embebidos. 3. Comparar el Sistema operativo más popular para dispositivos móviles (posiblemente en forma de tabla). 4. Comparar los lenguajes más populares utilizados en sistemas embebidos. 2. CONTENIDO 2.1 APARTADO 1: ¿Cuáles son los principales objetivos de la ingeniería del software? Ingeniería de software es la aplicación de un enfoque sistemático, disciplinado y cuantificable al desarrollo, operación y mantenimiento de software, y el estudio de estos enfoques. Integra matemáticas, ciencias de la computación y prácticas cuyos orígenes se encuentran en la ingeniería. Se pueden citar otras definiciones enunciadas por prestigiosos autores: - Ingeniería de software es el estudio de los principios y metodologías para el desarrollo y mantenimiento de sistemas software (Zelkovitz, 1978) - Ingeniería de software es la aplicación práctica del conocimiento científico al diseño y construcción de programas de computadora y a la documentación mantenerlos. Se asociada conoce requerida también para como desarrollar, desarrollo de operar y software o producción de software (Bohem, 1976). La creación del software es un proceso intrínsecamente creativo y la ingeniería del software trata de sistematizar este proceso con el fin de acotar el riesgo CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 3 Sistemas Embebidos del fracaso en la consecución del objetivo creativo por medio de diversas técnicas que se han demostrado adecuadas en base a la experiencia previa. La ingeniería de software requiere llevar a cabo numerosas tareas agrupadas en etapas, al conjunto de estas etapas se le denomina ciclo de vida. Las etapas comunes a casi todos los modelos de ciclo de vida son las siguientes: Análisis de requisitos Extraer los requisitos de un producto de software es la primera etapa para crearlo. La captura, análisis y especificación de requisitos (incluso pruebas de ellos), es una parte crucial; de esta etapa depende en gran medida el logro de los objetivos finales. Arquitectura La arquitectura de software consiste en el diseño de componentes de una aplicación (entidades del negocio), generalmente utilizando patrones de arquitectura. El diseño arquitectónico debe permitir visualizar la interacción entre las entidades del negocio y además poder ser validado, por ejemplo por medio de diagramas de secuencia. Un diseño arquitectónico describe en general el cómo se construirá una aplicación de software. Para ello se documenta utilizando diagramas, por ejemplo: Diagramas de clases Diagramas de base de datos Diagrama de despliegue Diagrama de secuencia Prueba Consiste en comprobar que el software realice correctamente las tareas indicadas en la especificación del problema. Una técnica de prueba es probar por separado cada módulo del software, y luego probarlo de forma integral, para así llegar al objetivo. Mantenimiento Fase dedicada a mantener y mejorar el software para corregir errores descubiertos e incorporar nuevos requisitos. Esto puede llevar más tiempo incluso que el desarrollo del software inicial. Alrededor de 2/3 del tiempo de ciclo de vida de un proyecto está dedicado a su mantenimiento. Una pequeña parte de este trabajo consiste eliminar errores (bugs). CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 4 Sistemas Embebidos 2.2 APARTADO 2: Describir las principales etapas de desarrollo de software para sistemas embebidos. En febrero del 2001, tras una reunión celebrada en Utah, nace el término "ágil" aplicado al desarrollo software. El objetivo fue esbozar los valores y principios que deberían permitir a los equipos desarrollar software rápidamente y responder a los cambios que pueden surgir a lo largo del proyecto. Esto pretende ser una alternativa a los procesos de desarrollo tradicionales caracterizados por su total rigidez y muy dirigidos a la documentación que se genera tras cada una de las actividades desarrolladas. Esta nueva idea tiene dos motivaciones claras: un alto número de proyectos que se retrasan o fracasan; y la baja calidad del software que se desarrolla. La búsqueda de la solución pasa por una serie de factores: la mayor parte del esfuerzo es un proceso creativo y requiere de personas con talento, estos procesos son difícilmente planificables, modificar software es barato, las pruebas y revisión de código son la mejor forma de conseguir calidad y los fallos de comunicación son la principal fuente de fracaso. En definitiva, el desarrollo ágil de software intenta evitar los tortuosos y burocráticos caminos de las metodologías tradicionales, enfocándose en las personas y los resultados. Promueve iteraciones en el desarrollo a lo largo de todo el ciclo de vida del proyecto. Desarrollando software en cortos lapsos de tiempo se minimizan los riesgos, cada una de esas unidades de tiempo se llama iteración, la cual debe durar entre una y cuatro semanas. Cada iteración del ciclo de vida incluye: planificación, análisis de requerimientos, diseño, codificación, demasiada revisión y funcionalidad, documentación. para justificar Cada el iteración no debe añadir lanzamiento del producto al mercado, sino que la meta debe ser conseguir una versión funcional sin errores. Al final de cada iteración, el equipo volverá a evaluar las prioridades del proyecto. En Ingeniería de software existen dos tipos de desarrollo de ciclo de vida, por un lado se encuentra el desarrollo en cascada, también llamado modelo en cascada, es el enfoque metodológico que ordena rigurosamente las etapas del proceso para el desarrollo de software, de tal forma que el inicio de cada etapa debe esperar a la finalización de la etapa anterior. Un ejemplo de una metodología de desarrollo en cascada sería el siguiente: CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 5 Sistemas Embebidos 1.- Análisis de requisitos. 2.- Diseño del Sistema. 3.- Diseño del Programa. 4.- Codificación. 5.- Pruebas. 6.- Implantación. 7.- Mantenimiento. De esta forma, cualquier error de diseño detectado en la etapa de prueba conduce necesariamente al rediseño y nueva programación del código afectado, aumentando los costos del desarrollo. La palabra cascada sugiere, mediante la metáfora de la fuerza de la gravedad, el esfuerzo necesario para introducir un cambio en las fases más avanzadas de un proyecto. Análisis de requisitos En esta fase se analizan las necesidades de los usuarios finales del software para determinar qué objetivos debe cubrir. De esta fase surge una memoria llamada SRD (documento de especificación de requisitos), que contiene la especificación completa de lo que debe hacer el sistema sin entrar en detalles internos. Es importante señalar que en esta etapa se debe consensuar todo lo que se requiere del sistema y será aquello lo que seguirá en las siguientes etapas, no pudiéndose requerir nuevos resultados a mitad del proceso de elaboración del software. Diseño del Sistema Descompone y organiza el sistema en elementos que puedan elaborarse por separado, aprovechando las ventajas del desarrollo en equipo. Como resultado surge el SDD (Documento de Diseño del Software), que contiene la descripción de la estructura relacional global del sistema y la especificación de lo que debe hacer cada una de sus partes, así como la manera en que se combinan unas con otras. Es conveniente distinguir entre diseño de alto nivel o arquitectónico y diseño detallado. El primero de ellos tiene como objetivo definir la estructura de la solución (una vez que la fase de análisis ha descrito el problema) identificando grandes módulos (conjuntos de funciones que van a estar asociadas) y sus relaciones. Con ello se define la arquitectura de la solución elegida. El segundo define los algoritmos empleados y la organización del código para comenzar la implementación. Diseño del Programa CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 6 Sistemas Embebidos Es la fase en donde se realizan los algoritmos necesarios para el cumplimiento de los requerimientos del usuario así como también los análisis necesarios para saber que herramientas usar en la etapa de Codificación. Codificación Es la fase en donde se implementa el código fuente, haciendo uso de prototipos así como de pruebas y ensayos para corregir errores. Dependiendo del lenguaje de programación y su versión se crean las bibliotecas y componentes reutilizables dentro del mismo proyecto para hacer que la programación sea un proceso mucho más rápido. Pruebas Los elementos, ya programados, se ensamblan para componer el sistema y se comprueba que funciona correctamente y que cumple con los requisitos, antes de ser entregado al usuario final. Verificación Es la fase en donde el usuario final ejecuta el sistema, para ello el o los programadores ya realizaron exhaustivas pruebas para comprobar que el sistema no falle. En la creación de desarrollo de cascada se implementa los códigos de investigación y pruebas del mismo. Mantenimiento Una de las etapas más críticas, ya que se destina un 75% de los recursos, es el mantenimiento del Software ya que al utilizarlo como usuario final puede ser que no cumpla con todas nuestras expectativas. Figura 1: Modelo de desarrollo de software en cascada CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 7 Sistemas Embebidos El segundo tipo de desarrollo de SW es el llamado desarrollo en espiral es un modelo de ciclo de vida del software definido por primera vez por Barry Boehm en 1986, utilizado generalmente en la Ingeniería de software. Las actividades de este modelo se conforman en una espiral, en la que cada bucle o iteración representa un conjunto de actividades. Las actividades no están fijadas a ninguna prioridad, sino que las siguientes se eligen en función del análisis de riesgo, comenzando por el bucle interior. Básicamente consiste en una serie de ciclos que se repiten en forma de espiral, comenzando desde el centro. Se suele interpretar como que dentro de cada ciclo de la espiral se sigue un Modelo Cascada, pero no necesariamente debe ser así. El Espiral puede verse como un modelo evolutivo que conjuga la naturaleza iterativa del modelo MCP con los aspectos controlados y sistemáticos del Modelo Cascada, con el agregado de gestión de riegos. En cada vuelta o iteración hay que tener en cuenta: - Los Objetivos: qué necesidad debe cubrir el producto. - Alternativas: las diferentes formas de conseguir los objetivos de forma exitosa, desde diferentes puntos de vista como pueden ser: - Características: experiencia del personal, requisitos a cumplir, etc. Formas de gestión del sistema. - Riesgo asumido con cada alternativa. - Desarrollar y Verificar: Programar y probar el software. Si el resultado no es el adecuado o se necesita implementar mejoras o funcionalidades: - Se planificaran los siguientes pasos y se comienza un nuevo ciclo de la espiral. La espiral tiene una forma de caracola y se dice que mantiene dos dimensiones, la radial y la angular: - Angular: Indica el avance del proyecto del software dentro de un ciclo. - Radial: Indica el aumento del coste del proyecto, ya que con cada nueva iteración se pasa más tiempo desarrollando. Este sistema es muy utilizado en proyectos grandes y complejos como puede ser la creación de un Sistema Operativo. Al ser un modelo de Ciclo de Vida orientado a la gestión de riesgo se dice que uno de los aspectos fundamentales de su éxito radica en que el equipo que lo aplique tenga la necesaria experiencia y habilidad para detectar y catalogar correctamente los riesgos. CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 8 Sistemas Embebidos Para cada ciclo habrá cuatro actividades: 1.- Determinar Objetivos. 2.- Análisis del riesgo. 3.- Planificación. 4.- Desarrollar y probar. Figura 2: Modelo de desarrollo de software en cascada Determinar o fijar objetivos - Fijar también los productos definidos a obtener: requerimientos, especificación, manual de usuario. - Fijar las restricciones. - Identificación de riesgos del proyecto y estrategias alternativas para evitarlos. - Hay una cosa que solo se hace una vez: planificación inicial. Desarrollar, verificar y validar (probar) - Tareas de la actividad propia y de prueba. - Análisis de alternativas e identificación resolución de riesgos. - Dependiendo del resultado de la evaluación de los riesgos, se elige un modelo para el desarrollo, el que puede ser cualquiera de los otros existentes, como formal, evolutivo, cascada, etc. Así si por ejemplo si los riesgos en la interfaz de usuario son dominantes, un modelo de desarrollo apropiado podría ser la construcción de prototipos evolutivos. Si lo riesgos de protección son la principal consideración, un desarrollo basado en transformaciones formales podría ser el más apropiado. Análisis del riesgo Se lleva a cabo el estudio de las causas de las posibles amenazas y probables eventos no deseados y los daños y consecuencias que éstas puedan producir. CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 9 Sistemas Embebidos Las ventajas de este modelo tipo espiral son entre ellas el hecho de que el análisis del riesgo se hace de forma explícita y clara. Une los mejores elementos de los restantes modelos. - Reduce riesgos del proyecto - Incorpora objetivos de calidad - Integra el desarrollo con el mantenimiento, etc. Además es posible tener en cuenta mejoras y nuevos requerimientos sin romper con la metodología, ya que este ciclo de vida no es rígido ni estático. Entre las desventajas, podemos citar las siguientes: genera mucho tiempo en el desarrollo del sistema, se trata de un modelo costoso y se requiere experiencia en la identificación de riesgos. 2.3 APARTADO 3: Comparación del Sistema operativo más popular para dispositivos móviles (en forma de tabla). Aunque muchas metodologías ágiles han sido revisadas durante la última década, casi ninguna se ha centrado en los requerimientos tan específicos que el desarrollo móvil necesita. Las metodologías ágiles poseen ciertas propiedades que las hacen totalmente aplicables al dominio del software en los móviles. Se identifican los métodos ágiles como la solución potencial para el desarrollo de software en móviles. Se apoya en las bases (home ground) haciendo un análisis comparativo para probar la idoneidad de los métodos ágiles sobre el desarrollo de software para móviles. Esas características ideales y su motivación en cada caso se muestran en la Tabla 1. CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 10 Sistemas Embebidos Tabla 1: Comparativa entre las características básicas o bases (home ground) ágiles y los rasgos observados en el desarrollo de software móvil. También habría que citar el Sistema operativo SymbianOS diseñado para dispositivos móviles por SymbianLtd. (se ejecuta generalmente en OMAP (Plataforma de aplicaciones multimedia abierta) procesadores, los cuáles generalmente incluyen un propósito general de arquitectura en el núcleo del procesador ARM más uno o más coprocesadores especializados. CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 11 Sistemas Embebidos 2.4 APARTADO 4: Comparación entre los lenguajes más populares utilizados en sistemas embebidos. Lenguajes de Software describen secuencias de instrucciones para ejecutar un proceso. Por lo tanto, la lista de la mayoría de las instrucciones imperativas se ejecutan para comunicar a través de la memoria: un array de almacenamiento de localizaciones que mantienen sus valores hasta que son modificados. Los lenguajes más populares son: Lenguaje ensamblador, C, C++ y Java. A continuacion se muestra una tabla comparative sobre las características de estos lenguajes: Tabla 2: Comparativa entre los lenguajes de software C++ se extiende C con los mecanismos de estructuración para grandes programas: los tipos de datos indefinidos, una manera de reutilizar el código con tipos diferentes, espacios de nombres a los grupos de objetos y evitar conflictos de nombres accidentales cuando se ensamblan las piezas del programa, y las excepciones para manejar errores. La librería standard C++ incluye una colección de datos polimórficos eficientes, tales como arrays (matrices), árboles, cadenas para las que el compilador genera implementaciones personalizadas. Lenguaje Java Sun se asemeja al C++ pero es incompatible. Al igual que C++, Java está orientado a objetos, que proporcionan clases y herencia. Es un lenguaje de más alto nivel que C++, ya que utiliza las referencias a objetos, matrices y cadenas en lugar de punteros. La recogida automática de basura de Java libera al programador de la gestión de memoria. Java proporciona subprocesos simultáneos. Otro tipo de lenguaje de Sistemas Embebidos son languages de flujo de datos y lenguajes Híbridos. Los lenguajes de flujo de datos son un complemento perfecto para los algoritmos de procesamiento de señales, que utilizan grandes cantidades de aritmética derivada de la teoría de CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 12 Sistemas Embebidos sistemas lineales de decodificación, comprimen o filtran corrientes de datos que representan muestras periódicas de los valores continuamente cambiantes, como el sonido o el video. 3. CONCLUSIONES Como conclusion de esta tarea, podemos realizar una comparación de lenguajes de programación en la que se suelen valorar nueve "criterios para la evaluación y comparación de lenguajes". Un listado de estos criterios se presenta a continuación: 1. 2. 3. 4. 5. 6. 7. 8. 9. Expresividad: Facilidad del lenguaje para expresar los algoritmos Bien Definido: Consistencia y falta de ambigüedad Tipos y estructuras de datos Modularidad: permitir el desarrollo de componentes independientemente Facilidades de entrada-salida: Soporte para interacción con el entorno Transportabilidad/Portabilidad Eficiencia/Performance Pedagogía: Facilidad de aprendizaje y enseñanza Generalidad: Aplicabilidad, Uso Tabla 3: Comparativa entre los lenguajes de software según sus características El lenguaje C siempre fue distinguido como altamente expresivo y potencialmente muy económico dada su reducida cantidad de palabras clave y el poder de algunos de sus operadores. En la actualidad, sin embargo, es frecuente el deseo de soportar estructuras de programación cada vez más complejas (aunque con frecuencia con los mismos algoritmos) con lo cual las implementaciones en lenguaje C tienden a tornarse oscuras (e inseguras) frente a equivalentes en otros lenguajes. CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 13 Sistemas Embebidos El lenguaje C++ proporciona un gran salto cualitativo frente a C al proporcionar nuevas características útiles en diversos contextos. Por ejemplo, la sobrecarga de operadores dota al lenguaje de una expresividad notable cuando se implementan aplicaciones científico-matemáticas (aunque en otros contextos pueden crear confusión); la sintaxis de clases y objetos permite manipular convenientemente diversas estructuras de datos y operaciones; las excepciones permiten procesar de un modo claro (aunque a veces con más código) los casos de error; los templates se pueden considerar (superficialmente) como macros de precompilador pero con muchas más características, etc. sin embargo, todo esto no ha estado exento de errores, en gran parte causados por mantener la compatibilidad con C como durante las etapas de enlace y ejecución. Por su parte, Java adopta una sintaxis muy similar a la del lenguaje C++, aunque eliminando algunas de sus características más oscuras. En particular, la eliminación de los punteros (arrastrados desde el lenguaje C) no lo ha hecho ni más ni menos expresivo, pero sí mucho más seguro. El lenguaje C proporciona mecanismos que actualmente se consideran rudimentarios para proporcionar tipos de datos estructurados. Las estructuras (y uniones) se suelen utilizar para definir tipos complejos constituidos a partir de otros más simples (que a la vez pueden ser estructuras y/o uniones) con la posibilidad de crear identificadores auxiliares que simplifican la notación. Asimismo, los arreglos o arrays permiten especificar colecciones homogéneas de longitud fija (en tiempo de compilación), los cuales tienen una relación muy cercana en su manipulación con los punteros. Una carencia notable (o ventaja según algunos) es la carencia de tipos de datos para representar cadenas de texto (strings), los cuales son soportados de un modo inusual mediante arrays de caracteres. Si bien este "minimalismo" contribuye a la ejecución (o la optimización en la compilación), son muchos los casos donde se requiere el soporte de tipos más sofisticados (y sus operaciones asociadas) como por ejemplo, vectores, listas enlazadas, colas, etc. para los cuales el lenguaje obliga a construirlos desde sus componentes básicos. En la práctica, existen diversas librerías que complementan estos aspectos pero su programación necesariamente es más laboriosa al no estar integrada internamente al lenguaje. CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 14 Sistemas Embebidos 4. BIBLIOGRAFÍA Y/O REFERENCIAS En este apartado se hará referencia a toda la bibliografía utilizada. [1] Mandado Pérez, E., Marcos Acevedo J., Fernández Silva C. Autómatas programables y sistemas de automatización Ed. Marcombo [2] Introducción a los sensores. CSIC. Ed. Artes Gráficas S.A. 5. ENLACES DE INTERÉS Se detallarán los enlaces o links que puedan ser de interés en relación con el tema de la tarea. http://es.wikipedia.org/wiki/Desarrollo_en_espiral http://es.wikipedia.org/wiki/Ingenier%C3%ADa_de_software http://www.adamwesterski.com/wpcontent/files/docsCursos/Agile_doc_TemasAnv.pdf http://es.wikipedia.org/wiki/Desarrollo_en_cascada http://es.wikipedia.org/wiki/Symbian_OS http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.26.4735&rep=rep1&type =pdf http://www.limadata.com/doc/ventajas_c.pdf CONTROLADORES INDUSTRIALES DE DISEÑO DE ALTO NIVEL. 15