Sistemas Embebidos

Anuncio
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
Descargar