TN303 OPC - Escritura a SQL o txt mediante OPCRouter

TN303 OPC - Escritura a SQL o txt mediante OPCRouter

Escritura a SQL mediante OPCRouter


Introducción

En este documento se pretende asentar las bases del Software, de lectura y escritura, sobre todo, teniendo en cuenta que se quiere escribir y/o a o de una base de datos SQL.

De manera que tendremos un simulador de un servidor OPC (QuickClient de KepServer) que enviará señales mediante este protocolo al OPCRouter, nuestro objetivo es tomar estos datos y transferirlos a una base de datos de SQL (o bien a un txt), esto se puede hacer de varias formas, formatos y utilizando varias herramientas, en esta nota técnica se pretende comunicar mediante varios Softwares desde OPC a SQL u otros archivos para almacenar datos.
Para guiar al usuario que lea este archivo se ha propuesto realizar un archivo con varios ejemplos de aplicación para que el cliente pueda interpretar y utilizar el que le sea más útil en sus aplicaciones o desarrollo.
En esta nota técnica se trata de dar respuesta mediante varios ejemplos a distintas configuraciones de las conexiones para escribir en varios tipos de archivos para acabar escribiendo en una base de datos de SQL, en concreto esta nota técnica se centra en escritura a Excel, CSV y como pasar estos datos a formato de. json, entre otras configuraciones.
Notes

NOTA: Se recomienda consultar el ANEXO I del archivo si no se ha utilizado OPCRouter o se ha trabajado poco con este Software.


Escritura desde OPC a SQL

En este ejemplo vamos a tomar una serie de datos de un simulador de OPC para introducirlos en una base de datos creada para hacer estas pruebas (SQL Server Management Studio > Databases > Runtime > Tables > dbo.TEST).
En primer lugar, debemos crear la conexión mediante los objetos que nos facilita el Software, mediante el drag&drop podemos ir diseñando nuestras conexiones.
De manera que para escribir datos desde OPC (un PLC, por ejemplo) a nuestro SQL debemos crear un diseño de conexión parecido a lo que podréis ver ahora:
                                          

Ilustración 1. Diseño de conexión OPC-SQL para escritura en BBDD SQL.

En la ventana de Runtime podremos analizar los datos obtenidos, ver si se están transfiriendo de forma correcta, además de una representación gráfica que tenemos de los puntos tomados y si estos se han tomado de forma correcta (Verde o Azul) o de forma errónea (rojo):                                                                

Ilustración 2. Datos tomados mediante Trigger "manual" de los datos OPC y confirmación de que se han tomado datos (círculo rojo).

De manera que obtendremos los siguientes resultados en la base de datos que hayamos seleccionado para insertar/update estos datos:


Ilustración 3. Datos obtenidos en SQL tras realizar un Trigger de los datos de la ilustración 1.

De manera que con dos objetos muy simples podemos realizar una escritura en base de datos SQL sin problema, tal y como se ve en las capturas realizadas, en mi caso las variables son simuladas. 

Escritura desde OPC a formato .json

En este caso No vamos a escribir en SQL, sino en un formato txt debido a que no podemos tratar los datos en formato json en SQL, de manera que hemos buscado una alternativa para explicar la captura y almacenamiento de estos datos.

En este caso vamos a realizar un esquema algo distinto al del caso anterior, de manera que vamos a tratar de escribir en un txt con formato json utilizando variables internas del OPCRouter, esto resulta muy útil para organizar los datos y su representación como queramos, además de permitirnos utilizar scripting y variables internas del propio Software, lo cual permite diseños más complejos y con scripting.

De manera que para realizar una escritura de datos en formato json a un txt realizaremos la siguiente configuración en la conexión (o algo similar):                                                                                                            


Ilustración 4. Diseño de conexión archivos en formato json en un txt.

Los datos obtenidos se pueden visualizar de la siguiente manera en el archivo .txt:


Ilustración 5. Resultados obtenidos en un archivo creado para los datos en formato json.



Escritura dese OPC a SQL mediante Excel

En este ejemplo vamos a tratar de leer, escribir y manipular datos mediante Excel y SQL. En el primero de los casos, el de la escritura, podemos crear una conexión similar al esquema de conexiones que hay a continuación:


Ilustración 6. Escritura de datos a Excel desde OPC.

En el caso anterior, tenemos datos OPC que llegan a Excel, y que posteriormente pueden escribirse en SQL (también se pueden modificar los datos en las celdas de Excel antes de enviar los datos a SQL):

Ilustración 7. Escritura y manipulación de datos mediante Excel para posteriormente enviarlos a la BBDD.

De manera que podemos manipular estos datos antes de introducirlos en la base de datos.
Y los datos que se introducen en la base de datos son únicamente los que hayamos seleccionado, es decir, los manipulados en mi caso (Bloque “Database” de la derecha de la imagen anterior).

Ilustración 8. Prueba de la conexión diseñada aplicando una suma a los valores de +1 y dejando los strings igual.

Y los resultados se introducen en la base de datos sin problema, solamente los que hemos seleccionado como datos a introducir, es decir, los datos de la columna J del Excel.


Ilustración 9. Resultados obtenidos en BBDD tras modificar los datos mediante Excel.

Esto se puede hacer en dirección inversa en caso de que sea necesario, es decir, introducir datos de un Excel (u otro Pluggin) al PLC, esto resulta muy útil, ya que es habitual que se quieran modificar tags del PLC en función de un evento que ocurra en el sistema, por ejemplo, un booleano que me active algún tag del PLC, para generar un informe. 

De manera que el diseño lo haremos de forma inversa:


Ilustración 10. Diseño conexión para traer datos desde Excel al PLC.


Escritura desde OPC a CSV o TXT

En este último caso vamos a añadir una variable interna del sistema, un Timestamp por si no lo hemos configurado antes, y nos aporta mucha información, ya que nos indica

En este ejemplo vamos a escribir directamente en CSV, pero como paso previo vamos a reorganizar los datos para que nos aparezcan de forma ordenada, y añadiremos un timestamp (medida de tiempo y fecha del dato tomado) con una variable interna del sistema.


Ilustración 11. Diseño escritura de OPC a CSV con Timestamp (medida de tiempo y fecha).

Esta variable interna es el SystemTimeUTC, y está definida por defecto en el software, de manera que la podemos utilizar siempre que queramos sin definir nada ni configurarla.


Ilustración 12. Variables internas del sistema.

De manera que mediante un diseño similar al presentado podremos introducir datos con su correspondiente medida de tiempo y fecha en un archivo txt de forma muy sencilla, permitiendo con una configuración muy simple el registro de datos de producción de forma sencilla, cómoda y simple. 

Y los datos se obtienen tal y como se muestra en el siguiente archivo utilizado para las pruebas: 


Ilustración 13. Pruebas de escritura en CSV mediante objeto File Write utilizando timestamp.

Ejemplos adicionales de conexiones:

En este apartado vamos a añadir un par de ejemplos adicionales para ayudar al cliente a diseñar sus propias aplicaciones. Adicionalmente, se detallan dos casos similares a los estudiados, pero ampliando la funcionalidad de la aplicación, a continuación, se detalla más sobre lo comentado en este párrafo.

            1)    Variables intermedias entre los datos OPC y la escritura en un txt:


Ilustración 14. Variables internas intermedias, por ejemplo, para almacenar datos o scripting.

            2)    Introducción de valores en base de datos mediante varios registros:

En este segundo ejemplo adicional vamos a tratar el tema de añadir más de un registro de señales por cada Trigger, en este caso podríamos pensar en diseñar la siguiente conexión:

Ilustración 15. Runtime de entorno con varias escrituras en una misma base de datos (y misma tabla), añadiendo una constante creada previamente.

Y los resultados obtenidos en la base de datos son:

 

Ilustración 16. Datos obtenidos tras realizar los Triggers de la Ilustración 15, como podéis ver se crea un registro por cada obtejo de “Database” que tengamos en el diseño de la conexión creada.

Como se puede observar en la captura de pantalla de la Ilustración 16, los datos que no contiene el objeto no se traspasan a la base de datos, de manera que para introducir más de un registro o fila por cada Trigger, debemos seleccionar qué elementos queremos en ambos objetos del “OPC Data Access” esto puede ser de utilidad en según qué aplicaciones, además se pretende evitar errores de diseño cuando se empieza a trabajar con el Software, que es poco intuitivo en algunos campos.

De manera que para introducir más de un registro sin que aparezcan datos en "NULL" debemos realizar la siguiente configuración:


Ilustración 17. Diseño para introducir más de un registro por cada trigger. 

De manera que obtendremos un resultado NULL por cada elemento del cual no hayamos tomado datos des del objeto OPC Data Access, es decir, en el caso de la imagen anterior, tendremos los mismos valores para todos los “Tags” excepto en el segundo registro que se introduce en la BBDD, en el cual el valor de Cosntant = NULL debido a que no hay dato asignado a este “Tag” de la BBDD.

Y los resultados obtenidos en la base de datos son los siguientes:


Ilustración 18. Resultados tras lanzar el Trigger de la Ilustración 17.

ANEXO I. Consideraciones generales de OPCRouter

1)      Siempre que sea posible utilizar carpetas fuera del disco C: (pueden requerir permisos adicionales o simplemente no funcionar si están ubicadas aquí) y añadir permisos a las carpetas que sean necesarios (lectura, escritura…).

2)      El sistema tiene varias variables internas, como por ejemplo el SystemTimeUTC (para el Timestamp) para añadir funcionalidad y comodidad a ciertas configuraciones de las conexiones 

3)      Se tienen variables internas en OPCRouter, para guardas valores o scripting, también nos sirven para organizar los datos como se verá en los ejemplos planteados por esta nota técnica… 

4)      OPCRouter funciona mediante Triggers en Producción para la toma de datos, de manera que en primer lugar siempre hay que configurar el tipo de Trigger, para hacer pruebas se puede aplicar un               Trigger manualmente:


Ilustración 19. Trigger manual de las conexiones en Runtime.

1)      Existe entorno de desarrollo y de Runtime (Production), la versión Demo incluye 2 horas, y se puede resetear el servicio para volver a tener 2 horas, y así mientras se desarrolla todas las veces que             queramos:

                  i) Entorno de desarrollo / diseño de la conexión:

Ilustración 20. Interfaz de desarrollo de las conexiones (drag&drop de los pluggins y objetos que nos ofrece el Software).

ii) Entorno de producción de la conexión diseñada:                                                                                 

Ilustración 21. Interfaz de producción del Software OPCRouter V5. De color rojo se marca el botón de producción (parte izquierda de la imagen), además de la vista de los datos tomados en Runtime (la bolita azul representa que se han tomado datos en esa hora y con los datos que se pueden ver en la captura.


ANEXO II. Triggers en OPCRouter

Para la toma de datos de forma automática se utilizan Triggers, de manera que estos objetos toman los datos cada x tiempo, cada vez que cambia un valor, o por ejemplo cada día a la misma hora para sacar algún informe o resultado.

De manera que podemos configurar un gran número de Triggers distintos según la aplicación que queramos, o según las necesidades del cliente o de la aplicación a diseñar:


Ilustración 22. Distintos objetos de "trigger" que tenemos en el Software OPCRouter.

Podemos configurar los siguientes Triggers:


                        1)      Triggers de cambios de datos:


Ilustración 23. Triggers que detectan cambios en datos o tags.

                        2)       Triggers periódicos tiempo (cada X tiempo, o cada día a una hora):


Ilustración 24. Triggers de tiempo que tiene el Software.

                              3)      Triggers mediante scripting o variables internas: 

                                                                                                                                               

Ilustración 25. Scripting o Variable Trigger.

Alert
Nota Importante: Esta Nota Técnica se entrega “as is”, es decir, como complemento a la documentación del producto, pero no incluido dentro del ámbito del Soporte Técnico. Por tanto, cualquier mal funcionamiento derivado del contenido de esta nota técnica no es responsabilidad de Becolve Digital.

    • Related Articles

    • TN284 - Acceder a AVEVA System Platform sin utilizar el OI Gateway a través de OPC UA mediante OPC Router

      TN284 - Acceder a AVEVA System Platform sin utilizar el OI Gateway a través de OPC UA mediante OPC Router Un caso típico que nos encontramos es la necesidad de compartir datos desde System Platform con algún otro cliente o sistema (HMI, SCADA, otro) ...
    • TN302KS Escalado de datos en KEPServerEx

      Este documento explica cómo funciona el escalado en los productos Kepware, como es en KEPServerEx. Definición.- El escalado es el proceso de tomar datos en bruto de un dispositivo y presentarlos en un valor refinado o adecuado para la aplicación. Los ...
    • TN305WAS - Diagnóstico Rendimiento BBDD

      En esta TN usaremos el conocido Procedure sp_WhoIsActive.sql de SQL, que encontraréis adjunto en este documento. (2007-2019 © Adam Machanic) . Al final, se trata de una potente herramienta para analizar el rendimiento y la actividad de SQL Server. ...
    • FAQ000121 - Problema al conectarse a la base de datos AVEVA Edge 2020

      PROBLEMA AVEVA Edge 2020 Embedded no muestra datos en el Grid Control o diferentes controles no funcionan como se esperaría. El problema también puede ocurrir al conectarse a una base de datos, en general. Database: Error: Could not load file or ...
    • TN160IT - Cómo servir los datos de InTouch vía OPC

      En ocasiones es necesario leer datos de InTouch desde aplicaciones externas o de terceros y para ello se suele utilizar el protocolo OPC. En este documento se indican los puntos a seguir para ofrecer los datos de InTouch vía OPC, o dicho en otras ...