F282_SCAL

Linearinterpolation diskreter INT-Werte

Dieser 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 x ist. Das heißt, die Funktion verbindet nacheinander die einzelnen Stützstellen und ermittelt aus dem Eingangswert x den zugehörigen Ausgangswert y.

Parameter

Eingang

EN (BOOL)

Aktivierung der Funktion (bei EN = TRUE wird die Funktion bei jedem SPS-Zyklus abgearbeitet)

x (INT)

Eingangswert x

xy_data (benutzerdefinierter SDT)

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

y (INT)

Ausgangswert y

ENO (BOOL)

ENO wird auf TRUE gesetzt, sobald die Funktion abgearbeitet ist. Hilfreich bei der Kaskadierung von Bausteinen mit EN-Funktion.

Anmerkungen

Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_SCALE

Die Funktion kann verwendet wenden für:

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

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

  • usw.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)

wenn die Anzahl an Stützstellen nicht zwischen 2... 100 liegt oder die x-Werte keine homogen steigende Reihenfolge (x1 < x2 < x3...) haben.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)

wenn die Anzahl an Stützstellen nicht zwischen 2... 100 liegt oder die x-Werte keine homogen steigende Reihenfolge (x1 < x2 < x3...) haben.

Begrenzung des Ausgangswertes y:

Ist der Eingangswert x kleiner als die x-Koordinate der ersten Stützstelle (P1: x < x1), wird der Ausgang yauf 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 yauf 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: x-Werte (ARRAY[1..z] OF INT oder ARRAY[0..z-1] of INT)

  3. Element: y-Werte (ARRAY[1..z] OF INT oder ARRAY[0..z-1] of INT)

Wichtige Informationen:

x-Werte

Die x-Werte müssen in homogen steigender Reihenfolge (x1 < x2 < x3 < ...) eingetragen sein. Sind gleiche x-Werte vorhanden (z.B. x2 = x3 = x4) werden die Stützstellen P2(x2,y2) und P3(x3,y3) ignoriert.

Überlauf in der Funktion:

Um einen Berechnungsüberlauf in der Funktion zu vermeiden, müssen benachbarte Stützstellen folgende Bedingungen erfüllen:

|ya - yb| < 32767

|x - xb| < 32767

|(ya - yb)*(x - xb)| < 32767

|xa - xb| < 32767

Berechnungsgenauigkeit:

Diese Funktion kann ausschließlich ganze Zahlen verarbeiten. Nachkommastellen bei der Berechnung des Funktionswertes y werden abgeschnitten. Wenn beispielsweise an der Stelle x, y = 511,13, gibt die Funktion 511 zurück.

Beispiel:

SDT

Im SDT-Pool wird ein strukturierter Datentyp angelegt in dem die Anzahl der Stützstellen und die xy-Wertepaare deklariert werden.

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
		start: BOOL:=FALSE;
			(*avtivates the function*)
		input_value: INT:=0;
			(*input_value x*)
		measured_value: Interpolation_8 (X_values := [-5,5,15,20,30,42,45,50],Y_values := [5,-5,10,2,2(5),0,2]);
			(*number of reference
points*)
		output_value: INT:=0;
			(*output_value y*)
		@'': @'';
	END_VAR

Hier wurde die Eingangsvariable measured_value von Typ des oben angelegten SDT deklariert. Die Belegung der x-Werte und y-Werte wurde bereits im POE-Kopf vorgenommen. Statt dessen können Sie im Rumpf auch die x-Werte und y-Werte verändern indem Sie einen Wert auf die Variable z.B. Measuredvalues.X_Values[1] für x schreiben.

POE-Rumpf

Wenn die Variable start auf TRUE gesetzt wird, wird die Funktion ausgeführt. Sie berechnet für den Eingangswert an der Stelle x den Ausgangswert y durch lineare Interpolation zwischen den benachbarten Stützstellen die in der Variablen measured_value gespeichert sind.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,F282_SCAL!,Instance,15,0,22,5,,?DEN?Dx?Dxy_data?AENO?Cy);
B(B_VARIN,,input_value,13,2,15,4,);
B(B_VARIN,,measured_value.referencepoints,13,3,15,5,);
B(B_VAROUT,,output_value,22,2,24,4,);
B(B_CONTACT,,start,6,1,8,3,);
L(8,2,15,2);
L(1,2,6,2);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IF start then
    F282_SCAL(input_value, measured_value.referencepoints, output_value);
END_IF;

AWL-Rumpf

Letzte Änderung am: 2021-07-28Feedback zu dieser SeitePanasonic Hotline