lunes, 7 de julio de 2014

¿Paraguas o gafas de sol? Preguntaré a mi PLC

Implementar consultas a Web Services directamente desde un autómata. Ejemplo con Yahoo Weather. 

Días atrás en este post os hablé de la interacción de nuestros autómatas con servicios en la red como
Google Drive o Twitter a través de IFTTT. Hoy os traigo un enfoque diferente para poder aprovechar en nuestras aplicaciones recursos interesantes que podemos encontrar en la red de redes. Existen en Internet multitud de servicios web (Web Services) destinados a facilitar información de lo más variopinta (previsiones meteorológicas, localización por IP, paridades de moneda...) o al tratamiento de los datos que se envíen (análisis para eficiencia energética, bases de datos…). Todos tienen definido el mecanismo de comunicación que permite interaccionar con ellos, al que se conoce como API. Gracias al FPWEB2 de Panasonic podremos enviar y recibir datos directamente con nuestro PLC con aquellos servicios que en su API tengan prevista su interacción con los métodos HTTP GET y POST. 

Para ilustrar el artículo haré un repaso con vosotros a modo de ejemplo del API de Yahoo Weather y cómo podríamos implementar una consulta a este servicio con nuestro autómata para obtener la información meteorológica de una ubicación concreta. 
Lo primero de todo será conocer el detalle del API del servicio. Para el caso de Yahoo Weather encontraremos la información en esta página web
Como vemos en la página, se nos indica que la petición de información se realiza mediante el método HTTP GET y por lo tanto lo que nos interesa ahora es desgranar la información que hemos de facilitar desde el autómata para obtener una respuesta válida del servidor. Según se muestra, esta respuesta contendrá la siguiente información. 



Lo primero que hemos de hacer es configurar la pestaña HTTP Client del FPWEB Configurator para facilitar los datos básicos del servidor. En el caso que nos ocupa será suficiente con dar la URL indicada en la web de Yahoo ya que no se requiere ningún tipo de Login o importación de certificados. También indicaremos las direcciones de memoria del autómata que se utilizaran para el uso de la función (DT240..244 en el ejemplo) 



Obviaré en este artículo la configuración estándar del FPWEB2 ya que no es relevante para el propósito del mismo y por lo tanto pasaré ya directamente a la función que se utilizará en el programa del PLC que realicemos con el FPWIN PRO. En concreto se trata de la función FPWEB_HTTP_Client incluida en la librería de funciones del FPWEB. 



Para su ejecución, además de obviamente habilitar la función y dar la orden de inicio, deberemos definir el método a usar en “iMethod”. En nuestro caso indicaremos “0” que se corresponde con el método GET (también está disponible el método POST). El siguiente punto será indicar en “pFilenameOrURL” el puntero que hará referencia a la localización de la variable que contiene la información necesaria para completar la llamada con nuestro método. Yo en mi caso he definido la variable como "URL" y he generado el puntero "purl". 



En esta variable URL introduzco como string la trama de la llamada GET en el formato que nos indica la API. 

"http://weather.yahooapis.com/forecastrss?w=2442047&u=c"

Como la ubicación del servidor ya se ha definido en la configuración del FPWEB2, en realidad la variable URL solo contendrá el resto de la URL. 

"forecastrss?w=12602124&u=c" 

Como veis, he cambiado el número tras “w=”, eso es debido a que la previsión meteorológica que me interesa es la de Barcelona y no la que se indica en el ejemplo. Este número 12602124 se corresponde al código WOEID de la ciudad de Barcelona. Podéis buscar en Internet el código correspondiente a la ciudad que deseéis. 

Seguidamente indicaremos en “pReceiveString” el puntero a la variable donde dejaremos la respuesta. Yo la he declarado con el nombre de "Response". 



Os recomiendo declarar un string holgado ya que la respuesta del servidor no será precisamente corta. Yo me he curado en salud y la he definido con una longitud de 10000 caracteres. 
“pSendText” y “pServerNameOrIP” no serán relevantes en nuestro caso. Definiremos los timeouts y los relés de control de la función. Por último indicaremos la dirección de inicio del área de intercambio de datos con el FPWEB2 (DT240 según la configuración que hicimos en el inicio). 

Nuestra función quedará tal que así. 



Llegados a este punto, ya estamos en disposición de ejecutarla y recibiremos una larga trama con el siguiente contenido (con los valores correspondientes en el momento de la consulta). 
Será tarea adicional tratar la trama adecuadamente para extraer los datos que nos interesan. 

Como habéis podido comprobar, no ha sido un proceso complicado extraer la información del servidor de Yahoo Weather. Ahora será cuestión de localizar en cada caso el Web Service que nos pueda ser de utilidad, verificar que podemos acceder a sus datos con este mecanismo y utilizar la función para recuperar o enviar la información que nos interese. 

Espero que os haya parecido interesante y os pueda ser útil en alguno de vuestros proyectos futuros. 

Saludos.

No hay comentarios:

Publicar un comentario

cookieassistant.com