Uso de fórmulas

Las fórmulas se usan para calcular los valores y los estados de los canales de entrada, así como para calcular los valores de los comandos. El procesamiento de las fórmulas la realiza la aplicación Server (Servidor).

Las fórmulas se ingresan en la columna Formula (Fórmula) de las tablas Input channels (Canales de entrada) y Output channels (Canales de salida) de la base de datos de configuración. Para habilitar una fórmula, marque la casilla de verificación en la columna Formula used (Fórmula usada). La tabla Formula (Fórmulas) contiene las funciones adicionales y las estructuras de los datos que pueden usarse en las fórmulas para los canales de entrada y salida.

Reglas de escritura de una fórmula

Las reglas generales de escritura y uso de fórmulas son:

  1. Las fórmulas usan la sintaxis de expresiones del lenguaje C#. Muchas de las clases Microsoft .NET están accesibles, por ejemplo, las clases Math y DateTime.
  2. Es posible añadir nuevas constantes, campos, propiedades y métodos para usarlos en las fórmulas.
  3. Si al menos una fórmula contiene un error, la operación del Servidor será imposible. La información sobre los errores en las fórmulas se escribe en el registro de la aplicación Servidor.

Reglas para calcular las fórmulas del canal de entrada:

  1. Los canales de los tipos Discrete y Real se calculan cuando el Servidor recibe los datos de canales. Utilice estos tipos de canales si la fórmula no se refiere a los datos de otros canales.
  2. Los canales de los tipos Calculated * y Switching counter se calculan permanentemente en el orden correspondiente a los números de los canales. Una fórmula de un canal calculado utiliza generalmente datos de otros canales.
  3. Los canales de los tipos Minute * y Hourly * se calculan periódicamente, una vez por minuto o una vez por hora. Utilice estos tipos de canales para crear los valores acumulados, por ejemplo, consumo de energía o el tiempo de funcionamiento.
  4. Para los canales de los tipos Discrete y Real , los estados de los canales después del cálculo son iguales a los estados de aquellos canales recibidos por el Servidor, si el estado del cálculo no está especificado explícitamente.
  5. Los estados de los otros tipos de canales son marcados como Defined si el cálculo de estado no está especificado explícitamente.
  6. Cuando la fórmula de un canal de entrada, la que no contiene el símbolo ";" (punto y coma), solamente calcula el valor del canal de entrada.
  7. Si la fórmula de un canal de entrada contiene ";", entonces la fórmula calcula el valor del canal de entrada y el estado. La primera parte antes de punto y coma es la fórmula para calcular un valor y la segunda parte después de punto y coma calcula el estado.
  8. Si los límites del canal están especificados, el estado del canal se recalcula tomando en cuenta los límites después de calcular la fórmula del canal.
  9. La fórmula para calcular el valor de un canal debe devolver un número real del tipo double, y la fórmula para el cálculo del estado devuelve un número entero del tipo int.

Reglas para calcular las fórmulas del canal de salida:

  1. Las fórmulas se procesan para los canales de salida que tienen los tipos de comandos Standard y Binary.
  2. Una fórmula para calcular el valor de un comando estándar debe devolver un número real del tipo double, y la fórmula para calcular los datos de un comando binario devuelve una matriz de los bytes del tipo byte[ ].

Fórmulas existentes

Los variables accesibles en las fórmulas son:

Variable Tipo de valor Descripción
CnlVal, Cnl double El valor del canal de entrada transmitido al Servidor antes del cálculo
CnlStat int El estado del canal de entrada transmitido al Servidor antes del cálculo
CmdVal, Cmd double El valor del comando transmitido al Servidor antes del cálculo
CmdData byte[] Los datos del comando transmitidos al Servidor antes del cálculo
CnlNum int El número de canal para el cual se calcula la fórmula
E double La base logarítmica natural especificada por la constante, e
PI double La proporción de la circunferencia de un círculo a su diámetro especificada por la constante, π

Las funciones accesibles en las fórmulas:

Función Tipo de valor Descripción
N(n) int Devuelve el número del canal especificado para actualizar los números durante la clonación
Val() double Obtiene el valor actual del canal de la fórmula
Val(n) double Obtiene el valor actual del canal n
SetVal(n, val) double Establece el valor actual del canal n
Stat() int Obtiene el estado actual del canal de la fórmula
Stat(n) int Obtiene el estado actual del canal n
SetStat(n, stat) int Establece el estado actual del canal n
SetData(n, val, stat) double Establece el valor y el estado actual del canal n
Abs(x) double Calcula el valor absoluto de un número
Sin(x) double Calcula el seno del ángulo especificado
Cos(x) double Calcula el coseno del ángulo especificado
Tan(x) double Calcula la tangente del ángulo especificado
Exp(x) double Calcula un e elevado a la potencia especificada
Ln(x), Log(x) double Calcula el logaritmo natural (e base) de un número especificado
Sqr(x) double Calcula el cuadrado de un número especificado
Sqrt(x) double Calcula la raíz cuadrada de un número especificado

Fórmulas adicionales, incluidas las fórmulas para calcular promedios, están disponibles en GitHub.

Fórmulas de depuración

Un desarrollador que crea fórmulas personalizadas tiene que verificar la sintaxis de las fórmulas y validar que funcionen correctamente. Si el servicio del Servidor no puede compilar las fórmulas en el inicio, se escribirá información sobre el error en el Server log file (Archivo de registro del servidor) y el código fuente de las fórmulas que el Servidor trata de compilar estará disponible en CalcEngine.cs, ubicado en el directorio de registro del Servidor, por defecto es C:\SCADA\ScadaServer\Log\

Para desarrollar las fórmulas complejas se recomienda usar Microsoft Visual Studio Community Edition. Añada una referencia a FormulaTester.dll en el proyecto. Como ejemplo, utilice el proyecto mencionado anteriormente que contiene las fórmulas.