FP_SCALE

Linearinterpolation diskreter Werte durchführen

Dieser FP-Befehl ermittelt an der Stelle x den Funktionswert y durch Linearinterpolation zwischen den benachbarten Stützstellen Pw(xw, yw) und Pw+1(xw+1, yw+1). Hier ist w die nächste Stützstelle, deren x-Wert kleiner als der Eingangswert s1_x ist. Das heißt, die Funktion verbindet nacheinander die einzelnen Stützstellen und ermittelt aus dem Eingangswert s1_x den zugehörigen Ausgangswert d_y.

Parameter

Eingang

s1_x

Eingangswert

  • Bei 16-Bit-SPS-Typen: (INT, DINT, REAL)

  • Bei 32-Bit-SPS-Typen: (INT, DINT, UINT, UDINT, REAL, LREAL)

s2_xyData (benutzerdefinierter SDT; INT, UINT, WORD (ANY16))

Ordnen Sie diesem Eingang das erste Element des benutzerdefinierten SDT zu, d.h. die Anzahl der xy-Werte. Siehe Beschreibung der SDT-Struktur unten.

Ausgang

d_y

Ergebnis

  • Bei 16-Bit-SPS-Typen: (INT, DINT, REAL)

  • Bei 32-Bit-SPS-Typen: (INT, DINT, UINT, UDINT, REAL, LREAL)

Anmerkungen

Anwendungsbeispiele:

  • Linearisierung von Messwerten, z. B. bei nichtlinearen Sensoren

  • Ermittlung der Vorlauftemperatur y einer Heizung in Abhängigkeit von der Außentemperatur x

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn die Anzahl der Stützstellen außerhalb des Bereichs von 2–256 liegt.

  • wenn s2_xyData außerhalb des zulässigen Bereichs liegt

  • wenn die x-Werte der Stützstellen nicht in aufsteigender Reihenfolge vorliegen

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn die Anzahl der Stützstellen außerhalb des Bereichs von 2–256 liegt.

  • wenn s2_xyData außerhalb des zulässigen Bereichs liegt

  • wenn die x-Werte der Stützstellen nicht in aufsteigender Reihenfolge vorliegen

Begrenzung des Ausgangswertes y:

  • Ist der Eingangswert x kleiner als die x-Koordinate der ersten Stützstelle (P1: x< x1), wird der Ausgang y auf die y-Koordinate der ersten Stützstelle gesetzt (Ausgang y = y1, waagrechte gestrichelte Linie links oben in der Grafik).

  • Ist der Eingangswert x größer als die x-Koordinate der letzten Stützstelle (P8: x > x8), wird der Ausgang y auf die y-Koordinate der letzten Stützstelle gesetzt (Ausgang y = y8, waagrechte gestrichelte Linie rechts oben in der Grafik).

SDT für die xy-Wertepaare (Stützstellen P1, P2, ...):

Die Stützstellen (P1, P2, ...) werden der Funktion durch eine Variable vom Type SDT übergeben, die die Anzahl der Stützstellen und die xy-Wertepaare enthält (Anzahl; x1, x2, ...; y1, y2; ...).

Struktur des benutzerdefinierten SDT:

  1. Element: Anzahl der Stützstellen z (INT). Die Anzahl an Stützstellen (xy-Wertepaare) kann beliebig zwischen 2–100 festgelegt werden. In der Grafik werden acht Stützstellen (P1P8) verwendet.
  2. Element: Variable vom Datentyp ARRAY[1..z] OF INT (bei 16-Bit-SPS-Typen: INT, DINT, REAL; bei 32-Bit-SPS-Typen: (INT, DINT, UINT, UDINT, REAL)) oder ARRAY[0..z-1] of INT (bei 16-Bit-SPS-Typen: INT, DINT, REAL; bei 32-Bit-SPS-Typen: (INT, DINT, UINT, UDINT, REAL)), die die x-Werte enthält. Hier steht z als Platzhalter für die Anzahl an Stützstellen (siehe 1. Eintrag).

  3. Element: Variable vom Datentyp ARRAY[1..z] OF INT (bei 16-Bit-SPS-Typen: INT, DINT, REAL; bei 32-Bit-SPS-Typen: (INT, DINT, UINT, UDINT, REAL)) oder ARRAY[0..z-1] of INT (bei 16-Bit-SPS-Typen: INT, DINT, REAL; bei 32-Bit-SPS-Typen: (INT, DINT, UINT, UDINT, REAL)), die die y -Werte enthält. Hier steht z als Platzhalter für die Anzahl an Stützstellen (siehe 1. Eintrag).

Anmerkung

FP_SCALE unterstützt die folgenden Datentypen:

  • Bei 16-Bit-SPS-Typen (FP-Sigma, FP-X): INT, DINT, REAL

  • Bei 32-Bit-SPS-Typen (FP7): INT, DINT, REAL, UINT, UDINT

Verwandte Themen

Verwandte F-Befehle: F282_SCAL, F283_DSCAL, F354_FSCAL

Systembefehle

Fenster "Befehle"

Speicherbereiche

Datentypen

Beispiel

SDT

Mit einem strukturierten Datentyp (SDT) können zusammengesetzte Datentypen definiert werden. Ein SDT wird zunächst im SDT-Pool angelegt und dann wie die Standardtypen (BOOL, INT usw.) in der globalen Variablenliste oder im POE-Kopf verarbeitet.

POE-Kopf

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden.Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

VAR
		bStart: BOOL:=FALSE;
		iInput: INT:=50;
		xy_data: xy_data_dut;
		iScaledOutput: INT:=0;
		@'': @'';
	END_VAR

POE-Rumpf

Wenn die Variable bStart auf TRUE gesetzt wird, wird die Funktion ausgeführt.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,4,2,6,4,);
B(B_F,FP_SCALE!,,17,1,25,6,,?DEN?Ds1_x?Ds2_xyData?AENO?Cd_y);
B(B_VARIN,,iInput,15,3,17,5,);
B(B_VAROUT,,iScaledOutput,25,3,27,5,);
B(B_VARIN,,xy_data.iNumberOfValues,15,4,17,6,);
L(1,0,1,6);
L(1,3,4,3);
L(6,3,17,3);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IF (bStart) then
    FP_SCALE(s1_x := iInput, 
             s2_xyData := xy_data.iNumberOfValues, 
             d_y => iScaledOutput);
END_IF;

Letzte Änderung am: 2022-11-11Feedback zu dieser SeitePanasonic Hotline