P. 1
Generación Automática de Documentación a través de un Archivo XML

Generación Automática de Documentación a través de un Archivo XML

|Views: 54|Likes:
Published by Oihane Crucelaegui

More info:

Published by: Oihane Crucelaegui on May 24, 2011
Copyright:Attribution

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF or read online from Scribd
See more
See less

05/24/2011

Generación Automática de Documentación

GENERACIÓN AUTOMÁTICA DE DOCUMENTACIÓN A TRAVÉS DE UN ARCHIVO XML
Mikel Belausteguigoitia Oihane Crucelaegui Maialen Magalhaes Imanol Vellón

Página 0

Generación Automática de Documentación Índice

Índice
1 2 3 4 5 Introducción ....................................................................................................... 2 Objetivo ............................................................................................................. 4 Lenguaje de Modelado UML ............................................................................. 5 Metodología de Trabajo ..................................................................................... 7 Formato de la Documentación ........................................................................... 8 5.1 5.2 5.2.1 5.2.2 5.2.3 6 7 8 Lista de Componentes Hardware................................................................ 8 Lista de la Arquitectura Hardware de los Nodos ........................................ 8 Nodo Procesador ........................................................................................ 8 Nodos Entrada/Salida ............................................................................... 10 Segmentos de Bus ..................................................................................... 12

Implementación ............................................................................................... 14 Resultados Obtenidos ...................................................................................... 18 Conclusiones .................................................................................................... 19

Página 1

Generación Automática de Documentación Grupo 2

1 Introducción
En el proceso de diseño de sistemas de control industrial no solo se deben tener en cuenta las especificaciones funcionales, qué hace el sistema, sino también las no funcionales, cómo lo hace y qué restricciones existen. Cuando se diseña un sistema de control una de las mayores dificultades es precisamente definir correctamente las especificaciones en todos los niveles, conocer las restricciones y gestionar la relación entre ellas. Como solución a este problema, cuya complejidad se deriva principalmente del tamaño del sistema, surge la idea de realizar el diseño basado en modelos. Lo que se hace es definir distintos puntos de vista, llamados dominios: dominio funcional, dominio de la arquitectura software y dominio de la arquitectura hardware. Una vez definidos los dominios se realiza un modelo1 del sistema para cada dominio, para lo cual se define un lenguaje o metamodelo2 especifico de cada dominio. El modelo completo del sistema está compuesto por el modelo de cada dominio más las relaciones entre los dominios. En este proyecto se ha realizado el modelado de un sistema de control a través de los modelos funcional, hardware y software. El diseño basado en modelos además de ayudar en la gestión de la complejidad en el diseño de un sistema conlleva otras ventajas entre las que destacan la trazabilidad de los requisitos y la generación de código.

1

Modelo: representación parcial o simplificada de la realidad que recoge aquellos aspectos de relevancia

para las intenciones del modelador, y de la que se pretende extraer conclusiones de tipo predictivo. Se modela para comprender mejor o explicar mejor un proceso o unas observaciones. Un mismo objeto puede ser modelado con distintas técnicas y distintas intenciones, de forma que cada modelo resalta sólo ciertos aspectos del objeto.
2

Metamodelado: es el análisis, construcción y desarrollo de los marcos, las reglas, las limitaciones, los

modelos y teorías aplicables y útiles para el modelado de una clase predefinida de los problemas.

Página 2

Generación Automática de Documentación Grupo 2

El objetivo de este proyecto es la generación automática de documentación a partir de un modelo. Esto es posible porque un modelo realizado en UML puede ser exportado a un fichero de texto en XML y se ha definido el estándar XMI (XML Metada Interchange) que especifica la forma en la que es posible intercambiar modelos UML entre distintas herramientas de modelado. En definitiva, el objetivo es extraer la información referente al modelo contenido en el XMI y generar la documentación requerida.

Página 3

Generación Automática de Documentación Grupo 2

2 Objetivo
El objetivo del presente proyecto es generar de forma automática la documentación de la Estación 1- Ubicación Base. Concretamente, se trata de generar la siguiente documentación: • • La lista general de componentes hardware por la que está compuesta la estación. La lista de la arquitectura hardware de los nodos, distinguiendo entre: Nodo Procesador. Nodos Entrada/Salida. Segmentos de bus. Para la consecución de dicho objetivo, vamos a partir del modelo de la Estación 1, que se ha realizado con el lenguaje de modelado UML.

Página 4

Generación Automática de Documentación Grupo 2

3 Lenguaje de Modelado UML
Tal y como se ha comentado en el punto 2, objetivo del proyecto, tenemos que partir del modelo de la Estación 1. Para ello, vamos a utilizar el lenguaje de modelado UML. El Lenguaje Unificado de Modelado (UML) es un lenguaje gráfico para visualizar, especificar, construir y documentar un sistema. Es decir, es un lenguaje de modelado que permite la representación conceptual y física de un sistema. Hay que resaltar que UML es un "lenguaje de modelado" para especificar o para describir métodos o procesos. Se utiliza para definir un sistema, para detallar los artefactos en el sistema y para documentar y construir. En otras palabras, es el lenguaje en el que está descrito el modelo. UML cuenta con varios tipos de diagramas, los cuales muestran diferentes aspectos de las entidades representadas. En nuestro caso, los más importantes son los siguientes. • Diagrama de clases: es un tipo de diagrama estático que describe la estructura del sistema mostrando sus clases, atributos y las relaciones entre ellos. Se utilizan durante el proceso de diseño, donde se crea el diseño conceptual de la información que se manejará en el sistema, y los componentes que se encargaran del funcionamiento y la relación entre uno y otro. • Diagrama de componentes: representa cómo un sistema de software es dividido en componentes y muestra las dependencias entre estos componentes. Pueden ser usados para modelar y documentar cualquier arquitectura de sistema. • Diagramas de objetos: se puede considerar un caso especial de un diagrama de clases en el que se muestran instancias específicas de clases (objetos) en un momento particular del sistema. Los diagramas de objetos utilizan un subconjunto de los elementos de un diagrama de clase. Los diagramas de objetos no muestran la multiplicidad ni los roles, aunque su notación es similar a los diagramas de clase. • Diagrama de Despliegue: es un tipo de diagrama que se utiliza para modelar el hardware utilizado en las implementaciones de sistemas y las relaciones entre sus componentes. Los elementos usados por este tipo de diagrama son nodos, componentes y asociaciones.

Página 5

Generación Automática de Documentación Grupo 2

Es indudable que el modelo de la estación va a contener particularidades que ningún lenguaje, va a poder describirlas todos a la vez. Es por esto que parte de la especificación del UML se dedica a definir mecanismos de extensión con miras a incrementar el campo de aplicación del lenguaje. El mecanismo de extensión, que hemos utilizado nosotros, es el llamado estereotipo; Un estereotipo representa una distinción de uso. Se trata de pequeñas etiquetas que aplicadas a los elementos o relaciones de un diagrama indican significado adicional. Una vez que tenemos el modelo completo estereotipado de la Estación 1, generamos el archivo XML que es el documento de base sobre el que realizaremos la búsqueda de información. Notar que es posible ampliar el modelo de la estación, pero gracias a la ventaja de que XML es extensible, solo hay que extenderlo con la adicción de nuevas etiquetas, de modo que se puede continuar utilizando sin mayor complicación. A continuación se muestra un ejemplo para ver la estructura del documento XML generado:
<nestedNode xmi:type="uml:Device" xmi:id="Ue9cfb082-bc42-4930-b20da41fe088a3de" xmi:uuid="e9cfb082-bc42-4930-b20d-a41fe088a3de" name="S1_PowerSupply"> <xmi:Extension extender="UModel"> <appliedStereotype xmi:type="uml:StereotypeApplication" xmi:id="U04213ff2-6f9b-40ad-8f3a-ae2bbffa7bc8" xmi:uuid="04213ff2-6f9b40ad-8f3a-ae2bbffa7bc8" visibility="unspecified" classifier="U44640d984882-42fd-8bf5-47ab398ee58d"> <slot xmi:type="uml:Slot" xmi:id="U3c8c722f-6f28-4c54-a0eeab65a5c9ecca" xmi:uuid="3c8c722f-6f28-4c54-a0ee-ab65a5c9ecca" definingFeature="U00c24948-68a6-4ba2-9f1c-17628f21de84"> <value xmi:type="uml:LiteralString" xmi:id="U7a4620ea-a7fc-4f5c-b13bad93a052d2bf" xmi:uuid="7a4620ea-a7fc-4f5c-b13b-ad93a052d2bf" value="S1_PowerSupply"/>

El motivo de usar la tecnología XML es porque expresa la información de forma estructurada, esto es, la información se compone de partes bien definidas, y esas partes se componen a su vez de otras partes. . Entonces se tiene un árbol de trozos de información. Estas partes se denominan elementos, y se las señala mediante etiquetas. Los elementos XML pueden tener contenido, o bien ser elementos vacíos. A su vez, los elementos pueden tener atributos, que son una manera de incorporar características o propiedades a dichos elementos. Por otra parte, los documentos XML sólo permiten un elemento raíz del que todos los demás sean parte, es decir, solo pueden tener un elemento inicial. En base a esta estructura, construiremos un algoritmo iterativo que recorra el documento XML para encontrar la información que nos interesa y mostrarla por pantalla.

Página 6

Generación Automática de Documentación Grupo 2

4 Metodología de Trabajo
El proceso de trabajo que seguimos, consta de las siguientes etapas: Modelado de la Estación 1. Generación de código XML a partir del modelo creado. Construcción de un algoritmo iterativo que nos proporcione la información que requerimos para generar la documentación. Por último, generación de un archivo para presentar la información filtrada.

Página 7

Generación Automática de Documentación Grupo 2

5 Formato de la Documentación
A continuación se muestra el formato que queremos generar para documentar la información. El objetivo es resumir toda la información disponible en una tabla que refleje y resuma dicha información, para que en un solo vistazo nos hagamos una idea de la composición Hardware de la Estación 1.

5.1 Lista de Componentes Hardware
Esta lista refleja todos los dispositivos que contiene el modelo de la estación, los cuales se resumen a continuación:
Unit 3 1 5 5 3 Description Fuente de Alimentación Procesador Digital Input Digital Output Enlace Ethernet Serial Number S1_PS S1_P S1_DI S1_DO S1_ETHERNET

5.2 Lista de la Arquitectura Hardware de los Nodos
El objetivo de esta lista es obtener las características principales tales como nombre, número de serie, posición y descripción de todos los dispositivos que componen cada nodo. A su vez, también vamos a obtener una tabla resumen que nos va a indicar los nodos que une el segmento de bus.

5.2.1 Nodo Procesador
El Autómata programable de la estación 1 (S1_PLC) es nuestro Nodo Procesador, que va estar compuesto por los siguientes dispositivos (ver figura nº1): Un procesador Una fuente de alimentación Cuatro tarjetas de Entradas/Salidas Una tarjeta Ethernet

Página 8

Generación Automática de Documentación Grupo 2

Figura Nº1. Nodo Procesador (S1_PLC) de la estación 1- Ubicación Base.

La documentación que habría que generar, tendría el siguiente aspecto:
Name Serial Number Position Description Fuente de Alimentación Procesador Digital Input Digital Input Digital Output Digital Output

Power Supply

S1_PowerSupply

S1_PS

1

Proccesor

S1_P S1_DI_1 S1_DI_2

2222 S1_DI S1_DI S1_DO S1_DO

2 3 4 5 6

IO Board S1_DO_1 S1_DO_2 Communication Board

S1_ETHERNET

S1_ETHERNET

7

Enlace Ethernet

Página 9

Generación Automática de Documentación Grupo 2

5.2.2 Nodos Entrada/Salida
Se trata de los nodos que hemos denominado Esclavo_profibus_1 y

Esclavo_profibus_2. La característica que hace que se diferencien del nodo procesador, es que no disponen del dispositivo procesador. A continuación, se enumeran los dispositivos que los componen: Una fuente de alimentación Una tarjeta Ethernet Cuatro tarjetas de Entradas/Salidas para el Esclavo_Profibus_1 (ver figura nº3) Dos tarjetas de Entradas/Salidas para el Esclavo_Profibus_2 (ver figura nº4)

Figura Nº2. Nodo Esclavo_Profibus_1 de la estación 1- Ubicación Base.

Página 10

Generación Automática de Documentación Grupo 2

Figura Nº3. Nodo Esclavo_Profibus_2 de la estación 1- Ubicación Base.

La tabla resumen que contiene la información de dichos nodos, se presenta a continuación: • Esclavo_Profibus_1
Name Serial Number Position Description Fuente de Alimentación Digital Input Digital Input Digital Output Digital Output

Power Supply

S1_PowerSupply

S1_PS

1

S1_DI_1 S1_DI_2 IO Board S1_DO_1 S1_DO_2 Communication Board

S1_DI S1_DI S1_DO S1_DO

3 4 5 6

S1_ETHERNET

S1_ETHERNET

7

Enlace Ethernet

Página 11

Generación Automática de Documentación Grupo 2

Esclavo_Profibus_2
Name Serial Number Position Description Fuente de Alimentación Digital Input Digital Output

Power Supply

S1_PowerSupply

S1_PS

1

S1_DI_1 IO Board S1_DO_1 Communication Board

S1_DI S1_DO

3 5

S1_ETHERNET

S1_ETHERNET

7

Enlace Ethernet

5.2.3 Segmentos de Bus
Es el elemento que realiza la conexión entre los nodos que hemos generado. Para obtener información de este elemento y poder generar la documentación, partimos de las asociaciones que hemos creado para unir dichos nodos (ver figura nº4).

Figura Nº4. Bus Profibus_DP1.

Página 12

Generación Automática de Documentación Grupo 2

La información resumida queda de la siguiente manera:
Node S1_PLC Esclavo_Profibus_1 Esclavo_Profibus_2 Serial Number Processing Node IO Node IO Node

Página 13

Generación Automática de Documentación Grupo 2

6 Implementación
A continuación, se explica el algoritmo implementado para obtener la tabla de los componentes Hardware. Para generar el resto de documentación se reutilizara la mayor parte del código, indicando puntualmente las diferencias encontradas. El primer paso, consiste en decirle al programa donde se encuentra el fichero .xmi, para ello utilizamos la instrucción Load y le indicamos el path donde se encuentra el fichero. A continuación, nos situamos en el elemento raíz del documento .xmi (NodoRaíz) y generamos MiLista, que contiene los nestedNode.
MiXml->Load("..\\docxmi\\Celula 1_v1.xmi"); XmlElement^ NodoRaiz = MiXml->DocumentElement XmlNodeList^ MiLista = NodoRaiz->GetElementsByTagName("nestedNode");

El siguiente paso, es hallar los identificadores serialNumber y description, que genera el .xmi que por defecto se asocia al perfil que hemos aplicado en el modelo de la Estación. Para lograr dicho objetivo se crea MiLista2, que contiene los ownedAttribute y MiLista3, que contiene los packagedElement y se recorren ambas listas para guardar en SerialId y el descrptionId.
//Para hallar el identificador del SerialNumber XmlNodeList^ MiLista2 = NodoRaiz->GetElementsByTagName("ownedAttribute"); for(int i = 0; i<MiLista2->Count; i++) {if(((XmlElement^)MiLista2[i])->GetAttribute("name")->Equals("serialNumber")) {SerialId = ((XmlElement^)MiLista2[i])->GetAttribute("xmi:id");} } //Para hallar el identificador de Description XmlNodeList^ MiLista3 = NodoRaiz->GetElementsByTagName("packagedElement"); for(int i = 0; i<MiLista3->Count; i++) {if(((XmlElement^)MiLista3[i])->GetAttribute("name")>Equals("GenericComponent")) {lista_gc->Add(MiLista3[i]); XmlNodeList^ lista_gc1 = lista_gc[0]->ChildNodes; for(int j = 0; j<lista_gc1->Count; j++) {if(((XmlElement^)lista_gc1[j])->GetAttribute("name")>Equals("description")) {descriptionId = ((XmlElement^)lista_gc1[j])>GetAttribute("xmi:id");}}}}

Página 14

Generación Automática de Documentación Grupo 2

A continuación, se genera una lista de dispositivos, lista_device, a partir de MiLista que contiene todos los dispositivos que cuelgan de los nodos.
for(int i = 0; i<MiLista->Count; i++) { if(((XmlElement^)MiLista[i])->GetAttribute("xmi:type")>Equals("uml:Device")) { lista_device->Add(MiLista[i]); Prueba = ((XmlElement^)lista_device[0])>GetAttribute("name");}}

En las siguientes líneas, se muestra la creación de la lista_slot, que contiene los atributos de los dispositivos. Se identifican los slots del serialNumber y description y se guardan dichos valores en serial_value y en description. También se comprueban aquellos dispositivos que tienen el mismo serialNumber, para realizar su suma.
for (int j=0; j<lista_device->Count; j++) { XmlNodeList^ lista_slot = lista_device[j]->ChildNodes[0]>ChildNodes[0]->ChildNodes; for(int i=0; i<lista_slot->Count; i++) { if(((XmlElement^)lista_slot[i])>GetAttribute("definingFeature")==SerialId) {for(int k=0; k<a; k++) { if(serial_value[k]==((XmlElement^)((XmlElement^)lista_slot[i])>ChildNodes[0])->GetAttribute("value")) { contador[k]++; salto=1;}} if (salto==0){ serial_value[a] = ((XmlElement^)((XmlElement^)lista_slot[i])->ChildNodes[0])>GetAttribute("value"); for(int l=0; l<lista_slot->Count; l++) {if(((XmlElement^)lista_slot[l])>GetAttribute("definingFeature")==descriptionId) {description[a] = ((XmlElement^)((XmlElement^)lista_slot[l])->ChildNodes[0])>GetAttribute("value"); }} contador[a]++; a++;} else salto=0;}}}

Página 15

Generación Automática de Documentación Grupo 2

Por último, se muestra por pantalla, los resultados obtenidos.
if (myfile.is_open()) { myfile<<"<table border=1>\n"; myfile<<"<tr><th>Unit</th>"; myfile<<"<th>Description</th>"; myfile<<"<th>Serial Number</th></tr>\n"; for(int fil = 0; fil<devices_max; fil++) { myfile<<"<tr><td align=center>"; myfile<<devDoc[fil].contador; myfile<<"</td><td align=center>"; myfile<<devDoc[fil].Description; myfile<<"</td><td align=center>"; myfile<<devDoc[fil].Serial_ID; myfile<<"</td></tr>\n"; } myfile<<"</table>"; myfile.close(); }

Para obtener la tabla de la arquitectura Hardware de los Nodos, la primera apreciación que hay que tener en cuenta, es la de poder diferenciar entre Nodo Procesador y Nodo Entrada/Salida. Debido a la imposibilidad de realizar esta distinción y con objeto de poder generar la documentación de acuerdo a los requisitos demandados, optamos por declarar el atributo serialNumber del estereotipo aplicado Nodo (ver figura nº 4). De esta manera, tenemos nuestro punto de partida para distinguir ambos nodos.
for(int i = 0; i<lista_nodos->Count; i++) { for(int j = 0; j<lista_nodos[i]->ChildNodes->Count; j++) {if(lista_nodos[i]->ChildNodes[j]->HasChildNodes) {AppliedStereotypeSlots = ((XmlElement^)lista_nodos[i]>ChildNodes[j]->ChildNodes[0])->GetElementsByTagName("slot"); for(int k = 0; k<AppliedStereotypeSlots->Count; k++) {if(((XmlElement^)AppliedStereotypeSlots[k])>GetAttribute("definingFeature")->Equals(SerialId)) {if(((XmlElement^)((XmlElement^)AppliedStereotypeSlots[k])>ChildNodes[0])->GetAttribute("value")->Equals("Processing Node")) {lista_nodos_procesador>Add(lista_nodos[i]); } if(((XmlElement^)((XmlElement^)AppliedStereotypeSlots[k])>ChildNodes[0])->GetAttribute("value")->Equals("IO Node")) {lista_nodos_IO->Add(lista_nodos[i]); }}}}}}

Página 16

Generación Automática de Documentación Grupo 2

Con el propósito de identificar a que nodo corresponde cada dispositivo, se añaden los dispositivos como elementos nuevos creados directamente a partir del nodo en cuestión (ver figura nº 5).

Figura Nº5. Ventana Model Tree del programa Altova U-Model

En este caso, necesitamos hallar la lista de los identificadores (classifier) Processor, PowerSupply, IOBoard y CommunicationBoard. Dichos identificadores se almacenaran en las variables ProccesorClassifier, PowSupplyClassifier, IOBoardClassifier y

ComBoardClassifier respectivamente, que utilizaremos para conocer qué tipo de dispositivo cuelga de cada nodo.
for(int i = 0; i<lista_classifiers->Count; i++) {if(((XmlElement^)lista_classifiers[i])->GetAttribute("name")>Equals("Processor")) {ProcessorClassifier = ((XmlElement^)lista_classifiers[i])>GetAttribute("xmi:id");} if(((XmlElement^)lista_classifiers[i])->GetAttribute("name")>Equals("PowerSupply")) {PowSupplyClassifier = ((XmlElement^)lista_classifiers[i])>GetAttribute("xmi:id");} if(((XmlElement^)lista_classifiers[i])->GetAttribute("name")>Equals("IOBoard")) {IOBoardClassifier = ((XmlElement^)lista_classifiers[i])>GetAttribute("xmi:id");} if(((XmlElement^)lista_classifiers[i])->GetAttribute("name")>Equals("CommunicationBoard")) {ComBoardClassifier = ((XmlElement^)lista_classifiers[i])>GetAttribute("xmi:id");}}

Una vez conocido el tipo de dispositivo que es, se obtienen los valores de los atributos que tiene definido. Y por último, al igual que el caso anterior, se muestra por pantalla la tabla generada.
//El codigo es similar al caso de la lista de los dispositivos

Página 17

Generación Automática de Documentación Grupo 2

7 Resultados Obtenidos
Las siguientes imágenes, muestran el contenido de la documentación generada.

Figura Nº6. Tabla de Componentes Hardware.

Figura Nº7. Tabla de Arquitectura Hardware de los Nodos.

Página 18

Generación Automática de Documentación Grupo 2

8 Conclusiones
El algoritmo que hemos generado nos permitiría obtener de forma automática la documentación de cualquier estación que se modele, siempre y cuando se apliquen los mismos perfiles que se han utilizado a la hora de modelar esta estación. Por lo tanto, la mayor ventaja que nos proporciona este código es la posibilidad de reutilización que nos brinda. Esto se debe gracias al lenguaje de esquema que utiliza XML, donde la estructura y las restricciones de los contenidos de los documentos se describen de una forma muy precisa. Otra característica importante es que se trata de un código robusto y confiable, entendiendo como tal, aquel código donde se minimizan los errores de compilación.

Página 19

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->