Übersicht Formel

Mit diesem Baustein wird eine frei eingegebene Rechnung über die Eingänge ausgeführt. Statt mehrere Rechen- und Vergleichsbausteine hintereinander zu schalten, wird die Rechnung als Text hingeschrieben, zum Beispiel (E1+E2)/2 oder if E1>20 then E2 else E3.

Die Formel wird über den Knopf neben dem Parameter "Formel" bearbeitet. Der Editor prüft die Eingabe laufend und zeigt an, an welcher Stelle etwas nicht stimmt; übernehmen lässt sich nur eine fehlerfreie Formel.

Der Baustein rechnet ausschließlich mit den Werten, die gerade an den Eingängen anliegen. Er merkt sich nichts, kennt keine Schleifen und greift auf nichts anderes zu. Wird mehr gebraucht, ist das Lua Skript das richtige Werkzeug.


Eingänge

TR
Trigger
Löst die Berechnung aus, wenn als Berechnung "Nur bei Trigger" eingestellt ist. Gerechnet wird bei der steigenden Flanke, also beim Wechsel von 0 auf einen Wert ungleich 0. Bei den anderen Betriebsarten bleibt der Eingang ohne Wirkung und kann unbelegt bleiben.
E1 ... E8
Eingang 1 bis 8
Die Werte, mit denen gerechnet wird. Unter genau diesen Namen werden sie in der Formel angesprochen. Wie viele Eingänge der Baustein hat, legt der Parameter "Anzahl Eingänge" fest. Ein nicht verknüpfter Eingang liefert 0.

Ausgänge

AW
Ergebnis
Das Ergebnis der Formel.
AB
Ergebnis als Bit
1, solange das Ergebnis nicht 0 ist, sonst 0. Praktisch bei Formeln, die eine Bedingung prüfen, denn Vergleiche liefern immer 1 oder 0.
FE
Fehler
1, solange die Formel nicht gerechnet werden kann - entweder weil sie fehlerhaft ist oder weil beim Rechnen etwas nicht aufgeht, zum Beispiel eine Division durch Null. Sonst 0.

Parameter


Formel
Öffnet über den Knopf den Editor, in dem die Rechnung eingegeben wird. Welche Schreibweise erlaubt ist, steht weiter unten.

Anzahl Eingänge
Wie viele Werteingänge der Baustein bekommt, 1 bis 8. In der Formel darf nur auf vorhandene Eingänge zugegriffen werden.

Berechnung
Wann gerechnet wird:
  • Bei Eingangsänderung - sobald sich ein Eingangswert ändert. Das ist der Normalfall.
  • Nur bei Trigger - nur bei der steigenden Flanke am Eingang TR. Sinnvoll, wenn mehrere Eingänge nacheinander eintreffen und erst mit dem vollständigen Satz gerechnet werden soll.
  • Zyklisch - in dem unter "Zykluszeit" eingestellten Abstand, unabhängig davon, ob sich etwas geändert hat.

Zykluszeit
Abstand zwischen zwei Berechnungen in Sekunden. Wird nur angezeigt, wenn als Berechnung "Zyklisch" gewählt ist.

Nachkommastellen
Auf wie viele Nachkommastellen das Ergebnis gerundet wird. -1 bedeutet, dass nicht gerundet wird.

Bei Fehler
Was der Ausgang AW zeigt, solange nicht gerechnet werden kann:
  • Letzten Wert halten - das zuletzt gültige Ergebnis bleibt stehen.
  • 0 ausgeben - der Ausgang geht auf 0.
Der Ausgang FE meldet den Fehler in beiden Fällen.

Aufbau einer Formel


Eingänge
Die Eingangswerte heißen in der Formel E1 bis E8 - genau so, wie sie am Baustein beschriftet sind. Der Trigger-Eingang TR wird in der Formel nicht verwendet.

Groß- und Kleinschreibung
Spielt keine Rolle. E1, e1, IF und if sind gleichwertig.

Zahlen
Immer mit Dezimalpunkt: 0.5, nicht 0,5. Das Komma trennt in der Formel die Werte einer Funktion.

Leerzeichen
Dürfen beliebig gesetzt werden. E1+E2 und E1 + E2 sind dasselbe. Auch ein Zeilenumbruch ist erlaubt, damit sich lange Formeln übersichtlich schreiben lassen.

Wahr und falsch
Es gibt keine eigenen Wahrheitswerte. Ein Vergleich liefert 1 für zutreffend und 0 für nicht zutreffend. Umgekehrt gilt in einer Bedingung jeder Wert ungleich 0 als zutreffend.

Rechnen

Zeichen
Bedeutung
Beispiel mit E1 = 20 und E2 = 8
+
Addition
E1 + E2 ergibt 28
-
Subtraktion
E1 - E2 ergibt 12
*
Multiplikation
E1 * E2 ergibt 160
/
Division
E1 / E2 ergibt 2.5
%
Rest einer Division
E1 % E2 ergibt 4, weil 20 geteilt durch 8 zwei Mal aufgeht und 4 übrig bleiben
-
Vorzeichen
-E1 ergibt -20
( )
Klammern
Ohne Klammern gilt Punkt vor Strich: E1 + E2 * 2 ergibt 36, (E1 + E2) * 2 dagegen 56

Vergleichen

Zeichen
Bedeutung
Beispiel mit E1 = 20 und E2 = 8
<
kleiner als
E1 < E2 ergibt 0
<=
kleiner oder gleich
E1 <= E2 ergibt 0
>
größer als
E1 > E2 ergibt 1
>=
größer oder gleich
E1 >= E2 ergibt 1
==
gleich
E1 == E2 ergibt 0. Achtung: zwei Gleichheitszeichen, ein einzelnes wird als Fehler gemeldet
!=
ungleich
E1 != E2 ergibt 1

Verknüpfen

Zeichen
Bedeutung
Beispiel mit E1 = 1 und E2 = 0
and
&&
und - beides muss zutreffen
E1 and E2 ergibt 0
or
||
oder - eines von beiden genügt
E1 or E2 ergibt 1
not
!
nicht - kehrt um
not E1 ergibt 0, not E2 ergibt 1

Funktionen

Funktion
Bedeutung
Beispiel
min(a,b)
der kleinere der beiden Werte
min(E1,E2) mit E1 = 18 und E2 = 21 ergibt 18
max(a,b)
der größere der beiden Werte
max(E1,E2) mit E1 = 18 und E2 = 21 ergibt 21
abs(x)
Betrag, also der Wert ohne Vorzeichen
abs(E1-E2) mit E1 = 18 und E2 = 21 ergibt 3
round(x)
kaufmännisch auf eine ganze Zahl runden
round(E1) mit E1 = 21.6 ergibt 22
floor(x)
auf die nächste ganze Zahl abrunden
floor(E1) mit E1 = 21.6 ergibt 21
ceil(x)
auf die nächste ganze Zahl aufrunden
ceil(E1) mit E1 = 21.2 ergibt 22
sqrt(x)
Quadratwurzel
sqrt(E1) mit E1 = 16 ergibt 4. Ein negativer Wert setzt den Ausgang FE
pow(a,b)
a hoch b
pow(E1,2) mit E1 = 3 ergibt 9
limit(x,lo,hi)
Wert auf einen Bereich begrenzen
limit(E1,0,100) ergibt 100 bei E1 = 137, 0 bei E1 = -5 und 42 bei E1 = 42
pi
die Kreiszahl, 3.14159...
pi*pow(E1,2) mit E1 = 2 ergibt 12.566

Bedingungen


Aufbau
if Bedingung then Wert else Wert

Trifft die Bedingung zu, gilt der Wert hinter then, sonst der hinter else. Der Teil mit else muss immer angegeben werden - der Baustein hat für jeden Fall einen Wert auszugeben.

Einfaches Beispiel
if E1 > 20 then 1 else 0
Ergibt 1, sobald E1 über 20 liegt, sonst 0.

Mehrere Stufen
if E1 > 30 then 3 else if E1 > 20 then 2 else 1
Ergibt 3 über 30, 2 zwischen 20 und 30 und sonst 1. Bedingungen lassen sich beliebig ineinander schachteln.

Nur der zutreffende Zweig wird gerechnet
if E2 == 0 then 0 else E1 / E2
Ist E2 gleich 0, wird der Teil hinter else gar nicht erst gerechnet. So lässt sich eine Division sauber absichern, ohne dass der Ausgang FE anspricht.

Beispiele aus der Praxis

Aufgabe
Formel
Erklärung
Mittelwert zweier Fühler
(E1+E2)/2
E1 und E2 sind die beiden Raumfühler. Die Klammern sind wichtig, ohne sie würde nur E2 halbiert.
Temperatur­differenz ohne Vorzeichen
abs(E1-E2)
Liefert immer den positiven Abstand zwischen Vorlauf und Rücklauf, egal welcher Wert größer ist.
Sollwert begrenzen
limit(E1,18,26)
Der über die Visualisierung eingestellte Sollwert wird auf einen sinnvollen Bereich gezwungen.
Stellgröße in Prozent umrechnen
limit(E1*10,0,100)
Aus einem Wert von 0 bis 10 wird ein Prozentwert von 0 bis 100. Die Begrenzung fängt Ausreißer ab.
Freigabe nur wenn zwei Bedingungen zutreffen
E1 > 200 and E2 < 25
Ergibt 1, wenn die Helligkeit über 200 liegt und die Temperatur unter 25 - sonst 0. Der Ausgang AB lässt sich direkt als Freigabe weiterverwenden.
Zwischen zwei Sollwerten umschalten
if E3 then E1 else E2
E3 ist der Betriebszustand: ist er gesetzt, gilt der Komfortsollwert E1, sonst der Absenksollwert E2.
Füllstand in Prozent
limit((E1-E2)/(E3-E2)*100,0,100)
E1 ist der Messwert, E2 der Wert bei leer und E3 der Wert bei voll. Das Ergebnis wird auf 0 bis 100 begrenzt.
Division absichern
if E2 == 0 then 0 else E1/E2
Verhindert, dass der Ausgang FE anspricht, wenn der Teiler zeitweise 0 ist.

Meldungen im Editor

Der Editor nennt zu jedem Fehler die Stelle, an der er auftritt, und hebt sie im Text hervor. Erst wenn die Formel fehlerfrei ist, lässt sie sich mit OK übernehmen.
Meldung
Beispiel
So ist es richtig
Die Formel ist leer
(kein Text)
E1
Dieses Zeichen gehört nicht in eine Formel
E1 $ E2
E1 * E2
Unbekannter Name
betrag(E1)
abs(E1) - erlaubt sind nur die oben aufgeführten Funktionen
Diesen Eingang gibt es nicht
E1 + E3 bei zwei Eingängen
Parameter "Anzahl Eingänge" auf 3 erhöhen oder E1 + E2 schreiben
Hier fehlt ein Wert
E1 +
E1 + E2
Eine Klammer fehlt oder steht zu viel
(E1+E2
(E1+E2)
Die Funktion erwartet eine andere Anzahl an Werten
min(E1)
min(E1,E2)
Nach der Bedingung fehlt "then"
if E1 2
if E1 then 2 else 0
Zu "then" fehlt "else"
if E1 then 2
if E1 then 2 else 0
Nach der Formel steht noch etwas
E1 E2
E1 + E2 - hier fehlt das Rechenzeichen
Die Formel ist zu umfangreich
sehr lange Formeln
Formeln mit hunderten Rechenschritten sind zu umfangreich. Die Rechnung auf mehrere Formel-Bausteine aufteilen

Fehler im Betrieb

Manche Fehler zeigen sich erst beim Rechnen, weil sie von den Eingangswerten abhängen. In diesen Fällen geht der Ausgang FE auf 1, und der Ausgang AW verhält sich so, wie es der Parameter "Bei Fehler" vorgibt. Sobald wieder gerechnet werden kann, geht FE von selbst auf 0 zurück.
Ursache
Beispiel
Abhilfe
Division durch Null
E1 / E2 mit E2 = 0
if E2 == 0 then 0 else E1/E2
Rest einer Division durch Null
E1 % E2 mit E2 = 0
if E2 == 0 then 0 else E1%E2
Wurzel aus einer negativen Zahl
sqrt(E1) mit E1 = -4
sqrt(abs(E1)) oder if E1 < 0 then 0 else sqrt(E1)
Ergebnis zu groß
pow(E1,E2)
Bei sehr großen Werten wird das Ergebnis nicht mehr darstellbar. Wertebereich der Eingänge prüfen, Ergebnis mit limit begrenzen

Grenzen

Die Formel rechnet ausschließlich mit den Werten, die gerade an den Eingängen anliegen. Sie merkt sich nichts von einer Berechnung zur nächsten, kennt keine Schleifen und greift weder auf Adressen noch auf die Uhrzeit zu. Wird das gebraucht, ist das Lua Skript das richtige Werkzeug - dafür ist es gedacht.

Siehe auch allgemeine Parameter aller Funktionsbausteine.