Funciones
Permiten convertir los valores de los puntos de naturaleza analógica de cuentas a unidades de ingeniería.
Los registros de los Dispositivos son transmitidos al SCADA como cuentas o valores numéricos sin una unidad o magnitud definida, a veces requieren escalamientos, inversiones, conversioes desde floating point, etc. Por ello muchas veces es necesario convertirlos mediante una función apropiada
Para ello se emplea una Función, que contendrá un fragmento de código JavaScript que será ejecutado tomando como entrada el valor del registro y devolverá como salida el valor convertido.
De esta forma podremos convertir el valor crudo 996 a 9,96 Volts aplicando una Función que divida por 100.
Las funciones también son utilizadas en la sección Cálculos para realizar operaciones con el valor de uno o más puntos o sentencias SQL.
Captura de pantalla
Definición
- Hacer clic en Nuevo en la parte superior derecha de la ventana
- Complete los siguientes campos
Campo Descripción Nombre Nombre de la Función. Con este nombre se verá en la columna correspondiente de la sección Puntos Función Ingresar la función JavaScript a utilizar. Para conversiones de valores de puntos esta deberá tomar un único argumento, en cambio si va a ser utilizada con un cálculo deberá recibir tantos argumentos como valores de entrada se requiera que tenga - Haga clic en Guardar
- A partir de ahora la nueva función estará disponible para ser asignada en la sección Puntos y Cálculos
Ejemplos de funciones
Rectas
Su fórmula será del tipo a*x+b, la función deberá ser del tipo:
function(x) { return m*x+b; }
Reemplazar la pendiente m y la ordenada al origen b por los valores correspondientes.
El valor crudo sin unidad procedente del registro se tomará como parámetro de entrada como x y se calculará la ordenada y.
Por ejemplo, si el valor de entrada es 123, la pendiente 2 y la ordenada al origen 5, el valor del punto será 251
Floating Point 32 bits
Función para convertir un registro de 32 bits (o dos registros MODBUS 16 bits consecutivos) cuando su contenido tiene formato coma flotante de precisión simple (1 bit de signo, 8 bits de exponente y 23 bits de mantisa).
1 8 23 +-+--------+-----------------------+ |S| Exp | Mantisa | +-+--------+-----------------------+ 31 30 23 22 0 function ieee32ToFloat(intval) { var fval = 0.0; var x;//exponent var m;//mantissa var s;//sign s = (intval & 0x80000000)?-1:1; x = ((intval >> 23) & 0xFF); m = (intval & 0x7FFFFF); switch(x) { case 0: //zero, do nothing, ignore negative zero and subnormals break; case 0xFF: if (m) fval = NaN; else if (s > 0) fval = Number.POSITIVE_INFINITY; else fval = Number.NEGATIVE_INFINITY; break; default: x -= 127; m += 0x800000; fval = s * (m / 8388608.0) * Math.pow(2, x); break; } return fval; }
Floating Point 16 bits
Función para convertir un registro de 16 bits cuando su contenido tiene formato coma flotante de precisión media (1 bit de signo, 5 bits de exponente y 10 bits de mantisa).
1 5 10 +-+-----+----------+ |S| Exp | Mantisa | +-+-----+----------+ 15 14 10 9 0 function ieee16ToFloat(intval) { var exponent = (intval & 0x7C00) >> 10; fraction = intval & 0x03FF; return (intval >> 15 ? -1 : 1) * ( exponent ? ( exponent === 0x1F ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 0x400) ) : 6.103515625e-5 * (fraction / 0x400) );
Ejemplos de funciones para la sección Cálculos
Suma de tres valores
Esta simple función permite sumar el valor de tres puntos. A diferencia de las funciones anteriores, no pensadas para cálculos, ésta toma tres parámetros de entrada.
function(a,b,c) { return a+b+c; }
Potencia aparente
Función con dos argumentos de entrada, donde p es la potencia activa y q la reactiva.
function(p,q) { return Math.sqrt(Math.pow(p,2)+Math.pow(q,2)); }