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 es realizada por la aplicación Server (Servidor).

Las fórmulas se ingresan en la columna Formula 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 en la columna Formula used (Fórmula utilizada). La tabla Formulas contiene funciones adicionales y estructuras de datos que pueden utilizarse en las fórmulas para los canales de entrada y salida.

Reglas para escribir fórmulas

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 y el sistema se tranca! La información sobre errores en las fórmulas se escribe en el registro (log) de la aplicación Servidor.

Reglas para calcular fórmulas para los canales 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 cuando la fórmula no se refiera a datos de otros canales.
  2. Los canales de los tipos Calculated * y Switching counter se calculan permanentmente en el orden correspondiente a los números de los canales. La fórmula de un canal calculado utiliza generalmente datos de otros canales.
  3. Los canales de los tipos Minute * y Hourly * sse calculan periódicamente, una vez por minuto o una vez por hora. Utilice estos tipos de canales para crear valores acumulados, por ejemplo, consumo de energía o tiempo de funcionamiento.
  4. Para los canales de los tipos Discrete y Real , los estados de los canales tras del cálculo son iguales a los estados de esos canales recibidos por el Servidor, si el cálculo del estado no lo especifica explícitamente.
  5. Los estados de los otros tipos de canales son marcados como Defined si el cálculo del estado no lo especifica explícitamente.
  6. Cuando la fórmula de un canal de entrada, no contiene el símbolo ";" (punto y coma), la fórmula calcula solamente el valor del canal de entrada.
  7. Si la fórmula de un canal de entrada contiene ";", la fórmula calcula el valor del canal de entrada y el estado. La primera parte antes del 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 se especifican límites a un canal, el estado del canal es recalculado tomando en cuenta los límites después de haber calculado 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 calcular el estado, devuelve un número entero del tipo int.

Reglas para calcular fórmulas para los canales de salida:

  1. Las fórmulas para los canales de salida se procesan utilizando los tipos de comando 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 datos de un comando binario devuelve una matriz de 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 de un logaritmo natural especificada por la constante e
PI double La relación entre la circunferencia y el diámetro de un círculo especificada por la constante, π

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 al clonar
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 e elevado a la potencia especificada
Ln(x), Log(x) double Calcula el logaritmo natural (base e) del 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 el calcular promedios, están disponibles en GitHub.

Depuración de fórmulas

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 archivo de registro del Servidor (Server log file) 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 C:\SCADA\ScadaServer\Log\

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