Saltar al contenido principal

Introducción para programadores

Aunque la sintaxis del módulo Math presenta muchas características similares a las de un lenguaje de programación, es importante tener presente que el módulo Math no es un lenguaje de programación.
Se trata simplemente de una colección de fórmulas que se evalúan fórmula por fórmula en cada iteración del módulo. El foco está en la relación temporal de las distintas señales entre sí. Nunca debe darse la situación de que un valor de resultado deje de estar definido en un instante determinado. Por este motivo, ciertas construcciones no funcionan, por ejemplo:

if (someCondition)
y = 2 * x;

¿Cómo debería determinarse y si no se cumple la condición?

En consecuencia, es posible que eche en falta algunas funciones propias de los lenguajes de programación; la más llamativa es que no existen construcciones de control de flujo.

A continuación encontrará algunos ejemplos de funciones con las que se puede lograr una especie de ejecución condicional:

Ejecución condicional​

Operador ternario ?​

La característica que más se parece a las clásicas construcciones de control de flujo es el operador ternario, que en el módulo Math funciona igual que en los lenguajes de programación habituales.

Ejemplo​

Ventil = Temperatur > 25.0 ? 20.0 : 80.0;

En un lenguaje de programación​

Ventil = Temperatur > 25.0 ? 20.0 : 80.0;
// oder
if (Temperatur > 25.0)
Ventil = 20.0;
else
Ventil = 80.0;

Interruptor controlado

aviso

Al utilizar el operador ternario hay que procurar no escribir construcciones propensas a errores como la siguiente:

Ergebnis = Messwert != 0.0 ? Maximum / Messwert : -1.0;
Esto puede provocar una división por cero.

En su lugar: Ergebnis = Maximum / nonZero(Messwert);

Función select​

Para seleccionar un valor concreto de un conjunto de valores disponibles, se puede utilizar la función select().

Ejemplo​

Auswahl = select(Index, Wert0, Wert1, Wert2, Wert3);

En un lenguaje de programación​

switch(index)
{
case 0: Auswahl = Wert0; break;
case 1: Auswahl = Wert1; break;
case 2: Auswahl = Wert2; break;
case 3: Auswahl = Wert3; break;
default: Auswahl = false;
}

Codificador de prioridad​

Para seleccionar un valor en función de un conjunto de condiciones, se puede utilizar la función prioEnc().

Ejemplo​

Status = prioEnc(Bedingung0, Bedingung1, Bedingung2, Bedingung3, {none: 1000, map: [10,20,30,40]});

En un lenguaje de programación​

if (Bedingung0)
Status = map[0]; // = 10
else if(Bedingung1)
Status = map[1]; // = 20
else if (Bedingung2)
Status = map[2]; // = 30
else if (Bedingung3)
Status = map[3]; // = 40
else
Status = none; // = 1000

También aquí la parametrización de la función ofrece más opciones, por ejemplo, detectar flancos como condición o mantener y continuar con la última condición establecida cuando no hay ninguna otra activa.

Limitación del rango de valores​

Para limitar un valor medido a un rango de valores determinado, se puede utilizar la función range().

Limitación del rango de valores

Ejemplo​

Begrenzt = range(Messwert, [-10.0, 10.0]);

En un lenguaje de programación​

if (Messwert < -10.0)
Begrenzt = -10.0;
else if (Messwert > 10.0)
Begrenzt = 10.0;
else
Begrenzt = Messwert;

Como alternativa, se pueden especificar valores arbitrarios que se devolverán cuando se alcance el límite inferior o superior.

Ejemplo​

Begrenzt = range(Messwert, [-10.0, 10.0], {lower: -99, upper: 99});

En un lenguaje de programación​

if (Messwert < -10.0)
Begrenzt = lower; // = -99;
else if (Messwert > 10.0)
Begrenzt = upper; // = 99;
else
Begrenzt = Messwert;

Almacenamiento temporal de valores​

Para almacenar valores entre iteraciones del módulo Math, se pueden utilizar los llamados FlipFlops.

rsFF​

Para almacenar un valor booleano, se puede utilizar la función rsFF().

Ejemplo​

Zustand = rsFF(BedingungReset, BedingungSet);

En un lenguaje de programación​

if (BedingungReset)
Zustand = false;
else if (BedingungSet)
Zustand = true;
else
Zustand = letzter Zustand;

dLatch​

Para almacenar un valor de cualquier tipo de datos, se puede utilizar la función dLatch().

Ejemplo​

Merker = dLatch(BedingungHold, Messwert);

En un lenguaje de programación:​

if (BedingungHold)
Merker = letzter Merker;
else
Merker = Messwert;