Linearinterpolation diskreter REAL-Werte
Die Funktion ermittelt an der Stelle X den Funktionswert Y durch lineare Interpolation zwischen den benachbarten Stützstellen. Die Funktion kann REAL-Zahlen verarbeiten.
Eingang
Eingangswert X
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
Ausgangswert Y
Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_SCALE
Weitere Informationen zu dieser Funktion enthalten die Hilfetexte zu: F282_SCAL und F283_DSCAL.
wenn die mit Indexmodifizierern definierte Adresse den zulässigen Bereich überschreitet.
wenn für x eine nicht-reelle Zahl eingegeben wird
wenn die Zahl der Wertepaare (erstes SDT-Element) <2 oder >99 ist.
wenn für xy_data ein nicht-reeller Wert (xt, yt) angegeben wird
wenn die für xy_data angegebenen Werte nicht der aufsteigenden Reihenfolge der x-Werte entsprechen
wenn die Werte für xy_data den zulässigen Bereich überschreiten
wenn es bei der Interpolation zu einem Berechnungsüberlauf kommt.
wenn die mit Indexmodifizierern definierte Adresse den zulässigen Bereich überschreitet.
wenn für x eine nicht-reelle Zahl eingegeben wird
wenn die Zahl der Wertepaare (erstes SDT-Element) <2 oder >99 ist.
wenn für xy_data ein nicht-reeller Wert (xt, yt) angegeben wird
wenn die für xy_data angegebenen Werte nicht der aufsteigenden Reihenfolge der x-Werte entsprechen
wenn die Werte für xy_data den zulässigen Bereich überschreiten
wenn es bei der Interpolation zu einem Berechnungsüberlauf kommt.
Der SDT wird im SDT-Pool definiert.
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
CalculateY: BOOL:=FALSE;
X_value: REAL:=4.0;
Y_value: REAL:=0.0;
XY_values: XY_DUT;
@'': @'';
END_VAR
VAR_EXTERNAL
ProcessData: ProcessDataStructure;
END_VAR
VAR
@'': @'';
END_VAR
Wenn die Variable CalculateY auf TRUE gesetzt wird, wird die Funktion ausgeführt.
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_VARIN,,CalculateY,10,1,12,3,);
B(B_VARIN,,X_value,10,2,12,4,);
B(B_VARIN,,XY_values.Number,10,3,12,5,);
B(B_VAROUT,,Y_value,19,2,21,4,);
B(B_F,F354_FSCAL!,Instance,12,0,19,5,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F354_FSCAL(x := X_value, xy_data := XY_values.Number, y => Y_value);
END_IF;