FP_SHL_BLOCK

データブロックを左にシフトする

このFP命令は、トリガENTRUEの場合、d1_Startd2_Endで指定されたデータ範囲をn_Bitsで指定されたビット数だけ左(上位の位置)にシフトします。

空いている(空の)ポジションはゼロで埋められます。

  • n_Bits=0の場合には、シフトは行われません。

  • n_Bits=16の場合、FP_WSHL_BLOCKと同様、1ワードの1シフトが行われます。

パラメータ

入力

n_Bits (WORD, INT, UINT)

ビット数 (許容範囲: 0~15)

出力

d1_Start (BOOL)

先頭アドレス

d2_End (BOOL)

最終アドレス

エラーフラグ

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

  • n_Bits ³16のとき

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

  • n_Bits ³16のとき

グローバル変数リスト

グローバル変数リストでは、プロジェクト内のすべてのPOUからアクセスできる変数を宣言します。

POUヘッダCopy code to clipboard

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

	VAR
		bStart: BOOL:=FALSE;
			(*activates the function*)
	END_VAR
	VAR_EXTERNAL
		bStartAddress: BOOL:=FALSE;
		bEndAddress: BOOL:=FALSE;
	END_VAR

LDボディCopy code to clipboard

変数bStartFALSEからTRUEに変化すると、このファンクションが実行されます。

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_SHL_BLOCK!,,9,1,18,6,,?DEN?Dn_Bits?AENO?Cd1_Start?Cd2_End);
B(B_VARIN,,3,7,3,9,5,);
B(B_VAROUT,,bStartAddress,18,3,20,5,);
B(B_VAROUT,,bEndAddress,18,4,20,6,);
B(B_CONTACT,,bStart,3,2,5,4,R);
L(1,3,3,3);
L(5,3,9,3);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディCopy code to clipboard

IF DF(start) then
    FP_SHL_BLOCK(n_Bits := 4, 
                 d1_Start => awDataField[0], 
                 d2_End => awDataField[2]);
END_IF;

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