Las expresiones de fórmula son una de las características más importantes de los modelos. Gracias a ellas podemos utilizar funciones matemáticas para transformar y agregar los datos industriales y convertirlos en información útil sobre funcionamiento de una instalación.
Es posible aplicar expresiones de fórmula en las transformaciones y en las métricas para definir el valor y el formato en los que Neuron mostrará los resultados.
Elementos de expresiones de fórmula
Variables
Las variables representan las propiedades de los activos en las expresiones de fórmula. Al utilizar variables en las expresiones de fórmula, puedes procesar datos de constantes (atributos), flujos de datos sin procesar (medidas) y otras propiedades de fórmula.
Las variables pueden representar las propiedades de los activos desde el mismo modelo o desde submodelos de activos. Solo es posible introducir variables en submodelos de activos a través de fórmulas de métricas. Los nombres de variables distinguen entre mayúsculas y minúsculas.
Literales
Puedes definir literales de número y cadena en las expresiones de fórmula.
Números: utiliza números y notación científica para definir números enteros y dobles. Puedes utilizar la notación E para expresar números con notación científica. Ejemplos:
1, 2.0, .9, -23.1, 7.89e3, 3.4E-5
Cadenas: utiliza los caracteres
'
(comillas) y"
(comillas dobles) para definir cadenas. El tipo de comillas utilizado para marcar el inicio y el final debe coincidir. Si quieres aplicar escape a una comilla que coincide con la que se utiliza para declarar una cadena, incluye ese carácter de comilla dos veces. Este es el único carácter de escape en las cadenas. Ejemplos:'active'
,"inactive"
,'{"temp": 52}'
,"{""temp"": ""high""}"
.
Operadores
Puedes utilizar los siguientes operadores en las expresiones de fórmula:
Operador | Descripción |
| Si ambos operandos son números, este operador añade los operandos izquierdo y derecho.
Si cualquier operando es una cadena, este operador concatena los operandos izquierdo y derecho como cadenas.
Por ejemplo: La expresión
La cadena concatenada puede tener hasta 1024 caracteres. Si la cadena supera los 1024 caracteres, no genera datos para ese cálculo.
|
| Resta el operando derecho del operando izquierdo.
Solo se puede utilizar con operandos numéricos.
|
| Divide el operando izquierdo por el operando derecho.
Solo se puede utilizar con operandos numéricos.
|
| Multiplica los operandos izquierdo y derecho.
Solo puede utilizar con operandos numéricos.
|
| Eleva el operando izquierdo a la potencia del operando derecho (exponenciación).
Solo se puede utilizar con operandos numéricos.
|
| Devuelve el resto de la división del operando izquierdo por el operando derecho.
El resultado tiene el mismo signo que el operando izquierdo. Este comportamiento difiere de la operación de módulo.
Solo se puede utilizar con operandos numéricos.
|
| Devuelve el carácter en un índice
Por ejemplo:
|
| Devuelve un sector de la cadena
Este operador tiene los siguientes argumentos:
Puedes omitir el argumento
Los argumentos deben ser enteros o la constante "none".
Si especificas
Por ejemplo:
|
Constantes
Puedes utilizar las siguientes constantes matemáticas comunes en las expresiones. Las constantes no distinguen entre mayúsculas y minúsculas.
⛔ Si defines una variable con el mismo nombre que una constante,
la variable sobrescribe la constante.
Constante | Descripción |
| El número pi (π): |
| El número e: |
| Equivalente al número 1.
Los booleanos se convierten en sus equivalentes numéricos. |
| Equivalente al número 0.
Los booleanos se convierten en sus equivalentes numéricos. |
| Equivalente a ningún valor. Puedes utilizar esta constante para no generar nada como resultado de una expresión condicional. |
Funciones
Puedes utilizar una gran variedad de funciones para operar con los datos de las expresiones de fórmula.
Las transformaciones y las métricas admiten funciones. La siguiente tabla indica qué tipos de funciones son compatibles con cada tipo de propiedad de fórmula.
Tipo de función | Transformaciones | Métricas |
Comunes | Sí | Sí |
Comparación | Sí | Sí |
Condicionales | Sí | Sí |
Cadenas | Sí | Sí |
Agregación | No | Sí |
Temporales | No | Sí |
Fecha y hora | Sí | Sí |
Sintaxis de una función
Puedes utilizar la siguiente sintaxis para crear las siguientes funciones:
Sintaxis normal: con la sintaxis normal, el nombre de la función va seguido de paréntesis con cero o más argumentos.
function_name(argument1, argument2, argument3, ...)
. Por ejemplo, las funciones con la sintaxis normal podrían tener el aspectolog(x)
ycontains(s, substring)
.
Sintaxis uniforme de llamadas a funciones (UFCS): puedes utilizar funciones de sintaxis para llamadas a métodos en programación orientada a objetos. Con UFCS, el primer argumento va seguido de punto (.), luego el nombre de la función y los argumentos restantes (si los hay) entre paréntesis.
argument1.function_name(argument2, argument3, ...)
. Por ejemplo, las funciones con UFCS pueden tener un aspecto similar ax.log()
ys.contains(substring)
. También es posible utilizar UFCS para encadenar funciones posteriores. Neuron utiliza el resultado de la evaluación de la función actual como primer argumento para la siguiente función. Por ejemplo, puedes utilizarmessage.jp('$.status').lower().contains('fail')
en lugar decontains(lower(jp(message, '$.status')),'fail')
.
Funciones comunes
Al trabajar con transformaciones y métricas puedes utilizar las siguientes funciones para calcular funciones matemáticas comunes en transformaciones y métricas:
Función | Descripción |
| Devuelve el valor absoluto de |
| Devuelve el arco coseno de |
| Devuelve el arcoseno de |
| Devuelve el arco tangente de |
| Devuelve la raíz cúbica de |
| Devuelve el entero más cercano mayor que |
| Devuelve el coseno de |
| Devuelve el coseno hiperbólico de |
| Devuelve la cotangente de |
| Devuelve e a la potencia de |
| Devuelve |
| Devuelve el entero más cercano menor que |
| Devuelve el |
| Devuelve el |
| Devuelve |
| Devuelve el |
| Devuelve |
| Devuelve el signo de |
| Devuelve el seno de |
| Devuelve el seno hiperbólico de |
| Devuelve la raíz cuadrada de |
| Devuelve la tangente de |
| Devuelve la tangente hiperbólica de |
Funciones de comparación
En las transformaciones y métricas puedes utilizar las siguientes funciones para comparar dos valores y la salida 1
(true) o 0
(false).
Neuron compara cadenas por orden lexicográfico.
Función | Descripción |
| Devuelve Esta función no devuelve un valor si |
| Devuelve Neuron considera que los argumentos son iguales si están dentro de una tolerancia relativa de Esta función no devuelve un valor si |
| Devuelve Neuron considera que los argumentos son iguales si están dentro de una tolerancia relativa de |
| Devuelve Esta función no devuelve un valor si |
| Devuelve Neuron considera que los argumentos son iguales si están dentro de una tolerancia relativa de Se comporta de manera similar a la función isclose en Python. Esta función no devuelve un valor si |
| Devuelve Esta función no devuelve un valor si |
Funciones condicionales
En las transformaciones y métricas, puedes utilizar la siguiente función para comprobar una condición y devolver resultados diferentes si la condición se evalúa como true o false:
Función | Descripción |
| Evalúa
Esta función considera Puede devolver la constante
Ejemplos:
Recomendamos utilizar contenedores para funciones condicionales anidadas donde uno o más argumentos son funciones condicionales. Puedes utilizar
Por ejemplo, puedes utilizar
Importante: Debes utilizar |
Funciones de cadena
En transformaciones y métricas puedes utilizar las siguientes funciones para operar en cadenas:
⚠️ Las expresiones de fórmula solo pueden generar valores dobles (tipo double). Las expresiones anidadas pueden producir otros tipos de datos, como cadenas, pero la fórmula en su conjunto debe evaluarse como un número.
Puedes utilizar la Función jp para convertir una cadena en un número.
Si defines una fórmula que calcula un valor no numérico, Neuron no
genera un punto de datos para ese cálculo.
Función | Descripción |
| Devuelve la longitud de la cadena |
| Devuelve el índice de la cadena |
| Devuelve |
| Devuelve la cadena |
| Devuelve la cadena |
| Evalúa la cadena Utiliza esta función para hacer lo siguiente:
Para extraer un valor de cadena de una estructura JSON y devolverlo como un número, hay que utilizar varias funciones anidadas La cadena
Ejemplos:
|
Para obtener más información, consulta Valores indefinidos, infinitos y de desbordamiento.
Funciones de agregación
Únicamente en métricas es posible utilizar las siguientes funciones para agregar valores de entrada en cada intervalo de tiempo y calcular un único valor de salida. Las funciones de agregación pueden agregar datos de activos asociados.
Los argumentos de las funciones de agregación pueden ser variables, literales numéricos, funciones temporales o funciones de agregación. Esto significa que no se pueden proporcionar expresiones anidadas como argumentos para funciones de agregación. Por ejemplo, la fórmula avg(x + 1)
no es válida. En cambio, la fórmula max(latest(x), latest(y), latest(z))
es válida y devuelve el mayor valor actual de las x
propiedades y
, y z
.
⛔ Neuron también calcula automáticamente agregados durante determinados intervalos de tiempo para todas las propiedades.
Función | Descripción |
| Devuelve la media de los valores de las variables dadas durante el intervalo de tiempo actual. Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual. |
| Devuelve la suma de los valores de las variables dadas durante el intervalo de tiempo actual. Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual. |
| Devuelve el mínimo de los valores de las variables dadas durante el intervalo de tiempo actual. Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual. |
| Devuelve el máximo de los valores de las variables dadas durante el intervalo de tiempo actual. Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual. |
| Devuelve el número total de puntos de datos para las variables dadas durante el intervalo de tiempo actual. Esta función calcula un punto de datos para cada intervalo de tiempo. |
Funciones temporales
Las métricas nos permiten utilizar las siguientes funciones que devuelven valores basados en marcas temporales de puntos de datos.
Los argumentos de la función temporal deben ser propiedades del modelo de recursos local, por tanto no es posible utilizar propiedades de modelos de activos secundarios en funciones temporales. Tampoco se pueden utilizar expresiones como argumentos para funciones temporales.
Función | Descripción |
| Devuelve el valor de la variable dada con la marca temporal más temprana durante el intervalo de tiempo especificado. |
| Devuelve el valor de la variable dada con la última marca temporal durante el intervalo de tiempo especificado. |
| Devuelve el valor de la variable dada con la última marca temporal antes del intervalo de tiempo especificado. Esta función calcula un punto de datos para cada intervalo de tiempo, si la propiedad de entrada tiene al menos un punto de datos en su historial. |
| Devuelve el valor de la variable dada con la última marca temporal antes del final del intervalo de tiempo especificado. Esta función calcula un punto de datos para cada intervalo de tiempo si la propiedad de entrada tiene al menos un punto de datos en su historial. |
| Devuelve la cantidad de tiempo (en segundos) en que las variables son positivas en el intervalo de tiempo especificado. Puedes utilizar las funciones de comparación para crear una propiedad de transformación para que la función
Por ejemplo, si tiene una propiedad
La función no admite propiedades de métricas como variables de entrada. Esta función calcula un punto de datos para cada intervalo de tiempo, si la propiedad de entrada tiene al menos un punto de datos en su historial. |
El siguiente diagrama muestra cómo Neuron calcula las funciones temporales first
, last
, earliest
y latest
en relación con el intervalo de tiempo actual.
Ejemplo de Escenario de statetime:
Considera un ejemplo en el que hay un activo con las siguientes propiedades:
idle
– Una medida que es0
o1
. Cuando el valor es1
, la máquina está inactiva.idle time
– Una métrica que utiliza la fórmulastatetime(idle)
para calcular la cantidad de tiempo en segundos en que la máquina está inactiva, en un intervalo de1
minuto.
La propiedad idle
tiene los siguientes puntos de datos.
Marca temporal | 14:00:00 h | 14:00:30 h | 14:01:15 h | 14:02:45 h | 14:04:00 h |
Idle | 0 | 1 | 1 | 0 | 0 |
Neuron calcula la propiedad idleTime
cada minuto a partir de los valores de idle
. Una vez completado este cálculo, la propiedad idleTime
tiene los siguientes puntos de datos.
Marca temporal | 14:00:00 h | 14:01:00 h | 14:02:00 h | 14:03:00 h | 14:04:00 h |
Idle Time | N/D | 30 | 60 | 45 | 0 |
Neuron realiza los siguientes cálculos para idleTime
al final de cada minuto.
A las 14:00 h (de las 13:59 h a las 14:00 h)
A las 14:01 h (de las 14:00 h a las 14:01 h)
A las 14:02 h (de las 14:01 h a las 14:02 h)
A las 14:03 h (de las 14:02 h a las 14:03 h)
A las 14:04 h (de las 14:03 h a las 14:04 h)
Funciones de fecha y hora
En las transformaciones y métricas se pueden utilizar las funciones de fecha y hora de las siguientes formas:
Recuperar la marca temporal actual de un punto de datos en UTC o en la zona horaria local.
Crear marcas temporales con argumentos como
year
month
, yday_of_month
.Extraer un periodo de tiempo como, por ejemplo, un año o mes con la fórmula
unix_time
.
Función | Descripción |
| Devuelve la fecha y hora actuales, en segundos, en formato de tiempo Unix. |
| En las transformaciones la función devuelve la marca temporal del mensaje de entrada, en segundos, en formato de tiempo Unix.
En las métricas la función devuelve la marca temporal recuperada al final de la ventana actual, en segundos, en formato de tiempo Unix. |
| Devuelve el tiempo de entrada en segundos, en formato de tiempo Unix. Se aplican los siguientes requisitos cuando se utiliza la función:
Los siguientes límites se aplican cuando se utiliza la función:
Ejemplos:
|
| Devuelve el año, el día del mes, el día de la semana, el día del año, la hora, el minuto o el segundo de la zona horaria especificada a partir de la hora Unix. Se aplican los siguientes requisitos cuando se utiliza la función:
Respuesta de ejemplo:
Ejemplos:
|
| Devuelve el año de |
| Devuelve el mes de |
| Devuelve el día del mes de |
| Devuelve el día de la semana de |
| Devuelve el día del año de |
| Devuelve la hora de |
| Devuelve el minuto de |
| Devuelve el segundo de |
Formatos de zona horaria admitidos
Puedes especificar el argumento de zona horaria de las siguientes formas:
Desplazamiento de zona horaria: especifique
'Z'
para UTC o un desplazamiento ('+2'
o'-5'
).Offset (IDsDesplazamiento): combina una abreviatura de zona horaria y un desplazamiento. Por ejemplo,
'GMT+2'
y'UTC-01:00'
.Basada en IDs región: por ejemplo,
'Etc/GMT+12'
y'Pacific/Pago_Pago'
.
La abreviatura de zona horaria solo debe contener tres letras. Puedes consultar el listado de Abreviaturas de zonas horarias basadas en regiones IDs admitidas.
Uso de cadenas en fórmulas
Puedes operar en cadenas en tus expresiones de fórmulas. También puedes introducir cadenas a partir de variables que hagan referencia a atributos y propiedades de medición.
⚠️ Las expresiones de fórmula solo pueden generar valores dobles.
Las expresiones anidadas pueden producir otros tipos de datos, como
cadenas, pero la fórmula en su conjunto debe evaluarse como un número.
Puedes utilizar la Función jp para convertir una cadena en un número.
Si defines una fórmula que calcula un valor no numérico, Neuron no
genera un punto de datos para ese cálculo.
Neuron proporciona las siguientes características de expresión de fórmula que puedes utilizar para operar en cadenas:
Literales de cadena
El operador de índice (
s[index]
)El operador de sector (
s[start:end:step]
)Funciones de comparación que se pueden utilizar para comparar cadenas por orden lexicográfico
Funciones de cadena, que incluyen la función jp que puede analizar objetos JSON serializados y convertir cadenas en números
Filtrar datos
Puedes utilizar la función if
para filtrar los puntos de datos que no cumplen una condición. La función if
evalúa una condición y devuelve diferentes valores para los resultados de true
y false
. Puedes utilizar la constante none
como salida para un caso de una función if
para descartar el punto de datos de ese caso.
Si quieres filtrar datos que coinciden con una condición crea una transformación que utilice la función if
para definir una condición que compruebe si se cumple la condición y devuelva none
como valor de result_if_true
o result_if_false
.
Ejemplo de filtrado de datos en los que el agua no hierve:
Imagina una situación en la una medición temp
proporcione la temperatura (en celsius) del agua de una máquina. Puedes definir la siguiente transformación para filtrar los datos donde el agua está hirviendo:
Transformación: boiling_temps = if(gte(temp, 100), temp, none)
devuelve la temperatura si es mayor o igual a 100 grados celsius; de lo contrario, no devuelve ningún dato.
Contar datos que coinciden con una condición
Puedes utilizar funciones de comparación y sum()
para contar el número de puntos de datos para los que se cumple una condición.
Para contar puntos de datos que coincidan con una condición:
Crea una transformación que utilice una función de comparación para definir una condición de filtro en otra propiedad.
Crea una métrica que sume los puntos de datos donde se cumple esa condición.
Ejemplo de recuento del número de puntos de datos en los que el agua está hirviendo:
Imagina una situación en la que tengas una medición, temp
, que proporciona la temperatura (en celsius) del agua de una máquina. Puedes definir las siguientes propiedades de transformación y métrica para contar el número de puntos de datos en los que hierve el agua:
Transformación:
is_boiling = gte(temp, 100)
– devuelve1
si la temperatura es mayor o igual a 100 grados celsius; de lo contrario, devuelve0
.Métrica:
boiling_count = sum(is_boiling)
– Devuelve el número de puntos de datos en los que el agua está hirviendo.
Datos con retraso en fórmulas
Neuron admite la adquisición tardía de datos con una antigüedad de hasta 7 días. Cuando Neuron recibe datos tardíos, vuelve a calcular los valores existentes para cualquier métrica que introduzca los datos tardíos en una ventana anterior. Estos nuevos cálculos dan lugar a cargos de procesamiento de datos.
⛔ Cuando Neuron calcula propiedades que introducen datos tardíos,
utiliza la expresión de fórmula actual de cada propiedad.
Cuando Neuron vuelva a calcular una ventana anterior de una métrica,
reemplazará el valor anterior de esa ventana. Si ha habilitado las
notificaciones para esa métrica, Neuron también emitirá una
notificación de valor de propiedad.
Esto significa que puedes recibir una nueva notificación de
actualización de valor de propiedad para la misma propiedad y marca
temporal para la que recibiste previamente una notificación. Si las
aplicaciones o lagos de datos consumen notificaciones de valor de
propiedad, debes actualizar el valor anterior con el nuevo valor para
que los datos sean precisos.
Calidad de datos en fórmulas
En Neuron cada punto de datos tiene un código de calidad que puede ser uno de los siguientes:
GOOD
: los datos no se ven afectados por ningún problema.BAD
: los datos se ven afectados por algún problema; por ejemplo, un error en un sensor.UNCERTAIN
: los datos se ven afectados por algún problema; por ejemplo, la falta de precisión de un sensor.
Neuron consume solo datos de calidad GOOD
cuando calcula transformaciones y métricas. Neuron genera solo datos de calidad GOOD
para cálculos exitosos. Si un cálculo no se realiza correctamente, Neuron no genera un punto de datos para ese cálculo. Esto puede ocurrir si un cálculo da como resultado un valor indefinido, infinito o de desbordamiento.
Valores indefinidos, infinitos y de desbordamiento
Algunas expresiones de fórmula (como x / 0
, sqrt(-1)
o log(0)
) calculan valores que no están definidos en un sistema de números reales, infinitos o fuera del rango admitido por Neuron. Cuando la expresión de una propiedad de recurso calcula un valor indefinido, infinito o de desbordamiento, Neuron no genera un punto de datos para ese cálculo.
Neuron tampoco genera un punto de datos si calcula un valor no numérico como resultado de una expresión de fórmula. Esto significa que si define una fórmula que calcula una cadena, matriz o la constante cero, Neuron no genera un punto de datos para ese cálculo.
Ejemplo:
Cada una de las siguientes expresiones de fórmula da como resultado un valor que Neuron no puede representar como un número. Neuron no genera un punto de datos cuando calcula estas expresiones de fórmula.
x / 0
no está definido.log(0)
no está definido.sqrt(-1)
no está definido en un sistema de números reales."hello" + " world"
es una cadena.jp('{"values":[3,6,7]}', '$.values')
es una matriz.if(gte(temp, 100), temp, none)
esnone
cuandotemp
es menor que el valor100
.
Si tienes problemas con el uso de expresiones de fórmula en Modelos de activos o estás interesado en conocer otros detalles, ponte en contacto con nuestro departamento de soporte enviando un email a neuron@plexo.cloud