Rondeau 3535 C1262ABY
CABA, Buenos Aires
C1262ABY Argentina
,

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)); }