T_FIX16
Variablen von diesem Typ repräsentieren eine 16 Bit vorzeichenbehaftete Festkommazahl. Dieser Datentyp wird oft bei Systemen benutzt die keine FPU-Einheit besitzen (z.B.: Mikrokontroller oder Geräte aus dem Bereich der Fernwirktechnik). Wenn z.B. über die serielle Schnittstelle Daten im Festkommazahlenformat ausgetauscht werden sollten, dann müssen diese Daten in das passende Format konvertiert werden.
Die Anzahl der Nachkommastellen wird passend zum benötigten Zahlenbereich und Auflösung gewählt. Bei 15 Nachkommastellen lassen sich z.B. Festkommazahlen im Bereich: -1..1-2^15 darstellen. Dies entspricht etwa dem Fließkommazahlenbereich: -1..0.999969482421875.
Im Gegensatz zu Fließkommazahlen ist die Auflösung der Festkommazahlen im gesamten Zahlenbereich konstant. Leider haben die Festkommazahlen einen kleineren darstellbaren Zahlenbereich. Vorsicht ist geboten bei mathematischen Operationen, die einen positiven oder negativen Überlauf generieren können.
TYPE T_FIX16 :
STRUCT
value : INT := 0;
n : WORD(0..15);
status : DWORD := 0;
END_STRUCT
END_TYPE
value: Diese Membervariable beinhaltet den eigentlichen Wert der Festkommazahl (16 Bit Vor- und Nachkommastellen).
n: Anzahl der Nachkommastellen. Zulässiger Bereich: 0..15. Das höherwertigste Bit ist für das Vorzeichenbit reserviert.
status: Status-Flags (reserviert, zurzeit nicht benutzt).
Beispiel 1:
Ein A/D-C liefert Messwerte als vorzeichenbehaftete 16 Bit Festkommazahlen mit 15 Nachkommastellen. Diese Messwerte wurden in die SPS eingelesen und sollen in LREAL-Datentyp konvertiert werden.
PROGRAM FIX_TO_FLOAT
VAR
adc_0 : WORD := 2#1010000000000000;(* = -0.75 (Q0.15) *)
adc_1 : WORD := 2#0111000000000000;(* = +0.875 (Q0.15) *)
fix_0, fix_1 : T_FIX16;
dbl_0, dbl_1 : LREAL;
END_VAR
fix_0 := WORD_TO_FIX16( adc_0, 15 );
fix_1 := WORD_TO_FIX16( adc_1, 15 );
dbl_0 := FIX16_TO_LREAL( fix_0 );
dbl_1 := FIX16_TO_LREAL( fix_1 );
Beispiel 2:
Die Parameter eines Micro-Controllers sind vorzeichenbehaftete 16 Bit Festkommazahlen mit 8 Nachkommastellen. Die LREAL-Parameter in der SPS sollen in diesen Format konvertiert werden.
PROGRAM FLOAT_TO_FIX
VAR
dbl_0 : LREAL := +3.5;
dbl_1 : LREAL := -3.5;
fix_0, fix_1 : T_FIX16;
ctrl_0, ctrl_1 : WORD;
END_VAR
fix_0 := LREAL_TO_FIX16( dbl_0, 8 );
fix_1 := LREAL_TO_FIX16( dbl_1, 8 );
ctrl_0 := FIX16_TO_WORD( fix_0 );
ctrl_1 := FIX16_TO_WORD( fix_1 );
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken (Kategoriegruppe) |
---|---|---|
TwinCAT v3.1.0 | PC oder CX (x86, x64, ARM) | Tc2_Utilities (System) |