Saltar al contenido principal

Canales

En esta sección se presentan los canales del smartCORE y se describen los principios de su uso.

Arquitectura​

En el contexto del smartCORE, los canales garantizan la comunicación entre los módulos productores y los módulos consumidores. Son creados y escritos por un único módulo productor y pueden ser leídos por varios módulos consumidores. Desde el punto de vista del software, un canal smartCORE (con marca de tiempo) es básicamente un búfer circular de valores de medición con marca de tiempo de un tipo de datos definido previamente. Además, un canal denominado variable de proceso representa un único valor de medición con la marca de tiempo de su última actualización.

Tipos de canal y de datos​

Se distingue básicamente entre

  • canales con marca de tiempo (timestamped channels), que proporcionan una serie temporal de valores de medición, y
  • variables de proceso (process values), que proporcionan únicamente el último valor de medición (p. ej., un parámetro o una propiedad) y el instante del último cambio, pero NO una evolución temporal.

Todos los valores de medición «transmitidos» dentro de un canal smartCORE tienen siempre un tipo definido de forma inequívoca. Se admiten los siguientes tipos de datos

Tipo de datosDescripción
boolValores de verdad booleanos como true y false
int64enteros de 64 bits con signo
int32enteros de 32 bits con signo
int16enteros de 16 bits con signo
int8enteros de 8 bits con signo
uint64enteros de 64 bits sin signo
uint32enteros de 32 bits sin signo
uint16enteros de 16 bits sin signo
uint8enteros de 8 bits sin signo
doublenúmeros de coma flotante de doble precisión
floatnúmeros de coma flotante de precisión simple
stringcadenas de caracteres codificadas en UTF-8
bytearraybloques de datos binarios
gpslocationestructuras para indicaciones de posición GPS, formadas por tres números de coma flotante de doble precisión consecutivos para latitud, longitud y altitud sobre el nivel del mar

Parámetros de canal​

En total, incluidos los tipos de canal y de datos mencionados anteriormente, pueden especificarse los siguientes parámetros de canal

ParámetroTipo de datosDescripción
nameSTRINGNombre del canal
channelTypeSTRING ENUMTipo de canal, ya sea con marca de tiempo ("timestamped") o variable de proceso ("processvalue")
dataTypeSTRING ENUMTipo de datos de los valores de medición (véase más arriba)
bufferSizeUINT > 0Tamaño del búfer, es decir, número máximo de valores de medición dentro de una serie temporal antes de que se sobrescriban los valores de medición más antiguos
physicalDimensionSTRINGDimensión física del canal (p. ej., velocidad, tensión, temperatura, ...)
physicalUnitSTRINGUnidad física del canal (km/h, V, °C, ...)
metaDataJSON OBJECTMetadatos definidos por el usuario
filterJSON ARRAY of channel filter specificationsCascada de filtros definida por el usuario (por lo general, para la reducción de datos)
persistentBOOLIndicador de si el canal sobrevive a un reinicio del sistema
preservedBOOLIndicador de si el canal se carga desde una base de datos del equipo de medición al iniciarse el smartCORE y se escribe en dicha base de datos a intervalos regulares (p. ej., útil para contadores u otra información de funcionamiento)

Integración en los estados de funcionamiento del smartCORE​

En los distintos estados de funcionamiento del smartCORE, los canales smartCORE se gestionan del siguiente modo. Para más detalles, se remite a la documentación sobre la máquina de estados (State Machine) del smartCORE.

Creación de canales que se van a producir​

El módulo productor solicita a la gestión de canales del smartCORE la creación de un objeto de canal y recibe de vuelta una referencia a él.

información

Desde el punto de vista del software, este proceso solo es posible exclusivamente en el estado de funcionamiento de inicialización de canales de productor (InitProducerChannels).

Selección de canales que se van a consumir​

Un módulo consumidor puede solicitar en cualquier momento una referencia a los canales proporcionados por la gestión de canales del smartCORE. Además, dicho módulo debe registrar un consumidor (handle de lectura) de este canal, lo cual también es posible en cualquier momento.

información

Si estos canales ya están definidos en el momento de la configuración del módulo, en el software se utiliza para ello habitualmente el estado de funcionamiento de inicialización de canales de consumidor (InitConsumerChannels).

Producción de valores de medición en canales​

Una vez que un módulo ha señalizado la producción al smartCORE (StartProduce), dicho módulo puede escribir valores de medición en sus canales de productor. Esto se realiza utilizando una marca de tiempo, que puede tener distintos orígenes (p. ej., derivarse directamente de los datos o ser el instante de la producción).

En la mayoría de los casos, la producción de los valores de medición no se realiza directamente, sino a través de una cascada de filtros configurada (Filter chain), por lo general con el objetivo de reducir los datos.

En particular en el contexto de la reducción de datos, el concepto de marca de tiempo de confianza ha resultado útil.

Marcas de tiempo de confianza (Trusted Timestamps)​

Mientras que en una subsecuencia de dos valores de medición consecutivos con marca de tiempo puede suponerse que la validez del primer valor llega hasta la marca de tiempo del segundo (EXCLUSIVE), para el último valor de una secuencia, y por tanto también para el último valor producido, se desconoce hasta cuándo es válido; dicho de otro modo, si llegarán más valores de medición (idénticos o modificados) y cuándo.

La consecuencia es que NO puede utilizarse todo el intervalo de tiempo desde la última muestra, por ejemplo, para realizar en módulos consumidores cálculos basados en él.

En el marco de la reducción de datos, esto ha resultado especialmente problemático, ya que, por ejemplo, un valor constante se produce una sola vez y después simplemente se filtra, es decir, se descarta.

Por tanto, básicamente NO se puede distinguir entre

  • canales cuyos valores de medición son constantes y que han sido filtrados todos salvo un valor inicial,
  • canales que temporalmente no proporcionan más valores de medición (p. ej., porque se ha producido un retardo debido a la carga) y
  • canales que ya no proporcionan valores de medición de forma definitiva (p. ej., porque ha fallado un sensor).

El concepto de marca de tiempo de confianza ofrece una solución. Esta marca de tiempo, definida por el módulo productor, corresponde

  • o bien (implícitamente) a la marca de tiempo del último valor de medición producido
  • o bien puede definirse (explícitamente). Lo razonable es que esta marca de tiempo sea más reciente que la marca de tiempo del último valor de medición producido. En este caso, puede suponerse que el último valor de medición de la secuencia de datos es válido hasta la marca de tiempo de confianza (INCLUSIVE).

Arquitectura de filtros​

La arquitectura de filtros del smartCORE consiste básicamente en una cascada de etapas de filtro consecutivas.

Una única etapa de filtro recibe en su entrada tanto una secuencia de valores de medición con marca de tiempo como una marca de tiempo de confianza, y los transforma, en principio de cualquier manera, en una nueva secuencia de valores de medición con marca de tiempo y en una nueva marca de tiempo de confianza.

Filtro para la reducción de datos​

Para una reducción de datos en los módulos productores resulta adecuado configurar una cascada de filtros formada por el filtro datareduction.

Este filtro se configura (p. ej., en el marco de una configuración interactiva de canales por parte del usuario) como objeto JSON, por ejemplo de la siguiente manera

{
"name": "datareduction",
"absTolerance": 0.0,
"timeoutMs": 60000
}

En el caso de valores de medición numéricos, se descartan todos los valores que difieran del último valor producido en un valor absoluto inferior a la desviación especificada absTolerance. Sin embargo, este filtrado solo se realiza si entre el último valor producido y el valor considerado actualmente transcurre menos tiempo del especificado en timeoutMs; es decir, una vez transcurrido timeoutMs, en cualquier caso se incorpora una muestra al canal que se va a producir (producción de valores de apoyo adicionales).

En el caso de los tipos string y bytearray, la tolerancia absoluta especificada se ignora y cualquier desviación se considera una desviación efectiva.

información

La producción de valores de apoyo adicionales es (formalmente) innecesaria, ya que los módulos consumidores son responsables de interpretar correctamente los rangos de validez de los datos proporcionados (gracias a las marcas de tiempo de confianza). No obstante, ha resultado conveniente insertar valores de apoyo adicionales (reales) en los módulos productores, ya que esto permite utilizar módulos productores con módulos consumidores implementados de forma defectuosa (p. ej., no se produce una situación de tiempo de espera no deseada).