L_UMTP_2DInterpolation

Dieser Funktionsbaustein dient der sequenziellen 2D-Interpolation auf eine rechteckigen Fläche. Er ist eine Verallgemeinerung des FB L_UMTP_BilinearInterpolation auf die Interpolationsvektoren für x und y und die Auswahl der Interpolationsart für die Koordinatenrichtungen x und z: Stückweise linear und kubischer Spline mit Hermite- oder natürlichen Randbedingungen.

Berechnungsverfahren im FB:    

Liegen lrx oder lry außerhalb der Minimal- bzw. Maximalwerte von alrX bzw. alrY, werden die Eingangswerte limitiert. Dies bedeutet, dass keine Extrapolation durchgeführt wird.

alrX und alrY müssen streng monoton steigend sein.

Werden die Basisdaten der Interpolation (Anzahl der Stützpunkte, Werte in alrX, alrY oder alrZ oder eInterpTypeX/Y) geändert, ist am Eingang xEnableerneut eine FALSEäTRUE-Flanke erforderlich.

Der Funktionsblock kann auch zur Durchführung einer 1D-Interpolation (lrz = f(lrx) ) verwendet werden. Dazu muss diNumOfYValues auf 1 gesetzt werden.

Funktion: 2D-Interpolation

     

L_UMTP_2DInterpolation

     

BOOL

—

 

xEnable

xValid

 

—

BOOL

ARRAY [*] OF LREAL

—

 

alrX

xError

 

—

BOOL

DINT

—

 

diNumOfXValues

eErrorID

 

—

L_IE1P_Error

L_UMTP_InterpolationType

—

 

eInterpTypeX

lrz

 

—

LREAL

ARRAY [*] OF LREAL

—

 

alrY

 

 

 

 

DINT

—

 

diNumOfYValues

 

 

 

 

L_UMTP_InterpolationType

—

 

eInterpTypeY

 

 

 

 

ARRAY [*,*] OF LREAL

—

 

alrZ

 

 

 

 

LREAL

—

 

lrx

 

 

 

 

LREAL

—

 

lry

 

 

 

 

               
Eingänge

Name

Datentyp

Informationen/mögliche Einstellungen

xEnable

BOOL

 

TRUE

Interpolation durchführen

FALSEäTRUE

Wenn Werte in alrX, alrY, alrZ, die Anzahl der zu verwendenden Stützstellen oder die Art der Interpolation für x oder y geändert werden, ist eine positive Flanke am Eingang xEnable erforderlich.

alrX

ARRAY [*] OF LREAL

Stützpunkte in x-Richtung

  • 1-basierter Vektor variabler Länge mit max. 10 Einträgen.
  • alrX muss streng monoton steigend sein. Äquidistanz ist nicht erforderlich.

diNumOfXValues    

DINT

Optional: Anzahl von Werten aus alrX und Zeilen in alrZ, die für die Interpolation ausgewertet werden sollen

eInterpTypeX

L_UMTP_InterpolationType

Art der Interpolation in x-Richtung

alrY

ARRAY [*] OF LREAL

Stützpunkte in y-Richtung

  • 1-basierter Vektor variabler Länge mit max. 10 Einträgen.
  • alrX muss streng monoton steigend sein. Äquidistanz ist nicht erforderlich.

diNumOfYValues    

DINT

Optional: Anzahl von Werten aus alrY und Spalten in alrZ, die für die Interpolation ausgewertet werden sollen

eInterpTypeY

L_UMTP_InterpolationType

Art der Interpolation in y-Richtung

alrZ

ARRAY [*,*] OF LREAL

Werte an den Interpolationspunkten z = z(x,y)

2D-Matrix mit variabler Dimension, max. 10 × 10 Einträge. Die Dimensionen von alrX, alrY und alrZ müssen übereinstimmen.

lrx

LREAL

Auszuwertende x-Koordinate

lry

LREAL

Auszuwertende y-Koordinate

Ausgänge

Name

Datentyp

Wert/Bedeutung

xValid

BOOL

Eingabewerte sind plausibel und Berechnung von lrz erfolgreich

xError

BOOL

Es ist ein Fehler aufgetreten

eErrorID

L_IE1P_Fehler

Detaillierte Fehlerinformationen

lrz

LREAL

Interpolierter Wert lrz = lrz(lrx,lry), basierend auf den Stützpunkten alrX, alrY und alrZ

Anwendungsbeispiel

(* Deklaration *)

alrX         : ARRAY[1..10] OF LREAL;

alrY         : ARRAY[1..10] OF LREAL;

alrZ         : ARRAY[1..10,1..10] OF LREAL;

fb2DInterp1  : L_UMTP_2DInterpolation;

lry          : LREAL;

 

(* Implementierung *)

// Stützpunkte für die Interpolation - x-Richtung

alrX[1] := 0.0;

alrX[2] := 1.0;

 

// Stützpunkte für die Interpolation - y-Richtung

alrY[1] := -4.0;

alrY[2] := -2.0;

alrY[3] := 2.0;

alrY[4] := 4.0;

alrY[5] := 6.0;

alrY[6] := 10.0;

 

// Stützpunkte für die Interpolation - z-Werte

alrZ[1,1] := 11.0;    alrZ[2,1] := 15.0;

alrZ[1,2] := 8.0;      alrZ[2,2] := 13.0;

alrZ[1,3] := 8.0;      alrZ[2,3] := 11.0;

alrZ[1,4] := 3.0;      alrZ[2,4] := 7.0;

alrZ[1,5] := 5.0;      alrZ[2,5] := 8.0;

alrZ[1,6] := 5.0;      alrZ[2,6] := 9.0;

 

// fb aufrufen

fb2DInterp1(xEnable  := TRUE,

   alrX              := alrX,

   diNbrOfXValues    := 1, // 1D-Interpolation

   eInterpTypeX      := L_UMTP_InterpolationType.Linear,

   alrY              := alrY,

   diNbrOfYValues    := 6, // Verwendung der ersten 6 Werte
                               von alrY

   eInterpTypeY      := L_UMTP_InterpolationType.Linear,
                           // CubicSplineNatural
                           // CubicSplineHermite

   alrZ              := alrZ,

   lrx               := 0.3,

   lry               := lry);

Die folgende Grafik zeigt die Interpolationsergebnisse zum Vergleich der verfügbaren Interpolationstypen.

Vergleich der verschiedenen Interpolationstypen (in y-Richtung) für das obige Codebeispiel für verschiedene lry-Werte bei lrx := 0.3;