F119_LRSR

左右シフトレジスタ

16ビットデータレンジの1ビットを、左または右にシフトします。

パラメータ

入力

LeftDirection (BOOL)

左/右トリガ: シフトする方向を指定します。

  • TRUE: 左にシフト
  • FALSE: 右にシフト
DataInput (BOOL)

シフト入力するデータを指定します。

  • シフトインデータ = TRUE = 1: データ入力がTRUEのとき

  • シフトインデータ = FALSE = 0: データ入力がFALSEのとき
ShiftTrigger (BOOL)

シフトを実行します。

トリガ立ち上がり検出時(FALSE®TRUE)のとき、1ビット左または右へシフトします。

Reset (BOOL)

実行条件がTRUEのとき、d1_Startd2_Endで指定されたデータレンジのすべてのビットを"0"にします。

d1_Startd2_Endで指定されたエリアのデータを0にリセットします。

d2_End (WORD, INT, UINT)

シフトする16ビットエリアの終端アドレス

d1_Start (WORD, INT, UINT)

シフトする16ビットエリアの先頭アドレス

出力

Carry (BOOL)

シフトにより押し出されるビット

  1.  (1) 左シフト動作
  2.  (2) シフトアウトされたビットはR9009(キャリーフラグ)に転送されます
  3.  (3) 左シフト動作: ON、シフト入力: OFF、ON
  4.  (4) DataInputがONになると、"1"をビットNo.0にセットします。
  5.  (5) DataInputがOFFになると、"0"をビットNo.0にセットします。
  6.  (6) 右シフト動作
  7.  (7) 左シフト動作: OFF、シフト入力: OFF、ON
  8.  (8) シフトアウトしたビットはR9009(キャリーフラグ)に転送されます
  9.  (9) DataInputがONになると、"1"をビットNo.15にセットします。
  10. (10) DataInputがOFFになると、"0"をビットNo.15にセットします。

解説

  • 変数d1_Startd2_Endは同じデータ型を使用してください。

  • このファンクションの出力Carryに変数を設定する必要はありません。

  • 左(上位ビット方向)か右(下位ビット方向)に、1ビットシフト(移動)する方向を切り替えられるシフトレジスタです。

POUヘッダ

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

	VAR
		data_array: ARRAY [0..2] OF INT:=[2#0000000000000001,2#0011111111111111,2#0011111111111110];
		enable_leftShift: BOOL:=FALSE;
			(*function shifts left if TRUE,
else it shifts right*)
		reset: BOOL:=FALSE;
			(*if TRUE, the whole array
will be set to zero*)
		input: BOOL:=TRUE;
			(*specifies the new shift-in data*)
		shift_trigger: BOOL:=FALSE;
			(*activates the function at a 0->1
leading edge*)
		carry_out_value: BOOL:=FALSE;
			(*result after a 0->1 leading edge
from shift_trigger: 1.
After the next cycle the value will be
set back to zero.*)
	END_VAR

POUボディ

変数enable_leftShiftTRUEのとき、左シフトします。それ以外の場合は右シフトします。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 9 ;
        NETWORK_BODY
B(B_F,F119_LRSR!,Instanz,12,1,22,9,,?DLeftDirection?DDataInput?DShiftTrigger?DReset?Dd1_Start?Dd2_End?ACarry);
B(B_CONTACT,,enable_leftShift,7,2,9,4,);
B(B_VARIN,,input,9,3,11,5,);
B(B_VARIN,,shift_trigger,9,4,11,6,);
B(B_VARIN,,reset,9,5,11,7,);
B(B_VARIN,,data_array[0],9,6,11,8,);
B(B_VARIN,,data_array[2],9,7,11,9,);
B(B_VAROUT,,carry_out_value,22,2,24,4,);
L(1,3,7,3);
L(9,3,12,3);
L(11,4,12,4);
L(11,5,12,5);
L(11,6,12,6);
L(11,7,12,7);
L(11,8,12,8);
L(1,0,1,9);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

carry_out_value:=F119_LRSR( LeftDirection:= enable_leftShift,
         DataInput:= input,
         ShiftTrigger:= shift_trigger,
         Reset:= reset,
         d1_Start:= data_array[0],
         d1_End:= data_array[2]);

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