En mi post anterior me he quedado en esta cadena:
"http://192.168.1.54:8080/services/user/records.xml?var=" & _
Dispositivo & "." & vari & "?begin=" & FechaInicio & "?end=" & _
FechaFin & "?period=ALL"
Veamos la construcción de esta llamada:
- http://192.168.1.54:8080 Es la dirección del servidor donde se encuentra instalado el PowerStudio Scada, y el puerto 8080 donde enviaremos nuestra petición.
- /services/user/records.xml? Según el Manual PowerStudio Scada esta petición nos devuelve los registros del dispositivo indicado, entre la fecha indicada y con la agrupación indicada que se definen en las siguientes variables:
- Dispositivo: Es el nombre del dispositivo registrador (CVM) dentro del PowerScada.
- vari: Es el tipo de medida que vamos a pedir (W,Wh,A,V,etc)
- FechaInicio: Fecha inicial del periodo del cual queremos los datos.
- FechaFin: Fecha final del periodo del cual queremos los datos.
- period=ALL: agrupación de los datos que obtenemos.
Con todo esto hagamos un ejemplo y lo veremos más claro:
Obtener los datos de consumo durante el mes de agosto del 2014 del CVM que tengo instalado en la línea de compresores.
Vamos a desgranarla:
-
http://192.168.1.54:8080?
Como hemos visto antes es la dirección IP del servidor donde se encuentra instalado el PowerStudio Scada y el puerto donde está escuchando.
-
/services/user/records.xml
Es la dirección del servicio XML que nos devuelve, en este caso, los registros guardados en la base de datos del PowerStudio Scada.
-
?begin=31072014230000
Es la fecha inicial del periodo del cual queremos obtener los datos.El formato es DDMMAAAAHHMMSS. La hora debe estar expresada en UTC, ya que así guarda los datos el PowerScada, en España es una hora más (+1 UTC) por tanto para hacer la petición deberemos poner las 23:00 (y si es horario de verano que son +2 UTC deberíamos poner las 22:00)
-
?end=31082014230000
Como hemos indicado en la fecha inicial la fecha final será exactamente igual. Sobretodo debemos recordar que las horas se deben expresar en formato UTC.
-
?period=ALL
Es el rango en el cual agrupamos los datos. Siempre nos va a interesar obtener únicamente la suma de todos los valores durante el periodo solicitado, por ello usamos la opción ALL. La respuesta XML se vuelve menos manejable si solicitamos los datos en otro valor de period como puede ser en FILE (nos devolverá todos los registros tal cual están guardados en la base de dato), AUTO (se agruparán de manera automática) o un valor numérico mayor a 0 (en segundos)
-
?var=COMPRESORES_7B.AE
Es el nombre del dispositivo registrador, un punto y la variable que deseamos obtener. Estas variables son muchas desde tensión e intensidad, pasando por energía reactiva o potencia instantánea. Es cuestión de mirar el manual y ver la definición de la variable que queremos obtener.
Con todo esto sólo nos queda saber como poner esto en Excel y para ello usaremos el método Workbook.XmlImport de la siguiente manera:
ActiveWorkbook.XmlImport URL:="http://192.168.1.54:8080/services/user/records.xml?begin=31072014230000?end=31082014230000?period=ALL?var=COMPRESORES_7B.AE", ImportMap:=Nothing, Overwrite:=True, Destination:=Hoja.Range("$A$1")
Explico un poco cada parámetro del método:
-
URL:="http://192.168.1.54:8080/services/user/records.xml?begin=31072014230000?end=31082014230000?period=ALL?var=COMPRESORES_7B.AE"
Ya hemos visto de donde viene todo esto antes, buenos estamos si lo tengo que explicar
-
ImportMap:=Nothing
Yo uso Nothing porque és lo que funciona, no investigué más al respecto.
-
Overwrite:=True
Lo mismo, uso True porque es lo que funciona, no investigué más al respecto.
-
Destination:=Hoja.Range("$A$1")
Es la primera celda que rellenaremos con los datos recibidos, en el caso de la petición que estamos realizando nos devolverá 4 celdas en horizontal a partir de la celda A1. Esta será la respuesta en bruto con la que nos dedicaremos después a tratar para hacer lo que queramos con ella.
Una vez hecho esto ya hemos hecho lo dificil, obtener los datos de la base de datos del PowerStudio Scada a partir de aquí se trata de aplicar nuestros conocimientos de VBA para hacer lo que queramos con ellos.
Espero que te hayan gustado estos primeros post.
Hola muy valiosa la información que compartes y te lo agradezco mucho, sabes estoy en la misma situación, pero tengo un inconveniente que no lo puedo solucionar hasta ahora es sobre forzar una variables podrias apoyarme con un ejemplo. Muchas gracias.