REAL型離散値の直線補間
実数データテーブルのスケーリング(線形化)を行い、入力値(X)に対する出力(Y)を求めます。
入力
入力値X
ユーザー定義DUTの最初の要素(xy値の数)は、この入力に適用されます。以下のDUTの説明をご参照ください。
出力
出力値Y
F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_SCALE 離散値の直線補間
詳細については、以下の命令をご参照ください。F282_SCAL INT型離散値の直線補間、F283_DSCAL DINT型離散値の直線補間
指定されたアドレスがインデックス修飾により範囲を超えているとき
入力'x'が実数でない値を入力したとき
値の数(DUTの第1要素)が< 2または> 99のとき
'xy_data'に指定する実数値(xt, yt)に、実数でない値を指定したとき
線形テーブル'xy_data'に登録されているx座標が昇順になっていないとき
線形テーブル'xy_data'が範囲外のとき
スケーリング演算時に、オーバーフロー(演算不能)が発生したとき
指定されたアドレスがインデックス修飾により範囲を超えているとき
入力'x'が実数でない値を入力したとき
値の数(DUTの第1要素)が< 2または> 99のとき
'xy_data'に指定する実数値(xt, yt)に、実数でない値を指定したとき
線形テーブル'xy_data'に登録されているx座標が昇順になっていないとき
線形テーブル'xy_data'が範囲外のとき
スケーリング演算時に、オーバーフロー(演算不能)が発生したとき
構造体(DUT)をDUTプールに作成します。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。
POUヘッダは全プログラム言語で使用できます。
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
変数CalculateYがTRUEにセットされると、命令を実行します。
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;