Saltar a contenido

Introducción

El datapoint es la unidad mínima de información que utiliza Netin.

Es la representación de una magnitud real (mediciones, estado de sensores, consignas ... ) o lógica (estado lógico de un puerto, estado de un proceso ...) de un sistema de automatización, es decir un valor que lee de un dispositivo o que calcula.

Dentro de Netin cada datapoint tiene que ser único y se tiene que ser capaz de identificarlo de forma unívoca, independientemente de las veces que se genere el datapoint.

Estructura de un dispositivo

Dentro de Netin un dispositivo está construido por unos valores fijos que definen al dispositivo y un numero n de datapointSets. Estos datapointSets están formado por datapoints, tantos como datos se quieran leer, como mínimo un datapointSet debe contener un datapoint. La estructura de datapointSets y datapoints se define dentro de los Templates y es ahí donde se define la cantidad de datapointSets y datapoints va a tener el dispositivo.

NetinDS_Device

Campos que definen un Device

  • deviceId: se genera mediante una función Hash entre el locationId y el origin. El valor generado por la función es único en Netin, por lo que hace referencia únicamente a un dispositivo en concreto.

  • entity: identificador del agente que está generando los datapoints de ese dispositivo, sirve para saber de dónde viene el dato.

  • entityType: permite identificar el tipo de fuente de datos, generalmente será un agente de Netin.

Nombre Descripción
netin-ds-agent Agente NetinDS
netin-ds-server Servidor NetinDS
netin-ds-webui Interfaz gráfica de NetinDS
netin-hub-agent Agente NetinHUB
netin-hub-device Dispositivos (smartwatch, smartphone, ...) o importers conectados al sistema NetinHUB
netin-hub-server Servidor de NetinHUB
netin-hub-webui Interfaz gráfica de NetinHUB (S)
  • locationId: identificador de la localización, identifica la localización de forma unívoca dentro de netin. Este valor se genera automáticamente cuando se genera una localización en el servidor de Netin.

  • origin: representa el origen del dato, de donde proviene el dato.

    • Identificar un subsistema perteneciente a Netin.
    • Identificar un dispositivo al que se está monitorizando mediante el uso de cualquiera de los protocolos o drivers soportados por Netin.
    • Identificar un sistema o subsistema productivo cuyos estados están siendo recogidos desde un sistema SCADA o MES (NetinHUB)

    Ejemplo: una pasarela ProfiBus que lee datos de 10 equipos Profibus y Netin lee por SNMP los datos de la pasarela, por lo tanto, el origen de los datos que recibe Netin es la pasarela. El problema es que no sabemos de qué equipo Profibus proviene cada dato.

    Como solución se puede poner como origen el nombre del dispositivo, la dirección MQTT o la dirección ProfiBus.

  • templateId: template que se está utilizando para este dispositivo y versión de dicho template. El template indica la estructura de datos para el dispositivo. Para consultar la configuración general de un template en Netin DS diríjase a Templates

  • timestamp: indica la última vez que se actualizo el dispositivo, cambia cada vez que se escribe el valor de alguno de los datapointSets independientemente si el valor es igual o distinto al que teníamos.

Agrupación de datapoints

Netin agrupa la información (datapoints) en conjuntos de datos conocidos como DatapointSets.

Un DatapointSet es el conjunto de uno o más datapoint. Los datapoints siempre han de estar contenidos en esta estructura.

Existen dos tipos de DatapointSet:

Mapa

Es una estructura tipo clave-valor, donde cada datapoint representa una magnitud, normalmente relacionada con el resto de datapoints que se integran dentro del mismo DatapointSet.

Por ejemplo, los valores de información de un dispositivo: nombre, modelo, IP, numero de referencia...

NetinDS_Datapoint_Map

Tabla

Estructura de tipo tabla o array de datapointSets de tipo mapa.

NetinDS_Datapoint_Table

Esta estructura representa un grupo de estructuras que se repite sin que a priori se conozca el número de veces que esta se va a repetir. NetinDS utiliza esta estructura con el fin de poder adaptase de forma dinámica a los sistemas monitorizados: número de módulos en un sistema de periferia distribuida, puertos en un switch industrial, ejes de un robot ...

Dentro de este tipo de estructura existe dos tipos:

Tabla estática

Una tabla estática es aquella que conserva su tamaño de forma constante. Son en las que no cambia el número de entradas que tiene.

Por ejemplo, la información básica de 15 dispositivos.

NetinDS_Datapoint_Table

Tabla dinámica

Una tabla dinámica es aquella que puede varias su tamaña entre dos muestreos. Es decir, su número de filas (table index) varia.

Accesspoint

Por ejemplo, número de clientes conectados a un punto de acceso, no siempre hay ni el mismo número ni los mismos clientes conectados., por lo que el número de filas variara dependiendo de los clientes que estén conectado en cada momento.

NetinDS_Datapoint_DynamicTable

Existen dos conceptos que hay que tener en cuenta para entender correctamente el funcionamiento de las tablas.

Table index Indica la posición que ocupa el DatapointSet tipo mapa dentro de la tabla, es decir el número de filas de la tabla. Es un valor numérico cuyo valor inicial es 0.

NetinDS_Datapoint_TableIndex

Índices de la tabla Son aquellas columnas o columna que hace de una fila una cosa única. Es un valor o conjunto de valores que distingue unívocamente a ese dispositivo dentro de la tabla.

Por ejemplo 5 clientes conectados a un punto de acceso a la misma hora, todos son Lenovo, disponen del mismo nombre de cliente..., es decir, son exactamente iguales, pero la MAC siempre será diferente. El índice de esta tabla será la MAC porque es el valor que nos indica que los clientes son diferentes entre sí.

NetinDS_Datapoint_Indice_de_Tabla

Estructura de un datapoint

Un datapoint, además del valor que lee, contiene ciertas características (timestamp, quality, location...) que aportan más información.

NetinDS_Datapoint

  • rawValue Es el valor que leemos directamente del dispositivo sin procesar. Valor bruto del datapoint, es leído por el driver.

  • rawDataType Tipo del dato rawValue. Los valores posibles son BYTE, INTEGER, LONG, FLOAT, STRING, BOOLEAN, DATE, ARRAY o OBJECT. Los valores de estas propiedades son asignados de forma automática en el momento de creación del datapoint por Driver-API o por NS-Zavod, no siendo necesario que el usuario o el integrador especialista realice ninguna acción especial sobre el sistema.

  • value Valor procesado del datapoint mediante el uso de las configuraciones convConfig, unitsConfig ..., puede también ser emitido directamente por el driver, especialmente en aquellos casos en el que protocolo soportado por dicho driver ya implementé un sistema de traducción de la información recogida (SNMP, PROFINET ...).

  • dataType Tipo del dato value. Se configura en el template, para saber que valores puede tomar mirar la sección alarmConfig en Templates

  • severity Severidad de la alarma, si esta existe, disparada sobre este datapoint. Los rangos de severidad y su significado están especificados en Alarmas

  • quality Código que indica la calidad del datapoint. Junto con el campo qualityType indica la fidelidad del datapoint a la realidad. Nos dice cuanto de confiable es el valor que contiene el datapoint en ese momento.

Nombre Descripción
good Indica que la calidad del datapoint es buena, es decir, es real y está actualizada.
bad Indica que la calidad del datapoint es mala, es decir, no es real, aunque esté actualizada.
uncertain Indica que la calidad del datapoint no se puede determinar, podría ser real o no estar actualizada.
  • qualityType Indica las posibles razones para el valor actual de quality.
Nombre Descripción
good Indica que la calidad del datapoint es buena.
bad-configError Indica que la calidad del datapoint es mala debido a un error en la configuración del dispositivo o en datapoint.
bad-deviceFailure Indica que la calidad del datapoint es mala debido a un fallo en el dispositivo (al que se conecta el sensor).
bad-notCommunication Indica que la calidad del datapoint es mala debido a un fallo de comunicaciones con el dispositivo.
bad-notConnected Indica que la calidad del datapoint es mala debido a un fallo de conexión entre dispositivo y sensor.
bad-sensorFailure Indica que la calidad del datapoint es mala debido a un fallo en el sensor.
bad-outOfService Indica que la calidad del datapoint es mala porque el dispositivo está fuera de servicio.
uncertain-engineeringUnitsExceed Indica que la calidad del datapoint es incierta porque se han excedido los umbrales posibles para la medición.
uncertain-lastUsableValue Indica que la calidad del datapoint es incierta por tiempo excesivo sin refrescar el valor y se está usando el último valor.
uncertain-notCommunication Indica que la calidad del datapoint es incierta dado que no se tiene comunicación con el sistema (agente o SCADA) y se está usando el último valor.
uncertain-sensorNotAccurate Indica que la calidad del datapoint es incierta por falta de precisión en el sensor.
uncertain-subNormal Indica que la calidad del datapoint es incierta porque no tiene toda la información necesaria (calculate).
  • originType driver responsable de la lectura de este datapoint. De que driver proviene la variable que estamos leyendo. Se configura dentro del Templates

  • meta o text Texto descriptivo que nos proporciona información sobre el datapoint. Metainformación asociada a este datapoint, normalmente es el texto de la alarma, si esta existe.

  • timestamp Fecha y hora en formato epoch que indica la última vez que se escribió el datapoint.

Identificación de datapoints

La identificación del datapoint se conoce como datapointId, es decir, es el nombre propio del datapoint. A su vez, el datapointSet es identificado con el datapointSetId.

La identificación de un origen se conoce como origin.

Se conoce como dirección del datapoint (datapoint address) al conjunto formado por datapointSetId y datapointId, suele expresarse como: datapointSetId.datapointId.

Se conoce como instancia de un datapoint (datapoint instance) al conjunto formado por origin, datapointSetId y datapointId y suele expresarse como: origin:datapointSetId.datapointId.

Se conoce como clave de un datapoint (datapoint key) al conjunto formado por origin, datapointSetId, datapointId y el tableIndex y suele expresarse como: origin:datapointSetId.tableIndex.datapointId

Direccionamiento

Existen dos tipos de direccionamiento que se puede utilizar en los datapoints:

Absoluto

Se indica la ruta al datapoint de forma completa. Puede ser de varios tipos:

  • Direccionamiento indirecto: no se indica el origen o el datapointSet al que hacemos referencia, siendo el datapoint sobre el que se está aplicando la conversión en ese momento el origen del dato.
    • a nivel de datapoint: datapoint.rawValue != "5.2.0"
    • a nivel de dispositivo:
      • Mapa: device[deviceInfo.softwareVersion].rawValue != "5.2.0"
      • Tabla: device[ifTable.8.ifSpeed].rawValue / 10e6
  • Direccionamiento directo: indicamos todos los campos de la dirección de un datapoint, incluyendo el origin y el datapointSetId:

    partner['172.16.52.103'][deviceInfo.sofwareVersion].rawValue != "5.2.0"

Es recomendable, siempre que sea posible, el uso de direccionamiento absoluto indirecto en las plantillas de NetinDS.

Relativo

Se indica la ruta al datapoint respecto al datapoint en el que me encuentro ahora porque desconocemos el datapoint concreto al que queremos direccionar. Este tipo de direccionamiento solo se da en los datapoints de tipo tabla.

device[ifTable.*.ifSpeed].rawValue / 10e6

Como se puede apreciar en este caso usamos el símbolo * (wildcard) que será sustituido por el valor de tableIndex del datapoint en el momento de procesando.

Entre estas dos expresiones:

device[ifTable.8.ifSpeed].rawValue / 10e6

device[ifTable.*.ifSpeed].rawValue / 10e6

La primera dirección va siempre a la novena fila de la tabla de puertos del dispositivo en cuestión, y puede ser utilizada indistintamente dentro de cualquier expresión o interpolación de cualquier datapointSet.

La segunda direcciona al datapoint ifSpeed de la tabla ifTable de la fila que se esté procesando en ese momento dentro de NS-Zavod, por lo que solo puede ser usado dentro de datapointSets de tipo tabla, y debe hacer referencia siempre la propia tabla.