FP_ATAN2

ラジアンへの座標データの変換

このFP命令は、-p~+pの範囲内にある直交座標(xy)の値から、角度jを求めます。

パラメータ

入力

s1_y (ANY_REAL)

直行座標 y

s2_x (ANY_REAL)

直行座標 x

出力

d (REAL)

結果(ラジアン)

解説

2次元座標の各位置Pは、直交座標P(x,y)または極座標P(r,j)(r=半径、j=角度)によって決まります。

以下のようにFP_ATAN2を定義:

ATAN2_YX(y,x)

x

y

x > 0

x < 0

y ³ 0

y < 0

x = 0

y > 0

y < 0

演算エラー

y = 0

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • インデックス修飾時にエリアを超えたとき
  • s1_y(y座標)またはs2_x(x座標)に実数でない値を指定したとき

  • s1_y(y座標)に0.0を指定し、かつs2_x(x座標)に0.0を指定したとき

POUヘッダ

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

	VAR
		bStart: BOOL:=FALSE;
			(*activates the instruction*)
		rPhi1Rad: REAL:=0.0;
		rPhi1Degree: REAL:=0.0;
	END_VAR
	VAR CONSTANT
		DEGR_OF_RAD: REAL:=57.295779513082320876798154814105;
	END_VAR
	VAR
	END_VAR

LDボディ

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

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_F,FP_ATAN2!,,10,1,16,6,,?DEN?Ds1_y?Ds2_x?AENO?Cd);
B(B_VARIN,,10.0,8,3,10,5,);
B(B_VARIN,,-10.0,8,4,10,6,);
B(B_VAROUT,,rPhi1Rad,16,3,18,5,);
B(B_CONTACT,,bStart,3,2,5,4,);
L(1,3,3,3);
L(5,3,10,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,@MUL-2!,,11,1,16,4,,?D?D?C);
B(B_VARIN,,rPhi1Rad,9,1,11,3,);
B(B_VARIN,,DEGR_OF_RAD,9,2,11,4,);
B(B_VAROUT,,rPhi1Degree,16,1,18,3,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

rPhi1Rad:=ATAN2_YX(y := 10.0, x := -10.0); (* Result: 2.3561947 *)
rPhi1Degree := rPhi1Rad * DEGR_OF_RAD;     (* Result: 135.00002 *)

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