Nombre del alumno - TFG - añooa.upm.es/52574/1/TFG_JORGE_ANTON_GARCIA.pdf · 2018-10-10 ·...

113
UNIVERSIDAD POLIT ´ ECNICA DE MADRID ESCUELA T ´ ECNICA SUPERIOR DE INGENIER ´ IA Y DISE ˜ NO INDUSTRIAL Grado en Ingenier´ ıa Electr´ onica y Autom´atica Industrial TRABAJO FIN DE GRADO Desarrollo de aplicaciones C++ para ingenier ´ ıa: “S7mulator” Jorge Ant´ on Garc´ ıa Tutor: Crist´ obal Tapia Garc´ ıa Departamento: Ingenier´ ıa El´ ectrica, Electr´ onica, Autom´ atica y F´ ısica Aplicada Madrid, Junio, 2018

Transcript of Nombre del alumno - TFG - añooa.upm.es/52574/1/TFG_JORGE_ANTON_GARCIA.pdf · 2018-10-10 ·...

UNIVERSIDAD POLITECNICA DE MADRID

ESCUELA TECNICA SUPERIOR DE INGENIERIA Y

DISENO INDUSTRIAL

Grado en Ingenierıa Electronica y Automatica Industrial

TRABAJO FIN DE GRADO

Desarrollo de aplicaciones C++para ingenierıa: “S7mulator”

Jorge Anton Garcıa

Tutor: Cristobal Tapia GarcıaDepartamento: Ingenierıa Electrica,Electronica, Automatica y Fısica Aplicada

Madrid, Junio, 2018

ii

UNIVERSIDAD POLITECNICA DE MADRID

ESCUELA TECNICA SUPERIOR DE INGENIERIA Y

DISENO INDUSTRIAL

Grado en Ingenierıa Electronica y Automatica Industrial

TRABAJO FIN DE GRADO

Desarrollo de aplicaciones C++para ingenierıa: “S7mulator”

Firma Autor

Firma Tutor

iv

v

Copyright c©2018. Jorge Anton Garcıa

Todas las opiniones aquı expresadas son del autor, y no reflejan necesariamente las opiniones dela Universidad Politecnica de Madrid.

vi

Agradecimientos

Una de las experiencias mas positivas tanto de la carrera como del proyecto ha sido el inestimableapoyo de un gran grupo de companeros.

Esto proyecto no hubiera sido posible sin toda la ayuda y colaboracion de Cristobal Tapia haciendode guıa en el proceso de creacion de este proyecto. Ası mismo, muchos han sido los profesores a lolargo de la carrera que me han ensenado muchos conocimientos y han sido pilares en mi formacion,tanto academica como personal.

Y por ultimo, pero no menos importante, agradecer a mi familia todo el apoyo y paciencia mostrado,ya que son los autenticos motores de este proyecto.

vii

viii AGRADECIMIENTOS

Resumen

La idea principal de este proyecto es dotar a la programacion de STEP 7 un entorno virtual sobreel que operar. Se puede decir entonces que se busca crear un buen interpretador de STEP 7, quepueda ser programado por el usuario con total libertad y que se apoye en una simulacion 3D deuna serie de elementos para comprobar de una manera muy visual todo el codigo.

El objetivo que se persigue por tanto es apoyar el aprendizaje del STEP 7, ya que la interfaz pordefecto de SIMATIC no ofrece un entorno 3D. Dicho entorno simulable supondrıa un pilar muyfuerte sobre el que complementarse, ya que en la actualidad esta en auge la realidad virtual comometodo pedagogico.

Para lograr todo ello, se creara una aplicacion en el entorno de Microsoft Visual Studio, empleandoel lenguaje CLI/C++ para poder emplear los controles por defecto de Windows, creando ası unaapp lo mas simple posible y totalmente funcional.

Sera por tanto necesario tambien la creacion de un mundo virtual para ser simulado, con lo quehabra que crear y disenar una serie de objetos tales como cintas, cajas, sensores... para enriquecerlo maximo posible las simulaciones, y ofreciendo una mayor complejidad a los posibles escenarios.

Palabras clave: STEP7, Simulador S7, CLI/C++.

ix

x RESUMEN

Abstract

The main idea of this project is to provide STEP 7 programming with a virtual environment tooperate on. One can then say that one seeks to create a good interpreter of STEP 7, that can beprogrammed by the user with total freedom and that it is supported in a 3d simulation of a seriesof elements to check in a very visual way all the code.

The goal is therefore to support the learning STEP 7, because the default interface of SIMATICdoes not offer a 3d environment. This simulated environment would be a very strong pillar tocomplement itself, as long as the virtual reality is currently booming as a pedagogical method.

To achieve this, an application will be created in the Microsoft Visual Studio environment, usingthe CLI/C language to be able to use the default Windows controls, creating an app as simple aspossible and fully functional.

It will also be necessary to create a virtual world to be simulated, which will require the creationand the design of a series of objects such as tapes, boxes, sensors... to enrich the simulations asmuch as possible, and offering a greater complexity to the possible scenarios.

Keywords: STEP7, S7 Simulator, CLI/C++.

xi

xii ABSTRACT

Indice general

Agradecimientos VII

Resumen IX

Abstract XI

Indice XIV

1. Introduccion 1

2. Marco teorico 32.1. Contexto del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32.2. Docencia y tecnologıa: la simbiosis perfecta . . . . . . . . . . . . . . . . . . . . . . 3

2.2.1. Evolucion del aprendizaje en las aulas . . . . . . . . . . . . . . . . . . . . . 32.2.2. Soluciones tecnologicas actuales en docencia . . . . . . . . . . . . . . . . . . 42.2.3. Los tres puntos en comun de todas las soluciones tecnologicas disenadas para

el ambito educativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.2.4. Los beneficios de la tecnologıa en la educacion . . . . . . . . . . . . . . . . 62.2.5. La tecnologıa esta transformando la educacion mas alla de la escuela . . . . 7

2.3. Simulacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.1. Historia de la simulacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.2. Beneficios de la simulacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2.4. Automatizacion industrial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.4.1. Historia de la automatizacion industrial . . . . . . . . . . . . . . . . . . . . 92.4.2. Aplicaciones de la automatica . . . . . . . . . . . . . . . . . . . . . . . . . . 102.4.3. Elementos mas destacados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.5. Siemens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.5.1. Historia de Siemens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.5.2. SIMATIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5.3. STEP 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.5.4. Instrucciones basicas de STEP 7 contempladas en el proyecto . . . . . . . . 17

3. Desarrollo 253.1. Herramientas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.2. Metodologıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.3. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.4. Casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.4.1. Escoge escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.4.2. Programa en S7 Escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313.4.3. Simular Escenario y Manipular E/S . . . . . . . . . . . . . . . . . . . . . . 323.4.4. Anadir y quitar segmentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333.4.5. Comprobacion del codigo S7 . . . . . . . . . . . . . . . . . . . . . . . . . . 34

3.5. Ciclos de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353.5.1. Ciclo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

xiii

xiv INDICE GENERAL

3.5.2. Ciclo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423.5.3. Ciclo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463.5.4. Ciclo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493.5.5. Ciclo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.6. Pruebas finales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

4. Conclusiones 674.1. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674.2. Desarrollos futuros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

A. Anexo 69A.1. Manual de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69A.2. Codigo mas importante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

A.2.1. Clase Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81A.2.2. Clase Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

A.3. Direcciones contempladas y funciones incluidas . . . . . . . . . . . . . . . . . . . . 91

Bibliografia 93

Indice de figuras

2.1. Sensor optico: barrera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2. Cinta transportadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3. LED como elemento de iluminacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.4. Procesamiento cıclico del programa usuario . . . . . . . . . . . . . . . . . . . . . . 16

3.1. Casos de uso de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293.2. Maquina de estados de la clase Parser . . . . . . . . . . . . . . . . . . . . . . . . . 363.3. Clase Form.h: Ciclo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.4. Diagrama de clases: Ciclo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.5. Interfaz modo programar: Ciclo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.6. Interfaz modo simular: Ciclo 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.7. Diagrama de clases: Step 7: Ciclo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 433.8. Diagrama de clases: Comparator: Ciclo 2 . . . . . . . . . . . . . . . . . . . . . . . . 443.9. Interfaz modo programar: Ciclo 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443.10. Clase Names: Ciclo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.11. Interfaz modo programar: Ciclo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473.12. Interfaz modo simular: Ciclo 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483.13. Diagrama de clases: Ciclo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503.14. Diagrama de clases: Carpeta Mundo: Ciclo 4 . . . . . . . . . . . . . . . . . . . . . 513.15. Interfaz modo menu: Ciclo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523.16. Interfaz modo programar: Ciclo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523.17. Interfaz modo simular: Ciclo 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.18. Diagrama de clases: Carpeta Mundo: Ciclo 5 . . . . . . . . . . . . . . . . . . . . . 563.19. Interfaz modo menu: Ciclo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.20. Interfaz modo simular: Ciclo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.21. Interfaz modo programar: Ciclo 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583.22. Menu de carga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.23. Escenario 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593.24. Escenario 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.25. Escenario 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.26. Escenario 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603.27. Introduccion de codigo erroneo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.28. Carga correcta del escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613.29. Introduccion de codigo correcto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.30. Codigo basico para mover la cinta . . . . . . . . . . . . . . . . . . . . . . . . . . . 623.31. Respuesta con E 124.2 desactivada . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.32. Respuesta con E 124.2 activada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633.33. Codigo basico para el comportamiento de la bombilla . . . . . . . . . . . . . . . . . 643.34. Respuesta con sensor desactivado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 643.35. Respuesta con sensor activo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

A.1. Elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72A.2. Menu principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

xv

xvi INDICE DE FIGURAS

A.3. Modo simular: elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74A.4. Modo simular: E/S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75A.5. Modo simular: Temp y contadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 76A.6. Modo programar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

Indice de tablas

2.1. Operadores simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.2. Modificadores del RLO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.3. Flancos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182.4. Comparadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192.5. Operadores de conteo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.6. Operadores de salto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.7. Operadores aritmeticos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.8. Operadores de carga y transferencia . . . . . . . . . . . . . . . . . . . . . . . . . . 212.9. Operadores de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.10. Operadores de acumuladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222.11. Operadores de temporizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.1. Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283.2. Caso de uso: escoge escenario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303.3. Caso de uso: programa en S7 escenario . . . . . . . . . . . . . . . . . . . . . . . . . 313.4. Caso de uso: visualizar escenario y manipular E/S . . . . . . . . . . . . . . . . . . 323.5. Caso de uso: anadir o quitar segmentos . . . . . . . . . . . . . . . . . . . . . . . . . 333.6. Caso de uso: comprobacion del codigo S7 . . . . . . . . . . . . . . . . . . . . . . . 34

xvii

xviii INDICE DE TABLAS

Capıtulo 1

Introduccion

La vida es un proceso de aprendizaje continuo en el cual se van adquiriendo habilidades y co-nocimientos que van conformando el progreso al que se llega como individuos y como sociedad.En el ambito academico, son numerosas las materias que se cursan a lo largo de la vida de cadaestudiante, dando un amplio abanico de posibilidades y un prisma lo mas extenso posible sobre elque mirar cada tema.

A la hora de realizar el estudio de materias, primero se deben estudiar los fundamentos teoricospara entender el porque de las teorıas y desarrollos que se estan viendo. No obstante, el apoyoque suponen los laboratorios y experiencias practicas es fundamental para complementar esosconocimientos teoricos. La realizacion de ejercicios y la resolucion de problemas son factores clavespara lograr la asimilacion de los aspectos mas teoricos.

En el ambito de la tecnologıa industrial, cabe destacar la disciplina de la automatica, que hacambiado el estilo de la vida de la sociedad y la industria. Es por eso que este proyecto se basaen apoyar el aprendizaje de uno de los lenguajes mas importantes de automatizacion industrial,S7, para poder entender como funciona SIMATIC S7. Se ha creado una aplicacion informatica queentiende y traduce la logica de S7 a C++, para poder realizar simulaciones de entornos industrialesy tener un apoyo grafico a las clases teoricas de las materias.

El objetivo es un interfaz sencillo, de facil comprension y que ayude a asimilar el aprendizaje de S7mediante la realizacion de programacion de bloques para poder ir entendiendo el uso y aplicacionde cada una de las mas importantes instrucciones que componen S7.

La aplicacion se ha disenado para Windows apoyandose en Microsoft Visual Studio, con unosrequisitos de SO muy simples a fin de que pueda ser ejecutado e instalado en practicamentecualquier equipo.

1

2 CAPITULO 1. INTRODUCCION

Capıtulo 2

Marco teorico

2.1. Contexto del proyecto

Para tener un enfoque lo mas certero posible acerca del empaque y posibilidades de este proyecto,es necesario entender un poco del contexto historico de la tecnologıa aplicada a la ensenanza, asıcomo de la evolucion de la simulacion de procesos y entornos. Tambien es un factor clave la historiade la automatizacion, para entender por que ha llegado a ser tan importante hoy en dıa, ademasde una pieza clave en el futuro.

Dentro de este contexto de automatizacion, tambien se estudiaran diferentes aspectos de Siemens,tanto su historia como sus soluciones, haciendo hincapie en STEP 7.

Con todos estos conceptos introducidos, se entendera el contexto del trabajo, la importancia quepuede llegar a tener y el encuadre de este tipo de soluciones en los tiempos actuales.

2.2. Docencia y tecnologıa: la simbiosis perfecta

2.2.1. Evolucion del aprendizaje en las aulas

Hace mas de 2000 anos comenzo la necesidad de tener alguna vıa de transmitir los conocimientosadquiridos por la sociedad por vıa de la educacion. Fueron los griegos, egipcios y romanos los queempezar a implementar sistemas arcaicos de ensenanza (aunque fueran muy validos tratandose delperiodo historico en el que estaban). El principal objetivo que tenıan era el de forjar una sociedadestabilizada mediante unos pilares arraigados en la sabidurıa transmitida por varias generaciones.

Ya desde entonces, la educacion se dividıa en dos grupos: la ensenanza teorica y la practica.

La teorica era muy poco comun, reservada a los grupos mas elitistas de la sociedad que empleabansu tiempo en la investigacion y reflexion. Mucho mas comun era la educacion practica, princi-palmente orientada a la transmision de conocimientos para desempenar ciertas labores o tecnicasrelativas a los oficios de la epoca, dejando de lado cualquier reflexion o posible cambio en losprocesos.

Fue siglos mas tarde cuando estos modelos basicos avanzaron de la mano de unas sociedades quetenıan como meta ser las mas desarrolladas de su epoca. Surgieron las primeras universidades en

3

4 CAPITULO 2. MARCO TEORICO

zonas como Inglaterra, Italia o Espana, que eran los nucleos de los movimientos sociales. Estabanprincipalmente enfocadas al arte, ciencia o historia, que eran los pilares sobre los que se cimentaba elprogreso. Esto sirvio para comenzar las bases de los sistemas educativos empleados en la actualidad.

No obstante, hasta que llego el Siglo XIX no llego la educacion universal tal y como la conocemoshoy en dıa. Esto fue posible gracias a los movimientos eticos y sociales que fueron impulsando al serhumano a ampliar sus conocimientos y progresar (en gran parte gracias a la burguesıa y las ideasprogresistas). En el mundo se empezaba a luchar contra el analfabetismo y a instaurar sistemaseducativos.

Todo esto derivo en el sistema educativo actual, en el cual la ensenanza esta establecida en el usodel papel, lapiz y numerosos libros, lo cual marca una guıa que el alumno debe recorrer.

Esta metodologıa se basa en dos puntos clave:

Ensenanza: El conocimiento se transmite en clases de forma oral, apoyados en el uso delibros de texto y en ciertas ocasiones de Internet. Se hace hincapie en los contenidos masconflictivos del temario, y luego se realizan una serie de trabajos y ejercicios para asimilar yafianzar los conocimientos.

Evaluacion: En la mayorıa de ocasiones se evalua el conocimientos del alumno medianteuna serie de tests o examenes periodicos en el cual se pondera su nivel en la materia.

Pero la llegada de la revolucion digital a lo largo del Siglo XXI, que afecto a todos los ambitos de lasociedad, ha provocado la transformacion progresiva de la educacion tal y como estaba concebida.

Se esta comenzando a observar cada vez mas en las aulas tablets, portatiles o pizarras electronicas.La metodologıa tradicional ha ido dejando paso a la creatividad y al dinamismo, con todas lasposibilidades que ofrecen las nuevas tecnologıas respecto a sistemas mas clasicos y estaticos comolibros.

No obstante, no se trata unicamente de un cambio de las herramientas, si no del concepto dela educacion en sı y en como emplear estas nuevas herramientas para adaptar la transmision deconocimientos a una manera mas atractiva y eficaz.

En un mundo cada vez mas conectado, el desarrollo de aptitudes como la memoria comienza aperder valoren favor de otras aptitudes como la flexibilidad, el trabajo en equipo, la comprensiono la creatividad. Todas ellas tendran un mayor valor en un futuro encaminado a la tecnologıa.

En Espana, companıas como BQ, Lenovo y Microsoft han podido comprobar como, mediante elempleo de metodologıas mas innovadoras, el alumnado aumentaba el interes por las asignaturas ymejoraba sustancialmente sus resultados academicos. De hecho, apreciaron casos particulares enlos que alumnos con dificultades y malos resultados invertıan por completo su papel en el aulagracias a estas metodologıas mas inclusivas, participativas e innovadoras.

2.2.2. Soluciones tecnologicas actuales en docencia

Cada vez son mas las companıas que apuestan por la transformacion digital en el ambito educativo.A continuacion, se pasara a enumerar una serie de ejemplos representativos de los muchısimosejemplos que se pueden encontrar:

La companıa Microsoft quiere ser parte del cambio mediante el desarrollo de software y serviciosque se adapten a las necesidades especıficas del aula, haciendo un gran enfasis en la integracion deservicios para transmitir los contenidos.

2.2. DOCENCIA Y TECNOLOGIA: LA SIMBIOSIS PERFECTA 5

Otro punto en el que esta participando es en la experimentacion de la inclusion de videojuegoscomo Minecraft en el ambito educativo, con la finalidad de fomentar la creatividad de los alumnos,la exploracion y lograr captar el interes con formas mas innovadoras, atractivas y cercanas deensenanza para el publico objetivo.

Tambien esta haciendo grandes esfuerzos con Hololens, las gafas de realidad virtual de la companıa.Las aplicaciones educativas de este producto son ilimitadas, lo que para muchos hace que sea unaopcion muy viable de convertirse en uno de los pilares de la educacion del manana.

Por su parte, Samsung tambien esta haciendo algunas incursiones con la realidad virtual mediantelas Samsung Gear VR (las gafas de realidad virtual de la companıa). La companıa asiatica trabajajunto a varios desarrolladores en la creacion de entornos VR orientados a la educacion, es decir,visitas virtuales a lugares historicos, atlas anatomicos, etc.

Tambien esta trabajando en la vertiente de generar contenidos audiovisuales, mas interactivos,amenos y disenados para ser multiplataforma, algo indispensable en un mundo en el que cada vezhay mas soluciones tecnologicas distintas que poder escoger.

Como no podrıa ser de otra manera, Google es otra de las companıas que mas fuerte esta apostandopor la tecnologıa en los entornos educativos. La companıa ha impulsado varios proyectos durantelos ultimos anos, entre los cuales destacan:

Chromebooks: Estos ordenadores sencillos y baratos se estan convirtiendo en una de lasgrandes tendencias en los entornos educativos de los Estados Unidos.

Training Center: Para maximizar el uso de las tecnologıas de Google en el aula, la propiacompanıa estadounidense ofrece metodos de formacion a los propios docentes.

Classroom: La plataforma Classroom permite gestionar de forma digital todos los aspectosde un aula actual. Los profesores pueden hacer un seguimiento del trabajo de sus alumnos,ofrecerle contenidos mediante Internet, actualizar calificaciones. . .

Si hablamos del territorio nacional, companıas como BQ tambien han invertido en la integracionde la tecnologıa en las escuelas. Gracias a su placa reprogramable, productos como Zowi acercan laprogramacion a los mas pequenos de la casa, al mismo tiempo que fomentan la propia investigaciony la creatividad.

BQ tambien esta haciendo un gran enfasis en la impresion 3D y la robotica dentro de las escuelas.Y es que, al igual que la programacion, se trata de conocimientos esenciales para abordar el futurocada vez mas inminente.

Lenovo por su parte ofrece la solucion LanSchool, disenada para el manejo de aulas virtuales.Todos los equipos que Lenovo incorpora en entornos educativos cuentan con este software en suinterior, facilitando ası el seguimiento de los estudiantes, mejorando la comunicacion y el soportey eliminando barreras y distracciones ante el alumno.

2.2.3. Los tres puntos en comun de todas las soluciones tecnologicasdisenadas para el ambito educativo

Todos los ejemplos mencionados anteriormente ponen en relieve la simbiosis a la que se esta llegandoentre tecnologıa y escuelas. Esto se logra mediante tres factores claves:

Modularidad: Con el sistema que estaba instaurado anteriormente todos los alumnos se-guıan un mismo ritmo, muchas veces marcado por el nivel mas bajo del grupo. Pero con elcambio de pedagogıa, el ritmo lo marca cada alumno, ampliando o incluso eliminando los

6 CAPITULO 2. MARCO TEORICO

lımites o techos a alcanzar y dejando de la mano de cada persona el esfuerzo para ir alcanzan-do las cotas de conocimiento a las que desee aspirar. El acceso a una cantidad practicamenteinagotable de conocimientos es posible, y cada uno se pondra la meta donde desee.

Control de contenidos: Gracias a los avances tecnologicos, es mas sencillo monitorizar yrealizar un correcto seguimiento de los avances del alumno y del uso que da a las nuevasherramientas.

Sencillez: Todos estos avances y logros no servirıan de nada si se complica la facilidad paraentender la materia y la transmision de conocimientos. Por tanto se busca siempre la inclusionde software sencillos y la formacion de los docentes dentro de esta tecnologıa. Esta sencillezrepercute claramente en un mejor entendimiento por parte de los alumnos, logrando quecualquier ensenanza llegue a una cantidad de publico mayor.

2.2.4. Los beneficios de la tecnologıa en la educacion

Los estudios y las investigaciones realizadas por diversas entidades muestras un gran resultadorespecto a la incorporacion de la tecnologıa en las escuelas y al cambio metodologico asociado.

Segun un estudio realizado por Ipsos para Samsung Espana, los profesores espanoles que hacen unuso regular de la tecnologıa en sus aulas detectan efectos positivos tanto en la creatividad comoen la capacidad de razonamiento de sus alumnos. La inclusion de la tecnologıa les permite mejorarla competencia en habilidades transversales, conectar aprendizajes de distintas materias y, porconsiguiente, incrementar la autonomıa.

Ademas, tambien se puede observar una mayor colaboracion entre los estudiantes, un mayor es-fuerzo por aprender, un mejor ambiente en el aula y, sobre todo, una mayor sencillez para adquirirlos conocimientos establecidos por el profesor.

Esto se logra gracias a una mayor implicacion por parte del alumno, ya que deja de lado lamemorizacion sistematica para pasar a ser un descubridor, un generador autonomo de necesidadde ampliar conocimientos, lo que genera un mayor interes en las materias.

Si ademas se apoya con proyectos y experimentos que permitan al alumno observar, practicary comprobar sus propias teorıas e ideas, el resultado final es muy superior al que se obtieneempleando metodos mas conservadores. No solo adquiere mejor los fundamentos teoricos, tambiense proporciona la suficiente traccion al alumno como para pensar por sı mismo, experimentar ydescubrir nuevas formas de alcanzar un mismo objetivo.

Ademas, para colectivos con necesidades mas especıficas y especiales, el uso de estas nuevas so-luciones tecnologicas permiten personalizar de una manera mucho mas sencilla el aprendizaje,consiguiendo aclimatar a cada alumno el ritmo mas optimo.

Otro gran beneficio (si se realiza un uso correcto de Internet) es el acceso a informacion global,para poder obtener visiones mas amplias de un suceso concreto, pudiendo observar cada problemadesde prismas bien diferenciados, logrando un mayor grado de investigacion y reflexion, aptitudesmuy necesarias en la sociedad actual.

Paralelamente, el uso de la tecnologıa en la educacion permite una mayor flexibilidad horaria ygeografica a aquellos alumnos que la requieran. Una virtud que contribuye al desarrollo de laautonomıa de los alumnos y del autoaprendizaje, una aptitud muy importante en el mercadoprofesional.

2.3. SIMULACION 7

2.2.5. La tecnologıa esta transformando la educacion mas alla de la es-cuela

Como se ha mencionado en apartods anteriores, tecnologıa esta facilitando la llegada de nuevasformas de educacion. Son tendencias conocidas como e-learning, las cuales permiten adquirir cono-cimientos y evaluarlos mediante plataformas virtuales o aplicaciones para smartphones y tablets.

En uno de los campos donde mas se esta haciendo patente es en el campo del aprendizaje de idiomas.Uno de los casos mas populares es el de Duolingo, un servicio online con contenidos accesibles,gratuitos y con numerosos ejercicios practicos, todo ello accesible desde cualquier smartphone otablet.

A un nivel mas avanzado tambien encontramos propuestas como edX, una plataforma de cursosonline masivos y abiertos (MOOC) fundada por el prestigioso Instituto Tecnologico de Massachu-setts y la Universidad de Harvard en 2012. En la plataforma podemos encontrar cursos onlinesobre administracion de empresas, emprendimiento, electronica, programacion, mecanica de flui-dos. . . Casi cualquier disciplina tiene cabida en esta plataforma. Con la gran ventaja de se puededisfrutar de adquirir conocimientos de instituciones de tal calibre desde casa.

No obstante, el e-learning no dejara de ser un pilar de un nuevo sistema hıbrido entre la educacionpresencial y la no presencial. Servira de gran apoyo para la docencia en los centros presenciales,que dispondran de mucho material y atractivo, que estimule a cada alumno de manera diferente.

2.3. Simulacion

2.3.1. Historia de la simulacion

El primer modelo de simulacion se podrıa datar en 1777, cuando Claudio Rocchini Buffon realizoun sencillo modelo matematico (denominado “la aguja de Buffon”) para aproximar el valor delnumero π a partir de sucesivos intentos.

Se basa en una aguja de una longitud determinada lanzada sobre un plano segmentado por lıneasparalelas separadas por unidades. ¿Cual es la probabilidad que la aguja cruce alguna lınea? Noobstante, en 1812 Laplace mejoro la solucion, que se paso a denominar la solucion Buffon-Laplace.

Posteriormente, el estadıstico William Sealy Gosset, aplico sus conocimientos estadısticos en ladestilerıa en la cual trabajaba y en su propia explotacion agrıcola. Se centro en estudios de cultivosde cebada, en parte para mejorar la produccion, pero tambien para lograr diferentes variedadescon una mayor resistencia al clima o a la calidad del suelo.

Guinness (que era la destilerıa en la cual trabajaba Gosset) tenıa prohibido a sus empleados lapublicacion de cualquier tipo de artıculo independientemente de su contenido, de ahı el uso quehizo Gosset en sus publicaciones del seudonimo ”Student”. Este es el motivo por el que su logromas famoso se conoce como la ”distribucion t de Student.

Este hito historico abrio las puertas a la aplicacion de la simulacion en el campo del proceso decontrol industrial ası como en la experimentacion y tecnicas de analisis para descubrir solucionesexactas a problemas clasicos de la industria y la ingenierıa.

Las bases de la simulacion tal y como esta concebida en la actualidad se sentaron en la decada de1940, mediante dos grandes eventos:

La construccion de los primeros computadores de proposito general.

8 CAPITULO 2. MARCO TEORICO

El trabajo de Stanislaw Ulam, John Von Neumann y otros cientıficos para usar el metodo deMontercarlo en computadores modernos y solucionar problemas de difusion de neutrones enel diseno y desarrollo de la bomba de hidrogeno.

En 1960, Keith Douglas Tocher desarrollo un programa de simulacion del funcionamiento de unaplanta de produccion donde las maquinas ciclaban por estados, de manera que las simulaciones enlos cambios de estado de las maquinas marcaran el estado definitivo de la produccion de la planta.Este trabajo produjo ademas el primer libro sobre simulacion: The Art of Simulation (1963).

Para aquel entonces, IBM desarrollo entre 1960 y 1961 el Sistema de Simulacion de proposito generalo General Purpose Simulation System (GPSS). El GPSS se diseno para realizar simulaciones deteleprocesos con una sencillez de uso tal que se convirtio en el lenguaje de simulacion mas usadode la epoca. Paralelamente, Rand desarrollo en 1963 SIMSCRIPT, una alternativa basada enFORTRAN, que tenıa como target usuarios no necesariamente tan expertos en informatica.

Complementariamente a los desarrollos anteriores, el Royal Norwegian Computing Center inicioen 1961 el desarrollo del programa SIMULA con ayuda de Univac. El resultado fue SIMULA I,probablemente el lenguaje de programacion mas importante de toda la historia.

En 1967 se fundo el WSC (Winter Simulation Conference), el centro referente en cuanto a avancesen simulacion y lugar en el que se almacenan todos los leguajes de simulacion y aplicacionesderivadas. Posteriormente a este periodo se desarrollaron avanzadas herramientas de modelado yde analisis de resultados. Gracias tambien a los desarrollos obtenidos en la generacion de datos ya las tecnicas de optimizacion y representacion de datos, la simulacion llega a su fase de expansiondonde comienza a aplicarse en multiples campos.

Gracias a los avances tecnologicos la simulacion ha evolucionado enormemente, permitiendo alcan-zar excelentes cotas de fiabilidad. Las capacidades de calculo actuales permiten ejecutar una seriede Modelos Matematicos que conjuntamente con las tecnicas visuales reflejan fielmente la realidaden toda su complejidad. El objetivo final de toda herramienta de simulacion consiste en reproducirunas determinadas condiciones de entorno para generar en el usuario una serie de sensaciones queresulten tan parecidas a la realidad como sea posible. Si existiera un simulador capaz de generarsensaciones tan realistas que el usuario no supiera encontrar diferencias entre la realidad y la ex-periencia simulada, se dirıa que dicho simulador es totalmente inmersivo, o que proporciona unainmersion del 100

Proporcionar el funcionamiento satisfactorio de un simulador solamente es posible si actuan unaserie de Modelos Matematicos capaces de simular el comportamiento de la maquina real con unnivel de precision y sofisticacion lo suficientemente alto como para generar todos los efectos ymatices que permitan identificarla de manera inequıvoca. Solo ası las experiencias acumuladas enel simulador pueden proporcionar una experiencia aplicable a la vida real.

2.3.2. Beneficios de la simulacion

Beneficios tangibles del entrenamiento con simuladores:

Se produce un ahorro significativo de las horas necesarias para el entrenamiento, ademas deque los ejercicios puedan ser ilimitados.

Entrenamiento intensivo en situaciones crıticas o de emergencia, que podrıan ser peligrosaso imposibles de replicar en la realidad.

Alto nivel de inmersion y realismo.

Entrenamiento de los procedimientos operacionales estandar

2.4. AUTOMATIZACION INDUSTRIAL 9

Maximo nivel de adaptacion y escalabilidad de la formacion.

Flexibilidad para introducir facilmente funcionalidades de todo tipo en la vida real.

Posibilidad de adaptacion al nivel de competencia de cada persona.

Estımulo para autocorregir errores.

Posibilidad de reproducir el escenario y analizar los errores tras los ejercicios.

2.4. Automatizacion industrial

2.4.1. Historia de la automatizacion industrial

Los conflictos belicos a lo largo de la historia han servido para empujar el desarrollo tecnologico decada bando, a fin de obtener ventajas competitivas que les alzaran victoriosos. Durante la SegundaGuerra mundial, se modernizaron las fabricas con toda clase de elevadores y transportadores, a finde acelerar el movimiento de materiales. Se emplearon estas maquinas como parte indispensablede la lınea de montaje, a lo que se sumaron manos de hierro para realizar todas las operacionesmecanicas en un flujo continuo.

Henry Ford fue la primera persona que trato de replicar un organismo humano mediante unamaquina en su fabrica. Para ello, creo un brazo movil mecanico articulado, que fue el primermecanismo robotico que actuaba como su sımil humano.

Permitıa modificar y personalizar todos los movimientos deseados, para obtener un trabajo preciso:la velocidad de movimiento, cuando los dedos tenıan que cerrarse, a que distancia debıa llegar elbrazo movil, donde y como tendrıa que colocar el material de trabajo.

Este brazo robotico supuso un gran hito en la epoca, ya que logro economizar tiempo, dinero ytrabajo humano. Estas tecnologıas usadas en tiempos belicos se abrieron camino al mundo de laproduccion, gracias al automatismo de las fabricas de automoviles Ford. Entonces se empezo apensar en aplicar estas tecnologıas para automatizar la fabrica entera, a fin de optimizar todos ycada uno de los procesos.

Para ello, no bastaba con conectar unas maquinas con otras. Se necesitaba redisenar las funcionesde las maquinas y lograr que pudieran ser regidas por unos dispositivos electricos preestablecidos.

Las mediciones empezaron a realizarse por medio de pulsaciones electricas, en lugar de dientesmetalicos. La manipulacion se hizo con condensadores electricos en lugar de levas. Los movimientosfueron comandados por alambres de conexion y no por palancas. Todo estaba comandado por unaserie de ordenes de todo o nada a tubos electronicos, que eran los cerebros que regulaban loselementos mecanicos.

Este nuevo concepto de automatizacion cambio el concepto de produccion, logrando tiempos milveces inferiores a los habituales a la hora de fabricar cualquier elemento, como por ejemplo losmotores, que se lograban producir hasta 150 por hora con el nuevo sistema.

El exito del modelo implementado por Ford, capto el interes de todo el territorio y todas lasempresas de Estados Unidos. Un claro ejemplo fue el sistema telefonico, que fue automatizadopracticamente por completo a fin de calcular tiempos de llamadas y ası facturar de una manerasencilla el consumo de los clientes, ademas de saber a que numero se estaba llamando, la ciudad ytodo tipo de detalles.

10 CAPITULO 2. MARCO TEORICO

Tambien se extendio a las fabricas petroleras y de lamparas, logrando unos resultados excelentesen comparacion a sistemas mas manuales.

Los metodos de fabricacion fueron transformados completamente por el potencial de esta nuevatecnica automatica.

Hoy en dıa, la automatica tiene como objetivo facilitar y mejorar el desarrollo de diferentes acti-vidades a las personas, colaborando con ellas o sustituyendolas en la toma de decisiones y en supuesta en practica, es decir, sustituir el operador humano en medida que sea posible por dispositivosartificiales.

Estas innovaciones se pueden ver desde los desarrollos cientıficos mas avanzados hasta en las tareasdomesticas mas cotidianas. El numero de posibilidades en los que aplicar estos conocimientos espracticamente ilimitado.

2.4.2. Aplicaciones de la automatica

Con el paso del tiempo, se han ido incorporando los sistemas automaticos en las vidas de la gente,hasta llegar a tal punto en que la costumbre es tal, que no se percatan de ellos y apenas llama laatencion la aparicion de nuevos sistemas que funcionen de manera automatica.

A continuacion se veran una serie de ejemplos de estos sistemas, unos mas visibles a simple vistaque otros y que trabajan para facilitar labores y que se logre un tipo de vida como el que se tieneen la actualidad.

Los sistemas automaticos en el transporte

Ya son varios los anos en los que se ha trabajo en lograr la maxima autonomıa en vehıculos medianteuna automatizacion total o parcial de las soluciones, tratando de ir mejorando las prestaciones encada version.

Se han implementado soluciones con una capa de control de bajo nivel que trabaja directamentecon los actuadores del vehıculo (velocidad y direccion) y otra capa de nivel alto que gestiona lasordenes y las comparte con otros software para lograr aplicaciones mas complejas y comunicaciones.

Los sistemas automaticos en medicina

Tradicionalmente, para cualquier operacion de cirugıa se necesitaba un pulso de acero, ası comounos conocimientos de la materia muy avanzados. Uno de los grandes avances de la automatizacionen el campo de medicina han sido los robots quirurgicos, con una precision inigualable por el serhumano, y que mediante la guıa de un cirujano, realizan operaciones de gran dificultad con mayorporcentaje de exito.

Ademas tambien se ha notado la tecnologıa a la hora de distribuir los almacenes farmaceuticos,ası como instrumentos que detecten posibles anomalıas en la sangre de los pacientes.

Los sistemas automaticos en la produccion de energıa

A la hora de producir energıa, segun el metodo que se emplee para su obtencion, son muy importan-tes los niveles de presion, los caudales, temperaturas, orientacion de placas solares. . . Mediante la

2.4. AUTOMATIZACION INDUSTRIAL 11

monitorizacion de los indicadores crıticos de cada tipo planta, se puede ir regulando estos factoresmediante sistemas de control plenamente automatizados, dando lugar a menos errores humanos yuna mayor seguridad.

Los sistemas automaticos en el hogar

En cuanto a terminos domesticos, se contempla la automatica como los procesos mediante los quefacilitar, simplificar o no necesitar la accion humana en tareas cotidianas. Hoy en dıa se conoceesto como la domotica. Tiene tantas aplicaciones como se puedan imaginar, basta con ver unproceso que se quiera automatizar e implementar una solucion personalizada, ya sea para regulartemperatura, iluminacion, seguridad como para lograr ahorro en las facturas por un consumo maseficiente.

Los sistemas automaticos en las plantas de procesos

Tal y como se ha visto en las plantas productoras de energıa, en plantas de todo tipo de procesosse pueden emplear automatismos similares. Para realizar cualquier tarea, es de suma importanciauna monitorizacion adecuada de las condiciones ambientales, con lo que con un buen sistemaautomatizado lograremos esto ası como accionar palancas que modifiquen posibles incidencias enel proceso.

Los sistemas automaticos en las fabricas de bienes de consumo

Las plantas de fabricacion de bienes de consumo no iban a ser menos, por tanto cualquier auto-matismo correctamente empleado lograra una produccion mayor, con mejor rendimiento y con untrabajo humano menor, logrando crear puestos mas cualificados y dejando las tareas mas arduasen manos de automatas.

2.4.3. Elementos mas destacados

Para que todos estos entornos industriales en constante automatizacion tengan sentido, se requierenuna serie de elementos para crear la maquinaria necesaria. Es por ello que conviene detallar yexplicar algunos de los elementos mas importantes en la automatizacion industrial, tanto actuadorescomo sensores, de cara a ir teniendo un primer contacto con los objetos que formaran parte de laaplicacion.

Sensores

Se entiendo por sensor a todo dispositivo capaz de detectar y reaccionar ante acciones o estımulosexternos. Son capaces de convertir tanto magnitudes fısicas como quımicas en respuestas electricas.

Se podrıa decir entonces que los sensores componen el ”sistema sensorial”de las maquinas y robots,por lo cual son elementos vitales para dotar a cualquier sistema de inteligencia y de automatismos,por eso es imposible entender la automatizacion sin tener en cuenta a los sensores como parteprimordial.

Dentro de toda la gama de sensores, y de cara a trabajar con alguno de tipo facilmente simulable,se va a hacer hincapie en los sensores fotoelectricos de tipo barrera.

12 CAPITULO 2. MARCO TEORICO

Las barreras tipo emisor-receptor se componen de un primer componente que emite el haz de luz,y otro componente que lo recibe.

Figura 2.1: Sensor optico: barrera

Se establece ası un area de deteccion, la cual reacciona cuando un elemento interrumpe el haz deluz. Gracias a esto, no se suelen ver afectados por formas, colores o texturas de los elementos,simplemente reaccionan a dicha interrupcion del haz.

Este tipo de sensores presentan una serie de ventajas y desventajas, como todos los demas.

Por un lado, al tener la luz que atravesar el espacio de trabajo una unica vez, se puede montar engrandes distancias (se pueden llegar hasta 60m entre emisor-receptor). Ademas, dependen poco delas condiciones ambientales y de las formas y texturas de los objetos.

No obstante, presentan dos grandes problemas. Por un lado, se requiere mucha precision a lahora de montarlos, ya que deben estar perfectamente alineados tanto el emisor como el receptor.Ademas, si el objeto a detectar es transparente, inutilizarıa por completo este tipo de sensores.

Cintas transportadoras

Las cintas transportadoras son sistemas de transportes de elementos. Dichos sistemas se componende una banda continua que tiene movimiento entre dos tambores mediante la accion de un motor.

El funcionamiento es bastante sencillo. La banda se mueve por la accion de la friccion de uno delos tambores, que esta accionado por un motor. El otro tambor gira libre y tiene como finalidadhacer las veces de retorno de la banda. Hay una serie de rodillos entre los tambores para soportarla banda con baja friccion para no complicar el movimiento.

Figura 2.2: Cinta transportadora

Este sistema es ampliamente utilizado en cadenas de distribucion y montaje, gracias a la sencillezdel sistema y a su elevada capacidad de transporte de todo tipo de materiales.

2.5. SIEMENS 13

Sistemas de iluminacion

A medida que los sistemas de fabricacion han evolucionado, se ha convertido en un factor diferen-cial la iluminacion de almacenes y plantas industriales, de cara a favorecer en todo momento laseguridad y comodidad de los empleados, mejorando los niveles y calidad de produccion.

Con elementos tan simples como bombillas o LEDs, se pueden construir sistemas visuales que ope-ran como codigo del estado de las estaciones de trabajo, permitiendo al operario advertir cualquierriesgo que pueda surgir o imprevisto, o por el contrario que todo este funcionando correctamente.

La luz ya no se usa exclusivamente para reducir la fatiga visual, ahora tambien se emplea comouna palanca mas de sistema de seguridad en entornos industriales.

Figura 2.3: LED como elemento de iluminacion

2.5. Siemens

2.5.1. Historia de Siemens

Werner Von Siemens comenzo sus estudios de ingenierıa cuando estaba en el ejercito de Prusia. Alos tres anos ya completo los relativos a matematicas, fısica, quımica y balıstica.

Gracias a estos conocimientos adquiridos empezo a realizar diversos estudios. Uno de los primeroslogros fue el telegrafo de aguja mediante el empleo de materiales muy sencillos. A raız de esto yjunto al mecanico Johann Georg Halske, fundaron la companıa alemana Telegraphen-Bauanstaltvon Siemens & Halske en 1847. Con la companıa patento el telegrafo y el aislamiento sin cos-tura en cables de cobre, que fueron dos pilares para el desarrollo actual de la tecnologıa de lastelecomunicaciones.

En la decada de 1950, la companıa comenzo a implementar una red telegrafica en Rusia, quellego a alcanzar los 10.000 kilometros entre Finlandia y Crimea. En 1858 se creo una sucursal enInglaterra, que a posteriori serıa renombrada a Siemens Brothers.

En 1866, Siemens descubrio el principio electrodinamico, con el que es posible generar electricidada gran escala. El descubrimiento tuvo un impacto significativo a nivel economico.

A finales de 1870 comenzo a desarrollar el ferrocarril electrico que fue presentado en ”BerlinTrade Fair”. Este sistema fue implementado en Berlın ese mismo ano. En 1880, el primer ascensorelectrico fue construido en Mannheim. Al ano siguiente, se puso en funcionamiento la primerialınea de tranvıa electrica entre Berlın y Lichterfelde.

14 CAPITULO 2. MARCO TEORICO

Siemens ha sido parte activa en el proceso de digitalizacion de la industria, apoyando y participandoen el desarrollo de la tecnologıa de los semiconductores (implementada en 1920), que es la base dela computacion moderna.

A la decada de 1990, Siemens colaboro en un proyecto para disenar trenes que se desplazaranmediante levitacion magnetica, y pese a lo ambicioso y retador que era, no se llego a concluir yfue cancelado. En la actualidad, es una companıa lıder a nivel mundial en el sector tecnologico.Tienen alrededor de 350.000 empleados en 190 paıses, lo que muestra la importancia que tiene enuna sociedad cada vez mas globalizada.

2.5.2. SIMATIC

En el campo de la automatica, Siemens registro en 1958 la marca SIMATIC, que era una sıntesisde Siemens y Automatizacion en una misma palabra. A priori el objetivo era crear un sistema decontrol automatico diferenciador pero acabo siendo el mas revolucionario controlador PLC de laepoca, cambiando definitivamente el concepto de automatizacion industrial.

Fue en 1959, cuando coincidiendo con la Feria de Maquinas Herramienta de Parıs se presento laprimera generacion de PLC, el SIMATIC G. Gracias a su gran cantidad de funciones, lo con-vertıan en el controlador perfecto para un sinfın de aplicaciones que tuvieran que realizar trabajossecuenciales.

Su segunda generacion, SIMATIC N, lanzada en el ano 1964, se convirtio en la referencia mundialde la automatizacion, gracias a tener sus sistemas disenados con transistores, permitıa integraruna mayor cantidad de funciones, algo de vital importancia de cada a poder realizar el control degrandes plantas industriales con grupos de control descentralizadas.

La tercera generacion, SIMATIC S3, lanzada en el ano 1973 fue una gran revolucion en cuanto a losPLC, aunque fue eclipsada muy pronto por su sucesora y una de las mas importantes generacionesde la historia de la automatizacion: SIMATIC S5.

El lanzamiento de SIMATIC S5 suponıa un gran cambio en el mundo de PLC, ya que estaba com-puesto por modelos modulares de una tecnologıa muy avanzada, que fue evolucionando a la par quelos primeros PCs. Estos modelos (90U, 95U, 100U, 105U, 110U, 115U, 135U y 155U) ofrecıan unamayor velocidad, memoria y capacidad, haciendolos mucho mejor que cualquier sistema equiparablede la epoca.

Su popular herramienta de programacion basada en PC, STEP 5, permitıa programar, comprobary documentar los programas desarrollados en base a varios metodos de representacion: lista decomandos (STL), diagramas Ladder (LAD) o diagramas por bloques funcionales (FBD). Su inte-gracion con sistemas SCADA y los buses de campo pusieron el control de la planta a la vista delusuario.

A partir de 1995 se introdujo la ultima generacion de PLC, SIMATIC 7, que es la mas avanzadacon la que trabaja Siemens en la actualidad. Se apoya en sus herramientas de programacion (STEP7 y TIA Portal) y sus sistemas HMI, lo que constituye un sistema capaz de realizar el desarrollode la ingenierıa, puesta en marcha, operacion y monitorizacion de una planta.

2.5.3. STEP 7

Como se ha visto anteriormente, STEP 7 constituye una parte fundamental de SIMATIC 7.

Cuando se programa un automata hay que tener en cuenta dos aspectos. El SO del automata,

2.5. SIEMENS 15

que sera lo que determine el punto de complejidad de las funciones y/o instrucciones que puedeasimilar y el Programa usuario, que sera el conjunto de instrucciones logicas que se transfieran alautomata y determinen su funcionamiento.

A continuacion se va a entrar en detalle en los programa usuario, que es la pieza fundamentalsobre la que se puede operar y en la que esta enfocada el proyecto. En el programa usuario es en elcual se pueden determinar las condiciones de arranque del automata, los datos y senales que debeprocesar y las ordenes de deben ejecutar los distintos actuadores.

Para que se logre que un automata realice una serie de operaciones prefijadas en un orden deter-minado, se necesita una memoria dividida en una serie de partes:

Imagen de las E/S: es el estado en que se encuentras las diferentes entradas y salidas delPLC que se leen al comienzo de cada ciclo de ejecucion y se actualizan con los nuevos valoresal final del mismo. Son senales de la forma E, A que se usan en los ciclos de ejecucion delprograma.

E/S de la periferia: son valores reales de entradas y salidas, sobre los que se puede actuar entiempo real. Se debe leer en formato de bytes, Word o doble Word (nunca puede ser un bitconcreto).

Marcas: son variables indexadas y globales del programa, a las que se puede dar valor dentrode cualquier parte del programa. Pueden permanecer tras el apagado del PLC o ser volatiles.Puede ir desde un bit hasta un ancho indeterminado mediante el empleo de punteros.

Temporizadores y contadores: los temporizadores pueden ser de dos tipos, de software (IEC)o S7 (que son equivalentes a los que habıa en S5). Los ultimos son hardware y dependendirectamente de la CPU, mientras que los primeros dependen de la memoria disponible. Encuanto a contadores, son los elementos usados para cualquier tipo de operacion.

Modulos de datos (DB): Son las areas de memoria definidas por el usuario, con diferenteslongitudes y contenidos. Son remanentes al apagado del PLC por defecto.

Variables temporales: son las variables declaradas dentro de los modulos para los calculosintermedios y locales. Su valor inicial es el ultimo que hayan leıdo, por tanto sera importantetener control de su contenido en todo momento.

Se dispone de una serie de modulos para acceder y tratar los datos almacenados en la memoria,cuya eleccion dependera de los requerimientos que se impongan:

Modulos de organizacion (OB): modulos con funcionalidades especıficas, por lo que no sepuede realizar su llamada desde otros bloques, sino que el automata gestionara esas llamadasen el momento en que se necesite. Los hay de arranque (OB100, OB102), de ejecucion delprograma principal (OB1), cıclicos (OB35), horarios, de fallo. . .

Funciones (FC): bloques que pueden ser llamados desde OB, FC o FB. Su mision es estruc-turar el codigo, haciendolo lo mas legible posible mediante la division del programa en zonas,maquinas, submaquinas. . . Hay una serie de valores de entrada y salida, lo que permite lograruna reutilizacion de funciones para otros programas. Como se ha comentado anteriormente,se pueden usar variables temporales para la logica interna del bloque.

Bloques de funcion (FB): Similares a los FC, salvo que las variables internas tienen remanen-cia entre ciclos gracias a las llamadas estaticas. Para conseguir esto, se les asocia un bloquede datos (DB) para la instanciacion. Se pueden usar en los mismos casos que los FC, ademasde dentro de las llamadas estaticas de otros FB (multiinstanciacion).

Bloques de memoria (DB): pueden ser tanto globales como de instancia. Los globales son

16 CAPITULO 2. MARCO TEORICO

declarados por el usuario y pueden contener variables de todo tipo para obtener estructurascomplejas. Los de instancia son los necesarios para la ejecucion de los FB, por lo que tomansu misma estructura.

Modulos de sistema (SFC,SFB,SDB): son FC y FB integrados en el propio sistema operativodel PLC. Son usados frecuentemente para obtener o tratar informacion del PLC.

Ademas de todo lo anterior, la base de Step 7 son las dos palabras de estado por la que se rigetoda la logica del programa, ER y RLO, que son bits (0 o 1). Estos dos operadores son empleadosal principio de cada ciclo y durante toda la ejecucion del programa para saber el estado de lalogica interna de todas las operaciones que se realizan y por tanto son parte indispensable de lainteligencia del mismo.

ER -¿Bit que indica si es primera instruccion modificadora del RLO o no, 1 = primera instruccion,0 = no primera.

RLO -¿Si primera instruccion (ER = 1) RLO = valor de la instruccion, si ER = 0, RLO = RLOmas la operacion deseada.

Con lo visto anteriormente ya se puede obtener una idea del funcionamiento del programa usuario,no obstante se adjunta un esquema grafico para terminar de plasmar las pinceladas anteriormentedadas:

Figura 2.4: Procesamiento cıclico del programa usuario

Se denomina tiempo de ciclo al tiempo en milisegundos que necesita el PLC para ejecutar unasecuencia completa de todas las instrucciones que se le hayan asignado.

No es un tiempo constante, ya que en funcion del ciclo de ejecucion pueden realizarse unas opera-ciones u otras. Para asegurar un correcto funcionamiento dentro de un margen de tiempo, se sueleemplear un watchdog (normalmente fijado en 150ms) para que si se supera ese tiempo se pase aestado de STOP.

Este mecanismo se accionara o bien cuando haya algun bloque sin salida (o por un lazo infinitoo por no dar tiempo a acabar la ejecucion anterior) o por programas excesivamente largos y maloptimizados.

2.5. SIEMENS 17

2.5.4. Instrucciones basicas de STEP 7 contempladas en el proyecto

Dentro de la amplia gama de instrucciones contempladas en STEP 7, se ha optado por tratar deincluir las basicas y de mas utilizacion en el proyecto de cara a que sirva para realizar una primeraaproximacion a lo que es SIMATIC 7, a tratar de entender como funciona la logica del lenguaje ya familiarizarse con los operadores que se usaran en proyectos mas complejos.

La finalidad por tanto de este proyecto es que el lector afiance sus conocimientos primarios de loque es este lenguaje y sepa desenvolverse con soltura en la logica de bajo nivel, para poder llegara realizar proyectos mas complejos que requieran del empleo de varias funciones.

A continuacion se procedera a explicar los operadores que se han contemplado en el trabajo,mediante un breve texto y una tabla explicando el comando, sobre que operan, que tipo de datocontienen y sobre que lugar de la memoria del automatismo pueden actuar.

OPERADORES BASICOS

Esta gama de operadores componen las instrucciones mas bajas del lenguaje, componiendo todaslas puertas logicas y asignaciones necesarias para poder realizar todo tipo de operaciones.

COMANDO OPERANDO TIPO DE DATO AREA MEMORIA

U (AND)

<bit> BOOL

E, A, M, L, D, T, Z

UN (NAND) E, A, M, L, D, T, Z

O (OR) E, A, M, L, D, T, Z

ON (NOR) E, A, M, L, D, T, Z

X (XOR) E, A, M, L, D, T, Z

XN (NOT XOR) E, A, M, L, D, T, Z

= (ASIGN) E, A, M, L, D, T, Z

S (SET) E, A, M, L, D

R (RESET) E, A, M, L, D

Tabla 2.1: Operadores simples

Si se emplea el operador O sin ningun operando, sirve para realizar una operacion OR entre variosconjuntos de instrucciones, siguiendo siempre la regla AND antes que la OR.

Las instrucciones basicas con abrir parentesis almacenan en la pila de parentesis los bits RLO y ORy un identificador de la operacion. La pila de parentesis puede contener un maximo de 7 entradas.

El cierre de parentesis provoca el borrado de una entrada de la pila de parentesis, restablece el bitOR, combina el RLO que hay en la entrada de pila con el RLO actual conforme al identificador dela operacion y asigna el resultado al RLO. Si el identificador de la operacion es U o UN tambiense tiene en cuenta el bit OR.

18 CAPITULO 2. MARCO TEORICO

MODIFICADORES DEL RESULTADO LOGICO (RLO)

Como ya se vio anteriormente, el RLO constituye una de las partes mas importantes del programausuario, y saber manipularlo adecuadamente sirve para poder realizar operaciones logicas mascomplejas.

Es por ello que es indispensable tener una serie de operadores con los que poder manipularlo, paratener total control del programa en todo momento, y poder negarlo, activarlo o desactivarlo.

Son operadores vitales para cualquier programa de S7, y son muy usados a la hora de arrancar elprograma en estados determinados.

Las funciones basicas para su operacion se muestran a continuacion:

NOT Niega el RLO

SET Pone el RLO a ”1”

CLR Pone el RLO a ”0”

SAVE Almacena el RLO en el RB (bit de resultado binario)

Tabla 2.2: Modificadores del RLO

FLANCOS

Los flancos son instrucciones de gran importancia, ya que son el equivalente a una agrupacion deinstrucciones mas complejas que podrıan ralentizar los programas.

El flanco positivo (FP) es una instruccion que comprueba el estado del operando y si esta activado(“1”) devuelve un RLO negativo, mientras que si esta desactivado (“0”) lo activa y devuelve unRLO positivo. El flanco negativo (FN) es identico, solo que si esta activado lo desactiva y devuelveun RLO positivo, mientras que si esta desactivado devuelve un RLO negativo.

Dada la naturaleza de estas operaciones, son los operadores perfectos para realizar activaciones ocualquier tipo de operacion que se desee realizar unicamente una vez dentro de todo el ciclo deejecucion.

COMANDO OPERANDO TIPO DE DATO AREA MEMORIA

FP (FLANCO POS)<bit> BOOL

E, A, M, L, D

FN (FLANCO NEG) E, A, M, L, D

Tabla 2.3: Flancos

2.5. SIEMENS 19

OPERACIONES DE COMPARACION

Cualquier carga de valores, suma o modificacion que se realice, se almacena en el ACU 1. Si ACU1 tuviera algun valor previo, dicho valor pasa a almacenarse en ACU 2.

Las siguientes instrucciones son las que se emplean para realizar cualquier comprobacion y com-paracion necesaria sobre estos valores.

== ACU 2 es igual al ACU 1

<> ACU 2 es diferente al ACU 1

> ACU 2 es mayor al ACU 1

< ACU 2 es menor al ACU 1

>= ACU 2 es mayor o igual al ACU 1

<= ACU 2 es menor o igual al ACU 1

Tabla 2.4: Comparadores

Si RLO = 1 el resultado de la comparacion es verdadero, mientras que un RLO = 0 indica que elresultado de la comparacion es falso.

Se debe poner despues de los sımbolos el tipo de numero a comparar:

I (entero: 16 bits)

D (entero doble: 32 bits)

R (coma flotante: 32 bits)

OPERACIONES DE CONTEO

Los contadores permiten realizar operaciones especıficas y de vital importancia en ciertos progra-mas, por tanto se incluiran en el proyecto.

En S7, para utilizar un contador debe estar habilitado, esto quiere decir que si se desea utilizarvarias veces en un mismo ciclo de ejecucion debera ser habilitado con anterioridad. Tambien hayinstrucciones para cargar un valor especıfico en los contadores, ademas de operaciones de adiciony decrecimiento del valor del mismo.

20 CAPITULO 2. MARCO TEORICO

COMANDO OPERANDOTIPO DE

DATO

AREA

MEMORIACOMENTARIO

FR

<contador> COUNTER Z

Habilitar contador

LCargar el valor actual del contador en

ACU 1 en forma de entero

R Desactivar el contador

SCarga el valor de contaje del ACU1-L

en el contador direccionado

ZV Incrementa en 1 el valor de contaje

ZR Reduce en 1 el valor de contaje

Tabla 2.5: Operadores de conteo

El formato de numeros para un contador viene dado de la forma C#[no].

OPERACIONES DE SALTO

Las instrucciones de salto constituyen uno de los aspectos mas importantes a la hora de realizarprogramas mas complejos, ya que sirven para poner saltar varias lıneas de instrucciones, dando laposibilidad al usuario de crear codigos mas estables y seguros y crear una logica mas avanzada.

Estos saltos pueden ir desde unas lıneas hasta todo el codigo, y el empleo de cada una dependerade lo que se busque con el salto escogido.

COMANDO OPERANDO COMENTARIO

SPA

<meta>

Salto incondicionado hasta llegar a <meta>

SPL Salto usando metas, con SPAs si no llega al valor cargado

SPB Salto condicionado a RLO = 1

SPBN Salto condicionado a RLO = 0

SPBB Idem a SPB pero guardando el RLO en RB

SPBNB Idem a SPBN pero guardando el RLO en RB

LOOP Bucle mientras un acumulador sea >0

Tabla 2.6: Operadores de salto

2.5. SIEMENS 21

OPERACIONES ARITMETICAS CON ENTEROS

Como en cualquier lenguaje, es posible el realizar operaciones aritmeticas. Para el proyecto serecogeran las mas basicas, dentro de la amplia gama de instrucciones posibles.

Cabe destacar que las operaciones son de gran utilidad a la hora de trabajar en programas enlos que se requiera un control numerico, como pudiera ser en un sistema de control de piezasdefectuosas, aunque tambien se pudiera controlar con contadores.

COMANDO COMENTARIO

+I(entero)/ +D(entero doble)/ +R(reales) Guarda en ACU-1: ACU-1 + ACU-2

-I(entero)/ -D(entero doble)/ -R(reales) Guarda en ACU-1: ACU-1 - ACU-2

+ <constante> Guarda en ACU-1: ACU-1 + cte

Tabla 2.7: Operadores aritmeticos

OPERACIONES DE CARGA Y TRANSFERENCIA

A la hora de trabajar con temporizadores o contadores, es de suma importancia el poder cargaro transferir valores. Es por ello que hay dos operaciones, L y T, que sirven para lograr dichoobjetivo, y poder dar un valor inicial a ambos, o extraer el valor actual para ser usado a lo largodel programa.

Estos operadores son necesarios siempre, ya que si se trata de usar alguno de estos elementos sinestar inicializados, tendremos una gran inestabilidad en el codigo y no sabremos como reaccionaranlos elementos, siempre se deben inicializar.

COMANDO OPERANDO TIPO DE DATO AREA MEMORIA

L (LOAD)<operando>

BYTE

WORD/DWORD

E, A, PE, M, L, D,

puntero, parametro

T (TRANSFER) E, A, PA, M, L, D

Tabla 2.8: Operadores de carga y transferencia

22 CAPITULO 2. MARCO TEORICO

CONTROL DEL PROGRAMA

Ademas de las operaciones de salto anteriormente vistas, hay unos operadores que sirven pararealizar un control del programa. Permiten realizar saltos al fin del bloque de manera incondicionalo dependiente del valor del RLO, en funcion de las instrucciones que se empleen.

Son los operadores que hacen las veces de controles if-else de cualquier programa informatico.

Por ello, en los programas que comienzan a tener cierta complejidad, son operadores muy necesarios,para hacer el codigo mas legible y poder detectar cualquier error con mas celeridad.

COMANDO DESCRIPCION

BE Fin de bloque incondicional

BEB Fin de bloque condicionado a que RLO = 1

BEA Fin de bloque incondicional

Tabla 2.9: Operadores de control

OPERACIONES CON ACUMULADORES

Son dos operadores empleados despues de saltos para establecer unos o ceros en el ER y RLO.

NOP 0: El codigo de operacion contiene una configuracion binaria con 16 ceros.

NOP 1: El codigo de operacion contiene una configuracion binaria con 16 unos.

Tabla 2.10: Operadores de acumuladores

2.5. SIEMENS 23

OPERACIONES DE TEMPORIZACION

Los temporizadores constituyen otra parte vital de S7, y su correcta utilizacion sera determinante ala hora de que un programa funcione de manera adecuada o de error a los usuarios menos avanzadosen cuanto a programacion de S7.

Como en los contadores, se deberan habilitar para poder ser utilizados, se les podra transferir unvalor inicial o realizar inicios de temporizacion cuando sucedan eventos deseados.

Ası mismo, el valor de RLO sera “1” o “0” durante la temporizacion en funcion del comandoempleado.

COMANDO OPERANDOTIPO DE

DATO

AREA

MEMORIACOMENTARIO

FR

<temporizador> TIMER Z

Habilitar temporizador

L

Carga el valor actual del

temporizador en ACU-1

en forma de entero

R Desactiva el temporizador

SIArranca cuando RLO pasa de 0

a 1, activo durante t o RLO pase a 0

SV

Arranca cuando RLO pasa de 0

a 1, activo durante t. Si RLO

vuelve a pasar de 0 a 1, se

vuelve a lanzar

SE

Arranca cuendo RLO pasa de 0 a

1, activo una vez transcurrido t,

salvo que RLO pase a 0.

SS

Arranca cuendo RLO pasa de 0 a

1, activo una vez transcurrido t. Si

RLO vuelve a pasar de 0 a 1,

se vuelve a lanzar

SA

Arranca cuando RLO pasa de 0 a

1, se desactiva tras t. Si RLO

vuelve a pasar de 0 a 1, se vuelve

a lanzar

Tabla 2.11: Operadores de temporizacion

El formato de numeros para los tiempos viene dado de la forma S5T#[NUMERO+X], siendo x elındice de tiempos (H,M,S,MS).

24 CAPITULO 2. MARCO TEORICO

Capıtulo 3

Desarrollo

Para la realizacion de este proyecto, ha sido de suma importancia una planificacion y estructuradel mismo.

El desarrollo del codigo y de la aplicacion se ha ido realizando mediante una serie de versiones,cada una mejorando y dejando obsoleta a la anterior, siempre buscando acercar cada nueva imple-mentacion a la version final esperada que contenga todas las funcionalidades.

En los siguientes apartados se podran comprobar las herramientas empleadas para la realizacion delproyecto, ası como la metodologıa de trabajo, las diferentes versiones que se han creado y diagramasUML de la solucion final, ası como las funcionalidades principales logradas y las funciones masimportantes creadas.

3.1. Herramientas

A la hora de realizar el desarrollo de codigo, se estudio el emplear hasta 3 entornos de desarrollodiferentes de entre toda la amplia gama que se pueden encontrar:

Unity 5.0: Un entorno de desarrollo con mucha potencia grafica y cuyos acabados de image-nes y modelado de escenarios tiene poca competencia. Ademas era una opcion de sumo interesdebido que se puede obtener de manera gratuita al ser un software libre.

Dado que la finalidad no era el recrear un escenario de tales dimensiones o potencia, y a quela creacion de objetos y codigo no era muy intuitiva, se decidio no emplearlo.

Unreal Engine: Una opcion que compite con Unity a la hora de monopolizar a los desarro-lladores de Videojuegos “indie”, con mucha potencia grafica y muy similar a su rival.

Las opciones para descartarlo fueron las mismas que para Unity, anadiendo en este caso eldesconocimiento de uso de este entorno.

Microsoft Visual Studio: la opcion elegida. Visualmente no es competidor de los anterioresentornos, pero su sencillez a la hora de programar y el empleo de bibliotecas lo convirtieronen la opcion mas interesante.

Ademas, la posibilidad de usar C++ con CLI mediante Windows Forms facilitaba muchola labor, ya que se podıan emplear botones predisenados en Microsoft Visual Studio, permi-

25

26 CAPITULO 3. DESARROLLO

tiendo poner el foco de la programacion en el traductor de lenguajes y no en la creacion delentorno.

Microsoft Visual Studio es un entorno de desarrollo integrado para sistemas operativos Win-dows. Soporta multiples lenguajes de programacion, tales como C++, C#, Visual Basic.NET, etc., al igual que entornos de desarrollo web, como ASP.NET MVC, Django, etc.

Visual Studio permite a los desarrolladores crear sitios y aplicaciones web, ası como serviciosweb en cualquier entorno que soporte la plataforma .NET (a partir de la version .NET 2002).Ası, se pueden crear aplicaciones que se comuniquen entre estaciones de trabajo, paginasweb, dispositivos moviles, dispositivos embebidos y consolas, entre otros.

Para realizar la aplicacion se usara el lenguaje C++/CLI, que esta ideado para poder unificarC++ con toda la gama de objetos que ofrece .NET (y los controles por defecto de Windows).

Una vez resuelto el problema de la eleccion de que entorno de desarrollo utilizar, se debıa escogercon que aplicacion se disenarıan las imagenes y se adaptarıan a los formatos adecuados para laslibrerıas empleadas:

Photoshop: Es un programa de edicion de imagenes con opciones muy complejas y profe-sionales, bastante intuitivo y de uso bastante extendido. A la hora de hablar de retoque deimagenes es el mas popular de entre sus competidores.

No obstante, sus funciones son de pago, y como se ha mencionado en la eleccion de entornode desarrollo, tampoco se requiere un nivel de detalle tan preciso, por tanto se descarta suuso en busqueda de un sustituto a la altura y de software libre.

Gimp: tras realizarse una busqueda de productos que se adaptaran a las necesidades delproyecto, se encontro al competidor adecuado. Este programa constituye una opcion libre demuchas posibilidades (bastante similares a Photoshop) y que se adapta perfectamente a loesperado y a los requerimientos del proyecto.

En cuanto al apartado visual, se empleara GLUT, una librerıa de OpenGL especialmente preparadapara aplicaciones de graficos sencillos y de un tamano pequeno o medio, para la simulacion de losescenarios.

OpenGL (Open Graphics Library) es una especificacion estandar que define una API multilenguajey multiplataforma para escribir aplicaciones que produzcan graficos 2D y 3D.

La interfaz consiste en mas de 250 funciones diferentes que pueden usarse para dibujar escenastridimensionales complejas a partir de primitivas geometricas simples, tales como puntos, lıneas ytriangulos.

GLUT es un toolkit independiente del sistema de ventanas para escribir programas OpenGL. Unacaracterıstica importante de Glut es que se basa en un interfaz de programacion de aplicaciones(API) de ventana simple para OpenGL, con lo que se logra que sea mucho mas facil aprender.Ademas, proporciona una API portatil que permite que el programa sea portable a otras platafor-mas.

GLUT esta disenado para construir programas OpenGL de tamano pequeno a mediano. Si bienGLUT es adecuado para aprender OpenGL y desarrollar aplicaciones OpenGL simples, GLUT noes un juego de herramientas con todas las funciones, por lo que las aplicaciones de gran tamanoque requieren interfaces de usuario sofisticadas estan mejor utilizando kits de herramientas nativosdel sistema de ventanas. GLUT es simple, facil y pequeno.

La biblioteca GLUT tiene enlaces de programacion C, C ++ (igual que C), FORTRAN y Ada. Ladistribucion del codigo fuente GLUT es portatil para casi todas las implementaciones y plataformas

3.2. METODOLOGIA 27

OpenGL.

3.2. Metodologıa

El trabajo se ha dividido en varias fases de desarrollo, cada una persiguiendo un fin claro de cara a iranadiendo funcionalidades a la aplicacion para ası lograr crear un programa lo mas robusto posible,pero siendo estructurado, de cara a poder reutilizar el codigo y que sea sencillo el ensamblado denuevos bloques.

Se ha buscado realizar una programacion siguiendo los parametros explicados en diversas asigna-turas a lo largo de la carrera, con un codigo lo mas sencillo y legible posible para poder realizarcambios de la manera mas optima.

Primero se realizaron unas primeras versiones de prueba, a fin de familiarizarse con el interfaz deWindows Forms. La mision de estas versiones era lograr entender el funcionamiento de todos loscontroles predefinidos, el manipularlos, ası como integrar todo esto con Glut, la librerıa que ofreceOpenGL de visualizacion que se ha empleado en el proyecto.

Una vez analizada y lograda la viabilidad, se fueron anadiendo objetivos a alcanzar en cada version,ası como pequenos hitos dentro de cada una, para poder ir cuantificando el avance e ir poniendofoco en las tareas pendientes.

Cada version antes de ser validada y finalizada pasaba pruebas de simulacion y de visualizacionpara detectar posibles fallos, anomalıas o aspectos no contemplados a primera vista. En caso deque se detectaran, se adaptarıa el codigo en caso de que fuera posible o se volverıa a una versionmas estable si fueran errores irreparables.

28 CAPITULO 3. DESARROLLO

3.3. Requisitos

A fin de crear una aplicacion lo mas robusta posible, que sea de utilidad y que pueda servir deapoyo a la labor docente, se deben plantear una serie de objetivos que cumplir, de cara a llevar elproceso de una manera estructurada y clara.

R1 Lograr un traductor de S7 - C++

R2 Crear un entorno similar al de SIMATIC

R3 Tener la libertad de creacion de segmentos

R4 Crear diversos elementos tıpicos de la industria

R5 Visualizar dichos elementos en un entorno 3D

R6 Crear varios escenarios fruto de la combinacion de los elementos

R7 Poder validar el codigo introducido

R8 Visualizar si el codigo es correcto o no con un sistema claro

R9 Poder ver el estado de las E/S, contadores y temporizadores en la ejecucion

R10 Poder cambiar los nombres de los elementos

Tabla 3.1: Requisitos

3.4. CASOS DE USO 29

3.4. Casos de uso

Para poder satisfacer las necesidades del programa, se buscara una estructura de posibles accionesque pueda llevar a cabo el usuario, conformando una serie de casos de uso a resolver y desarrollaren los futuros ciclos de trabajo.

Figura 3.1: Casos de uso de la aplicacion

Una vez mostrado el diagrama de casos de uso, se procedera a explicar con algo mas de detallecada caso de uso, ası como los posibles flujos que tendran lugar en la ejecucion, y los requisitosprevios a los que responde cada uno.

30 CAPITULO 3. DESARROLLO

3.4.1. Escoge escenario

El usuario de la aplicacion podra seleccionar entre diversos escenarios predefinidos sobre cualquiere trabajar, de cara a dar libertad para poder programar en diferentes entornos y poder crearescenarios especıficos para aprender la utilidad de instrucciones concretas de s7.

S7mulator

Descripcion de casos de uso

Nombre: Escoge Escenario

Actores: Usuario

Funcion: Posibilidad de elegir el escenario a programar

Descripcion:

El usuario tendra la opcion de poder escoger el escenario que

quiere programar dentro de unas opciones previamente

definidas. Para ello, se apoyara de una serie de boton que

seleccionar en funcion del escenario que desee simular

Referencias: R6

Precondiciones:1. La aplicacion debe estar en modo Menu

2. Debe estar disponibles los botones de escenarios

Flujo normal:

1. El usuario selecciona el escenario deseado

2. El sistema carga el escenario seleccionado

3. El sistema asigna los elementos a las E/S correspondientes

4. La aplicacion pasa al modo Simular

Poscondiciones:

1. El sistema ha cargado el escenario con todos los elementos

del mismo y los ha asignado a las E/S correspondientes

2. La aplicacion ha pasado al modo Simular

Tabla 3.2: Caso de uso: escoge escenario

3.4. CASOS DE USO 31

3.4.2. Programa en S7 Escenario

Ası mismo, el usuario tendra total libertad para poder programar los elementos del escenario demanera libre, de cara a que en un mismo escenario puedan suceder diferentes acciones en funciondel codigo que haya introducido el escenario, dotando a la aplicacion de mayor libertad.

S7mulator

Descripcion de casos de uso

Nombre: Programa en S7 Escenario

Actores: Usuario

Funcion: Programar codigo AWL para ser interpretado

Descripcion:

El usuario podra programar el escenario en codigo AWL, a fin

de lograr manipular todo el sistema de elementos acorde a lo

que desee

Referencias: R2, R4, R8

Precondiciones:1. El usuario ha escogido un escenario

2. El escenario se ha cargado correctamente

Flujo normal:

1. El usuario introduce el codigo en AWL (S7)

2. El usuario valida el codigo

3. El codigo se carga en la estructura definida de bloques

4. El sistema comprueba la validez del codigo introducido

5. Si es correcto, cambia a la ventana Simulacion

6. Si no es correcto, muestra en rojo los segmentos erroneos

Flujo alternativo:

1. El usuario vuelve al modo menu mediante el sistema de salida

2. Se borra el escenario cargado

3. La aplicacion cambia al modo Menu

Poscondiciones:

Tras flujo normal:

1. El codigo se ha cargado en la estructura definida de bloques

2. Si es correcto, se ha pasado al modo Simular

Tras flujo alternativo:

1. Se ha borrado el escenario

2. La aplicacion ha cambiado al modo Menu

Tabla 3.3: Caso de uso: programa en S7 escenario

32 CAPITULO 3. DESARROLLO

3.4.3. Simular Escenario y Manipular E/S

Otro fin de la aplicacion es que el usuario pueda observar y manipular las E/S del programa, enCheckbox (similar a SIMATIC) pero tambien en un entorno en 3D, para facilitar la comprensionde lo que sucede en cada elemento en funcion de lo programado.

S7mulator

Descripcion de casos de uso

Nombre: Simular Escenario y Manipular E/S

Actores: Usuario

Funcion: Ver el entorno simulado y poder actuar sobre el

Descripcion:

El usuario podra ver lo que sucede en un escenario programado

por el, ası como manipular el entorno con una serie de botones

y visualizar el estado de cada entrada y salida del sistema

Referencias: R2, R5, R9, R10

Precondiciones:

1. El usuario ha introducido un codigo correcto

2. Se han cargado correctamente las instrucciones en la

estructura de bloques

3. Se ha creado correctamente el escenario

4. Se ha iniciado correctamente el modo Simular

Flujo normal:

1. El sistema muestra el escenario a simular

2. El usuario puede activar/desactivar las distintas entradas del programa

de manera manual

3. El sistema comprueba cıclicamente el estado del codigo y actualiza la simulacion

Flujo alternativo:1. 1. El usuario utiliza los mecanismos para volver al modo menu o programar

4. Si vuelve al modo menu, el escenario se borra

Poscondiciones:

Si el usuario cambia al modo programar:

1. La aplicacion ha pasado al modo Programar

Si el usuario cambia al modo menu:

1. El escenario se ha borrado

2. La aplicacion ha vuelto al modo Menu

Tabla 3.4: Caso de uso: visualizar escenario y manipular E/S

3.4. CASOS DE USO 33

3.4.4. Anadir y quitar segmentos

Otra caracterıstica de la aplicacion es que el usuario puede trabajar sobre uno u varios segmentos,de cara a aprender a usar cada segmento para una accion correcta y lograr una mejor claridad yentendimiento del codigo.

S7mulator

Descripcion de casos de uso

Nombre: Anadir y quitar segmentos

Actores: Usuario

Funcion: Lograr anadir o quitar segmentos sobre los que programar

Descripcion:

El usuario tendra disponibles en cada segmento dos botones,

uno para eliminarlo y otro para anadir otro segmento al

programa, a fin de lograr una mejor estructuracion del codigo

Referencias: R3

Precondiciones: 1. La aplicacion esta en modo Programar

Flujo normal:1. El usuario acciona los mecanismos para anadir o quitar segmentos

2. El sistema crea o elimina el segmento escogido

Poscondiciones: 1. Se ha creado o eliminado el segmento escogido

Tabla 3.5: Caso de uso: anadir o quitar segmentos

34 CAPITULO 3. DESARROLLO

3.4.5. Comprobacion del codigo S7

La aplicacion no tendrıa sentido sin una correcta interpretacion del codigo s7, y una buena traduc-cion a C++, para poder simular correctamente el entorno.

Por ello, todo lo programado por el usuario pasara por una serie de comprobaciones para ver siel codigo es correcto o no, y en funcion de ello dejara pasar a la ejecucion del programa o por elcontrario marcara los segmentos erroneos para que el usuario pueda modificarlos.

S7mulator

Descripcion de casos de uso

Nombre: Comprobacion del codigo S7

Actores: Usuario

Funcion: Comprobar si el codigo introducido es correcto o erroneo

Descripcion:

El usuario podra comprobar la validez de su codigo

actuando sobre el boton de validate, a fin de comprobar

si hay segmentos con errores y poder modificarlos

Referencias: R1, R7

Precondiciones:1. La aplicacion esta en modo Programar

2. El usuario ha clicado el boton de validar

Flujo normal:

1. El programa realiza una validacion del codigo AWL escrito

2. El programa detecta si es correcto o no el codigo

3. Si el codigo es correcto el programa pasa a modo Simular

Si el codigo es incorrecto los segmentos con errores pasan a resaltarse

Poscondiciones:

Si el codigo es correcto:

1. El programa ha pasado a modo Simular

Si el codigo es incorrecto:

1. Los segmentos con errores han pasado a estar resaltados

Tabla 3.6: Caso de uso: comprobacion del codigo S7

3.5. CICLOS DE DESARROLLO 35

3.5. Ciclos de desarrollo

3.5.1. Ciclo 1

Desarrollo de los casos de uso

Programa en S7 Escenario:

En cuanto a este apartado, se ha creado la estructura de clases basica que definiran la arquitecturade S7, para poder realizar correctamente la traduccion a C++ de todo lo que programe el usuario.Para ello se propone una primera version con Bloque, Instruccion y Segmento.

Lo primero a crear sera el Form1.h, la clase sobre la que pivotara todo el programa, y en dondese producira la fusion del mundo generado en OpenGL con los botones e interfaz creados, y sobredonde se operara con el codigo S7 y se produciran todas las comprobaciones.

El Form es la clase que se crea cuando se programa en CLI/C++ habilitada para emplear todoslos controles que incluye el paquete ofrecido por Windows, tales como botones, panel, textbox,checkbox... Es por tanto el pilar de la aplicacion y la clase con mas elementos y funciones.

Se ha anadido un TextBox contenido en un Panel anadido al Form que hara las veces de Segmento deS7 para esta primera version, a fin de poder realizar las comprobaciones oportunas de la viabilidadde chequear el codigo del usuario y analizar su validez.

Simular Escenario y Manipular E/S:

Se han anadido una serie de Checkbox directamente al Form que haran las veces de botones, tantode simulacion de entradas y salidas del programa (para ver el estado de los diferentes elemen-tos), como para navegar dentro de nuestra aplicacion (pasar de la simulacion del escenario a lamanipulacion del cogido).

Con el Checkbox se podra comprobar de manera clara si algo esta activo o no, ya que son cajasque se marcan con un tic, algo muy similar a lo que ofrece el entorno SIMATIC, lograndose ası uninterfaz muy familiar a los usuarios iniciados.

Anadir y quitar segmentos:

Se anaden varios TextBox a un panel nuevo contenido en el Form, que haran las veces de segmentoscon sus correspondientes botones de eliminar y anadir los diferentes segmentos. Todo esto se incluiraen un panel a fin de poder ocultar o mostrar estos segmentos de golpe.

El resultado final sera similar al interfaz de escritura de SIMATIC, con la intencion de lograr elentorno mas amistoso para el usuario y que pueda acabar siendo compatible con el entorno deSiemens.

Comprobacion del codigo en S7:

Para comprobar si el codigo introducido por el usuario es correcto en S7, sera necesaria la creacionde un Parser, que sera el encargado de interpretar la validez del codigo de una manera estructu-rada, ası como un Scan-Op y Scan-dir que seran las clases sobre las que pivotara este chequeo deinstrucciones.

Para facilitar la comprension del parser, se muestra a continuacion una maquina de estados delproceso de funcionamiento de lectura de las lıneas, y que caminos puede ir tomando en funcion delo que vaya leyendo.

36 CAPITULO 3. DESARROLLO

Figura 3.2: Maquina de estados de la clase Parser

Como se puede comprobar, el parser esta compuesto de diversos estados en los que se queda leyendoespacios en blanco hasta detectar algun caracter e iniciar ası el analisis del operador en primer lugary de la direccion de memoria en segundo lugar.

Hay tambien contemplada un estado de fin de lınea correcto y otro de lınea con error, que seranlos estados finales que tendra cualquier lınea de codigo.

Ademas, para poder definir de validez de instrucciones correctas/erroneas se empleara un sistemade colores (verde correcto, rojo incorrecto) para que el usuario pueda visualizar a simple vista losposibles segmentos que contengan errores en el codigo.

3.5. CICLOS DE DESARROLLO 37

Diagrama de clases

La clase mas importante como se ha explicado antes sera el Form, el esqueleto del programa.

En esta primera version se anaden los atributos basicos para realizar pruebas, ası como algunasfunciones en las que empezar a trabajar la anteriormente comentada union de objetos. En futurosciclos solo se referenciaran los cambios producidos sobre la misma, con el fin de no mostrar algorepetitivo.

En el diagrama se muestra unicamente el contendor de controles, y los atributos basicos de estaprimera version.

En la parte de atributos, se ha incluido una timer, aunque aun no se le da uso, por lo que seraexplicado en futuros ciclos.

Figura 3.3: Clase Form.h: Ciclo 1

Aparecen como atributos estado, que indica si la aplicacion se encuentra en modo programar osimular, las dos pantallas que habra disponibles cuando se ejecute un escenario. Ademas, hayanadidas las clases validas y dir-validas para realizar las validaciones de codigo de esta primeraversion.

Tambien hay diferentes atributos del universo STEP 7 (segment, OB1, RLO...) a modo de primeraversion para probar la viabilidad de emplearlo con Windows Forms.

Las funciones mostradas en el diagrama, excluyendo al constructor y destructor, son las masdestacables de esta version, y seran las que se vayan desarrollando en futuros ciclos.

La funcion validar-click se utiliza para definir que paneles cambian de oculto a disponible y viceversa

38 CAPITULO 3. DESARROLLO

cuando se produce este evento. Ası mismo, accionara una serie de mecanismos de comprobacion decodigo por parte del sistema para analizar la validez del codigo. Y en ultima instancia, cambiarael estado a simulacion si el codigo es correcto.

La funcion codigo-click es la opuesta. Tiene todos los mecanismos activados cuando en mitad dela simulacion se pulsa este boton para volver al modo programar.

Las funciones M1 y X1 son las de anadir y eliminar segmentos respectivamente, las cuales realizanuna serie de mecanismos para saber donde se introduce o elimina el segmento y si debe movercodigo de segmento (ya que realmente oculta o muestra segmentos ya creados).

En esta primera version del programa, el Form1 se comunica con la estructura de clases creadaspara conformar la jerarquıa de Step7, ası como con un Parser que pueda interpretar el codigometido por el usuario.

La carpeta Step7 contiene todos los elementos relativos a la estructuracion del lenguaje S7, paratratar de organizar de la mejor manera posible el codigo y aproximarlo lo maximo posible a loofrecido por Siemens. Por tanto, esta clase buscara lograr una estructura de bloques, segmentos,instrucciones simular a lo encontrado en SIMATIC.

En cuanto al Parser, y las clases sobre las que se apoya (ScanOp y ScanDir), son las clases que seencargaran de comprobar la validez del codigo que se haya introducido, comparando cada instruc-cion con las direcciones de memoria habilitadas en la version del programa y con los operadoresvalidos de la base de datos.

3.5. CICLOS DE DESARROLLO 39

Figura 3.4: Diagrama de clases: Ciclo 1

40 CAPITULO 3. DESARROLLO

Interfaz de usuario

El interfaz de usuario de esta version se ha empleado con el objetivo de ver la viabilidad de futurasversiones, ası como para tratar de buscar la mejor solucion de cara a sencillez y utilidad.

En la primera pantalla se encuentra la visualizacion del modo programar codigo, en el cual elusuario podra anadir/quitar segmentos, validar las instrucciones que haya anadido y clicar enSTART para pasar al modo ejecucion del codigo.

Figura 3.5: Interfaz modo programar: Ciclo 1

Una vez pulsado START, se pasa al modo visualizacion, en el cual en futuras versiones se anadirauna ventana grafica para visualizar el entorno en 3D. Por ahora eso se ha representado con uncambio de color.

Figura 3.6: Interfaz modo simular: Ciclo 1

3.5. CICLOS DE DESARROLLO 41

Aspectos tecnicos

Se ha trabajado en crear un interfaz sencillo pero visual, por tanto se han ido anadiendo los diversoscontroles que ofrece Windows al Form1.h.

En este primer ciclo cabe destacar la manipulacion de los controles por defecto, modificando eltamano, la forma y anadiendo imagenes para personalizar lo maximo posible la solucion.

Ası mismo, la creacion del parser ha sido estudiada minuciosamente, creando diversos estadosintermedios para simplificar la labor. Se apoya en Scan-Dir y Scan-Op para el momento de validarcada parte de la instruccion, por tanto el parser sera aplicado a cada lınea de codigo que hayaescrito el usuario, a fın de segmentar completamente el codigo para validarlo.

Cabe resaltar que el codigo se almacenara ordenado en el segmento, y los segmentos en el bloque, decara a una futura simulacion de elementos, en los que no solo influye la validez de las instruccionessi no tambien el orden en el que esten escritas en el programa.

Pruebas

Las pruebas en esta primera van a ser muy simples y funcionales.

Por un lado se comprueba que todos los botones anadidos se muestran correctamente, y que seocultan o modifican segun en el modo de programa que se encuentra la aplicacion (programar osimular).

La otra prueba principal que se realiza es ver que los botones anadir y quitar segmentos funcionende la manera esperada, actuando sobre el segmento deseado y desencadenando el cambio de textoesperado en los segmentos.

42 CAPITULO 3. DESARROLLO

3.5.2. Ciclo 2

Desarrollo de los casos de uso

Programa en S7 Escenario:

Se ha proseguido el trabajo en la correcta estructuracion de las clases que conformaran el universoS7, para ello se han anadido las clases Operator y Direction, para lograr un nivel aun mas bajoque el de Instruction.

Ası mismo, se anaden dos vectores de entradas y salidas para lograr conectar la logica de S7 con lovisualizado en Windows Forms, para tratar de lograr una primera conexion entre ambos elementos.Se puede comprobar que el programa responde correctamente a la programacion de instruccionessencillas.

Simular Escenario y Manipular E/S:

En relacion con lo anteriormente visto, se han anadido entradas y salidas, creando diversos Check-box en el Form1.h con su nombre simbolico para probar la funcion Change Names y la lectura co-rrecta de los nombres simbolicos. Esto ira conectado a los vectores creados para lograr la conexionanteriormente mencionada, por tanto se crearan tantos CheckBox como E/S se han contemplado(7 y 7 en principio).

Se ha introducido tambien un timer y se ha anadido una funcion (Check-in) para comprobar elestado de las entradas en cada comienzo de ciclo y actualizar el estado de las salidas al final decada ciclo.

Comprobacion del codigo en S7:

Para lograr una mejor estructuracion del Parser y ayudar a simplificarlo, se han creado unas clasesde referencia de instrucciones validas.

Ademas, se comprueba que los hasta 4 TextBox creados se validen correctamente, y almacenensu informacion en el Segmento esperado, a fin de que el bloque quede almacenado en el ordenesperado, algo vital de cara a poder relacionar cada instruccion en su segmento, y cada segmentoen su bloque.

Por ultimo, para gestionar el comportamiento de las funciones de una manera organizada, se hacreado la clase logic, en la que se iran anadiendo las instrucciones que se deseen contemplar encada version y hara las veces de biblioteca de funciones.

Diagrama de clases

Como se puede apreciar a continuacion, se ha estructurado con mas detalle las clases relacionadascon el universo de Step 7, para lograr una sencillez que haga mas claro y legible el codigo.

Ahora las instrucciones se fragmentan a un nivel aun mas bajo, con las nuevas clases Operator yDirection, ademas de dar la posibilidad de que sean contadores.

La clase operator servira para poder realizar las comprobaciones pertinentes con la instruccionintroducida por el usuario y los operadores habilitados en la base de datos. De manera analoga, laclase direction tendra un comportamiento similar, con la salvedad de que comprobara la base dedatos de direcciones validas.

Tambien se ha creado la clase counter, para dar una primera version de los contadores en estaversion, para realizar pruebas de funciones de mayor complejidad.

3.5. CICLOS DE DESARROLLO 43

La clase logic sera la encargada de comprobar lo anteriormente descrito, con la biblioteca defunciones de STEP7 contempladas en la aplicacion. Bastara ası con ir anadiendo nuevas funcionesy su comportamiento para ampliar el espectro de operadores registrados en la aplicacion.

Figura 3.7: Diagrama de clases: Step 7: Ciclo 2

44 CAPITULO 3. DESARROLLO

En cuanto a las clases relacionadas con la comparacion del codigo introducido por el usuario, seha incluido la clase references, que es en la que estan incluidas las direcciones validas que puedeusar el usuario en su codigo.

Figura 3.8: Diagrama de clases: Comparator: Ciclo 2

Interfaz de usuario

Esta version deja de lado la ventana de visualizacion del entorno, para unicamente trabajar yorganizar la version de la programacion de codigo en S7, por tanto se busca crear los vectorescreados en el interfaz, manteniendo el panel de los distintos segmentos y la tecla de cambiar losnombres simbolicos.

Figura 3.9: Interfaz modo programar: Ciclo 2

3.5. CICLOS DE DESARROLLO 45

Pruebas

En este segundo ciclo las pruebas se han basado comprobar el correcto funcionamiento de lasprimeras instrucciones contempladas.

Para ello se han realizado pruebas de codigo en los diferentes segmentos, se ha valido y vistoque aparecen como codigo valido (en color verde) y que las E/S mostradas reaccionaban segun loprogramado.

Ası mismo, al introducirse codigo no valido, no pasa a simular y resalta en rojo los segmentos confallos.

46 CAPITULO 3. DESARROLLO

3.5.3. Ciclo 3

Desarrollo de los casos de uso

Programa en S7 Escenario:

Tanto el ER y RLO se incluyen dentro de Block en vez de en Logic, lo cual tiene bastante massentido y va a resultar mas sencillo a la hora de operar con la logica del bloque. Ası, cada vez quese inicie un bloque ambos valores se podran iniciar al valor deseado con independencia de lo quese vaya comprobando en la clase Logic.

Esto representa un cambio bastante significativo, ya que los bits ER y RLO son la base de S7,y por tanto su correcta manipulacion y entendimiento supondra un factor vital de cara a crearfunciones mas avanzadas de una manera compleja y sencilla, haciendo el codigo mas comprensiblepara el usuario.

Ademas, en el block se recogeran las direcciones de memoria contempladas en la solucion final,siendo sobre este mismo sobre el que se podran anadir o eliminar las direcciones necesarias (concuidado de no sobrecargar la capacidad del sistema operativo).

Simular Escenario y Manipular E/S:

Se anade tanto un temporizador como un contador a las entradas/salidas anteriormente contem-pladas, para pasar a realizar comprobaciones del correcto funcionamiento de ambos.

Se basan en un textbox solo de lectura en el que se visualiza el valor que tienen en todo momentoambos, ademas de otro textbox que es la direccion del elemento (Z o T).

Comprobacion del codigo en S7:

Se anaden las funciones FR, ZV, ZR, L y SE, de cara a poder manejar correctamente los tempo-rizadores y dotar al programa de las principales funciones de manipulacion de los mismos.

Con esto se pretende lograr una version mas rica en la que comenzar a realizar pruebas de codigoscon cierta complejidad, para analizar la estabilidad de las funciones introducidas hasta esta version.

Ademas, se anadiran una lista de instrucciones y una lista de direcciones.

La lista de instrucciones servira para ver si la direccion es valida, mientras que la lista de direc-ciones sera sobre la que se opere cada instruccion, de cara a lograr un comportamiento estable delprograma. Es decir, una la usaremos como medida de lectura de codigo y otra se empleara a lahora de simular.

Diagrama de clases

En este caso, las clases son similares a las del Ciclo 2, con la salvedad de que se ha creado la claseNames, para realizar la gestion de los nombres y nombres simbolicos que tendran las diferentesdirecciones de memoria del programa.

Se ha decidido crear esta clase debido a la multitud de veces que aparece a lo largo del codigo lanecesidad de realizar comprobaciones o asignaciones con nombres, ası como crear las funciones deasignacion dentro de la misma clase.

Interfaz de usuario

El interfaz de usuario de la programacion del codigo tiene un aspecto bastante similar al primer

3.5. CICLOS DE DESARROLLO 47

Figura 3.10: Clase Names: Ciclo 3

ciclo, con el anadido de la distribucion de Entradas y Salidas creadas en el ciclo 2, y el anadido deltemporizador y contador en pruebas.

Figura 3.11: Interfaz modo programar: Ciclo 3

En cuanto a la simulacion, se vuelve al cambio de color para hacer representativo el cambio deventanas, de cara a preparar el salto en la siguiente version de la ventana de visualizacion en 3D.

Aspectos tecnicos

Lo mas importante de esta iteracion es como se han desarrollado las funciones de logica del pro-grama, que seran las traductoras entre S7-C++.

La clase Logic contiene todas las instrucciones de S7 reconocidas en el programa, por lo que seraimportante que todo funcione adecuadamente. Es decir, sera la librerıa de funciones S7 recogidasen la aplicacion e interpretables.

Se han tratado de programar todas las funciones ahı recogidas de una manera similar, para quecualquier usuario que quiera anadir una funcion no tenga mas que observar la estructura de unaexistente y modificar los aspectos a los que afecta la nueva instruccion a anadir a la librerıa.

Cada lınea de codigo ira pasando por esta clase a la hora de simular de manera ordenada, de formaque la simulacion sea fiel a lo programado.

48 CAPITULO 3. DESARROLLO

Figura 3.12: Interfaz modo simular: Ciclo 3

Pruebas

Se ha comprobado que el cambio de color representativo al modo en el que se encuentra el programa(simular o programar) se refleja correctamente.

Ası mismo, se han realizado pruebas con los contadores y temporizadores, para ver que funcionansegun lo esperado y tienen un comportamiento adecuado.

Estas pruebas se han realizando tratando de crear codigos algo mas complejos, con el fin de com-probar si los funciones de la clase Logic funcionan de manera adecuada.

3.5. CICLOS DE DESARROLLO 49

3.5.4. Ciclo 4

Desarrollo de los casos de uso

Escoge escenario:

Se realiza un primer menu en el que se define un escenario, de cara a probar el futuro menu deeleccion de opciones.

Ademas se anade una funcion basica de carga de escenario en funcion de un parametro que indica elnumero de escenario, aunque como en este ciclo unicamente se va a contemplar uno, no se entraraen mas detalle en ello, siempre se cargara el escenario por defecto.

Programa en S7 Escenario:

En esta version se procedera a crear un escenario compuesto de: suelo, cinta/s, caja/s, sensor/es.

El suelo es un elemento estatico con caracter decorativo para que el acabado de la ventana deOpenGL sea mas visual. Por tanto, es un objeto bastante simple. Con la adicion de suelos creamosla lista de suelos, que compondra la base de nuestro escenario.

Las cintas son la composicion de 5 tramos de cinta, y tiene un caracter activo en la aplicacion. Siesta activa mueve todos sus tramos y todo lo que haya sostenido encima de ellos. Si esta inactivadebe tener a los objetos en contacto estaticos. Por ello, creamos interacciones con las cajas paraprogramar funciones que hagan que las cintas en contacto con cualquier cinta se mueven si la cintaesta en movimiento. Son actuadores, por tanto seran reconocidos como salidas del programa.

Las cajas con un elemento no programable por el usuario, que tienen interacciones con todos loselementos del escenario. Es el objeto disenado para tratar de llevarlo al final del escenario, y apesar de su comportamiento pasivo, sera la palanca para activar ciertos elementos (sensores).

Los sensores (de barrera optica en esta aplicacion) son una entrada no manipulable por el usuario,pero si programable, es decir, estara activo cuando algo interfiera en su rango laser. Este estadode activo/inactivo podra ser usado por el usuario para programar eventos.

Todos los elementos anteriormente descritos se han agrupado en listas de elementos de su tipo, conel fin de simplificar cualquier clase de interaccion entre diferentes objetos, ası como tener un mejorcontrol de la creacion y asignacion de escenarios.

El Mundo se basara en crear todas las listas de elementos y anadir las interacciones entre todos, conlo cual sera una clase lo mas sencilla posible a fin de que sea facilmente comprensible y modificable,ya que sera el motor para realizar cualquier adicion de elementos.

Por tanto, en el Form se programara un enlace entre ambos apartados mediante funciones queconectan estados activos/inactivos de los elementos simulados con estados de activos/inactivos delos diferentes vectores de entradas y salidas definidos.

Este enlace sera dinamico en funcion del escenario cargado, ya que comprueba los elementos quehay disponibles en cada escenario y los asigna automaticamente en orden en el vector de entradasy salidas, asignandoles ademas el nombre simbolico sugerido.

Simular Escenario y Manipular E/S:

Tras realizar una serie de comprobacion externas al programa, se anade la ventana de la visua-lizacion en 3D del entorno de simulacion, en las que se puede comprobar de una manera masrepresentativa lo programado en el codigo y el correcto funcionamiento de toda la logica progra-

50 CAPITULO 3. DESARROLLO

mada.

Para ello se recurrira a anadir una ventana de OpenGL en un Panel, que estara oculto en el modoprogramar codigo y se mostrara en el modo ejecucion.

Para poder representar el escenario, este Panel se apoyara en la clase Glut, ya que no se busca unaperfeccion de graficos si no una sencillez y utilidad grandes.

Con estos elementos ya se podra empezar a visualizar un entorno compuesto de cintas, sensores,cajas y bombillas.

Diagrama de clases

La estructura basica de clases del programa es similar a las versiones anteriores, con el anadido detodo lo relacionado con el escenario (clases contenidas en la carpeta Mundo).

Esta carpeta tiene una serie de clases sobre las que se apoya para todo el tema de la visualizacionde los elementos (carpeta dibujo), que seran las clases de OpenGL y todas las Glut incluidas.

Con todo ello, el diagrama general de clases quedara reflejado a continuacion.

Figura 3.13: Diagrama de clases: Ciclo 4

Es por ello que conviene presentar las clases incluidas en Mundo, para ver los atributos y funcionesprincipales de las mismas.

Los elementos creados se guardan en una lista de elementos de su tipo, que seran las que conformenel mundo virtual creado en cada escenario.

Todos los elementos tienes una posicion de referencia y unas dimensiones, ademas de una funcionDibuja() que es la encargada de mostrar en el escenario los diferentes elementos.

Ademas, algunos objetos tienes la funcion Move() que se basa en desplazar a aquellos objetosmoviles en los casos en que sea necesario.

El atributo active indica aquellos objetos que pueden estar activos o no, que seran los programablesen el entorno.

Ası mismo, se incluye la clase interact, la cual es usada para analizar las posibles interaccionesentre los distintos elementos que componen el mundo.

3.5. CICLOS DE DESARROLLO 51

Figura 3.14: Diagrama de clases: Carpeta Mundo: Ciclo 4

52 CAPITULO 3. DESARROLLO

Interfaz de usuario

En cuanto al interfaz de usuario, en esta version ya se empieza a trabajar en el menu principalde programa, en el cual el usuario podra escoger entre varias opciones, y se empezara a buscar unresultado algo mas visual.

Figura 3.15: Interfaz modo menu: Ciclo 4

La ventana de programacion de codigo del escenario no presenta ninguna variacion respecto a laversion anterior salvo el boton de Go to Menu, para poder ir cambiando entre las 3 ventanas devisualizacion.

Figura 3.16: Interfaz modo programar: Ciclo 4

3.5. CICLOS DE DESARROLLO 53

En cuanto a la ventana de ejecucion, se comienza a visualizar el escenario definido, compuestode 2 cintas, 2 sensores y 1 caja, elementos que se rigen segun lo programado en la ventana deprogramacion de codigo.

Figura 3.17: Interfaz modo simular: Ciclo 4

Aspectos tecnicos

En este ciclo se realiza probablemente la implementacion mas complicada del programa, teniendoque anadir una ventana de OpenGL al interfaz de Windows Forms.

Para lograr ello, por un lado emplearemos una clase OpenGL especialmente disenada para trabajarcomo elemento NativeWindow. Su constructor tendra como parametro un panel, por tanto, alanadir un panel al Form1.h y usarlo para construir en el una ventana de OpenGL, tendremos unaprimera ventana de visualizacion.

Para poder dibujar en el panel los elementos, se emplearan las diversas funciones que ofrece lalibrerıa de visualizacion de OpenGl Glut, que ademas usando la librerıa adaptada usada en laspracticas de la ETSIDI, lograremos cargar ciertas texturas con las funciones auxiliares recogidas.

Esto se consigue con la clase auxiliar textures, que sirve para cargar todos los parametros necesariospara la realizacion de la carga de texturas y su dibujado en los elementos, en esta aplicacion enforma de cuadrados de mayor o menos tamano que representaran cada vertice de la imagen.

54 CAPITULO 3. DESARROLLO

Pruebas

Las nuevas funciones han sido probadas en esta version. No obstante, el mayor cambio lo hasupuesto la aparicion del mundo y el escenario simulado.

Por ello, en cada objeto que se ha creado ha sido importante ver su visualizacion en el escenariopara ir retocando cualquier error o imperfeccion a corregir. Ademas, para ver el comportamientode los objetos en el escenario se ha tenido cuidado de comprobar distintos codigos.

Otra parte primordial de las pruebas es que las interacciones entre objetos fuesen adecuadas, siendolos contactos caja-cinta y caja-sensor las necesarias de perfeccionar.

Una vez logrado que todo esto fuera segun lo esperado, se han realizado pruebas de la unionrealizada entre las E/S representadas por botones en el programa con el escenario simulado, a finde que el nexo entre mundos que se esperaba lograr fuera el adecuado.

En este ciclo se han ido puliendo las diferentes funciones de asignacion de elementos a botones,asignacion de estado de las entradas cada ciclo y de actualizacion de salidas al final de los mismos,para lograr la meta de este ciclo, llegar a una version casi definitiva de este primer prototipo delprograma.

3.5. CICLOS DE DESARROLLO 55

3.5.5. Ciclo 5

Este ciclo supondra el ultimo ciclo de desarrollo contemplado en este prototipo del programa,pudiendo surgir nuevos ciclos e iteraciones en desarrollos futuros.

Desarrollo de los casos de uso

Escoge escenario:

Se han anadido 3 escenarios adicionales, hasta conformar un entorno de 4 escenarios que sontotalmente seleccionables. Para poder lograr esto, se ha modificado la clase Mundo anadiendo unafuncion (Inicializa(int)) que segun el parametro que se le pase, carga uno u otro escenario.

Ası mismo, se ha configurado que lo primero que se cargue al seleccionar un escenario sea el entornoen sı y no la ventana de programacion de codigo, a fin de que el usuario pueda tener una primeraimagen visual de los elementos que componen el escenario.

Programa en S7 Escenario:

Se han anadido algunos elementos al mundo simulado, ellos son las bombillas y las paredes.

Las paredes tienen una funcion simplemente estetica como lo es el suelo, y es para dotar al escenariodel mayor realismo posible.

En cuanto a las bombillas, son un elemento activo del escenario, y segun se haya programadoel codigo, pueden encenderse (que el estado activo sea true) o apagarse (lo inverso), todo ellorepresentado con un cambio de color en las mismas (o color verde en encendido, o rojo cuando seencuentran desactivadas).

Diagrama de clases

La adicion de las clases bombilla, pared, lista bombillas y lista pared es muy similar a las clasesanadidas en el ciclo 4 de desarrollo.

En este caso, se comprueba que la clase bombilla tiene la diferencia de que no tiene la funcionMove(), ya que es un objeto completamente estatico en el escenario.

En cambio, aparece un atributo nuevo (junto a los de posicion y active) que es rad (radio), ladimension util a la hora de dibujar la esfera que sera nuestra bombilla.

56 CAPITULO 3. DESARROLLO

Figura 3.18: Diagrama de clases: Carpeta Mundo: Ciclo 5

3.5. CICLOS DE DESARROLLO 57

Interfaz de usuario

Como se ha comentado anteriormente, el interfaz del menu presenta 4 escenarios seleccionables,ademas de una imagen de fondo para darle un mejor aspecto visual.

Figura 3.19: Interfaz modo menu: Ciclo 5

En cuanto a la pantalla de la simulacion, se puede comprobar que los elementos se dibujan co-rrectamente en la pantalla destinada a ello, y las relaciones con las E/S creadas funcionan de lamanera esperada.

Figura 3.20: Interfaz modo simular: Ciclo 5

Por ultimo, en el interfaz de usuario destinado a la programacion del codigo, se pueden crear yeliminar segmentos, y mantiene un aspecto visualmente agradable, para que no resulte tediosa lapantalla.

Aspectos tecnicos

Como sucedio en el ciclo anterior, se han anadido dos elementos nuevos, Pared y Bombilla.

58 CAPITULO 3. DESARROLLO

Figura 3.21: Interfaz modo programar: Ciclo 5

El primero tendra una funcion similar a la del suelo, es decir, un objeto meramente decorativopara mejorar el acabado del escenario. Con la lista de paredes conformaremos otro de los lımitesvisibles del escenario.

En cuanto a la bombilla sera otro elemento programable por parte del usuario. Es un actuador, conla salvedad de que no entra contacto con las cajas, si no que simplemente mediante la programaciondel codigo, podra estar activo (luciendo en color verde) o inactivo (apagado en color rojo). Seagruparan en listas de bombillas para poder manipular todas a nuestro antojo con mayor sencillez.

Pruebas

Las pruebas de esta version han sido similares a las realizadas en el ciclo 4 a la hora de comprobarel comportamiento de las bombillas.

En cuanto a la carga de escenarios y el borrado de los mismos se ha comprobado que todo funcionaraadecuadamente a fin de no empezar a duplicar objetos relentizando la aplicacion.

3.6. PRUEBAS FINALES 59

3.6. Pruebas finales

Dando el ciclo 5 como ultimo de este prototipo del programa, sera necesario realizar una seriede pruebas para comprobar que todo funcione correctamente, sin ningun error o excepcion nocontemplados y comprobando que en efecto la traduccion de S7 sea adecuada y el escenario secomporte como deberıa.

Ası mismo, se debera comprobar que se cargan todos los escenarios correctamente, asignando pordefecto los nombres de elementos que aparezcan en los mismos y si todos los elementos tienen uncomportamiento adecuado.

Primero se va a proceder a realizar la comprobacion de que todos los escenarios carguen correcta-mente. Lo primero sera ver la carga del menu principal.

Figura 3.22: Menu de carga

Una vez cargado, se procedera a clicar sobre cada boton de escenario, y una vez cargue el de volveral menu principal, para comprobar el correcto funcionamiento de la carga.

Figura 3.23: Escenario 1

60 CAPITULO 3. DESARROLLO

Figura 3.24: Escenario 2

Figura 3.25: Escenario 3

Figura 3.26: Escenario 4

3.6. PRUEBAS FINALES 61

Como se puede comprobar, todos los escenarios contemplados se han cargado correctamente, portanto, esta prueba ha sido satisfactoria.

Las pruebas que se recogeran a continuacion de la lectura de codigo y de comportamiento de loselementos se realizaran en el escenario 1, aunque se han realizado las mismas pruebas en todos losescenarios, pero incluirlas todas no aportarıa nada diferencial.

Primero se procedera a introducir un codigo incorrecto, para ver si el programa lo detecta y lomuestra en otro color. Por tanto, la entrada e 124.0 se tecleara como er 124.0 para ver la respuestadel programa cuando se pulsa el boton validar.

Figura 3.27: Introduccion de codigo erroneo

En efecto, se puede comprobar que el codigo se ha puesto en rojo indicando que el segmento tieneerrores. Una vez corregido el codigo anterior escribiendo correctamente la entrada, se comprobaraque se carga correctamente el escenario, y si se vuelve al modo programar el codigo aparecera enverde, indicando que es correcto.

Figura 3.28: Carga correcta del escenario

Ambos supuestos iniciales se han cumplido, por tanto la respuesta de la aplicacion en funcion

62 CAPITULO 3. DESARROLLO

Figura 3.29: Introduccion de codigo correcto

del codigo introducido es la esperada al inicio del desarrollo del programa, dandose por valida lasolucion ante ese requisito.

Ahora habra que comprobar el comportamiento de los elementos. Para ello, en el mismo escenarioque ya esta cargado, se introduciran codigos muy sencillos para analizar el comportamiento de lacinta, la caja, el sensor y la bombilla.

El primer codigo que se introducira sera para validar el movimiento de la cinta y la caja, mediantela accion de pulsar una entrada no asignada a algun elemento (en este caso la E 124.2).

Figura 3.30: Codigo basico para mover la cinta

Una vez validado, se comprobara que al no tener accionada la entrada, la cinta esta en reposo y lacaja, tambien.

3.6. PRUEBAS FINALES 63

Figura 3.31: Respuesta con E 124.2 desactivada

Ahora se procedera a pulsar la entrada E 124.2, y se comprobara que la cinta se mueve, desplazandocon ella a la caja, y una vez que abandonen el rango del sensor, este se desactivara.

Figura 3.32: Respuesta con E 124.2 activada

Con todo ello, se puede comprobar que la cinta responde segun lo esperado, y la iteraccion que tienecon la caja se realiza de forma adecuada. Ahora es el turno de la validacion del comportamientode la luz, una vez que el comportamiento del sensor se haya validado con las pruebas anteriores.

Para ello, se buscara un codigo bastante sencillo para que la comprobacion sea lo mas rapidaposible.

64 CAPITULO 3. DESARROLLO

Figura 3.33: Codigo basico para el comportamiento de la bombilla

De entrada, al estar la caja mas alta que el sensor, este no estara activado, con lo cual la bombillaestara apagada (en color rojo).

Figura 3.34: Respuesta con sensor desactivado

Al entrar en contacto la caja con el sensor, se activara, desencadenando en que la bombilla comiencea lucir (en color verde).

3.6. PRUEBAS FINALES 65

Figura 3.35: Respuesta con sensor activo

Con estas pruebas simples se ha comprobado que tanto la carga de escenarios, como el lector deintrucciones, su traduccion y entendimiento por parte del escenario y el comportamiento de losdistintos elementos es el adecuado, logrando una version estable del programa que se podra darpor valida como version final de este prototipo.

66 CAPITULO 3. DESARROLLO

Capıtulo 4

Conclusiones

4.1. Conclusion

La realizacion de este proyecto ha supuesto un gran reto, ya que aunaba conocimientos de programa-cion, automatica y diseno, pero suponiendo un desafıo adecuado para demostrar los conocimientosadquiridos en la carrera.

Se ha logrado construir una aplicacion, funcionalmente completa, con utilidad practica en nuestrocampo, con una interfaz muy intuitiva y con un aspecto muy familiar para la gente que hayatrabajado previamente con SIMATIC.

Incluye escenarios 3D para resultar mas atractivo a los usuarios, pero empleando recursos reducidosdel sistema para que se pueda usar en el mayor numero de ordenadores.

La herramienta contiene un traductor de S7 a C++ correctamente logrado, ası como un interfazsencillo. En cuanto al aspecto visual, los graficos sencillos presentados facilitan el poner foco en laprogramacion de STEP7 y aprender el funcionamiento del lenguaje.

Se han incluido escenarios prefijados con una serie de elementos ya creados, con nombres persona-lizables y totalmente manipulables por el usuario del programa a fin de que cada persona cree unasolucion personalizada a un mismo problema.

Con todo ello, se ha logrado cumplir los objetivos marcados al comienzo del proyecto, creando unaaplicacion capaz de dar soporte visual al aprendizaje de S7, con lo cual se podra facilitar en granmedida el aprendizaje por parte de los alumnos.

4.2. Desarrollos futuros

En el campo de posibles mejoras cabrıa destacar la creacion de mas escenarios y una opcion dentrode la aplicacion de poder crear escenarios personalizados, para que cualquiera pudiera escoger(dentro de una serie de objetos fijados) los elementos deseados segun sus necesidades.

Ası mismo, otra posible mejora bastante interesante podrıa ser que se pudiera exportar el codigoen algun formato compatible con SIMATIC, a fin de poder cargar directamente el codigo creadoen el programa en un automata.

67

68 CAPITULO 4. CONCLUSIONES

Para poder ampliar la complejidad de los programas de usuario, serıa conveniente abordar laposibilidad de anadir diferentes bloques en el codigo, y no estructurar todo en uno solo. No obstanteno deberıa entranar una dificultad muy elevada, ya que el sistema de bloques ya esta dispuesto.

La creacion de nuevos elementos para los escenarios serıa otro tema interesante a abordar en futurosdesarrollos, ası como tratar de optimizar lo maximo posible los recursos de la aplicacion.

En cuanto al tema visual, tambien se podrıa lograr un acabado mas optimo, aunque al buscarsesencillez y claridad, no se puede determinar cual es la curva perfecta de graficos/sencillez.

Apendice A

Anexo

A.1. Manual de usuario

MANUAL DE USUARIO

“S7mulator”

Jorge Anton Garcıa

69

70 APENDICE A. ANEXO

INDICE

1. OBJETIVO2. S7MULATOR3. OBJETOS4. MODO MENU5. MODO SIMILAR6. MODO PROGRAMAR7. DIRECCIONES DE MEMORIA CONTEMPLADAS EN ESTA VERSION8. OPERADORES RECOGIDOS EN ESTA VERSION

A.1. MANUAL DE USUARIO 71

1. Objetivo

El objetivo de este Manual es facilitar al lector el aprendizaje y el funcionamiento de la aplicacionS7mulator.

Por tanto, el publico objetivo del mismo sera nuevos usuarios de la aplicacion y personas pocofamiliarizadas con aplicaciones informaticas.

Mediante esta breve guıa, se entenderan los botones e interfaz del programa, para apoyar en losprimeros usos de la aplicacion al usuario. Tambien se explicaran brevemente los elementos queaparecen en cada escenario.

2. S7MULATOR

El programa es un simulador de un entorno industrial totalmente programable en lenguaje S7.

El usuario tendra a su disposicion una serie de escenarios programables, en los que mediante unsistema de segmentos podra introducir un codigo S7, validarlo, y contemplar como afecta al entorno.

Es por tanto una adaptacion de SIMATIC con el anadido de visualizar en 3D todo lo programadoe ideado.

72 APENDICE A. ANEXO

3. Objetos

Hay una serie de elementos con los que se pueden interactuar dependiendo del escenario seleccio-nado. En la siguiente imagen vienen representados todos los objetos, los cuales procederemos aexplicar a continuacion.

Figura A.1: Elementos

1. Caja: elemento no programable por parte del usuario. Es una caja que al tocar el suele vuelve aaparecer en el punto de inicio, de manera que provoca un flujo constante. La mision del usuario portanto sera establecer procesos mediante los cuales las cajas lleguen al final del escenario, pudiendohacer distintos procesos intermedios.

2. Sensor laser: elemento programable por parte del usuario. Es un elemento de entrada que detectael paso por el de una caja o cualquier otro tipo de objeto a implementar en versiones futuras. Sino detecta nada el elemento esta inactivo, mientras que, si detecta una caja, se activa.

3. Pared: elemento no programable por parte del usuario. Tiene una mera funcion decorativa.

4. Cinta transportadora: elemento programable por parte del usuario. Es un elemento de salida (unactuador) que permite el movimiento de las cajas. Si esta activa, se mueve, provocando movimientoen todo lo que este en contacto con ella.

5. Luz: elemento programable por parte del usuario. Es un elemento de salida (actuador) que luce(color verde) si esta activo, mientras que, si esta desactivado, no lo hace (representado por un colorrojo).

6. Suelo: elemento no programable por parte del usuario. Tiene una mera funcion decorativa.

A.1. MANUAL DE USUARIO 73

4. Menu principal

Cuando se ejecuta la aplicacion, lo primero que vera el usuario es la pantalla de carga del Manu,en la cual hay una serie de escenarios predisenados, ademas de controles basicos de ajuste de laventana.

Figura A.2: Menu principal

El recuadro 1 representa el boton del escenario 1. Si el usuario clica sobre el, el programa pasara almodo simular y cargara el primer escenario. De manera analoga, los botones escenario 2,3,4 tendranel mismo comportamiento, pero cargando el escenario por el cual han sido creados. Los recuadros2, 3 y 4 representan los controles basicos de cualquier aplicacion de minimizacion, maximizacion ycierre de la aplicacion.

74 APENDICE A. ANEXO

5. Modo simular

Una vez que se carga el escenario, se pasa al modo simular. En dicho modo se visualizaran los ele-mentos que componen el escenario, ası como los nombres que tienen asignadas las entradas/salidasdel programa, ademas de los botones de volver al menu, o ir a codigo.

Cabe destacar que tambien es posible llegar a esta pantalla una vez que en el modo programar sepulsa validar y el codigo introducido es correcto.

Figura A.3: Modo simular: elementos

El recuadro 1 es la ventana en la cual se representa el escenario a programar, y se visualizan loselementos en funcionamiento segun el codigo que se haya introducido.

Los recuadros 2 y 3 son los botones de cambiar al modo programar y al modo menu respectivamente.

El recuadro 4 representa la opcion cambiar nombres, para poder personalizar los nombres simbolicosasignados a las diferentes direcciones del programa.

El recuadro 5 representa un contador, mientras que el 6 es un temporizador.

Los recuadros 7 y 8 son las entradas y salidas del programa, con algunas libres para poder montarel codigo de la manera mas personalizada por cada usuario.

A continuacion, se pasara a explicar el desglose de las entradas, salidas, temporizadores y conta-dores.

A.1. MANUAL DE USUARIO 75

Figura A.4: Modo simular: E/S

Los recuadros 1, 2 y 3 representan lo que conforma una salida, no obstante, es analogo para lasentradas (E 124.X). El recuadro 1 es si esta activa o no la salida, lo cual tambien se podra visualizaren el escenario (con movimiento en caso de cintas o cambio de color en el caso de luces). El recuadro2 representa la direccion, mientras que el recuadro 3 es el nombre simbolico que tiene asignadadicha salida.

El recuadro 1 es la cuenta que lleva el temporizador, mientras que el 2 es el nombre del tempori-zador. En el contador serıa similar.

76 APENDICE A. ANEXO

Figura A.5: Modo simular: Temp y contadores

A.1. MANUAL DE USUARIO 77

6. Modo programar

La interfaz del modo programar es mucho mas sencilla, y tiene controles similares a los del modosimular, con la salvedad de los recuadros remarcados en la siguiente imagen.

Figura A.6: Modo programar

Los recuadros representan a los segmentos de codigo. El 1 es el nombre del segmento, el cual sepuede modificar. Los recuadros 2 y 3 son las opciones eliminar/anadir segmentos, mientras que el4 es la zona en la cual se debe introducir el codigo por parte del usuario.

78 APENDICE A. ANEXO

7. Direcciones de memoria contempladas en esta version

Para poder realizar el codigo que desee el usuario, posee a la disposicion de una serie de direccionesde memoria totalmente programables:

Salidas:

A 124.0 - A 124.7: Salidas que se pueden visualizar actualmente en el interfaz. A 125.0 - A 125.7:Salidas no contempladas en el interfaz actual, pero totalmente programables.

Entradas:

E 124.0 - E 124.7: Entradas que se pueden visualizar actualmente en el interfaz. E 125.0 - E 125.7:Entradas no contempladas en el interfaz actual, pero totalmente programables.

Marcas:

Las marcas (utilizadas normalmente como estados de trabajo) no estan disponibles visualmente enel interfaz actual, pero son completamente programables por parte del usuario.

M 1.0 - M 1.7 M 100.0 - M 100.7 M 101.0 - M 101.7

Temporizadores:

T1 : Temporizador programable y visible en el interfaz.

T2, T3, T4: Temporizadores programables, pero no visibles en el interfaz actual.

Contadores:

Z0 : Temporizador programable y visible en el interfaz.

Z1, Z2, Z3: Temporizadores programables, pero no visibles en el interfaz actual.

A.1. MANUAL DE USUARIO 79

8. Operadores recogidos en esta version

En este apartado se procederan a enumerar los operadores recogidos en esta version final del primerprototipo de la aplicacion:

U,UN,O,ON,X,XN,S,R,=,ZV,ZR,FR,L,SE,SI,SS,SA,SV,FP,FN,NOT,SET,CLR,SAVE,==I, ≺� I,�I,≺ I,�= I,≺= I,BE,BEA,BEB, SPB, SPBN,SPBB,SPBNB

En futuras versiones se podran seguir implementando nuevos operadores, ası como modificar algunode los existentes.

80 APENDICE A. ANEXO

A.2. CODIGO MAS IMPORTANTE 81

A.2. Codigo mas importante

A.2.1. Clase Parser

Esta clase representa una de las mas importantes del programa, ya que es la encargada de gestionarlos pasos para comprobar las instrucciones recogidas en la estructura STEP 7 creada en el programa.

Su funcion es simple, le llega una lınea de codigo, y debe interpretar si tanto el operador como ladireccion de memoria que incluye (si fuera necesario que tuviera ambas) son correctas o no.

Por ello se ha estructurado en funcion a una maquina de estados que contemple todos los posibles.

Parser.h

1 #pragma once

2 #include "Scan_Dir.h"

3 #include "Scan_Op.h"

4 #include "Block.h"

56 class Parser_Line{

7 public:

8 Parser_Line(void);

9 ~Parser_Line(void);

10 Scan_Op scanop;

11 Scan_Dir scandir;

12 void Check_Line (Instruction *, Block *);};

Parser.cpp

1 #include "StdAfx.h"

2 #include "Parser_Line.h"

34 Parser_Line :: Parser_Line(void){}

56 Parser_Line ::~ Parser_Line(void){}

78 void Parser_Line :: Check_Line (Instruction * ins , Block * b){

9 /* PARSER STATES:

10 0 -> INIT: waiting for a character != ’ ’

11 1 -> READING OP: if character == ’ ’ check OP (go to 2, 3,

7 OR 9), else still reading

12 2 -> LINE OK (NOT DIR NEEDED): if character != ’ ’ and !=

’\0’ error -> 7

13 3 -> WATING DIR: wait for a character != ’ ’ to start

reading the direction

14 4 -> DIR_TYPE: if character == ’ ’, reading name ->5 ,

else reading symname ->8

15 5 -> READING DIR_NAME: if character == ’ ’, check DIR (go

to 6 or 7), else still reading

16 6 -> LINE OK (OP + DIR): if character != ’ ’ and != ’\0’

error -> 7

17 7 -> ERROR: add all the chars to Direction

18 8 -> READING SYM_NAME: if character == ’ ’, check DIR (go

to 6 or 7), else still reading

19 9 -> LOAD INS: wating for a number

82 APENDICE A. ANEXO

20 10 -> READING LOAD: until character == ’ ’, check DIR

21 11 -> READING JUMP DIRECTION

22 12 -> WAITING FOR JUMP DIRECTION INIT (==’_’)

23 */

24 int i = 0;

25 int state = 0;

26 ins ->Ins_op.Type = 0;

27 ins ->Ins_ok = 0;

28 ins ->Ins_op.Op_name.Name = "";

29 ins ->Ins_dir.Dir_name.Name = "";

30 while (i < ins ->Text.size()) {

31 switch (state) {

32 case 0: if(ins ->Text[i]==’ ’){} else if(ins ->Text[i

]==’_’){ins ->Special_char=ins ->Special_char+ins

->Text[i];state = 11;}

33 else{ ins ->Ins_op.Op_name.Name =

ins ->Ins_op.Op_name.Name + ins ->

Text[i]; state = 1;} break;

34 case 1: if(ins ->Text[i]==’ ’){state = scanop.Check(

ins ,b); if (state == 7) ins ->Ins_dir.Dir_name.

Name = ins ->Ins_op.Op_name.Name + ins ->Text[i];}

35 else{ins ->Ins_op.Op_name.Name = ins

->Ins_op.Op_name.Name + ins ->

Text[i];} break;

36 case 2: if(ins ->Text[i]==’ ’){} else {state = 7;}

break; // EOL WITHOUT DIR

37 case 3: if(ins ->Text[i]==’ ’){} else{ ins ->Ins_dir.

Dir_name.Name = ins ->Ins_dir.Dir_name.Name + ins

->Text[i];state = 4;} break;

38 case 4: if(ins ->Text[i]==’ ’){ins ->Ins_dir.Dir_name

.Name = ins ->Ins_dir.Dir_name.Name + ins ->Text[i

]; state = 5;}

39 else{ ins ->Ins_dir.Dir_name.Name =

ins ->Ins_dir.Dir_name.Name + ins

->Text[i];state = 8;} break;

40 case 5: if(ins ->Text[i]==’ ’){state = scandir.Check

(ins ,b); if (state == 7) ins ->Ins_dir.Dir_name.

Name = ins ->Ins_dir.Dir_name.Name + ins ->Text[i

];}

41 else{ins ->Ins_dir.Dir_name.Name =

ins ->Ins_dir.Dir_name.Name + ins

->Text[i];} break;

42 case 6: if(ins ->Text[i]==’ ’){} else {state = 7;}

break; // EOL WITH DIR

43 case 7: ins ->Ins_dir.Dir_name.Name = ins ->Ins_dir.

Dir_name.Name + ins ->Text[i]; break; // ERROR

44 case 8: if(ins ->Text[i]==’ ’){state = scandir.Check

(ins ,b); if (state == 7) ins ->Ins_dir.Dir_name.

Name = ins ->Ins_dir.Dir_name.Name + ins ->Text[i

];}

45 else{ins ->Ins_dir.Dir_name.Name =

ins ->Ins_dir.Dir_name.Name + ins

->Text[i];} break;

46 case 9: if(ins ->Text[i]==’ ’){} else {ins ->Ins_dir.

Dir_name.Name = ins ->Ins_dir.Dir_name.Name + ins

->Text[i];state = 10;} break; // EOL WITHOUT DIR

A.2. CODIGO MAS IMPORTANTE 83

47 case 10: if(ins ->Text[i]==’ ’){state = scandir.

Check(ins ,b); if (state == 7) {ins ->Ins_dir.

Dir_name.Name = ins ->Ins_dir.Dir_name.Name + ins

->Text[i];}

48 }

49 else{ins ->Ins_dir.Dir_name.Name =

ins ->Ins_dir.Dir_name.Name + ins

->Text[i];} break;

50 case 11: ins ->Ins_dir.Dir_name.Name = ins ->Ins_dir.

Dir_name.Name + ins ->Text[i]; break;

51 case 12: if(ins ->Text[i]==’ ’){} else if(ins ->Text[

i]==’_’){ins ->Special_char=ins ->Special_char+ins

->Text[i];state = 11;}

52 default: break;}i++;}

53 if(state == 1){

54 state = scanop.Check(ins ,b);

55 if (state != 2){

56 (state == 7);} }

57 else if(( state == 3)||( state == 4)||( state == 5)||( state ==

8)||( state == 9)||( state == 10)){

58 state = scandir.Check(ins ,b); }

59 else{}

6061 if (( state == 7)||( state == 12)){ins ->Ins_ok = 2;}

62 else if (( state!= 7)&&( state !=12) &&( state !=0)){ins ->Ins_ok

= 1;}

63 else{ins ->Ins_ok = 0;}

64 }

A.2.2. Clase Logic

La clase Logic representa la librerıa de funciones de STEP 7 recogidas en la aplicacion. Por tantoes de vital importancia, ya que si se quiere anadir o modificar alguna funcion, habra que trabajarcon esta clase.

Por tanto, se ha trabajado en crear una clase bastante homogenea en cuanto a las funciones,respetando una estructura basica que se puede observar a la hora de desarrollar cualquiera de lasfunciones recogidas.

Logic.h

1 #pragma once

2 #include "Block.h"

34 class Logic{

5 public:

6 Logic(void);

7 ~Logic(void);

8 void U_func(list <Direction >:: iterator ,Block*);

9 void UN_func(list <Direction >:: iterator ,Block*);

10 void O_func(list <Direction >:: iterator ,Block*);

11 void ON_func(list <Direction >:: iterator ,Block*);

12 void EQ_func(list <Direction >:: iterator ,Block*);

13 void S_func(list <Direction >:: iterator ,Block*);

84 APENDICE A. ANEXO

14 void R_func(list <Direction >:: iterator ,Block*);

15 void ZR_func(list <Direction >:: iterator ,Block*);

16 void ZV_func(list <Direction >:: iterator ,Block*);

17 void L_func(Instruction ,Block*);

18 void FR_func(list <Direction >:: iterator ,Block*);

19 void SE_func(list <Direction >:: iterator ,Block*);

20 void SI_func(list <Direction >:: iterator ,Block*);

21 void SS_func(list <Direction >:: iterator ,Block*);

22 void SA_func(list <Direction >:: iterator ,Block*);

23 void SV_func(list <Direction >:: iterator ,Block*);

24 void FP_func(list <Direction >:: iterator ,Block*);

25 void FN_func(list <Direction >:: iterator ,Block*);

26 void NOT_func(Block*);

27 void SET_func(Block*);

28 void CLR_func(Block*);

29 void SAVE_func(Block*);

30 void ISEQ_func(Block*);

31 void ISDIF_func(Block*);

32 void ISHI_func(Block*);

33 void ISLO_func(Block*);

34 void ISEQHI_func(Block*);

35 void ISEQLO_func(Block*);

36 void SPB_func(Instruction ,Block*);

37 void SPBN_func(Instruction ,Block*);

38 void SPBB_func(Instruction ,Block*);

39 void SPBNB_func(Instruction ,Block*);

40 void BE_func(Block*);

41 void BEA_func(Block*);

42 void BEB_func(Block*);

43 void Check_func(Instruction ,Block*);};

Logic.cpp

1 #include "StdAfx.h"

2 #include "Logic.h"

345 Logic ::Logic(void){}

67 Logic ::~ Logic(void){}

89 void Logic:: U_func(list <Direction >:: iterator dir , Block * b){

10 if (b->ER == true){

11 b->RLO = dir ->Active;

12 b->ER = false;}

13 else{

14 b->RLO = ((dir ->Active)&&(b->RLO));}}

1516 void Logic:: UN_func(list <Direction >:: iterator dir , Block * b){

17 if (b->ER == true){

18 b->RLO = !dir ->Active;

19 b->ER = false;}

20 else{

21 b->RLO = !((dir ->Active)&&(b->RLO));}}

2223 void Logic:: O_func(list <Direction >:: iterator dir , Block * b){

A.2. CODIGO MAS IMPORTANTE 85

24 if (b->ER == true){

25 b->RLO = dir ->Active;

26 b->ER = false;}

27 else{

28 b->RLO = ((dir ->Active)||(b->RLO));}}

2930 void Logic:: ON_func(list <Direction >:: iterator dir , Block * b){

31 if (b->ER == true){

32 b->RLO = !dir ->Active;

33 b->ER = false;}

34 else{

35 b->RLO = !((dir ->Active)||(b->RLO));}}

3637 void Logic:: EQ_func(list <Direction >:: iterator dir , Block * b){

38 if(b->RLO == true){

39 dir ->Active = true;}

40 else{

41 dir ->Active = false;}

42 b->ER = true;}

4344 void Logic:: S_func(list <Direction >:: iterator dir , Block * b){

45 if(dir ->Type != 3){

46 if(b->RLO == true){

47 dir ->Active = true;}

48 else{

49 dir ->Active = dir ->Active ;}}

50 else{

51 if(b->RLO == true){

52 dir ->Value = b->ACU1;

53 dir ->Active = true;

54 if (dir ->Value == 0){

55 dir ->Active = false ;}}}

56 b->ER = true;}

5758 void Logic:: R_func(list <Direction >:: iterator dir , Block * b){

59 if(dir ->Type != 3){

60 if(b->RLO == true){

61 dir ->Active = false;}

62 else{

63 dir ->Active = dir ->Active ;}}

64 else{

65 if(b->RLO == true){

66 dir ->Value = 0;

67 dir ->Active = false ;}}

68 b->ER = true;}

6970 void Logic:: ZR_func(list <Direction >:: iterator dir , Block * b){

71 if(b->RLO == true){

72 if (dir ->Enabled == true){

73 dir ->Value --;

74 dir ->Enabled = false;

75 if(dir ->Value == 0){

76 dir ->Active = false;}

77 else if(dir ->Value == -1){

78 dir ->Value ++;}

79 else{

86 APENDICE A. ANEXO

80 dir ->Active = true ;}}}

81 else{}

82 b->ER = true;}

8384 void Logic:: ZV_func(list <Direction >:: iterator dir , Block * b){

85 if(b->RLO == true){

86 if (dir ->Enabled == true){

87 dir ->Value ++;

88 dir ->Enabled = false;

89 if(dir ->Value == 0){dir ->Active =

false;}

90 else{dir ->Active = true ;}}}

91 else{}

92 b->ER = true;}

9394 void Logic:: L_func(Instruction ins , Block * b){

95 b->ACU2 = b->ACU1;

96 b->ACU1 = ins.Ins_dir.Value;

97 b->ER = false ;}

9899 void Logic:: FR_func(list <Direction >:: iterator dir , Block * b){

100 if(b->RLO == true){

101 dir ->Enabled = true;}

102 else{}

103 b->ER = true;}

104105 void Logic:: SE_func(list <Direction >:: iterator dir , Block * b){

106 if(b->RLO == true){

107 if (dir ->Launched == false){

108 dir ->Value = b->ACU1;

109 dir ->Launched = true;}

110 else{

111 if (dir ->Value != 0){

112 dir ->Value --;}

113 else{

114 dir ->Active = true ;}}}

115 else{

116 dir ->Value = 0;

117 dir ->Active = false;

118 dir ->Launched = false;}

119 b->ER = true;}

120121 void Logic:: SI_func(list <Direction >:: iterator dir , Block * b){

122 if(b->RLO == true){

123 if (dir ->Launched == false){

124 dir ->Value = b->ACU1;

125 dir ->Active = true;

126 dir ->Launched = true;}

127 else{

128 if (dir ->Value != 0){

129 dir ->Value --;}

130 else{

131 dir ->Active = false ;}}}

132 else{

133 dir ->Value = 0;

134 dir ->Active = false;

A.2. CODIGO MAS IMPORTANTE 87

135 dir ->Launched = false;}

136 b->ER = true;}

137138 void Logic:: SS_func(list <Direction >:: iterator dir , Block * b){

139 if(b->RLO == true){

140 if (dir ->Launched == false){

141 dir ->Value = b->ACU1;

142 dir ->Active = false;

143 dir ->Launched = true;}

144 else{

145 if (dir ->Value != 0){

146 dir ->Value --;}

147 else{

148 dir ->Active = true ;}}}

149 else if (dir ->Value != 0){

150 dir ->Launched = false;

151 dir ->Value --;

152 if (dir ->Value == 0){

153 dir ->Active = true ;}}

154 else{

155 dir ->Launched = false;}

156 b->ER = true;}

157158 void Logic:: SA_func(list <Direction >:: iterator dir , Block * b){

159 if(b->RLO == true){

160 if (dir ->Launched == false){

161 dir ->Value = b->ACU1;

162 dir ->Active = true;

163 dir ->Launched = true;}

164 else{

165 if (dir ->Value != 0){

166 dir ->Value --;}

167 else{

168 dir ->Active = false ;}}}

169 else if (dir ->Value != 0){

170 dir ->Launched = false;

171 dir ->Value --;

172 if (dir ->Value == 0){

173 dir ->Active = false ;}}

174 else{

175 dir ->Launched = false;}

176 b->ER = true;}

177178 void Logic:: SV_func(list <Direction >:: iterator dir , Block * b){

179 if(b->RLO == true){

180 if (dir ->Launched == false){

181 dir ->Value = b->ACU1;

182 dir ->Active = true;

183 dir ->Launched = true;}

184 else{

185 if (dir ->Value != 0){

186 dir ->Value --;}

187 else{

188 dir ->Active = false ;}}}

189 else if (dir ->Value != 0){

190 dir ->Launched = false;

88 APENDICE A. ANEXO

191 dir ->Value --;

192 if (dir ->Value == 0){

193 dir ->Active = false ;}}

194 else{

195 dir ->Launched = false;}

196 b->ER = true;}

197198 void Logic:: FP_func(list <Direction >:: iterator dir , Block * b){

199 if (b->ER == true){

200 if (dir ->Active == false){

201 dir ->Active = true;

202 b->RLO = true;

203 b->ER = false;}

204 else{

205 b->RLO = false ;}}

206 else{

207 if (dir ->Active == false){

208 dir ->Active = true;

209 b->RLO = ((dir ->Active)&&(b->RLO));}

210 else{

211 b->RLO = false ;}}}

212213 void Logic:: FN_func(list <Direction >:: iterator dir , Block * b){

214 if (b->ER == true){

215 if (dir ->Active == true){

216 dir ->Active = false;

217 b->RLO = true;

218 b->ER = false;}

219 else{

220 b->RLO = false ;}}

221 else{

222 if (dir ->Active == true){

223 dir ->Active = false;

224 b->RLO = ((dir ->Active)&&(b->RLO));}

225 else{

226 b->RLO = false ;}}}

227228 void Logic:: NOT_func(Block * b){

229 b->RLO = !b->RLO;}

230231 void Logic:: SET_func(Block * b){

232 b->RLO = true;}

233234 void Logic:: CLR_func(Block * b){

235 b->RLO = false ;}

236237 void Logic:: SAVE_func(Block * b){

238 b->RB = b->RLO;}

239240 void Logic:: ISEQ_func(Block * b){

241 if (b->ACU2 == b->ACU1){

242 b->RLO = true;}

243 else{

244 b->RLO = false;}

245 b->ER = true;}

246

A.2. CODIGO MAS IMPORTANTE 89

247 void Logic:: ISDIF_func(Block * b){

248 if (b->ACU2 == b->ACU1){

249 b->RLO = false;}

250 else{

251 b->RLO = true;}

252 b->ER = true;}

253254 void Logic:: ISHI_func(Block * b){

255 if (b->ACU2 > b->ACU1){

256 b->RLO = true;}

257 else{

258 b->RLO = false;}

259 b->ER = true;}

260261 void Logic:: ISLO_func(Block * b){

262 if (b->ACU2 < b->ACU1){

263 b->RLO = true;}

264 else{

265 b->RLO = false;}

266 b->ER = true;}

267268 void Logic:: ISEQHI_func(Block * b){

269 if (b->ACU2 >= b->ACU1){

270 b->RLO = true;}

271 else{

272 b->RLO = false;}

273 b->ER = true;}

274275 void Logic:: ISEQLO_func(Block * b){

276 if (b->ACU2 <= b->ACU1){

277 b->RLO = true;}

278 else{

279 b->RLO = false;}

280 b->ER = true;}

281282 void Logic:: SPB_func(Instruction ins , Block * b){

283 if (b->RLO == true){

284 b->GoToPos.Active = true;

285 b->GoToPos.Name = ins.Ins_dir.Dir_name.Name;}

286 b->ER = true;}

287288 void Logic:: SPBN_func(Instruction ins , Block * b){

289 if (b->RLO == false){

290 b->GoToPos.Active = true;

291 b->GoToPos.Name = ins.Ins_dir.Dir_name.Name;}

292 b->ER = true;}

293294 void Logic:: SPBB_func(Instruction ins , Block * b){

295 if (b->RLO == true){

296 b->GoToPos.Active = true;

297 b->GoToPos.Name = ins.Ins_dir.Dir_name.Name;}

298 b->RB = b->RLO;

299 b->ER = true;}

300301 void Logic:: SPBNB_func(Instruction ins , Block * b){

302 if (b->RLO == false){

90 APENDICE A. ANEXO

303 b->GoToPos.Active = true;

304 b->GoToPos.Name = ins.Ins_dir.Dir_name.Name;}

305 b->RB = b->RLO;

306 b->ER = true;}

307308 void Logic:: BE_func(Block * b){

309 b->GoToEnd = true;

310 b->ER = true;}

311312 void Logic:: BEA_func(Block * b){

313 b->GoToEnd = true;

314 b->ER = true;}

315316 void Logic:: BEB_func(Block * b){

317 if (b->RLO == true){

318 b->GoToEnd = true;}

319 b->ER = true;}

320321 void Logic:: Check_func(Instruction ins , Block * b){

322 list <Direction >:: iterator it = b->Direction_list.begin();

323 while (it != b->Direction_list.end() ) {

324 if ((it ->Dir_name.Name == ins.Ins_dir.Dir_name.Name

)||(it->Dir_name.SymName == ins.Ins_dir.Dir_name

.Name)){

325 if (ins.Ins_op.Op_name.Name == "U"){

326 U_func(it ,b);}

327 else if (ins.Ins_op.Op_name.Name == "UN"){

328 UN_func(it ,b);}

329 else if (ins.Ins_op.Op_name.Name == "O"){

330 O_func(it ,b);}

331 else if (ins.Ins_op.Op_name.Name == "ON"){

332 ON_func(it ,b);}

333 else if (ins.Ins_op.Op_name.Name == "="){

334 EQ_func(it ,b);}

335 else if (ins.Ins_op.Op_name.Name == "S"){

336 S_func(it ,b);}

337 else if (ins.Ins_op.Op_name.Name == "R"){

338 R_func(it ,b);}

339 else if (ins.Ins_op.Op_name.Name == "ZV"){

340 ZV_func(it ,b);}

341 else if (ins.Ins_op.Op_name.Name == "ZR"){

342 ZR_func(it ,b);}

343 else if (ins.Ins_op.Op_name.Name == "FR"){

344 FR_func(it ,b);}

345 else if (ins.Ins_op.Op_name.Name == "SE"){

346 SE_func(it ,b);}

347 else if (ins.Ins_op.Op_name.Name == "SI"){

348 SI_func(it ,b);}

349 else if (ins.Ins_op.Op_name.Name == "SS"){

350 SS_func(it ,b);}

351 else if (ins.Ins_op.Op_name.Name == "SA"){

352 SA_func(it ,b);}

353 else if (ins.Ins_op.Op_name.Name == "SV"){

354 SV_func(it ,b);}

355 else if (ins.Ins_op.Op_name.Name == "FP"){

356 FP_func(it ,b);}

A.2. CODIGO MAS IMPORTANTE 91

357 else if (ins.Ins_op.Op_name.Name == "FN"){

358 FN_func(it ,b);}}

359 it++;}

360 if (ins.Ins_op.Op_name.Name == "L"){

361 L_func(ins ,b);}

362 else if (ins.Ins_op.Op_name.Name == "NOT"){

363 NOT_func(b);}

364 else if (ins.Ins_op.Op_name.Name == "SET"){

365 SET_func(b);}

366 else if (ins.Ins_op.Op_name.Name == "CLR"){

367 CLR_func(b);}

368 else if (ins.Ins_op.Op_name.Name == "SAVE"){

369 SAVE_func(b);}

370 else if (ins.Ins_op.Op_name.Name == "==I"){

371 ISEQ_func(b);}

372 else if (ins.Ins_op.Op_name.Name == "<>I"){

373 ISDIF_func(b);}

374 else if (ins.Ins_op.Op_name.Name == ">I"){

375 ISHI_func(b);}

376 else if (ins.Ins_op.Op_name.Name == "<I"){

377 ISLO_func(b);}

378 else if (ins.Ins_op.Op_name.Name == ">=I"){

379 ISEQHI_func(b);}

380 else if (ins.Ins_op.Op_name.Name == "<=I"){

381 ISEQLO_func(b);}

382 else if (ins.Ins_op.Op_name.Name == "SPB"){

383 SPB_func(ins ,b);}

384 else if (ins.Ins_op.Op_name.Name == "SPBN"){

385 SPBN_func(ins ,b);}

386 else if (ins.Ins_op.Op_name.Name == "SPBB"){

387 SPBB_func(ins ,b);}

388 else if (ins.Ins_op.Op_name.Name == "SPBNB"){

389 SPBNB_func(ins ,b);}

390 else if (ins.Ins_op.Op_name.Name == "BE"){

391 BE_func(b);}

392 else if (ins.Ins_op.Op_name.Name == "BEA"){

393 BEA_func(b);}

394 else if (ins.Ins_op.Op_name.Name == "BEB"){

395 BEB_func(b);}}

92 APENDICE A. ANEXO

A.3. Direcciones contempladas y funciones incluidas

Con el ciclo 5 de desarrollo se llego al denominado fin del prototipo de esta version. Por tanto,es interesante comprobar tanto las direcciones de memoria programables por el usuario, como lasfunciones que puede utilizar en esta version del programa:

Direcciones de memoria contempladas en esta version

Todas las salidas, entradas, marcas, temporizadores y contadores que puede emplear el usuario vie-nen reflejadas en este apartado. Dispone de 14 salidas, 14 entradas, 4 contadores y 4 temporizados,con lo que para realizar pruebas en la iniciacion de S7 podrıan ser suficientes.

No obstante, hay mecanismos para anadir nuevos elementos (bastarıa con ampliar en la claseBlock.cpp las direcciones introducidas, no entranando gran dificultad).

Salidas:

A 124.0 - A 124.7: Salidas que se pueden visualizar actualmente en el interfaz. A 125.0 - A 125.7:Salidas no contempladas en el interfaz actual, pero totalmente programables.

Entradas:

E 124.0 - E 124.7: Entradas que se pueden visualizar actualmente en el interfaz. E 125.0 - E 125.7:Entradas no contempladas en el interfaz actual, pero totalmente programables.

Marcas:

Las marcas (utilizadas normalmente como estados de trabajo) no estan disponibles visualmente enel interfaz actual, pero son completamente programables por parte del usuario.

M 1.0 - M 1.7 M 100.0 - M 100.7 M 101.0 - M 101.7

Temporizadores:

T1 : Temporizador programable y visible en el interfaz.

T2, T3, T4: Temporizadores programables, pero no visibles en el interfaz actual.

Contadores:

Z0 : Temporizador programable y visible en el interfaz.

Z1, Z2, Z3: Temporizadores programables, pero no visibles en el interfaz actual.

Operadores recogidos en esta version

Los operadores que se han contemplado para esta version vienen reflejadas a continuacion. Se haoptado por anadir los mas sencillos, que componen la base de cualquier programa, para que elusuario pueda utilizarlos e irse familiarizando con el lenguaje.

A.3. DIRECCIONES CONTEMPLADAS Y FUNCIONES INCLUIDAS 93

Recoge desde operadores basicos, hasta operadores de salto, carga, conteo...

U,UN,O,ON,X,XN,S,R,=,ZV,ZR,FR,L,SE,SI,SS,SA,SV,FP,FN,NOT,SET,CLR,SAVE,==I, ≺� I,�I,≺ I,�= I,≺= I,BE,BEA,BEB, SPB, SPBN,SPBB,SPBNB

En futuras versiones se podran seguir implementando nuevos operadores, ası como modificar algunode los existentes. Para ello habrıa que anadir nuevas funciones a la clase Logic, anadiendo la funcioncontemplada con su sintaxis correcta y una vez funcione debidamente agregarla a las instruccionesque reconoce el Block.cpp.

94 APENDICE A. ANEXO

Bibliografıa

[1] Lista de instrucciones (awl) para s7-300 y s7-400. url:https://cache.industry.siemens.com/dl/files/446/45523446/att79276/v1/s7awl

d.pdf , 2010.

[2] Microsoft visual studio. url: https://es.wikipedia.org/wiki/MicrosoftV isualStudio, 2018.

[3] Beril Becker. Historia de la automatizacion industrial. url:https://historiaybiografias.com/historiaautomatizacion/, 2016.

[4] Codeproject. url: https://www.codeproject.com/.

[5] cplusplus. url: http://www.cplusplus.com/.

[6] elai.upm. url: http://www.elai.upm.es/moodle/course/view.php?id=59.

[7] Inigo Gutiez. Introduccion a la programacion en step 7. url:https://programacionsiemens.com/1-introduccion-la-programacion-en-step-7/.

[8] Jean. What is cli/c++ exactly? how does it differ from ’normal’ c++? url:https://stackoverflow.com/questions/6399493/what-is-cli-c-exactly-how-does-it-differ-from-normal-c, 2011.

[9] LANDER. El simulador como herramienta complementaria. url:http://www.landersimulation.com/es/trabajo/formacion-integral.

[10] msdn. url: https://msdn.microsoft.com/en-us/.

[11] OpenGL. url: https://www.opengl.org/resources/libraries/glut/.

[12] Nicolas Rivera. Del lapiz al stylus: como la tecnologıa esta transformando la educacion. url:https://hipertextual.com/especiales/tecnologia-en-educacion, 2015.

[13] Klaus Ullrich. Siemens: 200 anos de historia. url: http://www.dw.com/es/siemens-200-a %C3 %B1os-de-historia/a-36754698, 2016.

[14] Wikipedia. Opengl. url: https://es.wikipedia.org/wiki/OpenGL, 2018.

[15] Benjamin Wootton. Creating an opengl view on a windows form. url:https://www.codeproject.com/Articles/16051/Creating-an-OpenGL-view-on-a-Windows-Form, 2006.

95