FP_SCALE

離散値の直線補間

このFP命令は、隣り合った基準点Pw(xw, yw)Pw+1(xw+1, yw+1)を線形化(補間)し、位置xに対するyの値を求めます。この例では、wは最も近い基準点であり、そのx値は入力値s1_xよりも小さな値になります。つまり、このファンクションは、個々の連続した基準点をつなぎ、入力値d_yに従って出力値s1_xを求めます。

パラメータ

入力

s1_x

入力値

  • 16ビットPLC機種:(INT, DINT, REAL)

  • 32ビットPLC機種: (INT, DINT, UINT, UDINT, REAL, LREAL)

s2_xyData(ユーザー定義DUT; INT, UINT, WORD (ANY16))

ユーザー定義DUTの最初の要素(xy値の数)は、この入力に適用されます。以下のDUTの説明をご参照ください。

出力

d_y

演算結果

  • 16ビットPLC機種:(INT, DINT, REAL)

  • 32ビットPLC機種: (INT, DINT, UINT, UDINT, REAL, LREAL)

解説

アプリケーション例:

  • 計測値の線形化、例: 非線形センサ

  • 外気温xに対応したヒーターのフロー温度yの算出

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • インデックス修飾時にエリアを超えたとき

  • 基準点の数が2~256の範囲外のとき。

  • s2_xyDataが範囲外のとき。

  • 基準点のx値が昇順でないとき

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • インデックス修飾時にエリアを超えたとき

  • 基準点の数が2~256の範囲外のとき。

  • s2_xyDataが範囲外のとき。

  • 基準点のx値が昇順でないとき

出力値yの制限:

  • 入力値x が最初の基準点のx座標よりも小さいとき(P1: x< x1)、出力y は最初の基準点のy座標にセットされます(出力y = y1、グラフ内左端の水平方向の破線)。

  • 入力値xが最後の基準点のx座標よりも大きいとき(P8x > x8)、出力y は最後の基準点のy座標にセットされます(出力y = y8、グラフ内右端の水平方向の破線)。

DUT内のxy値のペア(基準点P1, P2, ...):

基準点(P1, P2, ...)は、基準点の数とxy値のペア(番号; x1, x2, ...; y1, y2; ...)を含むDUT形変数を介して、ファンクションにコピーされます。

ユーザ定義DUTの構造:

  1. 要素: 基準点の数z (INT)。基準点の数(xy値のペア)は、2~100の範囲で設定することができます。グラフでは、8つの基準点(P1P8)が使われています。
  2. 要素: データ型の変数ARRAY[1..z] OF INT (16ビットPLC機種:INT, DINT, REAL、32ビットPLC機種: (INT, DINT, UINT, UDINT, REAL))またはARRAY[0..z-1] of INT (16ビットPLC機種: INT, DINT, REAL、32ビットPLC機種: (INT, DINT, UINT, UDINT, REAL))のx値を含む変数。ここでは、zは基準点数の位置を表します(入力1参照)。

  3. 要素: データ型の変数ARRAY[1..z] OF INT (16ビットPLC機種:INT, DINT, REAL、32ビットPLC機種: (INT, DINT, UINT, UDINT, REAL))またはARRAY[0..z-1] of INT (16ビットPLC機種: INT, DINT, REAL、32ビットPLC機種: (INT, DINT, UINT, UDINT, REAL))のy 値を含む変数。ここでは、zは基準点数の位置を表します(入力1参照)。

注記

FP_SCALEは次のデータ型をサポートしています。

  • 16ビットPLC機種(FP-Sigma、FP-X): INTDINTREAL

  • 32ビットPLC機種(FP7): INTDINTREALUINTUDINT

関連トピック

関連F命令F282_SCAL、F283_DSCAL、F354_FSCAL

システム命令

命令ペイン

メモリエリア

データ型

DUT

DUT構造体はData Unit Typeの略で、複数の異なるデータ型をもつ変数で構成されます。構造体をまず定義し、その後、標準的なデータ型(BOOLINTなど)と同様にグローバル変数リストやPOUヘッダで使用します。

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。

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

POUボディ

変数bStartTRUEにセットされると、このファンクションが実行されます。

LDボディ

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ボディ

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

最終修正日: 2022-10-18このページに関するフィードバックお問い合わせ窓口