Benannte Konstanten
Benannte Konstanten
Für Eingänge an Funktionsbausteinen vom Typ MC_LREAL können spezielle Eingangswerte verwendet werden (siehe Kapitel MC_LREAL/Spezielle Eingangswerte). Die MC3 nutzt ausschließlich den Standard-Datentyp LREAL anstatt MC_LREAL und unterstützt die Verwendung der so genannten Benannten Konstanten.
Benannte Konstanten sind stille NaN-Werte nach IEEE 754, um nicht initialisierte oder ungültige Daten zu signalisieren. Die Mantisse ist in einem Beckhoff-spezifischen Bit-Pattern kodiert. Der Vorteil ist eine erhöhte Lesbarkeit z. B. in der Online-Ansicht. So kann z. B. der bisherige Default-Wert 0 als Platzhalter für die Default-Dynamiken oder den realen Wert 0 interpretiert werden. In diesem Fall sind Fehlinterpretationen oder falsche mathematische Operationen möglich.
Zu den wesentlichen Eigenschaften von NaN-Werten zählen die folgenden Punkte:
- Alle arithmetischen Operationen, die NaN als Eingangsdaten verwenden, liefern wiederum NaN als Ergebnis.
- Alle relationalen Operatoren =, !=, > < >= <= liefern stets den Wert False, wenn mindestens einer der Operanden NaN ist.
- Die Standard-C-Funktionen
isnan()bzw._isnan()oder die SPS-Funktionen LrealIsNaN() und RealIsNaN() (Tc2_Utilities Bibliothek) liefern den Wert True, wenn das Argument den Wert NaN hat. - Der Ausdruck
isnan(a)ist äquivalent dem Ausdruck!(a == a)bzw.NOT(a = a).
Die Tatsache, dass NaN-Werte sich bei der Verwendung in weiteren Berechnungen fortpflanzen, hat den Vorteil, dass ungültige Werte nicht übersehen werden können.
| |
Fehlfunktionen der Software NaN-Werte führen zu potenziell gefährlichen Fehlfunktionen der betreffenden Software!
|
Weitere Erläuterungen finden Sie im Kapitel NaN-Werte.
Die Syntax zur Verwendung in der PLC ist STRING_TO_LREAL('[Wert]') oder die Kurzform TO_LREAL('[Wert]'). Für die MC3 können die folgenden Konstanten verwendet werden:
Wert | Bedeutung | Beispiel |
|---|---|---|
#Invalid | Ungültiger Wert | Default Eingangswert bei |
#Default | Kann verwendet werden, um z. B. die Default-Dynamik der Achse als Eingabe für Funktionsbausteine zu verwenden. |
|
#Ignore | Kann verwendet werden, um Eingänge oder Randbedingungen zu deaktivieren. | Einseitiges deaktivieren der Softwareendlagen. Ableitungen der Position als Eingabe bzw. Randbedingung für die MotionFunctionPoints (Camming) als zu ignorieren zu definieren. |
#Maximum | Kann verwendet werden, um z. B. die maximalen Dynamiken der Achse als Eingabe für Funktionsbausteine zu verwenden. |
|
#MaximumNegative | Kann verwendet werden, um z. B. die invertierten maximalen Dynamiken der Achse als Eingabe für Funktionsbausteine zu verwenden. |
|
#DefaultNegative | Kann verwendet werden, um z. B. die invertierten Default-Dynamiken der Achse als Eingabe für Funktionsbausteine zu verwenden. |
|
Die Syntax und Verwendung benannter Konstanten sind mit TwinCAT 3.1 Build 4026.25 optimiert und nachfolgend beschrieben.
![]() | Verfügbar ab TwinCAT 3.1 Build 4026.25 |
Sonderwerte wie z. B. NaN (Not a Number) werden nun als typsichere Konstante bereitgestellt. Über den Namensraum LREAL_CONST erhält man Zugriff auf folgende Variablen:
Konstante | Bedeutung |
|---|---|
DEFAULT | Anwendungsspezifischer Standardwert (positiv) |
IGNORE | Markerwert „nicht auswerten" |
INVALID | Markerwert für ungültige Größe |
MAXIMUM | Größter endlicher positiver Wert |
DEFAULT_NEGATIVE | Anwendungsspezifischer Standardwert (negativ) |
MAXIMUM_NEGATIVE | Größter endlicher negativer Wert |
NAN | Not a Number |
INFINITY | Positiv unendlich |
INFINITY_NEGATIVE | Negativ unendlich |
Beispiel: Verwendung
VAR
fNumerator : LREAL;
fDenominator : LREAL;
fResult : LREAL
END_VAR
IF fDenominator = 0 THEN
fDenominator := LREAL_CONST.NAN;// invalid: division by zero
END_IF
fResult := fNumerator / fDenominator;
