Diseño de un Sistema de Control para Ascensores con Análisis de sus Variables Energéticas en la Nube Utilizando Machine Learning
71
0
0
Texto completo
(2) 1. Contenido. HOJA DE ACEPTACIÓN .................................................................................................................. 2 AGRADECIMIENTOS ...................................................................................................................... 3 RESUMEN ...................................................................................................................................... 4 OBJETIVOS..................................................................................................................................... 5 Generales .................................................................................................................................. 5 Específicos ................................................................................................................................. 5 MARCO TEÓRICO .......................................................................................................................... 6 Variador de frecuencia .............................................................................................................. 6 Sistema de ascensores .............................................................................................................. 9 Codesys.................................................................................................................................... 11 Lenguajes de programación .................................................................................................... 12 Protocolo de comunicación Modbus ...................................................................................... 15 Protocolo i2c ........................................................................................................................... 16 Protocolo MQTT ...................................................................................................................... 17 Raspberry Pi............................................................................................................................. 19 PSoC (Programmable System on Chip).................................................................................... 21 Machine Learning (Aprendizaje de máquina) ......................................................................... 21 DESARROLLO ............................................................................................................................... 23 Comunicación Control - Variador ............................................................................................ 23 Lógica de Control ..................................................................................................................... 28 Llamadas de Carro ............................................................................................................... 29 Llamadas de Piso ................................................................................................................. 34 Sistema de sensores para pisos .......................................................................................... 38 Lógica del ascensor ............................................................................................................. 39 Toma de datos ......................................................................................................................... 46 Comunicación MQTT ........................................................................................................... 48 Node-red y base de datos Cloudant de IBM ....................................................................... 50 Azure y Machine Learning ................................................................................................... 54 CONCLUSIONES ........................................................................................................................... 58 REFERENCIAS .............................................................................................................................. 60 Anexos……………………………………………………………………………………………………………………………….62. 1.
(3) Hoja De Aceptación. Observaciones. _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________ _______________________________________________________________________. ____________________________ Ing. Eduardo Alberto Delgadillo. ____________________________ Firma Jurado 1. ____________________________ Firma Jurado 2. Bogota D.C. 2.
(4) Agradecimientos. Los autores expresan sus agradecimientos a todos nuestros familiares y amigos que sirvieron como apoyo durante nuestro desarrollo profesional hasta este punto. Al profesor Eduardo Alberto Delgadillo por sus conocimientos durante el desarrollo de la carrera y del proyecto en cuestión. A Variadores S.A. por permitirnos usar los recursos con los que se realizaron pruebas de laboratorio. A todos los docentes que a lo largo de la carrera brindaron su conocimiento y apoyo con los que se logró dar desarrollo a este proyecto, y con los que se creció cada día de manera profesional y personal. A los compañeros y amigos que estuvieron durante estos años brindando su compañía y su apoyo en cada una de las etapas que se llevaron a cabo en la Universidad.. 3.
(5) 2. Resumen. El presente documento pretende explicar el procedimiento realizado para llevar al cabo el proyecto denominado “Diseño de un sistema de control para ascensores con análisis de sus variables energéticas en la nube utilizando Machine Learning”, para esto se cuenta con un marco teórico que pretende explicar brevemente el funcionamiento de los elementos utilizados y una etapa de desarrollo en donde se explica cuál fue el procedimiento realizado y como se construyó cada una de las etapas. El prototipo resultante del proyecto permite llevar a cabo un control en un ascensor haciendo uso de una Raspberry como plataforma para alojar la lógica y un variador marca Yaskawa para manejar el motor que genera el movimiento en el sistema, para la comunicación entre estos dos se usó el protocolo de comunicación Modbus RTU. Se diseñó una pantalla que permite simular los llamados y salidas correspondientes a cada etapa, los llamados reales se realizan con un microcontrolador PSoc el cual recibe las señales como entradas digitales y las comunica a la Raspberry por medio del protocolo I2C. También se lleva registro en una base de datos en la nube la cual almacena los valores de funcionamiento del variador para posteriormente poder realizar un análisis con esos datos y determinar si se presenta algún problema de funcionamiento o en la Red en la que se encuentra el equipo.. 4.
(6) 3. Objetivos. 3.1 Generales. Desarrollar un sistema lógico de control para ascensores, el cual almacene y permita un monitoreo de variables del consumo energético principalmente voltaje y corriente en la nube y haciendo uso de Machine Learning analizar el comportamiento de las mismas.. 3.2 Específicos.. . . . . Elaborar la lógica en un sistema de control para ascensores donde se cuente con los parámetros básicos de control de movimiento, una puerta, iluminación, además de las alarmas y seguridades necesarias para su correcto funcionamiento para un ascensor de 5 pisos. Construir las tarjetas de control para los pisos y la cabina, las cuales se comunicarán con la tarjeta principal por medio de algún protocolo de comunicación. Generar una adquisición de datos entre el control y un variador para poder manipular y monitorear el sistema del ascensor. Establecer una comunicación con el control a una nube de código abierto y de allí mismo se pueda observar el comportamiento del sistema obteniendo datos de consumo, alarmas y tiempos de trabajo. Utilizar algún método Machine Learning para el análisis de los datos obtenidos en el cual se observe el comportamiento energético del sistema.. 5.
(7) 4. Marcó Teórico 4.1.. Variador de frecuencia. El variador de velocidad es un dispositivo de conversión de energía eléctrica a mecánica el cual envía una señal en frecuencia al motor la cual varía dependiendo de las necesidades de la aplicación. En la industria la instalación de este tipo de equipos permite tener un mayor control sobre el trabajo del motor y así mismo una mayor seguridad en su funcionamiento. Para este caso específico se trabaja con un variador de frecuencia, el cual está compuesto por 3 etapas principales las cuales se describen a continuación: -. Rectificación: La primera etapa con la que cuenta el variador es la rectificación de la señal AC de alimentación, esta consta de un puente rectificador trifásico de onda completa el cual transforma la energía alterna en directa para las siguientes etapas. Como se puede observar en la imagen la señal obtenida no se ha suavizado, lo que ocurre en la siguiente etapa.. Fig. 1 Etapa de rectificación del variador [1]. -. Bus DC: Consta de un conjunto de condensadores los cuales cumplen con dos funciones dentro del variador, por un lado, suaviza el voltaje resultante de la etapa de rectificación eliminando el rizado restante y por otro se encarga de dar la energía necesaria para la salida del equipo. Con la implementación de esta etapa se obtiene una señal DC más limpia que mejora el trabajo del variador en sí.. 6.
(8) Fig. 2 Etapa de bus DC en el variador de frecuencia [1]. -. Etapa Inversora: Esta etapa está compuesta por una serie de módulos IGBT los cuales toman el voltaje DC almacenado en los condensadores y aplicando una modulación PWM construyen una señal que se asemeja a una AC en sus valores de voltaje en el tiempo. La principal ventaja de manejar el voltaje en el motor por este medio es la posibilidad de tener un mejor control sobre el torque y el comportamiento del voltaje en los diferentes valores de frecuencia.. En la imagen siguiente se puede observar como es la salida real del variador teniendo en cuenta que es una serie de pulsos de voltajes DC que en promedio forman una señal con similitud a una AC.. Fig. 3 Ejemplo de señal de salida en variador de frecuencia. [2]. Los variadores con el tiempo han ganado confiabilidad gracias a los beneficios que tienen frente a otros tipos de arranque como el directo, o los arrancadores suaves. Principalmente al momento de romper inercia en donde las corrientes pueden elevarse a valores mucho más altos de los nominales de trabajo, es donde se ven los beneficios de sistemas de arranques con variador ya que permiten tener un control sobre el funcionamiento que suaviza el trabajo. Las protecciones con las que cuenta cada equipo. 7.
(9) permiten que la vida útil tanto del mismo como del motor sean mayores en comparación con un funcionamiento no controlado. Para este proyecto en específico se implementó un Variador marca Yaskawa, esta es una compañía que se ha enfocado en la comercialización de equipos para el control de movimiento desde el año 1915, tiene presencia alrededor de todo el mundo. En el rango de productos con los que cuenta la empresa se encuentran variadores especializados en ciertas aplicaciones comunes como lo son el modelo A1000 para uso general, IQPump 1000 para sistemas de bombeo, Z1000 para sistemas de aire y el usado en este proyecto L1000E para el control de máquinas en ascensores. También existe el modelo L1000A el cual tiene varias similitudes con el mencionado anteriormente, pero este se usa en la región de Norte América.. Fig. 4 Variador Yaskawa Modelo L1000E. [3]. El modelo L1000E presenta ciertas configuraciones que para el caso específico de los ascensores se hacen necesarias y facilitan su implementación, como lo son el manejo del freno, parámetros de nivelación y confort que permiten configurar el sistema para que trabaje dentro de los mejores estándares. El variador L1000E cuenta con las siguientes características que permiten un control y monitoreo sobre el mismo implementando varios protocolos de comunicación, o contactos secos de marcha y parada: -. 8 entradas digitales multi-función 2 entradas análogas multi-función 3 salidas digitales relevadas multi función 2 salidas digitales optoacopladas multi función 8.
(10) -. 1 rele de fallas 2 entradas de seguridad Comunicación integrada Modbus RTU RS-422, RS-485. En el caso específico de este proyecto la principal característica usada es la comunicación Modbus RTU ya que con esta se monitorea y controla el variador de acuerdo a las órdenes que el control le envía, el cual en este caso es la Raspberry Pi usada como PLC. [3] 4.2.. Sistema de ascensores. Un sistema de ascensor está compuesto por una serie de componentes tanto mecánicos como eléctricos, la parte mecánica la cual consta principalmente de una polea acoplada al eje del motor, la cabina y el contrapeso como se observa en la siguiente imagen.. Fig. 5 Esquema básico de un ascensor. [4]. La cabina es en la cual se transporta la carga a manejar usualmente siendo personas, dentro de la cabina se encuentra la botonera que permite realizar los llamados a piso que se necesiten, tienen un sistema de iluminación y sensores de seguridad que serán tratados más adelante. El contrapeso es una parte importante del sistema ya que este 9.
(11) es el que facilita el trabajo del motor cuando debe levantar la carga del ascensor, este debe ser calculado de acuerdo a la carga máxima que soporta el sistema para que el motor trabaje con los mismos valores tanto en subida como en bajada. Otro componente importante que cuenta tanto en la parte mecánica como eléctrica es el motor, este es el que específicamente se encarga de convertir la energía eléctrica en mecánica para generar el movimiento del ascensor. Para el manejo de ascensores actualmente se suelen utilizar dos tipos de motores los cuales serán explicados brevemente: -. Motor De Inducción. EL motor de inducción es uno de los más usados actualmente en diferentes aplicaciones, este se encuentra compuesto por 3 partes principales que son el rotor, el estator y la carcasa. Tanto el rotor como el estator están conectados a unos bobinados que son los encargados de transformar la energía eléctrica en mecánica. Cuando se aplica una corriente sobre el bobinado del estator se genera un campo electromagnético que induce una corriente sobre el bobinado del rotor, de esta manera es que estos campos son los que llevan al motor a que tenga un movimiento.. Fig. 6 Componentes Básicos de un Motor De Inducción. [5]. -. Maquina Gearless. Estas máquinas son motores que cuentan con unos imanes coloques en posiciones predefinidas para su funcionamiento, las ventajas que presenta principalmente son que la relación entre el consumo de corriente y la potencia generada es mejor que en un motor de inducción por lo que el tamaño de los mismos también se ve disminuido al hablar de potencias de valores similares.. 10.
(12) Fig. 7 Maquina Gearless. [6]. El principal componente electrónico con el que cuenta el sistema es el sistema de control el cual se encarga de manejar la lógica para el movimiento del ascensor, el variador que controla el motor de acuerdo a las ordenes enviadas por parte del control principal, los sensores de piso que usualmente son imanes que envían las señales al control para que este sepa en qué posición se encuentra, actuadores para iluminación, puertas, y otros sensores que permiten tener cierto control sobre seguridades. Debido a que la carga que mueve un sistema de ascensores es tan crítica como lo es la vida de las personas, es necesario contar con una serie de seguridades que eviten se llegue a presentar algún accidente. Por ejemplo, casos de incendio, terremoto, excesos de velocidad y otros que llevan al ascensor a presentar algún inconveniente en su funcionamiento. También se suele hacer uso de algún equipo de frenado junto con el variador, esto debido a que se presenta el fenómeno de regeneración constantemente en los sistemas. La regeneración consiste en el momento en que el motor debe cambiar de estado en tiempos muy cortos por lo que su construcción lo lleva a trabajar como un generador y entregar energía al variador, usualmente se instala una resistencia de frenado la cual se encarga de disipar esta energía sobrante en forma de calor. 4.3.. Codesys. El término Codesys es un acrónimo que tiene como significado “Sistema de desarrollo de controladores”. [10] Este software es un programa que permite crear programas de control de las estaciones didácticas de la plataforma, además de comunicarse con el autómata, vía ethernet, y transferirle la información. [11] Codesys es uno de los sistemas de programación del estándar IEC 61131-3 más comunes para PLCs y reguladores industriales. Permite programar autómatas de diferentes fabricantes, así como generar código para algunos microprocesadores y DSPs. [11] 11.
(13) Soporta los cinco lenguajes de programación del estándar los cuales son; lenguaje en escalera (Ladder Diagram LD), Diagrama de bloques funcionales (Function Block Diagram FBD), Texto estructurado (Structured Text ST), Bloque de función secuenciales (Sequential Function Chart SFC) y Bloque de funciones continuas (Continuous function Chart CFC), además dispone de visualización integrada, como también de un simulador online. [11] 4.3.1. Lenguajes de programación. A continuación, explicaremos con brevedad la definición y/o el uso de cada lenguaje de programación que puede usar el software Codesys: Ladder Diagram: diagrama de contactos, diagrama en escalera, o lógica de contactos, es un lenguaje gráfico que tiene muchas similitudes al principio utilizado por los técnicos en la elaboración de cuadros eléctricos y de automatismo. [12] Un programa escrito en Ladder está compuesto de una serie de circuitos que son ejecutados secuencialmente por un autómata. La representación gráfica se asemeja a la de un esquema eléctrico de control clásico, ya que se emplean símbolos similares a los utilizados en estos esquemas, siendo mucho más intuitivos para los profesionales familiarizados con este tipo de instalaciones que el uso de lenguajes de formato texto. [12] Dada su sencillez, es el lenguaje más utilizado en los relés programables y autómatas. Entre los símbolos básicos podemos hacer mención de los mostrados en la siguiente tabla 1.. Tabla 1. Algunos símbolos básicos del lenguaje Ladder. [12]. Function Block Diagram: en el lenguaje FBD se programa la aplicación gráficamente conectando en cascada bloques lógicos; del mismo modo que se hace en los esquemas de electrónica digital. En relación con las entradas y salidas, estas se representan por variables asignadas a cada bloque. Además, el lenguaje FBD permite al programador diseñar sus propios bloques. [12] 12.
(14) En la siguiente figura 7, podremos observar la manera de programación del lenguaje FBD.. Fig. 8 Ejemplo básico del lenguaje FBD.. Structured Text: Texto estructurado es únicamente empleado en autómatas de alta gama y ciertos entornos industriales. Se trata de un lenguaje de programación de alto nivel que permite programación estructurada, es decir, es posible dividir varias tareas complejas en tareas más sencillas para resolver un problema de automatización, usando lo que se conoce como subrutinas. Al ser un lenguaje de alto nivel tiene muchas similitudes con otros lenguajes similares utilizados en la industria informática, Basic, Pascal, o C++. [12] Este lenguaje emplea la definición de variables para identificar variables internas, entradas y salidas, y dispone de estructuras de control que permite repetir procesos y tomar decisiones de cómo actuar en función de unas condiciones complejas. En la figura 8, podemos observar la forma de programación del lenguaje ST.. Fig. 9 Ejemplo básico del lenguaje ST.. 13.
(15) Sequential Function Chart: Podríamos considerarlo un lenguaje orientado a gráficos que nos permiten representar el desarrollo en el tiempo de las distintas acciones de un programa. El SFC es similar a un diagrama de flujo, en el que podemos organizar subprogramas o subrutinas programadas en ST, LD, FBD, IL y que forman parte del programa de control. El lenguaje SFC se emplea frecuentemente en el diseño de soluciones asociadas a sistemas secuenciales donde el programa se ejecuta paso a paso conforme se cumplen determinadas condiciones. [12] La programación SFC dispone de tres elementos principales encargados de organizar el programa de control: pasos o etapas, transiciones o condiciones y acciones. Nuestro programa se irá ejecutando de una etapa a otra conforme se vayan cumpliendo las condiciones y en cada etapa se ejecutará las acciones que se hayan definido. [12] En la figura 9 observaremos un ejemplo básico de la programación del lenguaje SFC.. Fig. 10 Ejemplo básico del lenguaje SFC.. Continuous function Chart: en el lenguaje de programación CFC se pueden realizar programas a partir de bloques prefabricados. Al utilizar este lenguaje se usan bloques que realizan una función y se les asigna unos parámetros, y además se pueden interconectar. La interconexión significa, por ejemplo, que los valores se transfieren de una salida a una o más entradas durante la comunicación entre bloques. [13] Los gráficos de funciones continuas se utilizan básicamente para controlar procesos continuos, donde se ejecuta toda lógica y se calculan las salidas. El lenguaje CFC se usar mayormente en procesos Bach continuos. A continuación, en la figura 10 observaremos la forma de programación del lenguaje CFC. [13]. 14.
(16) Fig. 11 Ejemplo básico del lenguaje CFC.. 4.4.. Protocolo de comunicación Modbus. Modbus es un protocolo de comunicaciones, basado en la arquitectura maestro/esclavo o cliente/servidor, diseñado en 1979 por Modicon para su gama de controladores lógicos programables (PLCs). Debido a que este protocolo fue público, de fácil uso y que requiere poco desarrollo (maneja bloques de datos sin suponer restricciones) se convirtió en un protocolo de comunicaciones estándar en la industria. Es el protocolo de mayor disponibilidad para la conexión de dispositivos electrónicos industriales. El protocolo Modbus permite el control de una red de dispositivos, por ejemplo, un equipo de medición temperatura y humedad puede comunicar los resultados a una PC. Modbus también se usa para la conexión de un PC de supervisión con una unidad remota (RTU) en sistemas de supervisión de adquisición de datos (SCADA). Existen versiones del protocolo Modbus para puerto serial y Ethernet (Modbus/TCP). Para hacer uso del protocolo Modbus es necesario tener claro que el mismo trabaja a partir de funciones que son las que definen cual será la acción a llevar a cabo durante la transmisión, como se observa en la siguiente tabla, existen una variedad de funciones que permiten la lectura y escritura tanto de variables digitales como análogas, esto teniendo solo una dirección como referencia o varias de estas en una sola función.. Fig. 12 Funciones en la comunicación del protocolo Modbus [7]. 15.
(17) Para poder direccionar correctamente el dato que se quiere transmitir, a cada valor se le asigna una dirección, de acuerdo a lo establecido por el protocolo dependiendo de si es una entrada, una salida y si es un valor digital o análogo se le asigna una dirección dentro de un rango. En la siguiente tabla se observa la asignación de las direcciones de acuerdo al tipo de dato que se desea trabajar.. Fig. 13 Direcciones establecidas para cada tipo de dato en el protocolo Modbus [7]. 4.5.. Protocolo i2c. El protocolo I2C es muy sencillo desde el punto de vista de hardware (Figura 13) ya que se compone únicamente de dos líneas de colector abierto (Open collector) o drenaje abierto (Open drain), una para la comunicación SDA y otra para actuar como reloj de sincronismo SCL. [14]. Figura 14. Esquemático de la comunicación I2C Maestro-esclavos.. Cuando el bus no está siendo usado las dos líneas están a nivel alto y cualquier maestro puede acceder al bus poniendo a nivel bajo la línea SDA, luego podrá la dirección del receptor y, finalmente, se establecerá un dialogo que terminará con la vuelta de la línea. 16.
(18) SDA a nivel alto. [14] En términos generales, una transacción obedecerá a alguna de las siguientes estructuras de la figura 14: [15]. Fig. 15 Formatos de una transacción: a) sin cambio de sentido, b) con re-direccionamiento y posible cambio de sentido. [15]. El protocolo I2C es muy flexible, pero presenta limitaciones en cuanto a su velocidad de transmisión de datos, que es reducida (en mejor de los casos 3 a 4 Mbit/s aunque el valor estándar es de 100kbit/s), lo que no es un problema para la mayoría de los sistemas de instrumentación pero sí para otras aplicaciones dentro del mundo de la informática. [14] 4.6.. PROTOCOLO MQTT. Para dispositivos de Internet de las cosas (IoT) es necesaria la conexión a internet. La conexión a internet permite que los dispositivos trabajen entre ellos y con servicios backend. El protocolo de red subyacente de internet es TCP/IP. MQTT (Message Queue Telemetry Transport), que está construido sobre la pila de TCP/IP, y se ha convertido en el estándar para las comunicaciones de IoT. [16] MQTT es un protocolo de red liviano y flexible que logra el equilibrio adecuado para los desarrolladores de IoT: [16] El protocolo liviano le permite implementarse en hardware de dispositivos altamente limitados y en redes con ancho de banda de alta latencia/limitado. Su flexibilidad hace que pueda soportar varios escenarios de aplicaciones para dispositivos y servicios IoT. El protocolo MQTT define los tipos de entidades en la red: un intermediario de mensajes y un número de clientes. El intermediario es un servidor que recibe todos los mensajes de los clientes y luego los redirige a clientes de destinos relevantes. Un cliente es cualquier cosa que pueda interactuar con el intermediario para enviar y recibir mensajes. Un cliente puede ser un sensor de IoT en el campo o una aplicación del centro de datos que procesa datos IoT. [16]. 17.
(19) El cliente se conecta con el intermediario. Se puede suscribir a cualquier “tema” de mensajes de intermediario. Esta conexión puede ser una conexión TCP/IP simple o una conexión TLS cifrada para mensajes confidenciales. El cliente publica el mensaje, sobre un tema, enviando el mensaje y el tema al intermediario. Después, el intermediario redirige el mensaje a todos los clientes que están suscritos a ese tema. Ya que los mensajes MQTT están organizados por temas, el desarrollador de aplicaciones tiene la flexibilidad de especificar que ciertos clientes sólo puedan interactuar con determinados mensajes. Por ejemplo, los sensores publicarán sus lecturas sobre el tema “sensor_data” y se suscribirán al tema “config_change”. Las aplicaciones de procesamiento de datos que guardan los datos del sensor en una base de datos backend se suscribirán al tema “sensor_data”. Una aplicación de consola de administración puede recibir los comandos del administrador del sistema para ajustar las configuraciones de los sensores, como la sensibilidad y la frecuencia de la muestra, y publicar esos cambios en el tema “config_change”, siendo un modelo de este protocolo mostrado en la figura 15. [16]. Figura 16. Ejemplo de un Modelo del protocolo MQTT. [16]. 4.7.. RASPBERRY PI.. La Raspberry Pi es un pequeño ordenador del tamaño de una tarjeta de crédito de muy bajo costo, menos de 35 euros y fue desarrollado en el Reino Unido por la Fundación Raspberry Pi, el cual se puede usar prácticamente como un verdadero PC y además puede estimular el aprendizaje en las ciencias informáticas. [17] El software que es usado en esta tarjeta es Open Source, el cual su sistema operativo es adaptado de Debian, denominada Raspbian, aunque también la placa puede trabajar bajo otros sistemas operativos, incluyendo la versión 10 de Windows. A continuación, en la figura 16, observaremos las partes que componen la mayoría de las versiones de Raspberry. 18.
(20) Fig. 17. Placa Raspberry Pi Modelo 3. [17]. A) Procesador. Es el corazón de la Raspberry Pi, es del tipo de procesadores que encuentras en tu teléfono celular. Si usas una Raspberry Pi 3, este procesador es de 64 bit, un sistema 4 núcleos (quad core) de 1.2 GHz, el cual está construido en arquitectura ARM. Los chips ARM vienen en una variedad de arquitecturas con diferentes núcleos configurados que brindad otras capacidades a diferentes precios. La Raspberry Pi 1 tiene 512 megabytes de RAM y la Raspberry 2 y 3 tienen 1Gb de RAM. [17] B) Jack de video y audio. Una salida de video y audio está disponible en un estándar 3.5mm el conector plug. Un lado de la conexión es un mini Jack, el otro lado es de tres conectores RCA para audio estéreo y video compuesto por NTSC o PAL. [17] C) Leds de estado. Dos leds indicadores en la tarjeta demuestran el estado de la tarjeta. Además, también hay unos Leds indicando la actividad del puerto Ethernet por sí mismo. [17] D) Puertos USB externos. En las versiones principales de Raspberry Pi, encontramos 4 puertos USB 2.0 para conectar periféricos tales como el teclado, el ratón, controladores e impresoras. Mientras más dispositivos se alimenten de los puertos, es recomendable considerar el uso de una fuente externa alimentando a los dispositivos que necesiten más energía, como un disco duro. [17] E) Puerto Ethernet. El puerto Ethernet es de un estándar RJ45 de una capacidad de velocidad de 10 a 100 megabits por segundo. Conectándolo a un router dispondrá de internet, o por otro lado puede usar WiFi en la versión 3 de Raspberry Pi. [17] 19.
(21) F) Conector HDMI. El puerto HDMI brinda salida de audio y video digital. Soporta 14 diferentes resoluciones de video, y la señal HDMI puede ser convertida a DVI (usado por muchos monitores), compuesta (Señal análoga de video con un conector RCA amarillo), o SCART (un equipamiento de estándar europeo para conexión audiovisual) con adaptadores externos. [17] G) Alimentación de entrada. Este conector MicroUSB es usado para alimentar la tarjeta (este no es un puerto adicional USB, solo se usa para alimentar). El conector MicroUSB fue seleccionado debido a que este conector es barato y además las fuentes de alimentación son fáciles de encontrar. [17] H) Slot de la memoria MicroSD. Notaras que la Raspberry Pi no tiene disco duro, todo es almacenado en una memoria MicroSD. En los modelos recientes, deberás insertar la memoria oprimiéndola en el Slot, y de la misma manera la podrás remover. En esta memoria deberás ingresar primero el sistema operativo para luego hacer uso de la Raspberry Pi. [17] I) Conector para la interfaz del display serial DSI El conector acepta 15 pines, cable de cinta plana puede ser usado para la comunicación con un Display Touch oficial de la Raspberry Pi. [17] J) Entradas y salidas GPIO y otros pines. Actualmente la Raspberry Pi tiene un conector que tiene 2x20 pines GPIO. Estos pines pueden leer interruptores y botones, como también controlar actuadores, Leds, relés y motores. [17] K) Conector para la interfaz de la cámara serial CSI Este puerto permite un módulo cámara que se conectará directamente con la tarjeta por medio del cable cinta. [17] 4.8.. PSoC (Programmable System On Chip). Es la denominación que tienen los microcontroladores programables desarrollados por Cypress Semiconductor. Esta tecnología constituye un arreglo configurable de señal mezclada (Parte análoga y digital) con controlador para una tarjeta. Estos dispositivos conjugan las ventajas de los SoC, con la flexibilidad de los sistemas programables. [18] La unión de circuitos análogos y digitales programables son la base de la plataforma PSoC. Se puede configurar sus bloques usando las librerías pre-construidas o crear tus propias librerías. Al combinar varios bloques digitales, se pueden crear recursos lógicos de 16, 24 hasta 32 bits. [18]. 20.
(22) Los bloques análogos están compuestos de capacitadores conmutados, Op-amp, comparadores, ADC, DAC, y bloque de filtros digitales, permitiendo flujos complejos de señales análogas. [18] PSoC además ofrece un subsistema CPU sostificado con SRAM, EEPROM, una memoria flash, varios núcleos y una variedad de sistemas incluyendo: [18] -. Un oscilador interno principal de baja velocidad. Conectividad con un oscilador cristal externo para precisión. Interrupciones internas y Watchdog. Múltiples relojes que incluyen un PLL.. Los dispositivos PSoC también están dedicados a comunicaciones tales como I2C, USB 2.0, CAN 2.0 y capacidades de depuración en el Chip usando JTAG y Serial Wire Debug. Los nuevos PSoC estas construidos bajo un estándar de procesadores como los 8051, ISSP y ARM Cortex M3. [18] 4.9.. Machine Learning (Aprendizaje de máquina). El aprendizaje de máquina es un área que estudia cómo construir programas de computadoras que mejoren su desempeño en alguna tarea gracias a la experiencia. Ésta se basa en las ideas de diversas disciplinas, como inteligencia artificial, estadística y probabilidad, teoría de la información, psicología y neurobiología, teoría de control y complejidad computacional. El mismo autor afirma que, para utilizar el abordaje de aprendizaje, se deben considerar una serie de decisiones que incluyen la selección del tipo de entrenamiento, la función objetiva a ser aprendida, su representación y el algoritmo para aprender esa función a partir de ejemplos de entrenamiento. [19] Las técnicas de aprendizaje se clasifican en supervisadas, no supervisadas y semisupervisadas. En las supervisadas, la meta es aprender el mapeo de las respuestas correctas para los datos de entrada que le son proporcionados; para esto, se utiliza un conjunto de datos de entrenamiento constituidos por pares que consisten en patrones de entrada y salida correcta. De esta forma, el sistema aprende el mapeo de la salida correcta para cada patrón de entrada que se le presenta. [19] Yu Wanjun y Song Xiaoguang afirman que las etapas del aprendizaje supervisado aplicadas en la categorización de texto son inicialmente un conjunto de ejemplos ya clasificados que son presentados al algoritmo con lo que se construye un clasificador. Posteriormente, se presentan ejemplos no clasificados al clasificador para que los ordene. Finalmente, se debe tomar medidas para evaluar el desempeño del clasificador. Algunos ejemplos de técnicas de aprendizaje de máquina supervisado son árboles de decisión, máxima entropía, naive bayes, support vector machines, etcétera. [19] En las técnicas de aprendizaje no supervisado, no se requiere la intervención de humanos para elaborar un conjunto de datos previamente categorizados para ser presentado al algoritmo de aprendizaje. La meta del aprendizaje no supervisado es encontrar patrones interesantes considerando la distribución y composición de los 21.
(23) datos que le son presentados. Ejemplos de las técnicas de aprendizaje no supervisado son las técnicas de clustering. [19] Las técnicas de aprendizaje semi-supervisado son un término medio entre el aprendizaje supervisado y el no supervisado. En este tipo de aprendizaje, los datos se dividen en dos partes: un grupo de datos clasificados y otro de no clasificados. A esto se denomina aprendizaje semi-supervisado estándar. [19] Ejemplos de técnicas de aprendizaje semi-supervisado son las técnicas de transductive support vector machines, expectation maximization (EM), etc. Algunas aplicaciones del aprendizaje semi-supervisado, mencionadas por los autores son el reconocimiento del habla, clasificación de páginas web y en la secuencia de proteínas. [19]. 22.
(24) 5. Desarrollo El desarrollo llevado a cabo se puede dividir en una serie de etapas la cual en donde cada una se compone de sus propios elementos tanto de Hardware como de Software. Para explicar el procedimiento realizado se explicará la composición de cada uno de los bloques y así mismo como fue el proceso de construcción.. Fig. 18 Diagrama de bloques del proyecto Fuente autor. Antes de iniciar con la explicación de cada uno de los bloques, se hace necesario aclarar algunos conceptos: -. -. Llamadas de carro: Las llamadas de carro son aquellas que se realizan desde el interior de la cabina del ascensor, estas le indican al sistema cual es el destino del pasajero para que se decida cuál es la mejor ruta a seguir. Llamadas de piso: Estas llamadas son las que se realizan desde el panel presente en cada uno de los pisos donde trabaje el ascensor, en el caso de este sistema se cuenta con la posibilidad de solicitar el equipo para bajada y subida de manera separada.. 5.1.. Comunicación Control – Variador. Ya que es necesario que el control de ascensor (Raspberry) y el control del motor (Variador) se comuniquen para de esta manera enviar órdenes y recibir datos de monitoreo se implementó el protocolo de comunicación MODBUS RTU, esto se decidió debido a la facilidad con la que cuenta el variador modelo L1000 de tener los puertos para este protocolo instalados de fábrica. Para poder llevar a cabo esta comunicación se hace necesario realizar ciertas configuraciones tanto en la raspberry como en el variador. Primero el variador cuenta con una serie de parámetros que permiten configurar los valores de trabajo, el motor que usara, las comunicaciones entre otras.. 23.
(25) Fig. 19 Diagrama de conexiones comunicación Modbus, Variador Yaskawa. [8]. La conexión observada en la imagen anterior proviene directamente del manual del variador, los bloques denominados Drive son cada uno de los posibles variadores a conectar. Como se observa para realizar la conexión se hace uso de las borneras denominadas S-, S+, R-, R+ estas se conectan en este caso al conversor USB-485 usado en la raspberry, con lo anterior ya están listas todas las conexiones necesarias entre Raspberry y Variador para trabajar.. Fig. 20 Módulo de conversión USB-485. [9]. 24.
(26) La configuración del variador se realiza por medio del operador digital del mismo el cual es la interfaz que permite interactuar con los parámetros de configuración del mismo. En el caso del variador Yaskawa los parámetros de configuración se encuentran agrupados como lo muestra la siguiente tabla, en esta se puede ver que los parámetros se encuentran agrupados de acuerdo a la función que cumplen, lo que permite que sea más sencillo realizar su configuración. Se pueden encontrar parámetros para el control de velocidad de aceleración y desaceleración, valores del motor, protecciones entre otros. Los que en este caso se necesitan principalmente son los relacionados con el grupo H5, los cuales son los encargados de configurar la comunicación por medio del protocolo MODBUS. Fig. 20. Tabla de grupos de parametros variador yaskawa. [8]. De los parametros H5 es necesario rectificar como minimo los siguientes: H5-01: Establece la dirección de esclavo que va a tener cada uno de los variadores, en este caso debe coincidir con la que es buscada por parte del control o Raspberry. H5-02: Aquí se modifica la velocidad de comunicación, el valor predeterminado corresponde a 9600 Bps, este puede ser modificado en el caso de que se necesite trabajar con una velocidad mayor. H5-03: Este parametro permite seleccionar el tipo de paridad con el que va a trabajar el sistema por predeterminado viene sin paridad. Los valores de bits de datos y de parada vienen configurados en 8 y 1 respectivamente, estos no es posible modificarlos. Los demas parametros del grupo H5 permiten seleccionar como responde el variador en caso de perdida de comunicación entre otros. Vale la pena aclarar que algunos de los parametros necesitan que el variador sea reiniciado para que se vea el cambio reflejado. 25.
(27) Por el lado de codesys y la raspberry se añade un dispositivo de tipo Modbus como se observa en la imagen, las configuraciones del mismo deben corresponder a las realizadas en el variador, en codesys es posible determinar si la comunicación se esta realizando de manera correcta si al momento de iniciar el programa se observa un icono de color verde al lado de los dispositivos añadidos.. Fig. 21 Configuracion Modbus en Codesys. Fuente Autor. La manera en la que se envian los comandos de funcionamiento al variador es usando la funcion con codigo 6, la que permite escribir un solo registro, de acuerdo al manual es posible obtener las direcciones correspondientes a los diferentes comandos de funcionamiento. Es de aclarar que a todos los parametros que tiene el variador se le asigna una direccion Modbus por parte del fabricante, por lo que es posible realizar la modificacion de cada uno de estos si llega a ser necesario.. Fig. 22 Parametros de configuracion función de lectura de registro Modbus. Fuente Autor. 26.
(28) Los que nos interesan principalmente son los correspondientes a la referencia de velocidad y a los comandos de marcha, como se observa en lo descrito por el manual en la dirección 1 se escribe el valor que permite dar marcha al equipo tanto en el sentido superior como en el inferior, y en la dirección 2 se puede ingresar la referencia de velocidad con la cual trabajara el equipo, la modificación de este parámetro es la que permite realizar el cambio a velocidad intermedia antes de parar en el piso correspondiente.. Fig. 23 Direcciones y comandos usados en la comunicación. [8]. Para realizar la lectura de los monitores del equipo se utiliza la función con código 3 que permite realizar la lectura de un registro del mapa Modbus, como en la escritura de parámetros, en el manual se encuentran todas las direcciones correspondientes a los valores de lectura.. Fig. 24 Configuración función de lectura de registros. Fuente Autor. En la tabla que se ve a continuación se observan los principales monitores a leer, en la primera columna bajo el nombre se encuentra la dirección Modbus correspondiente, 27.
(29) con esto es posible llamar cualquiera de los datos que mide el variador, tanto de corriente como potencia, etc. En el caso de este proyecto se está consultando constantemente los valores de corriente de consumo, voltaje de bus DC, referencia de velocidad, salida de velocidad y potencia de salida.. Fig. 25 Ejemplo de monitores para lectura. [8]. 5.2.. Lógica De Control. Como se mencionó en el marco teórico la lógica de control es el cerebro del funcionamiento del sistema, este se encarga de recibir las señales de los sensores y enviar a los actuadores las activaciones de acuerdo a lo que se necesite. Para realizar la implementación de esta se utilizó una Raspberry pi como componente de Hardware y Codesys como componente de software. El control implementado permite trabajar con un total de 5 pisos, esto indica que cuenta con las señales de entrada tanto para los llamados de carro como los de piso correspondientes a cada uno.. 28.
(30) Fig. 26 Entorno de desarrollo Codesys. Fuente Autor. Codesys permite implementar una interfaz visual tipo HDMI que permite controlar el sistema, para poder llevar a cabo pruebas y como un sistema de manejo opcional se realiza el desarrollo de una pantalla que permita realizar las solicitudes de llamados y observar el estado del funcionamiento la cual se puede observar en la siguiente imagen, con esta se puede simular todo un ciclo de trabajo con lo que es posible rectificar fallos en la lógica o así mismo realizar un proceso de rescate o similar.. Fig. 27 Interfaz de pruebas para la lógica de control. Fuente Autor. 5.2.1. Llamadas de carro El primer punto a analizar es el panel de llamadas de carro, cuenta con un botón para cada uno de los pisos enumerado correspondientemente y uno para activar la apertura de las puertas en caso de ser necesario. Se ha de tener en cuenta que en caso de activar la llamada al piso actualmente en uso se ejecutara la apertura de las puertas.. 29.
(31) Fig. 28 Panel para llamadas de carro. Fuente Autor. Como se observa a continuación cada una de las variables asignadas a los botones se encargan de cambiar a verdadero la posición de un vector que almacena los correspondientes llamados a piso, de esta manera a pesar de ser una señal no enclavada permite que se maneje el llamado como un espacio de memoria que será consultado al momento de realizar los viajes. Esta lógica se encuentra escrita en lenguaje Ladder dentro del software Codesys.. Fig. 29 Código en ladder para detectar los llamados de carro. Fuente Autor. A continuación, se explicará en detalle el programa realizado para indicar el destino del ascensor desde la cabina. Para ello dividimos el programa en las funciones que cumplen. En la figura 6 podemos observar el bloque de comunicación implementado en un PSoC 4 con el fin de comunicarse con la Raspberry Pi quien es la encargada de la lógica del sistema de control del ascensor.. 30.
(32) Fig. 30. Bloque de comunicación I2C. El bloque de comunicación I2C observado en la figura anterior se implementó para la transmisión y recepción de datos con la Raspberry Pi. Este bloque es configurado en modo esclavo con la dirección 0x09 = 0001001, el cual siempre está a la espera de la solicitud recibida por el dispositivo Maestro siendo para el proyecto una Raspberry Pi 3. Luego se utiliza un bloque para hacer uso de un display 7 segmentos y el cuál podemos observar en la figura 31.. Fig. 31. Bloque para manejo de Display 7 segmentos.. La configuración implementada para el bloque Segment LCD fue asignar como 1 el número de líneas comunes y 7 como el número de segmentos, por lo cual cabe indicar que se hace uso de un display 7 segmentos con un digito. Además, se debe agregar un reloj para que realice la visualización del display de forma correcta. Por otro lado, se crean pines de entrada para conectar a estos los botones encargados de indicar el piso de destino, cerrar y abrir la puerta, un botón de emergencia, y un LED para observar si hay comunicación entre el PSoC esclavo y la Raspberry Maestro. Podemos observar esto en la figura 32.. 31.
(33) Fig. 32 Pines de entrada.. Luego de terminar la programación gráfica procedemos a realizar la lógica de programación en lenguaje C la cual mostraremos a continuación, y de la misma manera analizaremos por partes, comenzado por la figura 33.. Fig. 33 Primera visualización del código de la cabina.. Del código que podemos ver en la figura 33 observamos unas variables creadas para la comunicación I2C, estas variables se encargan de guardar la información que será envidad o recibida por el protocolo I2C, además también encontramos una variable ‘status’ la cual indica la solicitud que es recibida por el dispositivo Maestro. También en el inicio del código se tiene una variable llamada ‘piso’, la cual guardara el piso en el que se encuentra el ascensor. Posteriormente encontramos unas instrucciones para inicializar los bloques implementados anteriormente y además unos parámetros iniciales necesarios para el protocolo I2C. En la figura 34 encontraremos la continuación del código.. 32.
(34) Fig. 34 Segunda visualización del código de la cabina.. La figura 34 nos muestra el comienzo del bucle infinito del código donde se ejecutará la parte principal del programa. Para realizar el envío de datos por I2C se crea un condicional que es usado para preguntar por una solicitud de lectura enviado por el dispositivo maestro, al cumplir dicha condición se procede a limpiar el buffer de lectura y posteriormente asignar a las variables que serán enviadas el estado de los pines de entradas creados con el fin de indicar el piso de destino del ascensor, como también algunos botones necesarios dentro de la cabina. Por último, en la figura 35 podemos ver la parte final del código implementado.. Fig. 35 Tercera visualización del código de la cabina.. De la misma manera que se envían los datos por I2C, para recibir los datos enviados por el dispositivo maestro se crea un condicional que pregunta por la solicitud escritura o como se puede apreciar es una rutina para recibir datos. Como se realizó anteriormente, se limpia el buffer de escritura y luego se procede a recorrer el vector donde queda guardado los datos recibidos, y así poder asignar a la variable ‘piso’ la posición del piso 33.
(35) donde se encuentra el ascensor, con el fin de usar esta información y con la última instrucción poder visualizarlo con el Display 7 segmentos. En el anexo podremos apreciar el código completo el cual se ejecutará en la PSoC encargada de las llamadas desde la cabina o carro, como también el plano del circuito PCB desarrollado. A continuación, en la figura 36 se puede observar el circuito PCB ya con los componentes montados.. Fig. 36 Circuito PCB con sus componentes encargado de llamadas desde la cabina.. 5.2.2. Llamadas De piso Desde la interfaz, las llamadas de piso pueden ser simuladas por medio de los paneles que se observan en la siguiente imagen, cada uno de estos consta de un botón correspondiente al llamado de subida y de baja dependiendo del piso, además de un panel indicando cual es el piso actual en el que se encuentra el ascensor.. Fig. 37 Panel para realizar las llamadas de piso. Fuente Autor. De igual manera que con los llamados de carro, cada uno de los botones cambia a verdadero el valor de una variable booleana que se encuentra en un vector, debido a que el sistema diferencia los llamados de subida y de bajada, cada uno de estos cuenta con un vector diferente para almacenar sus respectivos llamados.. 34.
(36) Fig. 38 Programa en ladder para detectar las llamadas de piso. Fuente Autor. Cabe mencionar que el código de programación para hacer el llamado del ascensor e indicar hacia donde se dirige, es muy similar al código anteriormente visto, así que se mostrará los pocos cambios realizados. A continuación, podemos observar en la figura 38 algunos cambios en asignación y nombre de los pines de entradas.. Fig. 39 Esquema de la programación para el llamado del ascensor desde los pisos.. Para comenzar el PSoC 4 esclavo se configura con la dirección 0x08 = 0001000. Luego podemos observar que los pines de entrada están asignados de tal manera que indican la acción que debe realizar ascensor para dirigirse al piso de destino. Y encontramos además un led que funciona igual que el programa anterior, solo se usa con el fin de observar si la comunicación está funcionando. Al terminar el esquema de la programación, procedemos a realizar la lógica de programación en C de este programa, el cuál no varía mucho. Por lo tanto, observaremos el cambio realizado para el llamado del ascensor en la figura 39. 35.
(37) Fig. 40 Rutina para envío de datos por I2C.. Como ya habíamos analizado anteriormente, el envío de datos por I2C se realiza usando un condicional, pero el cambio realizado se encuentra en que las variables asignadas indican en esta ocasión la acción y el destino que debe realizar el ascensor. En el anexo podremos observar el código completo para el PSoC encargado del llamado del ascensor desde cada piso, como su esquema y a su vez el circuito PCB desarrollado. A continuación, podemos apreciar en la figura 40 (a) el circuito con sus componentes donde se encuentra el PSoC y en la figura 40 (b) el circuito PCB el cual irá en cada uno de los 5 pisos para el llamado del ascensor.. Fig. 41 (a) (arriba) Circuito PCB donde se el PSoC, (b) (abajo) Circuito PCB el cual se reparte en cada uno de los 5 pisos.. 36.
(38) -. Programación de la comunicación I2C para la Raspberry Pi en Codesys.. Posteriormente de haber realizado los programas de las tarjetas que hacen los llamados del ascensor e indican el destino del piso que se desea, se procede a mostrar el desarrollo hecho por la Raspberry Pi (Maestro) para la comunicación I2C usando el entorno del software CODESYS. Para comenzar, se agrega un dispositivo maestro I2C al proyecto, cabe resaltar que para que realmente funcione la comunicación I2C se debe habilitar esta opción por el terminal de Raspbian o por el escritorio. A continuación, podemos observar en la figura 40 las variables creadas para enviar o recibir la información de los PSoC esclavos.. Fig. 42 Asignación de variables para el protocolo I2C.. Luego de crear las variables para la comunicación I2C procedemos a realizar la lógica para recibir los datos envidas por los esclavos y asignarlos a variables que usaremos para el sistema de control del ascensor. La lógica de programación de este proceso se realiza en el lenguaje de texto estructurado, como podemos ver en la figura 41.. Fig. 43 Lectura y asignación de datos recibidos por el buffer.. 37.
(39) 5.2.3. Sistema de sensores para pisos Para poder detectar la llegada a cada uno de los pisos se utilizan las señales de unos sensores que se encuentran en uno de los costados de la cabina, a continuación, se procederá a explicar el funcionamiento de la detección de los pisos. Como se puede observar la cabina cuenta con dos sensores, que en la mayoría de los casos son activados por medio de imanes, uno ubicado encima del otro que están conectados directamente como señal a la tarjeta de control, en la imagen se puede observar la ubicación aproximada de los mismos, lo importante en este caso es que se encuentren a distancias iguales de cada uno de los extremos para que la ubicación de parada no varíe entre subida y bajada.. Sensor Superior Cabina. Sensor Inferior. Fig. 44 Posición de los sensores en cabina. Fuente Autor. Cada uno de estos sensores detectara una señal correspondiente a los activadores del piso, en el caso de ser imanes estos se encontrarán ubicados dentro del trayecto del ascensor en una de las paredes de manera que cuando la cabina pase por su ubicación estos sean detectados. De la misma manera que es importante la ubicación de los sensores de cabina, los que se encuentran en las paredes del trayecto también deben ser colocados de manera correcta para que el sistema no presente problemas de nivelación.. Cabina. Sensores de piso. Fig. 45 Posición Sensores de cabina y pared. Fuente Autor. 38.
(40) Si el ascensor va de bajada está a la espera de que el sensor inferior de la cabina detecte un imán, esto le indica que se acerca al piso siguiente y en caso de ser necesario parar, hace el cambio a una velocidad intermedia para que la parada no sea tan brusca, al momento de detectar el imán superior una señal le indica que esta en el punto de nivelación por lo que envía la señal de parada y espera a una próxima indicación. En caso de que se encuentre el ascensor en subida el funcionamiento es el mismo pero el orden de detección de los sensores se invierte. En la interfaz de prueba los sensores superior e inferior son los que se observan en la siguiente imagen, donde cada botón simula los sensores superior e inferior respectivamente. Con esto es posible enviar ordenes de parada y de nivelación al variador.. Fig. 46 Panel para simular la detección de los imanes. Fuente Autor. Los sensores también son configurados como entradas externas al control que permiten que sean conectados cualquier tipo de sensor que se quiera utilizar. 5.2.4. Lógica del ascensor El código principal del programa está escrito en Ladder como se observa en la figura, se encarga de realizar la activación y desactivación de acciones que se encuentran como subprogramas, donde cada una de estas se encarga de los posibles estados del ascensor, siendo estos subida, bajada y quieto. Además de activar el estado de emergencia en caso de que alguna de las seguridades sea activada o se evidencie algún problema de funcionamiento.. 39.
(41) Fig. 47 Programa de control principal. Fuente Autor. -. Principal. El código que se encuentra en el programa principal se encarga de establecer cuál es la siguiente acción a realizar por el ascensor, el mismo se activa cada vez que se cierra la puerta después de un llamado y no tenía ninguna llamada previa en el mismo sentido en el que se estaba realizando el viaje anterior. Este código se ejecuta constantemente mientras no se tenga ningún llamado para que en el caso de presentarse alguno se reaccione inmediatamente. La línea 1 se encarga de colocar la referencia de velocidad nominal con la que debe trabajar el variador al momento de iniciar algún viaje, después de esto el programa ejecuta un ciclo alrededor de los posibles llamados que tenga el sistema en alguno de los pisos con los que cuenta lo que se observa en la línea 2, en caso de encontrar un llamado analiza cual es el sentido del viaje desde la línea 6 para que entre a trabajar otro de los programas encargados de las funciones de subida o bajada. 1. G.Referencia_W := 6000; 2. FOR G.counter:=1 TO 5 BY 1 DO 3. //Si el llamado esta hecho 4. IF G.SP[G.Counter] OR G.LPD[G.Counter] OR G.lpU[G.Counter] THEN 5. //Pregunta para subir o bajar 6. IF G.Piso < G.Counter THEN 7. G.LSubida := TRUE; 8. G.LPrin := FALSE; 9. ELSIF G.Piso > G.Counter THEN 10. G.LBajada :=TRUE; 11. G.LPrin := FALSE; 12. ELSE 13. G.Lpuertas := TRUE; 14. G.LPrin := FALSE; 15. G.SP[G.Piso] := FALSE; 16. G.LPU[G.Piso] := FALSE; 17. G.LPD[G.Piso] := FALSE; 18. END_IF 19. END_IF 20. END_FOR. 40.
(42) El código encargado de la subida y de la bajada trabajan de manera similar, la línea 1 activa un booleano que sirve para la lógica interna del sistema, en la línea 2 se cambia la variable de comandos del variador, la cual al tomar el valor de 2 para activar el bit 1 de la trama Modbus y así el Variador ande en uno de los sentidos de marcha. La línea 3 también funciona como una lógica interna para que el sistema sepa cuál es el último estado de movimiento del ascensor. 1. G.On2 := TRUE; 2. G.Comandos := 2; 3. G.Subiendo := TRUE;. En el caso de que el ascensor se encuentre en subida lo primero que espera es la detección del sensor inferior que se encuentra en la pared, al momento de encontrarlo aumenta el contador de piso y en la línea 6 se pregunta si existe algún llamado que atender en el mismo, de ser asi la variable denominada Bandera que permite cambiar el estado de la lógica toma el valor de 2 y la referencia de velocidad es disminuida a la intermedia o de nivelación, si no existen llamados en el piso la Bandera toma el valor de 1. 1. //Esta esperando Inferior 2. IF G.IInferior AND Bandera = 0 THEN 3. //Numero menos de piso y si esta solicitado parar 4. G.Piso := G.Piso + 1; 5. //Si esta solicitado bajar a media y esperar segundo iman 6. IF G.SP[G.Piso] OR G.LPU[G.Piso] or G.LPD[G.Piso] THEN 7. Bandera := 2; 8. G.Referencia_W := 3000; 9. ELSE 10. Bandera := 1; 11. END_IF 12. END_IF. En caso de que no hubiera llamado de piso se espera a que se detecte el sensor superior con lo que se dará por dicho que este piso ya fue pasado y la bandera volver a tomar el valor de 0.. 1. IF Bandera = 1 THEN 2. IF G.ISuperior THEN 3. Bandera := 0; 4. END_IF 5. END_IF. Si se detectó un llamado en el piso al cual se llegó se espera a la detección del siguiente sensor con lo que se envía la orden de parada al variador en la línea 5 y se activa el programa que se encarga de la apertura de la puerta, antes de que se pase a la activación de las puertas se consulta si existe algún llamado más arriba del piso actual para que al cerrarse las puertas se continúe el viaje en el mismo sentido. De no existir más el programa principal se encargara de rectificar la existencia de llamadas en bajada o de esperar una nueva de ser necesario. 41.
(43) 1. IF Bandera = 2 THEN 2. IF G.ISuperior THEN 3. //Mantiene media hasta que llegue el inferior 4. G.On2 := FALSE; 5. G.Comandos := 0; 6. G.Lpuertas := TRUE; 7. ////Si no hay mas llamados de subida de ahi para arriba apagar subida 8. IF G.Piso = 5 THEN 9. G.Subiendo := FALSE; 10. ELSE 11. FOR G.counter_b:= G.Piso + 1 TO 5 BY 1 DO 12. IF G.SP[G.Counter_b] OR G.LPU[G.Counter_b] THEN 13. G.Subiendo := TRUE; 14. Bandera := 0; 15. 16. G.SP[G.Piso] := FALSE; 17. G.LPU[G.Piso] := FALSE; 18. 19. G.LSubida := FALSE; 20. 21. RETURN; 22. ELSE 23. G.Subiendo := FALSE; 24. END_IF 25. END_FOR 26. END_IF 27. 28. //Resetear Piso Al LLegar 29. G.SP[G.Piso] := FALSE; 30. G.LPU[G.Piso] := FALSE; 31. 32. G.LSubida := FALSE; 33. 34. Bandera := 0; 35. END_IF 36. END_IF 37.. El código de bajada cumple con el mismo funcionamiento que subida solo teniendo en cuenta los llamados en otro sentido y el orden de los imanes en sentido inverso. 1. //Detecto superior si hay llamado 2. IF Bandera = 2 THEN 3. IF G.IInferior THEN 4. //Mantiene media hasta que llegue el inferior 5. G.On1 := FALSE; 6. G.Comandos := 0; 7. G.Lpuertas := TRUE; 8. ////Si no hay mas llamados de bajada de ahi para abajo apagar bajada 9. IF G.Piso = 1 THEN 10. G.Bajando := FALSE; 11. ELSE 12. FOR G.counter_b:=1 TO G.Piso - 1 BY 1 DO 13. IF G.SP[G.Counter_b] OR G.LPD[G.Counter_b] THEN 14. G.Bajando := TRUE; 15. Bandera := 0; 16. 17. G.SP[G.Piso] := FALSE;. 42.
(44) 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.. G.LPD[G.Piso] := FALSE; G.LBajada := FALSE; RETURN; ELSE G.Bajando := FALSE; END_IF END_FOR END_IF //Resetear Piso Al LLegar G.SP[G.Piso] := FALSE; G.LPD[G.Piso] := FALSE; G.LBajada := FALSE; Bandera := 0; END_IF END_IF //Esta esperando Superior IF G.ISuperior AND Bandera = 0 THEN //Numero menos de piso y si esta solicitado parar G.Piso := G.Piso - 1; //Si esta solicitado bajar a media y esperar segundo iman IF G.SP[G.Piso] OR G.LPD[G.Piso] OR G.LPU[G.Piso] THEN Bandera := 2; G.Referencia_W := 3000; ELSE Bandera := 1; END_IF END_IF. El programa que se encarga de la apertura de las puertas se observa a continuación, lo primero es enviar la orden de apertura de puertas para lo cual se activa la variable Apuertas, posterior a esto se tiene un retraso que permite que las personas entren o salgan para luego enviar la orden de cierre de las puertas. Este procedimiento cuenta con dos sensores que le permiten al sistema saber si la puerta se encuentra efectivamente cerrada, o hay alguna obstrucción que impida su cierre, cuyo caso se mantendrá la señal de apertura hasta que sea posible cerrar la puerta sin correr ningún riesgo. 1. IF bandera_p THEN 2. G.Apuertas := TRUE; 3. 4. G.Delay(IN:=TRUE, PT:=T#3S); 5. IF NOT(G.Delay.Q) THEN 6. RETURN; 7. END_IF 8. 9. G.Delay(IN:=FALSE); 10. END_IF 11. 12. //Escribir Logica De puertas 13. //Esperar tiempo y no cerrar si esta activo sensor 14. //Cuando puertas termina activa principal 15.. 43.
(45) 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.. bandera_p := FALSE; IF G.puerta_obs THEN G.Apuertas := TRUE; ELSE G.Apuertas := FALSE; IF G.Puerta_Cerrada THEN G.Lpuertas := FALSE; Bandera_p := True; IF G.Bajando THEN G.LBajada := TRUE; ELSIF G.Subiendo THEN G.LSubida := TRUE; ELSE G.LPrin := TRUE; END_IF END_IF END_IF. El código correspondiente al módulo de inspección se encarga de enviar órdenes directas al variador a una velocidad especifica tanto en sentido como superior e inferior por motivos de mantenimiento o solución de problemas, este código solo se encarga de enviar las ordenes, lo importante es que en este modo todos los llamados son almacenados mas no atendidos, de manera que es posible realizar cualquier trabajo sin problema. 1. //Habilitar movimiento por inspeccion 2. G.Referencia_W := 3000; 3. IF G.UInsp THEN 4. G.Comandos := 2; 5. RETURN; 6. ELSIF G.DInsp THEN 7. G.Comandos := 1; 8. RETURN; 9. END_IF 10. G.Comandos := 0;. En el caso de activarse una emergencia se enviará una orden de bloqueo al variador, con esta el mismo no recibe comandos de marcha de ningún tipo hasta que la señal sea levantada por lo que se mantendrá en el punto en el que se presentó el inconveniente. Luego de detectarse la alarma iniciará un conteo por un tiempo determinado después del cual se dará inicio a un viaje el cual llevará la cabina al primer piso para en este abrir las puertas y evitar cualquier problema de seguridad. 1. //Apagar todo 2. G.On1 := FALSE; 3. G.On2 := FALSE; 4. G.Comandos := 64; 5. 6. G.Delay(IN:=TRUE, PT:=T#20S); 7. IF NOT(G.Delay.Q) THEN 8. RETURN; 9. END_IF 10. 11. G.Delay(IN:=FALSE); 12. 13. IF NOT g.IEInferior THEN. 44.
(46) 14. 15. 16. 17. 18.. G.On1 := TRUE; ELSE G.On1 := FALSE; END_IF. Fig. 48 Diagrama de flujo alarma. Aparte de las funciones y de los programas mencionados anteriormente, el sistema cuenta con las siguientes funciones que complementan el funcionamiento: -. -. Control de iluminación: se designó una salida para la energización del sistema de iluminación interno de la cabina, este funciona de manera que después de cierto tiempo sin recibir un comando de marcha la iluminación se apague para así evitar un consumo de energía excesivo. Detección de tiempo de viaje: También el sistema se alarma en caso de que algún viaje realizado dure más de un tiempo establecido, esto depende del piso en el que se encuentra y del destino del viaje. Esto se hace para evitar que se presente. 45.
(47) -. -. algún tipo de inconveniente con que no se detectaron bien los sensores de los pisos. Piso inicial: en el caso de que el sistema sea encendido por primera vez se utilizan dos sensores extremos para enviar el ascensor a un punto conocido y posterior a eso iniciar su funcionamiento normal. Sensores De Extremos de trayecto: son un par de sensores que se encuentran en los puntos más extremos del trayecto, su función es impedir que el ascensor por razones de mal funcionamiento suba demasiado o baje demasiado, esto lo consigue activando el estado de emergencia del equipo.. 5.3.. Toma de Datos. Los datos tomados para analizar son la corriente, la velocidad tanto de referencia como de salida, el voltaje del bus DC y el torque de salida, estos datos fueron seleccionados para poder comprobar diversos problemas que pueda llegar a presenta el variador durante su funcionamiento y tener un registro del consumo que presenta este, estos datos pueden ser consultados desde la misma interfaz la cual permite visualizarlos por medio de graficas mientras son enviados a la base de datos. En el caso de la corriente, podemos monitorear cual es el consumo del motor en el sistema, las horas de uso y el promedio durante el día, en estos sistemas la posibilidad de tener acceso a esta información permite saber que tan bien dimensionado e instalado está el sistema. Se puede observar el pico de corriente que presenta en el arranque, la gráfica presente en la figura presenta la corriente multiplicada por 10.. Fig. 49 Datos de corriente tomados en la raspberry. La velocidad tanto de referencia como de salida permiten saber si el sistema está haciendo un buen seguimiento y por lo tanto si está trabajando en las velocidades 46.
(48) correctas, un desfase en estas ocasiona problemas de nivelación, parada y puede llegar a disparar el variador por desviaciones de velocidad.. Fig. 50 Arriba grafica de referencias de frecuencia al momento del arranque, abajo grafica de referencias de frecuencia al momento de nivelar.. En las gráficas se puede observar tanto el momento de arranque cuando el variador recibe la referencia de frecuencia y esta es posteriormente enviada como frecuencia de salida y también el cambio de velocidad nominal a intermedia al momento de llegar a piso y realizar la nivelación. El voltaje del bus DC permite saber dos cosas, por un lado, si este tiene un valor muy bajo quiere decir que la alimentación de este no se encuentra en los valores en los que debería estar lo que fuerza al variador para que entregue la corriente de salida solicitada. Además, en el caso de que este voltaje suba en algún punto, se puede deber. 47.
(49) a la regeneración del sistema lo que indica una carga demasiado grande para el variador o un equipo de frenado mal dimensionado.. Fig. 51 Graficas de Voltaje en el bus DC y corriente en el equipo al momento del arranque.. A continuación, podemos observar en la figura 52 de forma general el proceso que se realizará para subir los datos obtenidos por el variador hasta la nube.. Fig. 52 Proceso para subir y almacenar a una base de datos IBM.. 5.3.1. Comunicación Mqtt con CloudMqtt Como parte de los objetivos del proyecto a realizar está establecer una comunicación con la nube de código abierto. Por consiguiente, la manera que se utilizó para subir datos al internet fue usar el protocolo de comunicación MQTT en Codesys e implementarlo a la Raspberry Pi. Como primer paso para realizar este proceso es necesario que la Raspberry Pi posea conexión con internet, la cual puede recibir tanto por conexión Ethernet o usando una conexión Wifi. El segundo paso por realizar es usar la página https://www.cloudmqtt.com/ con la cual se puede crear una instancia con un plan gratuito, y al cual subiremos la información 48.
(50) que deseamos con la Raspberry Pi. Al crear la instancia esta nos brinda los parámetros tales como el servidor, un usuario, una contraseña, un puerto, etc. Necesarios para poder establecer la comunicación con esta instancia, como podemos observar a continuación en la figura 46.. Fig. 53 Información para establecer comunicación con el servidor creado.. Como tercer paso implementaremos la comunicación Mqtt con el servidor creado usando Codesys, al cuál es necesario instalarle la librería ‘Janz Tec MQTT library’ para poder desarrollar la comunicación. En la figura 47 podemos observar las variables creadas y a su vez asignadas a los parámetros que obtuvimos del servidor creado.. Fig. 54 Variables creadas y asignadas según los parámetros del servidor.. El lenguaje que se utilizó para realizar la comunicación Mqtt fue CFC, el cual podemos observar en la figura 48, allí encontraremos el bloque que exige todas las variables anteriormente creadas con el fin de poder conectarse al servidor de CloudMqtt, y el cuál sabremos si hubo conexión al ver el estado de la variable ‘conectado’.. 49.
Figure
+7
Documento similar