lunes, 15 de septiembre de 2014

App Inventor y los autómatas programables

Como crear de manera sencilla una aplicación Android para controlar nuestro PLC.

Hace algunas semanas me encontré por casualidad la web de App Inventor. Valga como resumen el decir que este proyecto de Google Labs tiene como objetivo facilitar la creación de aplicaciones nativas de Android sin necesidad de escribir ni una linea de código. Es ideal para los no familiarizados con la programación de dispositivos móviles, aunque es muy recomendable tener nociones de algún lenguaje de programación para sacar provecho a esta herramienta de forma rápida. No me extenderé más, ya que otros antes que yo ya lo hicieron y mi intención es aportar algo nuevo que nos sea útil en nuestro mundo de la automatización industrial. 

Al iniciar la creación de una aplicación tendremos dos editores principales con los que trabajar. El primero de ellos se llama Designer y es donde añadiremos los componentes que estarán presentes en nuestra app.


Por otro lado tendremos el Block Editor que es donde definiremos el comportamiento de dichos componentes. En programación estándar sería donde escribiríamos nuestro código, pero aquí será sustituido por una serie de bloques que unidos darán forma a nuestros algoritmos.


Os recomiendo echar un vistazo general por la página para ver los componentes disponibles y repasar los tutoriales, pero es tan intuitivo que en unos pocos minutos ya podéis estar creando vuestras propias aplicaciones. Ciertamente os daréis cuenta que no es tan potente como un entorno de programación clásico, pero sí valido para multitud de aplicaciones.

El objetivo de esta entrada en cualquier caso es centrarme en como podemos hacer que esas aplicaciones interaccionen con un autómata programable, que como podéis imaginar para los que me habéis leído con anterioridad, será de la marca Panasonic.

En el lado del PLC usaremos el módulo FPWEB2 por su capacidad de actuar como servidor web. No nos interesará especialmente la posibilidad de mostrar páginas html que podremos tener en paralelo si lo consideramos oportuno. Lo que nos será útil en este caso es la posibilidad de poder enviar peticiones GET con un comando MEWTOCOL (protocolo de comunicaciones Panasonic) para leer y escribir variables en el autómata. El que necesite un manual completo de MEWTOCOL me lo puede pedir sin ningún tipo de problema, para el resto simplemente dejaré un par de capturas de ejemplo para la escritura de registros.




En el extremo de App Inventor, el componente que aprovecharemos para nuestras comunicaciones es el de WEB dentro de Connectivity.


En concreto usaremos el bloque destinado a realizar peticiones GET a la URL que previamente habremos definido usando el bloque correspondiente.


A través de la edición de esa URL intercambiaremos datos con nuestro autómata. Lo que haremos es construir una URL dinámica mediante el encadenado de un string fijo y una parte variable con el contenido que nos interesa.
Para ilustrar mejor esto, he creado una mini aplicación de ejemplo con el resultado del vídeo que veréis a continuación. La única función de la app es modificar la velocidad de un servomotor entre 9 velocidades disponibles en base a la inclinación del teléfono. Podríamos decir que usamos el teléfono como si fuese un pedal de acelerador de coche.


El contenido de los bloques no es demasiado relevante, ya que es una combinación muy simple para preparar los datos antes de ser enviados. Me centraré en los bloques clave.
Lo que nos interesa es acabar introduciendo en una variable el contenido de la URL que debemos usar con el bloque GET. En mi ejemplo, debe acabar teniendo una pinta como esta.


En esta URL todo el contenido será fijo a excepción de los 4 caracteres anteriores a los 2 asteriscos que contendrán el dato de un registro (DT103) de 16 bits en hexadecimal.
Lo primero que he hecho es adquirir los datos del inclinómetro del teléfono.


Después trato el valor para acabar dejando el dato a enviar en una variable llamada URL_cons. Con el contenido fijo y el variable creo la que será en cada momento la URL a llamar con el bloque GET.


Para finalizar se asigna el valor de la variable a la URL y se ejecuta de manera reiterada el bloque GET.


Ciertamente no he dedicado ni un segundo a cuidar el acabado estético, pero de haberlo hecho, el acabado que podéis obtener será el de una interface más elegante e integrada (pero menos universal) que si trabajásemos con una web dentro del navegador del teléfono. Otra ventaja muy importante es que tendremos a nuestra disposición variables de los diferentes sensores del teléfono que se podrán utilizar en nuestros proyectos de modo similar a como yo he usado el inclinómetro en el ejemplo. 
No he podido dedicar todo el tiempo que me gustaría para realizar un artículo en profundidad sobre el tema, pero creo que igualmente este aperitivo os podrá servir a muchos para empezar a trabajar con este interesante entorno de programación que es App Inventor.

Nos vemos pronto!!




16 comentarios:

  1. usted puede conseguir el código fuente del MIT y el PLC ??

    ResponderEliminar
    Respuestas
    1. Hola, no sé si entiendo exactamente lo que necesitas. En el lado de la aplicación Android, lo más relevante y que indico en el post es cómo se envía una variable mewtocol con un comando get. Si lo deseas, lo que te puedo facilitar es el detalle del protocolo. Respecto al código del PLC, sí lo puedo conseguir, pero no es de gran utilidad ya que es el correspondiente a una maleta demo. En concreto, la variable transmitida, está enlazada a una función JOG de salida de pulsos. Lo realmente destacable és lo sencillo que resulta intercambiar datos entre una aplicación nativa Android y un PLC de Panasonic. Saludos.

      Eliminar
    2. Buenos Días,
      Soy un usuario de Panasonic PLC Series FP0R-32T + FP-Web2 desde o trató de tener el mismo resultado que la llevó en su juicio, pero no puede tener el chedevo y si ella puede proporcionar la .aia archivo de MIT y el archivo .fp FPWIN GR / FPWIN Pro también, así como de demostración para ver lo que estoy haciendo mal. Gracias de antemano por la disponibilidad demostrada Filippo

      Eliminar
    3. Hola, te dejo aquí el archivo aia. https://www.dropbox.com/s/cd3ef3l9ffc0fn9/PLC.aia?dl=0
      Se hizo solo con propósitos demostrativos pero quizá te sirva de orientación. El del PLC no es importante y pertenece a una demostración compleja que te confundiría más que otra cosa. Con el aia deberías poder enviar el dato a un DT que es lo importante. Recuerda configurar en la pestaña web del FP Web Configurator que se aceptarán tramas mewtocol como lectura y escritura (hay un botón para configurar esto). Buena suerte...

      Eliminar
  2. Hola ROberto, muy buena su demostracion. Mi consulta es para saber como hago con un plc que no sea panasonic, se puede? por ejemplo un Logo de siemens que es el que tengo...
    Saludos.

    ResponderEliminar
  3. Hola Cristian,
    Sinceramente desconozco si se puede hacer de manera tan sencilla con otras marcas. Deberías verificar dos cosas para estar seguro.
    1. El PLC debe ser servidor HTTP
    2. Ese servidor debe permitir leer/escribir variables del PLC directamente con sentencias GET/Post.
    Siendo así deberías poder hacerlo sin problemas. Eso sí, adaptando la trama a la sintaxis del PLC en concreto.

    También tienes un plan B. Usar el FPWEB2 de Panasonic como pasarela y conectarlo por RS485 o RS232 al PLC en cuestión. En ese caso cualquier PLC que soporte MODBUS te vale.

    Saludos.

    ResponderEliminar
  4. hola master; mi pregunta es como hacer la comunicación y control del plc mediante una aplicación en java. algun tutorial o libro que me puedas pasar ? desde ya muchas gracias Roberto...saludos.

    ResponderEliminar
    Respuestas
    1. Pues la verdad es que no te puedo ayudar mucho. Mi contacto con java es prácticamente nulo. En cualquier caso, si estás iniciado en este lenguaje podrías utilizar la misma idea de hacer una petición GET que he usado con App Inventor.
      En una búsqueda rápida en Google he encontrado esto http://stackoverflow.com/questions/2793150/using-java-net-urlconnection-to-fire-and-handle-http-requests
      También podrías pensar en abrir un socked y enviar la trama del protocolo del PLC para leer y escribir variables. El protocolo de Panasonic (MEWTOCOL) te lo podría pasar yo.

      Eliminar
  5. hola muy buenas , veras tengo de hace poco un fp web2 y me gustaria utilizarlo como conversor asi poder programar mediante cable ethernet

    ResponderEliminar
  6. mi pregunta es cual seria la configuración, tanto del plc como del fp web2

    ResponderEliminar
    Respuestas
    1. Necesitaría saber el plc y el puerto que usarás para poder echarte un cable.

      Eliminar
    2. Hola , estoy utilizando un fp sigma 32k y el puerto que quiero utilizar es el puerto tool.

      Eliminar
    3. Hola,
      En realidad no hay mucho que configurar. Eso sí es importante que los puertos del PLC y FPWEB2 estén configurados igual. Te enlazo a un documento que te he preparado con algunas capturas.
      https://drive.google.com/file/d/0B7tgXYPnY-PoaUNfc1hsU0JHR1U/view?usp=sharing

      Saludos

      Eliminar
  7. Hola , perdona que vuelva a molestarte , que debo hacer en la configuración de comunicaciones del software del plc , estoy utilizando fpwin pro 6, y en la configuración de red del ipv4 ?
    Lo que esta pasando es que le hago un plc test desde fp web configurator y el resultado es favorable , pero cuando intento hacer una conexión con el plc desde el software me da un error todo el rato.

    ResponderEliminar
  8. hola , perdona pero ya he dado con la solución , tenia que dar dos ip´s en el mismo rango , una para el fp web2 con un numero de puerto y otra para el software y el puerto de host con su numero de puerto. Al fin , debo darte las gracias por tu ayuda , tengo otros proyectos en mente igual vuelvo a pasar por aqui ,
    muchas gracias !!!

    ResponderEliminar
    Respuestas
    1. Disculpa que no te haya podido contestar antes. Me alegra que lo hayas resuelto, pero en realidad la IP del ordenador (software) no es necesaria. Puedes marcar la opción de detección automática y dejar el puerto a 0. Así debería funcionar. Es importante que no esté marcada la opción del ET-LAN. En cualquier caso, si ya te comunica, perfecto. Saludos.

      Eliminar

cookieassistant.com